Как вернуться к первоначальному намерению после того, как пользователь говорит «Повторить» во время явного диалога в Alexa с использованием Node js? - PullRequest
0 голосов
/ 21 октября 2018

Intents:

IntentA

Это сценарий:

  • U: "Alexa, open myapp"
  • A: "Добро пожаловатьto myapp "(LaunchHandler)
  • U:" Поиск маршрутов "(IntentAHandler)
  • A:" Откуда вы отправляетесь? "(IntentAHandler, с addElicitSlotDirective)
  • U: «Повторить» (RepeatHandler)
  • A: «Откуда вы отправляетесь?»(IntentAHandler, с addElicitSlotDirective) <- Я не могу добраться до этого </strong>

Я пробовал разные способы вернуться к исходному намерению, но я получаю эту ошибку: INVALID_RESPONSEДействительный слот обрабатываемого намерения должен быть указан для slotToElicit в директиве "Dialog.ElicitSlot"

Код из RepeatIntent:

handlerInput.requestEnvelope.request.intent = attributes.temp_IntentA;
return custom.IntentAHandler.handle(handlerInput);

У меня нет проблем с повторением последнегоречь, как, когда у меня есть выходная речь с результатами.Но во время диалога, выясняя, как?Есть ли способ сделать это?

1 Ответ

0 голосов
/ 21 октября 2018

Во время многооборотного разговора с моделью диалога намерение остается тем же , когда слоты заполняются или во время подтверждения намерений / слотов.Теперь, когда пользователь говорит «Повторить» , Alexa сопоставляет его с RepeatIntent (если у вас нет «повтор» в качестве высказывания в том же самом намерении).Теперь вам нужно извлечь слот с другим намерением (исходным намерением) из обработчика повторного намерения.К сожалению, на данный момент вы не можете сделать это.Только обновленное намерение того же типа может быть отправлено с директивой Dialog.ElicitSlot.

Обратите внимание, что вы не можете изменить намерения при возврате директивы Dialog, поэтому имя намерения и наборСлоты должны соответствовать цели, отправленной вашему умению.

Если вы попытаетесь это сделать, вы получите сообщение об ошибке.


Решение -

  1. Сохранить состояние и достигнутый прогресс с помощью IntentA.
  2. (RepeatIntent или любое другое намерение вызывается и отправляется ответ)
  3. Повторно активировать оригинал IntentA с соответствующим высказыванием.
  4. Восстановление состояния и достигнутого прогресса.

Вы можете сохранить состояние в sessionAttributes и повторно вызвать IntentA, который вы должны предоставитькакое-то высказывание, которое вызовет это.В вашем случае что-то вроде

"I would like to depart from {city}"

or just (if it doesn't break your VUI)

"{city}"

Таким образом, пользователь может легко переключать контекст в середине разговора и возвращаться.После повторного запуска намерения вы можете использовать любые директивы модели Dialog.

Читать это сообщение в блоге для получения дополнительной информации о переключении контекста.
Подробнее об интерфейсе диалога здесь .

...