Намерение не выполняется после подтверждения propmt

#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. Я не прикрепил ни одной лямбда-функции к выполнению. При выполнении я хочу только вернуть параметр клиенту. но я не могу этого сделать, я не хочу выполнять какие-либо другие действия по выполнению, просто хочу вернуть параметр клиенту, если пользователь введет да в запросе подтверждения