iT邦幫忙

2021 iThome 鐵人賽

DAY 28
0
Software Development

Laravel 新手初見 API系列 第 28

Day28-介接 API(番外篇 III)Dialogflow ES 之 Fulfillment 與 Events

大家好~
今天會用實作的方式去認識 Dialogflow ES 的 Fulfillment 與 Events,
Fulfillment 會用 Webhook 去使用我們寫好的 API 服務,
Events 的部分會用 Fulfillment 去調用 Events 的方式進行。

Fulfillment


Fulfillment 流程

  1. Dialogflow 會對使用者輸入的句子與 Intent 配對。
  2. Intent 配對成功後,Dialogflow 會對我們設置好的 Inline Editor 或 Webhook 發送 Request。
  3. Intent 會參考 Response 後再回覆使用者。

不過 Inline Editor 目前僅支援 Node.js,
有興趣可以參考這篇官方文件
接下來就是用 Fulfillment 的 Webhook 來進行實作囉~

Webhook service

點擊 Fulfillment 設定 Webhook 的 URL 與一些驗證身份相關的資料。

然後到要啟用 Webhook 的 Intent,
Enable webhook call for this intent 啟用。

Webhook response

Webhook 可用的 Response 具有以下種類:

  • Text response
  • Card response
  • Google Assistant response
  • Context
  • Event
  • Session entity

官方有在文件內提供各個 Webhook response 的範例喔~
先複製一個 Text response 測試看看。

public function test(Request $request)
{
    // 順便把 Request body log 出來看一下
    Log::info($request->all());
    
    $jsonResponse = [
        "fulfillmentMessages" => [
            [
                "text" => [
                    "text" => [
                        "Text response from webhook"
                    ]
                ]
            ]
        ]
    ];
    return $jsonResponse;
}

成功~
DEFAULT RESPONSE 的 Response 是我們剛剛複製的 Text response
至於剛剛 Log 出來的 Request body 如下:

{
  "responseId": "daaa8ea0-c010-4320-8c2c-838a0fa80e0c-87175b38",
  "queryResult": {
    "queryText": "我要測試 Fulfillment",
    "parameters": [],
    "allRequiredParamsPresent": true,
    "fulfillmentMessages": {
      "0": {
        "text": {
          "text": {}
        }
      }
    },
    "outputContexts": {
      "0": {
        "name": "projects/ironman2021-328402/locations/asia-northeast1/agent/sessions/e4de3606-4f99-1204-f7d2-3abfd0c11bd5/contexts/__system_counters__",
        "parameters": {
          "no-input": 0,
          "no-match": 0
        }
      }
    },
    "intent": {
      "name": "projects/ironman2021-328402/locations/asia-northeast1/agent/intents/5f0a7fd1-5349-4044-be2e-5dd1ef8d0bb3",
      "displayName": "Fulfillment - Test"
    },
    "intentDetectionConfidence": 0,
    "languageCode": "zh-tw",
    "sentimentAnalysisResult": {
      "queryTextSentiment": {
        "score": 0,
        "magnitude": 0
      }
    }
  },
  "originalDetectIntentRequest": {
    "source": "DIALOGFLOW_CONSOLE",
    "payload": []
  },
  "session": "projects/ironman2021-328402/locations/asia-northeast1/agent/sessions/e4de3606-4f99-1204-f7d2-3abfd0c11bd5"
}

之後篇章再去使用 Request body 的內容做應用,
這裡先認識一下 Fulfillment 如何使用。

Events

Events 有兩種:

  • Platform events
    • Integrations 所提供的 Events。
  • Custom events
    • 可以使用 Fulfillment 或 API 調用 Events。

Custom events

Event 流程

  1. Dialogflow 將使用者輸入的句子與 Intent A 配對。
  2. Intent A 配對成功後會發送 Webhook request。
  3. Webhook 的 Response 內用 Event 去調用 Intent B 做回應。

實作環節~
建立一個新的 Intent,
等等我們用 Event response 去調用這個 Intent 做回覆。

在 Intent 的 Events 內新增一個 Custom events,
直接鍵入你所想要的 Event 名稱就好。

設定一個 Text Response,
等等會看到這個 Response~

複製 Event Response 來修改。

public function test()
{
    Log::info($request->all());
    $jsonResponse = [
        "followupEventInput" => [
            "name" => "Custom-event-test",
            "parameters" => [
                "parameter1" => "這是第一個 Parameter",
                "parameter2" => "這是第二個 Parameter"
            ],
            "languageCode" => "zh-TW"
        ]
    ];
    return $jsonResponse;
}

name 的 Value 是我們要調用的 Event 名稱,
parameters 的 Value 則寫入剛剛在 Intent 的 Response 內調用的 $parameter1$parameter2

測試一下~

成功~

今天先這樣啦!
若文章有任何問題,
還請大家不吝賜教!
大家明天見!

參考資料:


上一篇
Day27-介接 API(番外篇 II)Dialogflow ES 之 Intents 與 Entities
下一篇
Day29-介接 API(四)Laravel 實作 Dialogflow ES 之 API interactions
系列文
Laravel 新手初見 API30

1 則留言

0
juck30808
iT邦新手 3 級 ‧ 2021-10-14 12:32:43

恭喜即將邁入完賽階段~

我要留言

立即登入留言