

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# AWS Lambdaformato de respuesta para Lex V2
<a name="lambda-response-format"></a>

El segundo paso para integrar una función de Lambda en el bot de Amazon Lex V2 consiste en comprender los campos de la respuesta de la función de Lambda y determinar qué parámetros desea manipular. El siguiente objeto JSON muestra el formato general de una respuesta de Lambda que se devuelve a Amazon Lex V2:

```
{
    "sessionState": {
        // see Estado de la sesión for details about the structure
    },
    "messages": [
        {
            "contentType": "CustomPayload | ImageResponseCard | PlainText | SSML",
            "content": string,
            "imageResponseCard": {
                "title": string,
                "subtitle": string,
                "imageUrl": string,
                "buttons": [
                    {
                        "text": string,
                        "value": string
                    },
                    ...
                ]
            }
        },
        ...
    ],
    "requestAttributes": {
        string: string,
        ...
    }
}
```

Cada campo en la respuesta se describe a continuación.

## Estado de la sesión
<a name="lambda-response-sessionstate"></a>

El estado de la conversación entre el usuario y el bot de Amazon Lex V2 que desea devolver. Consulte [Estado de la sesión](lambda-common-structures.md#lambda-session-state) para obtener más información sobre la estructura. Este campo siempre es obligatorio.

## Mensajes
<a name="lambda-response-messages"></a>

Lista de mensajes que Amazon Lex V2 devuelve al cliente para la siguiente sesión de la conversación. Si el `contentType` que ha proporcionado es `PlainText`, `CustomPayload` o `SSML`, escriba en el campo `content` el mensaje que desea devolver al cliente. Si el `contentType` que ha proporcionado es `ImageResponseCard`, proporcione los detalles de la tarjeta en el campo `imageResponseCard`. Si no proporciona mensajes, Amazon Lex V2 utiliza el mensaje apropiado definido cuando se creó el bot.

El campo `messages` es obligatorio si `dialogAction.type` es `ElicitIntent` o `ConfirmIntent`.

Cada elemento de la lista es una estructura con el siguiente formato, que contiene información sobre un mensaje para devolverlo al usuario. A continuación se muestra un ejemplo:

```
{
    "contentType": "CustomPayload | ImageResponseCard | PlainText | SSML",
    "content": string,
    "imageResponseCard": {
        "title": string,
        "subtitle": string,
        "imageUrl": string,
        "buttons": [
            {
                "text": string,
                "value": string
            },
            ...
        ]
    }
}
```

A continuación, se proporciona una descripción de cada campo:
+ **Tipo de contenido**: el tipo de mensaje que se va a utilizar.

  `CustomPayload`: una cadena de respuesta que se puede personalizar para incluir datos o metadatos para la aplicación.

  `ImageResponseCard`: una imagen con botones que el cliente puede seleccionar. Para obtener más información, consulte [ImageResponseCard](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_ImageResponseCard.html).

  `PlainText`: una cadena de texto simple.

  `SSML`: una cadena que incluye el lenguaje de marcado de síntesis de voz para personalizar la respuesta de audio.
+ **Contenido**: el mensaje que se va a enviar al usuario. Utilice este campo si el tipo de mensaje es `PlainText`, `CustomPayload`, o `SSML`.
+ **imageResponseCard**— Contiene la definición de la tarjeta de respuesta que se mostrará al usuario. Utilice este campo si el tipo de mensaje es `ImageResponseCard`. Corresponde a una estructura que contiene los siguientes campos:
  + **título**: el título de la tarjeta de respuesta.
  + **subtítulo**: la solicitud para que el usuario seleccione un botón.
  + **URL de imagen**: enlace a una imagen de la tarjeta.
  + **botones**: lista de estructuras que contienen información sobre un botón. Cada estructura contiene un campo `text` con el texto que se debe mostrar y un campo `value` con el valor que se debe enviar a Amazon Lex V2 si el cliente selecciona ese botón. Puede incluir hasta tres botones.

## Atributos de solicitud
<a name="lambda-response-requestattributes"></a>

Estructura que contiene atributos específicos de la solicitud para la respuesta al cliente. Para obtener más información, consulte [Cómo establecer atributos de solicitud para su bot Lex V2](context-mgmt-request-attribs.md). Este campo es opcional.

## Campos obligatorios en la respuesta
<a name="lambda-response-required"></a>

Como mínimo, la respuesta de Lambda debe incluir un objeto `sessionState`. Dentro de eso, proporcione un objeto `dialogAction` y especifique el campo `type`. En función del `type` de la `dialogAction` que proporcione, es posible que haya otros campos obligatorios para la respuesta de Lambda. Estos requisitos se describen a continuación, junto con algunos ejemplos prácticos mínimos:

### Delegado
<a name="lambda-response-delegate"></a>

El **delegado** permite a Amazon Lex V2 determinar el siguiente paso. No hay más campos obligatorios.

```
{
    "sessionState": {
        "dialogAction": {
            "type": "Delegate"
    }
}
```

### ElicitIntent
<a name="lambda-response-elicitintent"></a>

**ElicitIntent**pide al cliente que exprese su intención. Debe incluir al menos un mensaje en el campo `messages` para que se manifieste una intención.

```
{
    "sessionState": {
        "dialogAction": {
            "type": "ElicitIntent"
    },
    "messages": [
        {
            "contentType": PlainText,
            "content": "How can I help you?"
        }
    ]
}
```

### ElicitSlot
<a name="lambda-response-elicitslot"></a>

**ElicitSlot**pide al cliente que proporcione un valor de espacio. Debe incluir el nombre del slot en el campo `slotToElicit` del objeto `dialogAction`. También debe incluir el `name` de `intent` en el objeto `sessionState`.

```
{`
    "sessionState": {
        "dialogAction": {
            "slotToElicit": "OriginCity",
            "type": "ElicitSlot"
        },
        "intent": {
            "name": "BookFlight"
        }
    }
}
```

### ConfirmIntent
<a name="lambda-response-confirmintent"></a>

**ConfirmIntent**confirma los valores de las franjas horarias del cliente y si la intención está lista para cumplirse. Debe incluir el `name` del `intent` en el objeto `sessionState` y los `slots` que deben confirmarse. También debe incluir al menos un mensaje en el campo `messages` para solicitar al usuario que confirme los valores de los slots. Su mensaje debería arrojar una respuesta de «sí» o «no». Si el usuario responde «sí», Amazon Lex V2 establece el `confirmationState` de la intención en `Confirmed`. Si el usuario responde «no», Amazon Lex V2 establece el `confirmationState` de la intención en `Denied`.

```
{
    "sessionState": {
        "dialogAction": {
            "type": "ConfirmIntent"
        },
        "intent": {
            "name": "BookFlight",
            "slots": {
                "DepartureDate": {
                    "value": {
                        "originalValue": "tomorrow",
                        "interpretedValue": "2023-05-09",
                        "resolvedValues": [
                            "2023-05-09"
                    ]
                 }
                },
                "DestinationCity": {
                    "value": {
                        "originalValue": "sf",
                        "interpretedValue": "sf",
                        "resolvedValues": [
                            "sf"
                        ]
                    }
                },
                "OriginCity": {
                    "value": {
                        "originalValue": "nyc",
                        "interpretedValue": "nyc",
                        "resolvedValues": [
                            "nyc"
                        ]
                    }
                }
            }
        }
    },
    "messages": [
        {
            "contentType": PlainText,
            "content": "Okay, you want to fly from {OriginCity} to \
            {DestinationCity} on {DepartureDate}. Is that correct?"
        }
    ]
}
```

### Cerrar
<a name="lambda-response-close"></a>

**Cerrar** finaliza el proceso de cumplimiento de la intención e indica que no se espera ninguna otra respuesta del usuario. Debe incluir el `name` y el `state` de la `intent` en el objeto `sessionState`. Los estados de intención compatibles son `Failed`, `Fulfilled` y `InProgress`.

```
"sessionState": {
    "dialogAction": {
        "type": "Close"
    },
    "intent": {
        "name": "BookFlight",
        "state": "Failed | Fulfilled | InProgress"
    }
}
```