内置 intent (Dialogflow)

内置 intent 是一个唯一标识符,您可以指定,告知 您的 Action 可以执行特定类别用户的 Google 助理 请求。例如,以下是一些用户查询示例 Google 助理会与内置 intent 匹配:

  • “玩游戏”内置 intent:“Ok Google。玩一个记忆游戏”
  • “获取星座运势”内置 intent:“Ok Google。了解我的星座运势”

操作发现过程中,Google 助理可以使用 有关您的 Action 的元数据,包括您指定的内置 intent, 来向用户推荐你的 Action。为了尽可能减少对话式往返, Google 助理还会尝试扫描用户查询中的参数 并将其传递给你的 Action

如需查看 Google 助理支持的内置 intent 的完整列表,请按以下步骤操作: 包括其参数和示例用户查询,请参阅 内置 intent 参考文档

集成内置 intent

根据构建 Action 的方式,有多种不同的方式 集成内置 intent。

Dialogflow

如果您使用 Dialogflow 创建 Action,可以附加一个内置 intent Dialogflow 控制台以图形方式运行。

如需使用 Dialogflow 附加内置 intent,请按以下步骤操作:

  1. 打开 Dialogflow 控制台,选择您的代理,然后导航到 intent 屏幕。
  2. 创建或选择代理在收到 特定内置 intent。打开事件部分,然后点击添加 事件

    图 1. 在 Dialogflow 控制台中添加 Dialogflow 事件。
  3. 事件字段中,输入您的内置 intent 事件的名称 (例如 actions_intent_PLAY_GAME)。

    图 2. 在 Dialogflow 控制台中,将内置 intent 附加到代理。
  4. 点击保存

Actions SDK

如果您使用 Actions SDK 构建 Action,则必须指定 内置 intent 与 Action 软件包中的 Action 之间的映射。

如需使用 Actions SDK 附加内置 intent,请按以下步骤操作:

  1. Action 定义的名称字段中指定内置 intent。
  2. 使用 gactions 工具将 Action 软件包上传到 Actions 项目,如下所示: Actions SDK 概览中所述的步骤。

例如,以下代码段展示了如何将 CHECK_AIR_QUALITY 内置 intent:

{
   "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
      }
   }
}

处理内置 intent 参数

通过内置 intent 调用 Action 时,执行方式 可接收其他参数。intent 架构定义了 参数及其类型(作为基元类型或 schema.org) 实体。如需查看对话操作内置 intent 的架构,请参阅 内置 intent 参考文档

内置 intent 的参数是可选的。Google 助理负责填充 如果参数值可从用户调用 内置 intent。

例如,内置 actions.intent.CHECK_AIR_QUALITY 架构的架构 intent 定义了四个可选参数:

参数名称 类型
attributes 字符串值。
location schema.org/Place 对象。
temporalCoverage schema.org/Duration 对象。
timeIndicator EnumeratedDuration(Google 专用扩展程序)。

以下代码段显示了一个对话 webhook (JSON) 示例 当用户说出您的 Action“What's the Air quality in San Francisco tomorrow?”

"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 “San Francisco”的值。
  • temporalCoverage 参数包含 schema.org/Duration 明天的日期值(相对于调用时间)。
  • attributestimeIndicator 参数没有值 因为用户的调用短语中没有包含此类信息。

如果您使用的是适用于 Node.js 的 Actions on Google 客户端库, 您可以检索参数值,如以下代码段所示:

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.

});

测试与内置 intent 的集成

请按照以下步骤测试您的集成:

  1. 打开已启用测试 Action 的 Action 模拟器,或者打开 你设备上的 Google 助理
  2. 说出或输入与该内置 intent 关联的查询。例如: “我想玩游戏。”
  3. 从显示的应用选择对话框中,找到您的 Action。
  4. 选择您的应用以向您的应用发送 intent。
图 3. 根据内置 intent 短语生成的
操作选择对话框。
图 4. 调用附加到内置 intent 的 Action。

使用内置 intent 的最佳实践

使用内置 intent 时,应遵循以下最佳实践:

  • 将内置 intent 映射到特定操作:当特定的内置 intent 时 触发您的 Action,将用户转到特定 intent,并 功能在您的 Action 中实现尽可能少的阻力。对于 例如,如果您的 Action 支持 PLAY_GAME 内置 intent,并且 收到该 intent,您应立即将用户引导至游戏功能 。如果用户想玩游戏,请避免再次询问。
  • 处理内置 intent 参数:请务必使用内置 intent 参数值。 请避免重复提示用户输入这些值。