設定意圖和場景後,您必須更新執行要求程式碼,以因應 Action Builder 要求與回應格式的變更。您也可以考慮利用 Actions Builder 的其他功能。本頁說明更新執行要求程式碼的一般步驟和注意事項。
思考執行方式
專案的執行要求程式碼會因對話模型和開發平台的功能而異。Actions Builder 導入新的對話模型和功能,改變對話的建構方式,並有可能改變您達成專案執行要求的方式。本節說明 Actions Builder 與 Dialogflow 不同的功能,以及這些差異會如何改變執行執行要求程式碼的方式。
對話導入變更
- Dialogflow 採用意圖對意圖、內容導向的對話流程,也就是根據訓練詞組和上述意圖的輸入/輸出背景資訊,比對個別意圖。
- Actions Builder 的對話流程會使用場景做為對話回合的容器。類似 Dialogflow 的背景資訊,可在場景中比對特定意圖。轉場效果會根據相符的意圖,定義要轉換至哪個場景。
可重複使用的 Webhook 函式
- 在 Dialogflow 中,Webhook 處理常式會與個別意圖連結。如果需要其他邏輯,您必須另外建立一項意圖來處理新函式。
- Webhook 處理常式在 Actions Builder 中具有自訂處理常式名稱。這項功能可讓你從專案的多個場景呼叫函式。
其他叫用 Webhook 的方法
- 在 Dialogflow 中,每個意圖方法各有一個 Webhook 需要額外的意圖,才能在專案執行要求中使用更多對話邏輯。
- Action Builder 可讓您根據輸入條件,在場景中的多個位置發出 Webhook 呼叫:根據條件 (根據輸入內容)、運算單元填充,以及透過自訂和系統意圖比對。
更新出貨代碼
每個動作的執行要求程式碼會因為動作的複雜性和用途而不同,但在更新程式碼時,一般需要採取的步驟如下:
下載並安裝最新版本的用戶端程式庫。
npm install @assistant/conversation
更新程式碼中的
require
陳述式。例如:const { SimpleResponse, BasicCard, Image, } = require('actions-on-google');
上述程式碼已更新為以下程式碼:
const { conversation, Simple, Card, Image, } = require('@assistant/conversation');
重構程式碼以使用新方法。
- 意圖處理常式:
app.intent
→app.handle
- 回應/提示:
conv.ask
→conv.add
- 途徑/裝置功能:
conv.surface.capabilities.has('actions.capability.SCREEN_OUTPUT')
→conv.device.capabilities.includes('RICH_RESPONSE')
- 資料儲存空間:
conv.data
→conv.session.params
回應類型:
SimpleResponse
→Simple
BasicCard
→Card
Suggestions
→Suggestion
意圖參數:
conv.parameters[KEY]
→conv.intent.parameters[KEY].resolved
背景資訊/情境轉換:
conv.contexts.set(content_name, 5);
→conv.scene.next.name = 'context_name'
結束對話:
conv.close(response)
→conv.add.response; conv.scene.next.name = 'actions.page.END_CONVERSATION'
- 意圖處理常式:
更新回應代碼,利用建構工具的新回應基元。例如:
conv.ask(new Suggestions (['a', 'b']));
上述程式碼已更新為以下程式碼:
for (suggestion of ['a', 'b']) { conv.add.(new Suggestion({title: suggestion})) }
如需完整的方法清單,請參閱下方的執行要求程式碼轉譯對應。
使用以下頁面比較要求和回應酬載:
- 要求格式
- 回應格式
設定 Webhook
更新執行要求後,請在專案中的整個場景啟用 Webhook 呼叫。雖然遷移工具會遷移 Dialogflow 意圖的 Webhook 設定,不過由於重構的執行要求程式碼和 Webhook 函式可能會變更,因此您必須查看這些設定。
Dialogflow 中的 Webhook 會在意圖中啟用,當意圖相符時,執行要求程式碼會包含要執行的處理常式和函式。在 Actions Builder 中,Webhook 可在叫用意圖或場景中觸發,進而將要求傳送至執行要求端點。您的執行要求包含處理要求中 JSON 酬載的 Webhook 處理常式。您可以在下列情況觸發 Webhook:
- 成功比對叫用意圖後
- 在進入舞台的場景中
- 某個條件在場景的條件階段評估為 true 之後
- 場景的運算單元歸檔階段期間
- 在情境的輸入階段發生意圖比對後
從 Dialogflow 遷移至 Actions Builder 時,您必須考量對話流程的相關變更,因為這可能會改變您發出 Webhook 呼叫的時間和位置。
如要啟用 Webhook 呼叫,請按照下列步驟操作:
- 選取要呼叫 Webhook 的場景。
選擇要啟用 Webhook 的狀態。您可以為下列一或多個狀態啟用 Webhook:
- 輸入時
- 條件
- 運算單元填充
- 使用者意圖處理
- 系統意圖處理
勾選「Call your Webhook」選項。
輸入您在執行要求程式碼中定義的 Webhook 處理常式。
按一下 [儲存]。
前往「測試」即可測試 Webhook 呼叫和執行要求變更。
完成程式碼轉譯對應
下表說明 Dialogflow 的執行要求程式碼語法如何轉譯為 Actions Builder 程式碼。如需完整的方法清單,請參閱 Actions Builder 和 SDK 參考資料文件。
Dialogflow | 動作建構工具 |
---|---|
conv.data |
conv.session.params |
conv.ask |
conv.add |
conv.close |
conv.scene.next.name = 'actions.scene.END_CONVERSATION' |
conv.user.storage |
conv.user.params |
conv.input.raw |
conv.intent.query |
conv.parameters |
conv.intent.params[key].resolved |
conv.arguments.get('MEDIA_STATUS') mediaStatus.status==='FINISHED' |
conv.intent.params['MEDIA_STATUS'] mediaStatus.resolved==='FINISHED' |
活動 | 系統意圖處理:MEDIA_STATUS_FINISHED MEDIA_STATUS_FAILED |
conv.device.capabilities.has("actions.capability.SCREEN_OUTPUT") |
conv.device.capabilities.includes("RICH_RESPONSE") |
app.intent |
app.handler |
app.middleware |
app.middleware |
簡單回覆 |
prompt
-firstSimple
|
多元回應 |
prompt
-content
-card: object
-image: object
-table: object
-media: object
-suggestions
-link
|
如要瞭解其他工具的使用方式,請參閱下文: