內建意圖 (Dialogflow)

內建意圖是一組專屬 ID,您可以指定用來通知 你的動作可滿足特定類別使用者的 Google 助理動作 要求。以下列舉幾個會讓使用者查詢 Google 助理會比對內建意圖:

  • 「玩遊戲」內建意圖:「Ok Google.來玩記憶遊戲」
  • 「取得星座運勢」內建意圖:「Ok Google.取得星座運勢」
,瞭解如何調查及移除這項存取權。

探索動作期間,Google 助理可以用 動作的中繼資料,包括您指定的內建意圖 推薦您的動作給使用者為盡可能減少來回對話, Google 助理也會嘗試掃描使用者查詢內容的參數 並傳遞至動作

如欲查看 Google 助理支援的內建意圖完整清單 包括參數和使用者查詢範例 內建意圖參考資料

整合內建意圖

動作方法會因建立動作的方式而異 整合內建意圖

Dialogflow

如果你使用 Dialogflow 建立動作,可以附加內建意圖 透過 Dialogflow 主控台建立圖形。

如要透過 Dialogflow 附加內建意圖,請按照下列步驟操作:

  1. 開啟 Dialogflow 主控台,選取您的代理程式,然後前往 「Intents」(意圖) 畫面。
  2. 建立或選取代理程式在收到回應時觸發的意圖 特定內建意圖開啟「事件」部分,然後按一下「新增」 活動

    圖 1. 在 Dialogflow 控制台中新增 Dialogflow 事件。
  3. 在「事件」欄位中,輸入應用程式中內建意圖事件的名稱。 (例如 actions_intent_PLAY_GAME)。

    圖 2. 在 Dialogflow 控制台中,將內建意圖附加至代理程式。
  4. 按一下 [儲存]

Actions SDK

如果您使用 Actions SDK 建立動作,就必須指定 內建意圖和動作套件中的「動作」之間的對應。

如要透過 Actions SDK 附加內建意圖,請按照下列步驟操作:

  1. Action 定義的名稱欄位中指定內建意圖。
  2. 使用 gactions 工具將動作套件上傳至 Actions 專案,如下所示: 如「Actions SDK 總覽」一文所述。

舉例來說,下列程式碼片段說明如何新增 CHECK_AIR_QUALITY 內建意圖:

{
   "actions":[
      {
         "description":"Default Welcome Intent",
         "name":"MAIN",
         "fulfillment":{
            "conversationName":"conversation_1"
         },
         "intent":{
            "name":"actions.intent.MAIN"
         }
      },
      {
         "description":"Check Air Quality",
         "name":"CHECK_AIR_QUALITY",
         "fulfillment":{
            "conversationName":"conversation_1"
         },
         "intent":{
            "name":"actions.intent.CHECK_AIR_QUALITY"
         }
      }
   ],
   "conversations":{
      "conversation_1":{
         "name":"conversation_1",
         "url":"https://example.com/fulfillment",
         "fulfillmentApiVersion":2
      }
   }
}

處理內建意圖參數

透過內建意圖叫用動作時,執行要求可能會 接收額外參數。意圖結構定義會定義 參數及其類型做為原始類型或 schema.org 實體。如要查看 Conversational Action 內建意圖的結構定義,請參閱 內建意圖參考資料

您可以選擇是否使用內建意圖的參數。Google 助理會處理 這類參數如果可從使用者的叫用中擷取 以及內建意圖

例如 actions.intent.CHECK_AIR_QUALITY 內建函式的結構定義 意圖會定義四個選用參數:

參數名稱 類型
attributes 字串值。
location schema.org/Place 物件。
temporalCoverage schema.org/Duration 物件。
timeIndicator EnumeratedDuration (Google 專屬擴充功能)。

下列程式碼片段是對話 Webhook (JSON) 的範例 並在使用者叫用您的動作時,要求系統提供「現在的空氣品質如何?」 明天是舊金山嗎?」

"inputs":[
      {
         "intent":"actions.intent.CHECK_AIR_QUALITY",
         "rawInputs":[
            {
               "inputType":"VOICE",
               "query":"what is the air quality in san francisco tomorrow"
            }
         ],
         "arguments":[
            {
               "name":"location",
               "structuredValue":{
                  "geo":{
                     "longitude":-122.41941550000001,
                     "latitude":37.7749295
                  },
                  "@context":"https://schema.org",
                  "@type":"Place",
                  "name":"san francisco"
               }
            },
            {
               "name":"temporalCoverage",
               "rawText":"2018-04-25",
               "textValue":"2018-04-25"
            }
         ]
      }
   ]

在這個範例中,參數採用下列值:

  • location 參數包含 schema.org/Place 的值。
  • temporalCoverage 參數包含 schema.org/Duration 值。
  • attributestimeIndicator 參數沒有任何值 因為使用者的叫用詞組不包含這類資訊。

如果您使用的是 Actions on Google 用戶端程式庫 for Node.js, 您可以擷取參數的值,如以下程式碼片段所示:

app.intent('actions.intent.CHECK_AIR_QUALITY', (conv) => {
  const attributes = conv.arguments.get('attributes');
  const location = conv.arguments.get('location');
  const temporal_coverage = conv.arguments.get('temporalCoverage');
  Const time_indicator = conv.arguments.get('timeIndicator')

  // Your Action logic. If you need to use any of the parameter values,
  // you should check first that it is defined. Arguments.get returns
  // undefined if it can't find a value for a parameter.

});

測試與內建意圖的整合作業

請按照下列步驟測試整合作業:

  1. 在已啟用測試動作的情況下開啟動作模擬工具,或是開啟 裝置上的 Google 助理
  2. 說出或輸入與該內建意圖相關聯的查詢。例如: 「我想玩遊戲。」
  3. 在畫面顯示的應用程式選項對話方塊中,找出你的動作。
  4. 選取要將意圖傳送至應用程式的應用程式。
圖 3. 透過內建意圖詞組產生的
動作選取對話方塊。
圖 4. 叫用附加至內建意圖的動作。

使用內建意圖的最佳做法

使用內建意圖時,請務必遵循下列最佳做法:

  • 將內建意圖對應至特定動作:當特定內建意圖時 觸發動作、將使用者導向特定意圖 讓動作變得更加流暢適用對象 舉例來說,如果您的動作支援 PLAY_GAME 內建意圖,且 收到該意圖後,您就應立即將使用者導向遊戲功能 動作。如果使用者想玩遊戲,請避免再次詢問使用者。
  • 處理內建意圖參數:請務必使用內建意圖 參數值。 避免重複提示使用者輸入這些值。