建構對話動作 (Dialogflow)

您可使用執行要求定義動作的對話、 是部署為 Webhook 的程式碼 內含您 Dialogflow 虛擬服務專員的 對話邏輯「執行要求」能告知使用者該採取哪些動作 要求。

使用互動式畫布時,您的執行要求也會傳達 更新至 Google 助理你可以使用「HtmlResponse」要求 Google 助理執行下列操作: 轉譯您的網頁應用程式HtmlResponse 也可以為 data 提供更新, 修改網頁應用程式的自訂邏輯。

本頁面將說明如何在執行要求和一般項目中使用 HtmlResponse 定義這些回應類型的使用指南

HTML 回應

如要將網頁應用程式的資訊轉發給 Google 助理,請在回應中加上 HtmlResponse敬上 或意圖專屬的執行要求中HtmlResponse 可包含網址 以及更新網頁應用程式的資料。匯款時 HtmlResponse 時,會發生下列步驟:

  1. 相符意圖的執行要求會將 HtmlResponse 傳送至裝置。
  2. 裝置會使用 HtmlResponse 中的網址載入網頁應用程式。
  3. data JSON 酬載會透過回呼傳遞至網頁應用程式。
  4. 您的對話動作會傳送新的HtmlResponse,以便傳送最新資訊或 則會載入新狀態

執行要求範例

以下摘錄自範例 執行要求程式碼顯示如何實作 HtmlResponse

const functions = require('firebase-functions');
const {dialogflow, HtmlResponse} = require('actions-on-google');

const app = dialogflow({debug: true});
app.intent('welcome', (conv) => {
  conv.ask('Welcome! Do you want me to change color or pause spinning?');
  conv.ask(new HtmlResponse({
    url: 'https://your-web-app.com',
  }));
});

// map of human speakable colors to color values
const tints = {
  red: 0xFF0000,
  green: 0x00FF00,
  blue: 0x0000FF,
};
app.intent('color', (conv, {color}) => {
  if (color in tints) {
    conv.ask(`Ok, I changed my color to ${color}. What else?`);
    conv.ask(new HtmlResponse({
      data: {
        tint: tints[color],
      },
    }));
    return;
  }
  conv.ask(`Sorry, I don't know that color. What else?`);
  conv.ask(new HtmlResponse({
    data: {
      query: conv.query,
    },
  }));
});
app.intent('start', (conv) => {
  conv.ask(`Ok, I'm spinning. What else?`);
  conv.ask(new HtmlResponse({
    data: {
      spin: true,
    },
  }));
});

app.intent('pause', (conv) => {
  conv.ask(`Ok, I paused spinning. What else?`);
  conv.ask(new HtmlResponse({
    data: {
      spin: false,
    },
  }));
});

app.intent('restart game', (conv) => {
  conv.ask(new HtmlResponse({
    data: {
      command: 'RESTART_GAME',
    },
  }));
});

exports.conversation = functions.https.onRequest(app);

welcome意圖

在上方的程式碼片段中,welcome 意圖的執行要求會傳送 HtmlResponse 為網頁應用程式的網址。Google 助理收到這項資訊 並載入該位址的 HTML 和 JavaScript

...
app.intent('welcome', (conv) => {
  conv.ask('Welcome! Do you want me to change color or pause spinning?');
  conv.ask(new HtmlResponse({
    url: 'https://your-web-app.com',
  }));
});
...

其他意圖

其他意圖的執行要求中的 HtmlResponse 會傳送變數值 (範例中的 tintspin) 傳送至網頁應用程式。網站的自訂邏輯 應用程式會使用這些值更新元素 (動畫、顏色等):

...
app.intent('start', (conv) => {
  conv.ask(`Ok, I'm spinning. What else?`);
  conv.ask(new HtmlResponse({
    data: {
      spin: true,
    },
  }));
});
...

規範與限制

請注意「HtmlResponse」的下列規範和限制 建立執行要求時,請留意以下要點:

  • 執行要求中的每個意圖都必須包含 HtmlResponse。如為意圖 不含 HtmlResponse,網頁應用程式會關閉。
  • 您只需在傳送目的地的第一個意圖中納入網頁應用程式網址 使用者 (通常是 Welcome 意圖)。
  • HtmlResponse 的大小不得超過 50KB。