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

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

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

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

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

Для решения первых пяти пунктов я сделал следующее:

  • Определите пользовательский тип слота "Валюта" со значениями "Доллар, Евро, Фунт и т. Д."
  • Определите пользовательский тип слота "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 ответ

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

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

Другие вопросы по тегам