alexa - 如何在 Alexa 技能中获得金钱/货币价值?
问题描述
如何在意图中获得金钱/货币价值?
我真的很惊讶没有内置的货币和/或货币价值的插槽类型......目标是创建一个为发票增加一些货币价值的意图(技能与网络服务相关联)。
“将 {value} 美元添加到发票中”
我的第一次尝试是将 {value} 配置为 AMAZON.Number 并输入“将 5.43 美元添加到发票中”。这会将以下内容发送到我的网络服务
value": "?"
“在发票上加 5doller”的结果是一样的。好的,看来 AMAZON.Number 只能处理书面数字,所以“在发票上加五美元”。这很好,因为在开发环境之外,用户会说出命令而不是编写命令。
但是,美分值呢?不同的货币呢?
我在意图中添加了两个插槽:
"slots": [
{
"name": "intValue",
"type": "AMAZON.NUMBER",
},{
"name": "decimalValue",
"type": "AMAZON.NUMBER",
}
]
但是如何定义话语呢?当然我可以简单地定义
Add {intValue} dollar {decimalValue} cents to invoice"
但这不会很灵活。应该可以使用...
- 仅美元价值:“5 美元”
- 仅美分值:“23 美分”
- 美元价值 + 美分价值:“5 美元 23 美分”
- 有无货币:“5 美元 23 美分”、“5 美元 23”、“5 23”等
- 不同的货币:“5 美元 23 美分”、“5 英镑 23 便士”等。
- 第一次表达中没有价值(“创建新发票条目”)并且 Alexa 要求返回价值
为了解决前五点,我做了以下事情:
- 使用值“美元、欧元、英镑等”定义自定义槽类型“货币”。
- 定义一个自定义槽类型“Cent”,其值为“Cent, Pences, Pennies, Rappen, etc.”
- 在意图中添加了以下话语:
配置:
{
"name": "AddInvoiceValue",
"slots": [
{
"name": "intValue",
"type": "AMAZON.NUMBER"
},
{
"name": "decimalValue",
"type": "AMAZON.NUMBER"
},
{
"name": "currency",
"type": "Currency"
},
{
"name": "cents",
"type": "Cent"
}
],
"samples": [
"Add {decimalValue} {cents} to invoice",
"Add {intValue} {decimalValue} to invoice",
"Add {intValue} {currency} {decimalValue} to invoice",
"Add {intValue} {currency} to invoice"
]
}
问题:
- 如果有人说“将 500 17 添加到发票”,则检测为 517 而不是 500.17(由 {decimalValue} {cents} 定义)。这没什么大不了的,但仍然不是最佳的
- “2 美元 18 美分”被检测为“2 美元 18,000”。这个问题出现在不同的说话者身上,不能用非常精确的发音来解决......
- 在德语中,第一被翻译为“eins”。然而,“一美元四分”将被翻译成“ein Dollar vier cent”,这将是“一美元四美分”而不是“一美元”。没有人会说“eins Dollar...”。当然,“ein”或“a”不是有效数字,因此“ein Dollar vier cent”被检测为“intValue = ?” 和 "decimalValue = 4" 导致 "$0,14"
最大的问题:
如何创建一个对话框,用户说“创建新发票条目”并且 Alexa 回问“应该添加多少?”。
仅当需要插槽时才可以创建对话框,但不需要使用的插槽。应该可以仅添加 intValue 或仅添加十进制值...
那么如何解决这个问题呢?
解决方案
对话框功能在这里可能会有所帮助,在我看来,您的 Intent 中有必需的插槽 - 数量。因此,您可以使用开发人员控制台来定义 Alexa 应该提出的问题。
您可以创建自己的对话机制,而不是使用内置的对话机制 - 通过一些状态管理(您可以使用会话存储来保持用户答案之间的状态)。所以当 Alexa 说“应该加多少?” 应该有一个状态设置为“WAITING_FOR_AMOUNT”,然后意图接收带有一些逻辑的小数 - 当有一个“WAITING_FOR_AMOUNT”状态时,做一些事情等等。
推荐阅读
- javascript - 当我尝试将 return 与三元运算符一起使用但不与 if 语句一起使用时,出现 UnexpectedToken 错误?
- java - 从数组中删除最后一个元素并返回它
- docker - 来自 docker 外部的 nginx 中的虚拟主机
- php - 基于数据库值的检查表框
- c++ - 范围适配器对于可视范围后面的参数是否懒惰?
- jenkins - Ansible Inventory: LC_ALL: 无法更改语言环境 (en_US.UTF-8)\r\n/bin/sh
- linux - 无法将 bash 脚本作为服务启动 | 灭霸——普罗米修斯
- unity3d - Unity3D 自上而下的平面银行计算
- javascript - 控制与网络系统的交互
- user-interface - 如何将滑块绑定到参数,以便滑块允许在数据列中的值之间进行选择?