Как получить денежную / валютную ценность в умении Alexa? - PullRequest
0 голосов
/ 22 февраля 2019

Как получить денежную / валютную ценность в намерении?

Я действительно удивлен, что не существует встроенного типа слота для денег и / или валютных значений ... Цель состоит в том, чтобы создать намерениекоторые добавляют некоторую денежную стоимость в счет (навык связан с веб-службой).

"Добавить {стоимость} доллар к счету"

Моя первая попытка состояла в том, чтобы настроить {значение} как AMAZON.Номер и введите «Добавить 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 пенсов "и т. Д.
  • Нет значения в первых высказываниях (" Создать новую запись счета "), и Алекса запрашивает значение

.Решив первые пять пунктов, я сделал следующее:

  • Определите тип пользовательского слота «Валюта» со значениями «Доллар, Евро, Фунт и т. д.»
  • Определите тип пользовательского слота«Cent» со значениями «Cent, Pences, Pennies, Rappen и т. Д.»
  • Добавлены следующие высказывания в намерение:

Config:

{
    "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 тысяч».Эта проблема возникает с разными носителями и не может быть решена с очень точным произношением ...
  • На немецком языке номер один переводится как "eins".Однако «один доллар четыре цента» будет переводиться как «ein dollar vier cent», что будет «доллар четыре цента» вместо «один доллар».Никто не сказал бы "eins доллар ...".Конечно, «ein» или «a» не являются действительными числами, и, следовательно, «ein dollar vier cent» определяется как «intValue =?»и "decimalValue = 4", в результате чего "$ 0,14"

Самая большая проблема:

Как создать диалог, в котором пользователь говорит "Создать новый"запись счета-фактуры "и Алекса спрашивает" Сколько нужно добавить? ".

Создание диалога доступно только в том случае, если требуется слот, но ни один из используемых слотов не требуется.Должна быть возможность добавить только intValue или только десятичное значение ...

Так как это решить?

1 Ответ

0 голосов
/ 26 февраля 2019

Диалог функция может быть полезна здесь, и, на мой взгляд, в вашем намерении есть необходимый слот - сумма.Поэтому вы можете использовать Developer Console для определения вопросов, которые должна задавать Alexa.

Вместо использования встроенного механизма Dialog, вы можете создать свой собственный - с некоторым управлением состоянием (вы можете использовать хранилище сеансов для сохранениясостояние между ответами пользователя).Итак, когда Алекса говорит: «Сколько нужно добавить?»должно быть состояние, установленное на «WAITING_FOR_AMOUNT», а затем намерение получить десятичную с некоторой логикой внутри - когда есть состояние «WAITING_FOR_AMOUNT», сделать что-то и т. д.

...