建構執行要求 (Dialogflow)

執行要求定義了 Actions 專案要取得的對話式介面 處理輸入內容的邏輯,以及最終執行動作的邏輯。

總覽

執行要求會接收 Google 助理提出的要求、處理要求並 給予回應。這種往返要求和回應程序促成了 持續對話,直到完成初始使用者要求為止

下列步驟說明如何使用動作建立執行要求 使用 Node.js 或 Java/Kotlin 用戶端程式庫的 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,則可持續維護 您與 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");