【发布时间】:2019-02-22 11:15:15
【问题描述】:
如何在意图中获得金钱/货币价值?
我真的很惊讶没有内置的货币和/或货币价值槽类型......目标是创建一个为发票增加一些货币价值的意图(技能与网络服务相关联)。
“将 {value} 美元添加到发票中”
我的第一次尝试是将 {value} 配置为 AMAZON.Number 并键入“将 5.43 美元添加到发票中”。这会将以下内容发送到我的网络服务
value": "?"
“在发票上加 5 美元”的结果是一样的。好的,看来 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 要求返回值
为了解决前五点,我做了以下操作:
- 定义自定义槽类型“货币”,其值为“美元、欧元、 英镑等。”
- 使用值“美分、便士、便士、拉彭等”定义自定义槽类型“美分”
- 在意图中添加了以下语句:
配置:
{
"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 或仅添加十进制值...
那么如何解决呢?
【问题讨论】:
-
您好,您解决了这个问题吗?如果你做到了,怎么做到的?谢谢!
标签: alexa alexa-skills-kit alexa-skill alexa-slot