大家好~
今天會用實作的方式去認識 Dialogflow ES 的 Fulfillment 與 Events,
Fulfillment 會用 Webhook 去使用我們寫好的 API 服務,
Events 的部分會用 Fulfillment 去調用 Events 的方式進行。
Fulfillment 流程:
不過 Inline Editor 目前僅支援 Node.js,
有興趣可以參考這篇官方文件。
接下來就是用 Fulfillment 的 Webhook 來進行實作囉~
點擊 Fulfillment 設定 Webhook 的 URL 與一些驗證身份相關的資料。
然後到要啟用 Webhook 的 Intent,
將 Enable webhook call for this intent
啟用。
Webhook 可用的 Response 具有以下種類:
官方有在文件內提供各個 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 有兩種:
Event 流程:
Intent A
配對。Intent A
配對成功後會發送 Webhook request。實作環節~
建立一個新的 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
。
測試一下~
成功~
今天先這樣啦!
若文章有任何問題,
還請大家不吝賜教!
大家明天見!