Как заставить бот AWS Lex запрашивать последующие действия после выполнения намерения (используя Lambda)?

Бот не отображает последующее приглашение, даже если оно настроено в разделе "Ответ" в "Намерении". Это работает, если в качестве параметра Fulfillment выбран "ReturnParametersToClient". Когда выполнение изменяется на лямбда-функцию AWS, он больше не задает дополнительный вопрос.

Например: если мой пользовательский ввод

3x10

У меня есть лямбда-функция для выполнения этого расчета и возврата результатов в формате JSON, который ожидает Лекс. Таким образом, он отображает

30

Затем он должен представить следующий вопрос

Would you like me to do another calculation?

На что пользователь может ответить

No

Из того, что я понимаю, в разделе "Ответ" на странице редактора намерений я могу задать вопрос "Хотите, чтобы я сделал еще один расчет?". и другое сообщение (в разделе "Ожидание ответа пользователя", если пользователь отвечает отрицательно).

1 ответ

Решение

Да, все работает так, как задумано.

Вы можете сделать одно или другое.
Либо (1) настроить ответ в консоли Lex, когда намерение будет выполнено.
Или (2) создайте свой собственный ответ в лямбде, когда намерение выполнено.

Использование лямбда-функции дает вам гораздо больший контроль над вашим ботом и позволяет вам отвечать более динамичными и индивидуальными сообщениями.

Поэтому, если вы переходите на использование лямбды, вы должны будете сами создать этот ответ при выполнении намерения. Вы можете использовать confirmIntent для этого типа да / нет вопроса.

Проверьте формат ответа Lambda-Lex (подтвердите намерение примерно на полпути вниз страницы)

ConfirmIntent. Сообщает Amazon Lex о том, что пользователь должен дать ответ "да" или "нет" для подтверждения или отклонения текущего намерения.

Отправка этого ответа в качестве источника подтверждения будет выглядеть примерно так:

"dialogAction": {
    "type": "ConfirmIntent",
    "message": {
      "contentType": "PlainText",
      "content": "Would you like me to do another calculation?"
    },
    "intentName": "intent-name",
    "slots": {
       "slot-name": "value",
       "slot-name": "value",
       "slot-name": "value"  
   },
}

Тогда ваша лямбда должна будет ответить на этот вопрос.
Ответ пользователя будет возвращен с той же целью и confirmationStatus будет:
None - подтверждение не используется
Confirmed - пользователь ответил "да" на вопрос о подтверждении намерения
Denied - пользователь ответил "нет" на вопрос о подтверждении намерения

Проверьте ту же ссылку выше в верхней части страницы для формата входного события от Lex до Lambda.


Просто совет:

Вместо этого вы можете просто выполнить намерение с close сообщение и спросите пользователя что-то вроде "Как еще я могу вам помочь?"

Затем пользователь может сразу же задать другой расчет, не сказав да или нет перед каждым вопросом расчета.

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