曾经有一个插槽类型叫做Amazon.LITERAL,它被允许在特定区域使用。但是,它现在已被弃用(或删除)。
然而,使用自定义插槽可以解决这个问题。
假设我们正在 Alexa 上创建一个食品订购系统。像 Zomato 或 Alexa 的 Yelp 这样的技能。让我们给技能调用名称 robert。
所以首先我们列出将要进行的语句类型。如果你的技能不是这个特定的,你可以跳过这一步。但是,这只是帮助您定义您的技能可能会遇到的语句类型。
- Alexa 命令 robert 给我送一份带有土豆泥的鸡排。
- Alexa 要求 robert 向我推荐我附近的一些不错的印度餐馆。
- Alexa 请告诉 robert 给 XYZ 餐厅最近的外卖打一颗星。
在我们创建一个语句列表后,我们将它们存储在一个 csv 文件中。
我们继续点击Slot Types旁边的Add按钮。
为您的自定义插槽类型命名。
现在,一旦你完成了这个,拿出你的技能可以被调用的结构列表。其中一些已在下面给出。
- Alexa 要求罗伯特...
- Alexa 让罗伯特...
- Alexa 命令 robert...
- Alexa 告诉罗伯特...
三个点 (...) 代表订单/声明的实际部分。这是您有兴趣提取的文本。一个例子是;对于声明,
Alexa 让罗伯特给我送一桶鸡块。
您可能有兴趣仅提取粗体部分。
现在亚马逊根据意图对陈述进行分类。它们有五个默认的预定义意图,用于欢迎、取消、帮助和其他基本功能。我们继续创建一个自定义意图来处理主要用于与我们的技能交互的主流语句。
在新的自定义意图窗口下,页面底部是用于添加将在您的意图中使用的槽的空间。我们添加之前创建的自定义插槽并将其命名为 literal。 (你可以随便命名)
在我们的例子中,自定义插槽 literal 是我们想要从用户语句中提取的文本。
现在我们继续将结构列表中的三个点 (...) 替换为 {literal},并将其添加到示例话语列表中。
对于声明
Alexa 让 robert 给我送一份带有土豆泥的鸡排。
JSON 将包含这样的部分,用于自定义意图并突出显示自定义槽文本。
"request": {
"type": "IntentRequest",
"requestId": "",
"timestamp": "2019-01-01T19:37:17Z",
"locale": "en-IN",
"intent": {
"name": "InteractionIntent",
"confirmationStatus": "NONE",
"slots": {
"literal": {
"name": "literal",
"value": "to send me a chicken steak with mashed potatoes.",
"resolutions": {
"resolutionsPerAuthority": [
{
"authority": "",
"status": {
"code": ""
}
}
]
},
"confirmationStatus": "NONE",
"source": "USER"
}
}
}
}
在自定义意图下的槽子部分下,我们有我们的文字槽,其值为我们提供了用户语音的文本。
"slots": {
"literal": {
"name": "literal",
"value": "to send me a chicken steak with mashed potatoes."