Принять любой пользовательский ввод для Alexa Custom Skill, но включить только часть этого ввода в подтверждение - PullRequest
2 голосов
/ 11 мая 2019

Я пытаюсь создать собственный навык Алекса для дневника благодарности.Цель состоит в том, чтобы иметь взаимодействие, при котором устройство Alexa запрашивает у пользователя то, за что он благодарен, и повторяет его в качестве подтверждения.

Я сталкиваюсь с проблемой, когда приходится повторять то, что пользовательсказал.Я бы хотел, чтобы разговор был таким:

Alexa: Что вы благодарны за сегодня?
Пользователь Я благодарен за собак
Alexa: Вы сказали, что благодарны за собак.Это правильно?

Я настроил это как одно намерение, как показано ниже:

  • gratitude_object как обязательный слот, типа AMAZON.SearchQuery
  • пользовательских высказываний для этого слота: I'm grateful for {gratitude_object} (и несколько вариантов)
  • подтверждающее сообщение для этого слота: You're feeling grateful for {gratitude_object}. Is that correct?

Проблема, с которой я сталкиваюсьв том, что когда я тестирую эту модель в Utterance Profiler, она выглядит следующим образом:

Alexa: Что вы благодарны за сегодня?
Пользователь Я благодарен за собак
Alexa: Вы сказали, что благодарны за то, что я благодарен за собак.Это правильно?

Я предполагаю, что это как-то связано с тем фактом, что AMAZON.SearchQuery будет принимать что-либо как допустимый ввод, но я не уверен, как решить эту проблему.

Я также пытался создать пользовательский слот для фразы I'm grateful for:

  • имя слота: gratitude_phrase_initiator
  • тип слота: тип пользовательского слота
  • значения слотов: «Я благодарен», «Я благодарен» (и т. Д.)

Однако, если я попытаюсь использовать этот слот в своих намерениях, сделавпользовательское высказывание для слота gratitude_object:

{gratitude_phrase_initiator} {gratitude_object}

... тогда я получаю следующую ошибку:

Примерное высказывание "{gratitude_statement_initiator} {gratitude_object}" для слота "gratitude_object" в намерении "NewEntryIntent" не может включать в себя как слот фразы, так и другой слот намерения.Код ошибки: InvalidSlotSamplePhraseSlot

.

Я бы очень хотел сохранить взаимодействие в том виде, в котором оно есть в данный момент, а пользователь начинает со слов "Я благодарен за ...",Любые предложения о том, как я мог бы сделать эту работу, используя модель взаимодействия, или это просто невозможно?Это то, что я мог бы обработать в коде вместо модели взаимодействия?

1 Ответ

0 голосов
/ 14 мая 2019

Похоже, вы настроили его идеально, но вы ожидаете, что SearchQuery сделает лучшую работу по исключению начальной фразы высказывания. Таким образом, вам придется проанализировать его еще немного в коде. Вы должны использовать лямбда-функцию, чтобы заменить строку значения слота, чтобы удалить любые начальные фразы.

Пример в Node.js:

var gratitude_object = this.event.request.intent.slots.gratitude_object.value;

var initial_phrases = [
    "i'm grateful for",
    "i am grateful for",
];

initial_phrases.forEach(function(value){
    gratitude_object = gratitude_object.toLowerCase().replace(value,"");
});

Обратите внимание, что массив начальных фраз записан в нижнем регистре, и цикл forEach также делает значение слота строчным перед проверкой на замену. Таким образом, вам не нужно беспокоиться о сопоставлении регистра при написании исходных фраз, которые вы хотите удалить.

...