内置 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,请按以下步骤操作:
- 打开 Dialogflow 控制台,选择您的代理,然后导航到 intent 屏幕。
创建或选择代理在收到 特定内置 intent。打开事件部分,然后点击添加 事件。
在事件字段中,输入您的内置 intent 事件的名称 (例如
actions_intent_PLAY_GAME
)。点击保存。
Actions SDK
如果您使用 Actions SDK 构建 Action,则必须指定 内置 intent 与 Action 软件包中的 Action 之间的映射。
如需使用 Actions SDK 附加内置 intent,请按以下步骤操作:
- 在 Action 定义的名称字段中指定内置 intent。
- 使用
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
明天的日期值(相对于调用时间)。attributes
和timeIndicator
参数没有值 因为用户的调用短语中没有包含此类信息。
如果您使用的是适用于 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 的集成
请按照以下步骤测试您的集成:
- 打开已启用测试 Action 的 Action 模拟器,或者打开 你设备上的 Google 助理
- 说出或输入与该内置 intent 关联的查询。例如: “我想玩游戏。”
- 从显示的应用选择对话框中,找到您的 Action。
- 选择您的应用以向您的应用发送 intent。
使用内置 intent 的最佳实践
使用内置 intent 时,应遵循以下最佳实践:
- 将内置 intent 映射到特定操作:当特定的内置 intent 时
触发您的 Action,将用户转到特定 intent,并
功能在您的 Action 中实现尽可能少的阻力。对于
例如,如果您的 Action 支持
PLAY_GAME
内置 intent,并且 收到该 intent,您应立即将用户引导至游戏功能 。如果用户想玩游戏,请避免再次询问。 - 处理内置 intent 参数:请务必使用内置 intent 参数值。 请避免重复提示用户输入这些值。