Как получить вопросы от лекса бота в лямбда-функции
Я пытался получить вопросы, которые задает бот lex, в лямбда-функции и сохранить в DynamoDB. Я хочу, чтобы синтаксис получал вопросы от amazon lex. Я пробовал это
"const question1=intentRequest.currentIntent.prompts.FlowerType"
но это дает мне ошибку, поэтому парни пытаются помочь мне
2 ответа
Если вы ищете вопрос, который задал бот, вы не получите его в формате JSON. Единственное, что вы получите, это слот и значение слота. Пожалуйста, смотрите вход json со слотами, где вы получите только значение слота, а не вопрос, заданный ботом Lex
{
"messageVersion": "1.0",
"invocationSource": "FulfillmentCodeHook",
"userId": "897877979",
"sessionAttributes": {},
"requestAttributes": null,
"bot": {
"name": "Reasturant",
"alias": "$LATEST",
"version": "$LATEST"
},
"outputDialogMode": "Text",
"currentIntent": {
"name": "Intent",
"slots": {
"SlotType": "SlotValue"
},
"slotDetails": {
"Location": {
"resolutions": [],
"originalValue": "SlotValue"
}
},
"confirmationStatus": "None"
},
"inputTranscript": "Your question goes here"
}
Если вы ищете вопрос, заданный пользователем, то это возможно. JSON от Лекса до Лямбды выглядит следующим образом:
{
"messageVersion": "1.0",
"invocationSource": "FulfillmentCodeHook",
"userId": "876669698689967676",
"sessionAttributes": {},
"requestAttributes": null,
"bot": {
"name": "LexBotName",
"alias": "$LATEST",
"version": "$LATEST"
},
"outputDialogMode": "Text",
"currentIntent": {
"name": "WorkingHours",
"slots": {},
"slotDetails": {},
"confirmationStatus": "None"
},
"inputTranscript": "The question you have asked"
}
Ключ " inputTranscript " - это место, где вы получите вопрос. так что вы получите вопрос,
var question = event.inputTranscript
где 'событие' - это первый параметр функции-обработчика лямбды.
Ответ, который вы предоставляете из своего лямбда-кода через Fulfillment (ElicitSlot
, ElicitIntent
, Close
и т.д.) - это вопросы, задаваемые ботом.
Если вы пытаетесь сохранить беседу в DynamoDB, вы можете создать функцию, которая будет получать сообщения пользователя и сообщения бота и сохранять их в таблице DynamoDB. Вы можете вызвать эту функцию непосредственно перед тем, как ваш бот ответит пользователю.
Вот как я это сделал.
Псевдокод:
def dynamo_put_convo(user_message, bot_response):
#your code to put items into dynamodb
def perform_action(intent_request):
user_message = intent_request['inputTranscript']
if source == 'DialogCodeHook':
# your code
validation_result = some validation code
if validation_result == False:
bot_response = elicit_slot_message
dynamo_put_convo(user_message, bot_response)
return elicit_slot()
return delegate()
if source == 'FulfillmentCodeHook':
# your code
bot_response = output_from_your_code_which_you_want_to_display_to_user
dynamo_put_convo(user_message, bot_response)
return close(bot_response)
def lambda_handler(event, context):
intent_name = intent_request['currentIntent']['name']
if intent_name == 'ABC':
return perform_action(intent_request)
raise Exception('Intent with name ' + intent_name + ' not supported')
Идея состоит в том, чтобы создать функцию для помещения записей в таблицу DynamoDB и вызывать этот метод непосредственно перед тем, как ваш бот отправит какое-либо сообщение пользователю.
Надеюсь, поможет.