建構執行要求 (Dialogflow)

執行要求會定義動作專案的對話介面,以取得使用者輸入內容,以及處理輸入內容和最終完成動作的邏輯。

總覽

執行要求會接收來自 Google 助理的要求,並處理要求並回應。這個來回要求與回應程序會進一步引導對話,直到最終完成初始使用者要求為止。

下列步驟說明如何搭配 Node.js 或 Java/Kotlin 用戶端程式庫使用 Actions SDK 建構執行要求:

  1. 初始化 ActionsSdkApp 物件
  2. 在執行要求邏輯中建立處理要求的函式

建構對話方塊

初始化 ActionsSdkApp 物件

以下程式碼會將 ActionsSdkApp 執行個體化,並對 Google Cloud Functions 進行部分樣板 Node.js 設定:

Actions SDK (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);
Actions SDK (Java)
ResponseBuilder responseBuilder = getResponseBuilder(request).add("Hi!");
return responseBuilder.build();
JSON
{
  "expectUserResponse": true,
  "expectedInputs": [
    {
      "inputPrompt": {
        "richInitialPrompt": {
          "items": [
            {
              "simpleResponse": {
                "textToSpeech": "Hi!"
              }
            }
          ]
        }
      },
      "possibleIntents": [
        {
          "intent": "actions.intent.TEXT"
        }
      ]
    }
  ],
  "conversationToken": "{\"data\":{}}",
  "userStorage": "{\"data\":{}}"
}

建立函式來處理要求

當使用者說出詞組時,您收到 Google 助理的要求。如要執行要求中的意圖,請建立處理觸發意圖的函式。

如何處理要求:

  1. 執行任何處理使用者輸入內容所需的邏輯。

  2. 呼叫 conv.ask() 函式,將您要顯示為引數的回應傳遞。

以下程式碼顯示如何建構簡單的回應:

Actions SDK (Node.js)
conv.ask(`Hi! Say something, and I'll repeat it.`);
Actions SDK (Java)
ResponseBuilder responseBuilder =
    getResponseBuilder(request).add("Hi! Say something, and I'll repeat it.");
return responseBuilder.build();
JSON
{
  "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 將處理常式指派給意圖。

Actions SDK (Node.js)
app.intent('actions.intent.TEXT', (conv) => {
  // handle text intent.
});
app.intent('actions.intent.MAIN', (conv) => {
  // handle main intent.
});
Actions SDK (Java)
@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 意圖時,通常不需要執行任何使用者輸入處理作業。如果您的動作套件包含許多動作,且涵蓋許多用途,建議您告知使用者一些可做的事,引導使用者採取相應行動。

  1. 呼叫 conv.ask() 函式,將回應做為引數傳遞。Google 助理會說出您的回應,然後等待使用者觸發您指定的其中一項意圖。

下列程式碼片段說明如何處理簡單的歡迎意圖:

Actions SDK (Node.js)
// handle the initialTrigger
function handleMainIntent(conv, input) {
  conv.ask(input);
}
Actions SDK (Java)
private ActionResponse handleMainIntent(ResponseBuilder rb, String input) {
  return rb.add(input).build();
}

對話狀態

如果您使用 對話 HTTP/JSON Webhook API,可以使用您與 Google 助理之間來回傳遞的 JSON 格式物件 (conversationToken) 來維持對話的狀態。如果您使用的是 Node.js 用戶端程式庫,可以直接寫入及讀取 conv.data 欄位。這個欄位會在要求和回應之間自動來回傳遞,

Actions SDK (Node.js)
conv.data = {something: 10};
let value = conv.data.something;
Actions SDK (Java)
ResponseBuilder rb = getResponseBuilder(request);
rb.getConversationData().put("something", 10);
Object value = rb.getConversationData().get("something");