如何在Alexa技能中获得金钱/货币价值?

时间:2019-02-22 11:15:16

标签: alexa alexa-skills-kit alexa-skill alexa-slot

如何在意向中获得金钱/货币价值?

我真的很惊讶,没有任何用于货币和/或货币值的插槽类型...目标是创建一个打算在发票上添加一些货币值的技能(技能链接到Web服务)。

“在发票上添加{value}美元”

我的第一个尝试是将{value}配置为AMAZON.Number并键入“向发票添加5.43美元”。这会将以下内容发送到我的Web服务

value": "?"

“向发票添加5美元”的结果是相同的。好的,看来AMAZON.Number仅能处理书面数字,因此“在工作发票上加5美元”。这很好,因为在开发人员环境之外,用户将说出命令而不是编写命令。

但是,分数值呢?那不同的货币呢?

我在意图中添加了两个插槽:

"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要求输入该值

要解决前五点,我做了以下工作:

  • 使用值“ Dollar,Euro, 磅等。”
  • 用值“分,便士,便士,拉彭等”定义自定义广告位类型“分”。
  • 为意图添加了以下话语:

配置:

{
    "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美分”。此问题发生在不同的说话者身上,无法用非常精确的发音解决...
  • 德语将数字1转换为“ eins”。但是,“一美元四美分”将被转换为“ ein dollar vier cent”,即“一美元四美分”而不是“一美元”。没有人会说“ eins dollar ...”。当然,“ ein”或“ a”不是有效数字,因此将“ ein dollar vier cent”检测为“ intValue =?”和“ decimalValue = 4”产生“ $ 0,14”

最大的问题:

如何创建一个对话框,其中用户说“创建新的发票条目”,Alexa询问“应添加多少?”。

仅在需要插槽时才可以创建对话框,但不需要使用任何插槽。应该可以仅添加intValue或仅添加十进制值...

那该如何解决呢?

1 个答案:

答案 0 :(得分:0)

Dialog功能在这里可能会有所帮助,我认为您的Intent(金额)中必填。因此,您可以使用开发人员控制台定义Alexa应该询问的问题。

您可以使用某种状态管理来创建自己的-而不是使用内置的Dialog机制(可以使用会话存储在用户的答案之间保留状态)。所以当Alexa说“应该添加多少?”应该将状态设置为“ WAITING_FOR_AMOUNT”,然后打算在内部包含一些逻辑以接收小数-当存在“ WAITING_FOR_AMOUNT”状态时,执行某些操作等等。