Вернитесь обратно в то же место в диалоговом дереве после переключения между намерениями в Amazon LEX. - PullRequest
0 голосов
/ 06 января 2019

Даю У меня есть диалоговое дерево для бронирования аренды автомобиля. У бота есть основное намерение, называемое orderIntent, и второе намерение, называемое colorIntent. В диалоговом окне «orderIntent» пользователю будет предложено выбрать категорию автомобиля, дату и цену (все они имеют отдельный слот в этом намерении).

Я хочу, чтобы в любой данный момент в диалоговом окне пользователь мог вызывать намерение «colorIntent» и устанавливать цвет по своему желанию, а когда это закончится, вернуться в то же место в дереве. диалог, который он ранее оставил.

Например, когда пользователю будет предложено выбрать дату для бронирования, и он ответит «Я хочу выбрать зеленый цвет для автомобиля», это вызовет намерение «colorIntent», и пользователь сможет выбрать цвет.

После этого пользователь должен вернуться к той же части диалога, которую он частично выполнил, и ему снова будет предложено выбрать дату бронирования. Я хочу добиться этого, сохраняя информацию, которую он уже частично выполнил в основном диалоге о категории автомобилей и цене, которую он уже выбрал, и новую информацию о цвете, которую он выбрал из намерения «colorIntent».

Как я могу настроить такую ​​логику в AWS Lambda бота?

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Используйте sessionAttributes для достижения этой цели, потому что sessionAttributes остаются между намерениями, в то время как slots содержатся только в каждом намерении.

Логика Intent_A может выполняться, заполняя slots, и значения слотов также должны быть сохранены в sessionAttributes. Затем в любой точке IntentA пользователь может вызвать Intent_B.

Теперь Intent_A slots перезаписываются Intent_B slots, но значения слотов Intent_A по-прежнему сохраняются в sessionAttributes.

Дополнительная информация о том, как переключаться между намерениями:

У вас есть 2 варианта:

(1) заставить пользователя снова вызвать IntentA с подсказкой типа "Чтобы продолжить бронирование автомобиля, скажите, пожалуйста, автомобиль ".

(2) используйте confirmIntent обратно в IntentA, но для этого потребуется задать вопрос подтверждения, например, "Хотите продолжить бронирование автомобиль? " Ответ на это пойдет на Intent_A независимо от того, так внутри Intent_A вам нужно просто проверить confirmationStatus который будет или "Confirmed" или "Denied", в зависимости от того, как Пользователь ответил на этот вопрос. Если подтвердится, то вы можете продолжить Intent_A, и если отказано, вы должны закрыть Intent_A.

(посмотрите подтвердите намерение здесь под типами dialogAction)

После возврата в Intent_A вы должны проверить, есть ли какие-либо данные слота внутри sessionAttributes, и принудительно вернуть эти данные в соответствующий slots. Тогда ваша оригинальная логика может определить, какие слоты уже заполнены, и продолжить с того места, на котором она остановилась.

0 голосов
/ 07 января 2019

https://github.com/awslabs/serverless-application-model/blob/master/examples/apps/lex-book-trip-python/lambda_function.py

Попробуйте посмотреть функцию book_car, это решит вашу проблему. Потому что здесь они берут некоторые значения слотов book_hotel и настраиваются в book_car.

...