#amazon-lex
#amazon-lex
Вопрос:
Я работаю над лексикой и хочу выполнить намерение, когда будут заполнены все значения слотов. Но намерение не выполняется после запроса подтверждения. он снова и снова запрашивает запрос на подтверждение, но не выполняет намерение. У меня есть код на python, поэтому, пожалуйста, проверьте, нет ли чего-то неправильного в моем коде. Спасибо.
смотрите скриншот.
Я также прилагаю код, пожалуйста, проверьте.
import json
def flightDecision(currName, currSlots, Departure_city, Arrival_city, ReturnDate, Departing, Date, Flight_schedule):
if Departing == "roundtrip" and Date == None:
return{
"dialogAction": {
"type": "ElicitSlot",
"slotToElicit": "Date",
"intentName": 'Bookaflight',
"slots": {
"Departure_city": Departure_city,
"Arrival_city": Arrival_city,
"Departing": Departing,
"Date": Date,
},
},
}
if Departing == 'roundtrip' and Date != None and ReturnDate == None:
return{
"dialogAction": {
"type": "ElicitSlot",
"slotToElicit": "ReturnDate",
"intentName": 'Bookaflight',
"slots": {
"Departure_city": Departure_city,
"Arrival_city": Arrival_city,
"Departing": Departing,
"Date": Date,
"ReturnDate": ReturnDate,
},
},
}
if Departing == 'roundtrip' and ReturnDate != None and Flight_schedule == None:
return{
"dialogAction": {
"type": "ElicitSlot",
"slotToElicit": "Flight_schedule",
"intentName": 'Bookaflight',
"slots": {
"Departure_city": Departure_city,
"Arrival_city": Arrival_city,
"Departing": Departing,
"Date": Date,
"ReturnDate": ReturnDate,
"Flight_schedule": Flight_schedule
},
},
}
if Departing == "oneway" and Date == None:
return{
"dialogAction": {
"type": "ElicitSlot",
"slotToElicit": "Date",
"intentName": 'Bookaflight',
"slots": {
"Departure_city": Departure_city,
"Arrival_city": Arrival_city,
"Departing": Departing,
"Date": Date,
},
},
}
if Departing == 'oneway' and Date != None and Flight_schedule == None:
return{
"dialogAction": {
"type": "ElicitSlot",
"slotToElicit": "Flight_schedule",
"intentName": 'Bookaflight',
"slots": {
"Departure_city": Departure_city,
"Arrival_city": Arrival_city,
"Departing": Departing,
"Date": Date,
"Flight_schedule": Flight_schedule,
},
},
}
return{
"dialogAction":{
"type": "ConfirmIntent",
"intentName": "Bookaflight",
"slots":{
"Departure_city": Departure_city,
"Arrival_city": Arrival_city,
"Departing": Departing,
"Date": Date,
"ReturnDate": ReturnDate,
"Flight_schedule": Flight_schedule,
# "message":{
# "contentType": "PlainText",
# "message": "you want to book a ticket"
# }
}
}
}
def delegate(currSlots, currName, Departure_city, Arrival_city, Departing, Date, Flight_schedule):
return{
'dialogAction': {
'type': 'Delegate',
'slots': currSlots
}
}
def lambda_handler(event, context):
currName = event['currentIntent']['name']
currSlots = event['currentIntent']['slots']
Departing = event['currentIntent']['slots']['Departing']
ReturnDate = event['currentIntent']['slots']['ReturnDate']
Arrival_city = event['currentIntent']['slots']['Arrival_city']
Departure_city = event['currentIntent']['slots']['Departure_city']
Date = event['currentIntent']['slots']['Date']
Flight_schedule = event['currentIntent']['slots']['Flight_schedule']
while not Departing:
return delegate(currSlots, currName, Departure_city, Arrival_city,Departing,Date, Flight_schedule)
else:
return flightDecision(currSlots, currName, Departure_city, Arrival_city, ReturnDate, Departing, Date, Flight_schedule)
Ответ №1:
Если вы используете одну и ту же лямбда-функцию как для проверки, так и для выполнения, вам нужно будет проверить invocationSource
и решить, как действовать соответствующим образом. Поскольку подтверждение намерения также включено, также используйте этот confirmationStatus
параметр, чтобы узнать, подтвердил или отклонил запрос пользователь.
Проверьте формат входного события для структуры JSON, переданной Lex в codehook Lambda: https://docs.aws.amazon.com/lex/latest/dg/lambda-input-response-format.html#using-lambda-input-event-format
Комментарии:
1. Я не прикрепил ни одной лямбда-функции к выполнению. При выполнении я хочу только вернуть параметр клиенту. но я не могу этого сделать, я не хочу выполнять какие-либо другие действия по выполнению, просто хочу вернуть параметр клиенту, если пользователь введет да в запросе подтверждения