執行要求會定義動作專案的對話介面,以取得使用者輸入內容,以及處理輸入內容和最終完成動作的邏輯。
總覽
執行要求會接收來自 Google 助理的要求,並處理要求並回應。這個來回要求與回應程序會進一步引導對話,直到最終完成初始使用者要求為止。
下列步驟說明如何搭配 Node.js 或 Java/Kotlin 用戶端程式庫使用 Actions SDK 建構執行要求:
- 初始化 ActionsSdkApp 物件。
- 在執行要求邏輯中建立處理要求的函式。
建構對話方塊
初始化 ActionsSdkApp
物件
以下程式碼會將 ActionsSdkApp
執行個體化,並對 Google Cloud Functions 進行部分樣板 Node.js 設定:
'use strict'; const {actionssdk} = require('actions-on-google'); const functions = require('firebase-functions'); const app = actionssdk({debug: true}); app.intent('actions.intent.MAIN', (conv) => { conv.ask('Hi!'); }); // More intent handling if needed exports.myFunction = functions.https.onRequest(app);
ResponseBuilder responseBuilder = getResponseBuilder(request).add("Hi!"); return responseBuilder.build();
{ "expectUserResponse": true, "expectedInputs": [ { "inputPrompt": { "richInitialPrompt": { "items": [ { "simpleResponse": { "textToSpeech": "Hi!" } } ] } }, "possibleIntents": [ { "intent": "actions.intent.TEXT" } ] } ], "conversationToken": "{\"data\":{}}", "userStorage": "{\"data\":{}}" }
建立函式來處理要求
當使用者說出詞組時,您收到 Google 助理的要求。如要執行要求中的意圖,請建立處理觸發意圖的函式。
如何處理要求:
執行任何處理使用者輸入內容所需的邏輯。
呼叫
conv.ask()
函式,將您要顯示為引數的回應傳遞。
以下程式碼顯示如何建構簡單的回應:
conv.ask(`Hi! Say something, and I'll repeat it.`);
ResponseBuilder responseBuilder = getResponseBuilder(request).add("Hi! Say something, and I'll repeat it."); return responseBuilder.build();
{ "expectUserResponse": true, "expectedInputs": [ { "inputPrompt": { "richInitialPrompt": { "items": [ { "simpleResponse": { "textToSpeech": "Hi! Say something, and I'll repeat it." } } ] } }, "possibleIntents": [ { "intent": "actions.intent.TEXT" } ] } ], "conversationToken": "{\"data\":{}}", "userStorage": "{\"data\":{}}" }
處理意圖
讓所有函式能夠處理觸發的意圖後,請使用 app.intent
將處理常式指派給意圖。
app.intent('actions.intent.TEXT', (conv) => { // handle text intent. }); app.intent('actions.intent.MAIN', (conv) => { // handle main intent. });
@ForIntent("actions.intent.MAIN") public ActionResponse main(ActionRequest request) { // handle main intent // ... } @ForIntent("actions.intent.TEXT") public ActionResponse text(ActionRequest request) { // handle text intent // ... }
正在結束對話
如果不再需要任何使用者輸入內容並想結束對話,請呼叫 conv.close()
函式。這個函式會指示 Google 助理對文字說出指令,並關閉麥克風以結束對話。
處理主要叫用意圖
使用者觸發 app.intent.action.MAIN
意圖時,通常不需要執行任何使用者輸入處理作業。如果您的動作套件包含許多動作,且涵蓋許多用途,建議您告知使用者一些可做的事,引導使用者採取相應行動。
- 呼叫
conv.ask()
函式,將回應做為引數傳遞。Google 助理會說出您的回應,然後等待使用者觸發您指定的其中一項意圖。
下列程式碼片段說明如何處理簡單的歡迎意圖:
// handle the initialTrigger function handleMainIntent(conv, input) { conv.ask(input); }
private ActionResponse handleMainIntent(ResponseBuilder rb, String input) { return rb.add(input).build(); }
對話狀態
如果您使用 對話 HTTP/JSON Webhook API,可以使用您與 Google 助理之間來回傳遞的 JSON 格式物件 (conversationToken
) 來維持對話的狀態。如果您使用的是 Node.js 用戶端程式庫,可以直接寫入及讀取 conv.data
欄位。這個欄位會在要求和回應之間自動來回傳遞,
conv.data = {something: 10}; let value = conv.data.something;
ResponseBuilder rb = getResponseBuilder(request); rb.getConversationData().put("something", 10); Object value = rb.getConversationData().get("something");