

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.

# Integración de una AWS Lambda función en su bot Amazon Lex V2
<a name="lambda"></a>

Con las funciones de [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html), puede controlar mejor el comportamiento de su bot Amazon Lex V2 mediante funciones personalizadas definidas por usted. Amazon Lex V2 utiliza una función de Lambda por alias de bot por idioma en lugar de una función de Lambda para cada intención. Antes de empezar, determine de qué campos del [evento de entrada](https://docs.aws.amazon.com/lexv2/latest/dg/lambda-input-format) quiere extraer información y qué campos de la [respuesta](https://docs.aws.amazon.com/lexv2/latest/dg/lambda-response-format) quiere manipular y devolver desde la función de Lambda.

Para integrar una función de Lambda con el bot de Amazon Lex V2, lleve a cabo los siguientes pasos:

1. [Crea una función](https://docs.aws.amazon.com/lexv2/latest/dg/lambda-attach) AWS Lambda usando el lenguaje de programación que prefieras y redacta tu script.

1. Asegúrese de que la función devuelva una estructura que coincida con el [formato de respuesta](https://docs.aws.amazon.com/lexv2/latest/dg/lambda-response-format).

1. Implemente la función de Lambda.

1. Asocie la función de Lambda a un alias de bot de Amazon Lex V2 con las operaciones de la [consola](https://docs.aws.amazon.com/lexv2/latest/dg/lambda-attach-console) o de la [API](https://docs.aws.amazon.com/lexv2/latest/dg/lambda-attach-api).

1. Seleccione las etapas de conversación en las que desee invocar la función de Lambda con las operaciones de la [consola](https://docs.aws.amazon.com/lexv2/latest/dg/lambda-attach-console) o de las [operaciones de la API](https://docs.aws.amazon.com/lexv2/latest/dg/lambda-attach-api).

1. Compile su bot de Amazon Lex V2 y compruebe que la función de Lambda funciona según lo previsto. [Depura](https://docs.aws.amazon.com/lexv2/latest/dg/lambda-debug) tu función con la ayuda de Amazon CloudWatch.

**Topics**
+ [AWS Lambdaformato de evento de entrada para Lex V2](lambda-input-format.md)
+ [AWS Lambdaformato de respuesta para Lex V2](lambda-response-format.md)
+ [Estructuras comunes de una AWS Lambda función para Amazon Lex V2](lambda-common-structures.md)
+ [Creación de una AWS Lambda función para su bot Amazon Lex V2](lambda-attach.md)
+ [Depuración de una función Lambda mediante registros CloudWatch](lambda-debug.md)

# AWS Lambdaformato de evento de entrada para Lex V2
<a name="lambda-input-format"></a>

El primer paso para integrar una función de Lambda en el bot de Amazon Lex V2 consiste en comprender los campos del evento de Amazon Lex V2 y determinar la información de estos campos que desea utilizar al escribir el script. El siguiente objeto JSON muestra el formato general de un evento de Amazon Lex V2 pasado a una función de Lambda:

**nota**  
El formato de entrada puede cambiar sin un cambio correspondiente de la `messageVersion`. El código no debería devolver un error si hay nuevos campos.

```
{
    "messageVersion": "1.0",
    "invocationSource": "DialogCodeHook | FulfillmentCodeHook",
    "inputMode": "DTMF | Speech | Text",
    "responseContentType": "audio/mpeg | audio/ogg | audio/pcm | text/plain; charset=utf-8",
    "sessionId": string,
    "inputTranscript": string,
    "invocationLabel": string,
    "bot": {
        "id": string,
        "name": string,
        "localeId": string,
        "version": string,
        "aliasId": string,
        "aliasName": string
    },
    "interpretations": [
        {
            "interpretationSource": "Bedrock | Lex",
            "intent": {
                // see Intención for details about the structure
            },
            "nluConfidence": number,
            "sentimentResponse": {
                "sentiment": "MIXED | NEGATIVE | NEUTRAL | POSITIVE",
                "sentimentScore": {
                    "mixed": number,
                    "negative": number,
                    "neutral": number,
                    "positive": number
                }
            }
        },
        ...
    ],
    "proposedNextState": {
        "dialogAction": {
            "slotToElicit": string,
            "type": "Close | ConfirmIntent | Delegate | ElicitIntent | ElicitSlot"
        },
        "intent": {
            // see Intención for details about the structure
        },
        "prompt": {
            "attempt": string 
        }
    },
    "requestAttributes": {
        string: string,
        ...
    },
    "sessionState": {
        // see Estado de la sesión for details about the structure
    },
    "transcriptions": [
        {
            "transcription": string,
            "transcriptionConfidence": number,
            "resolvedContext": {
                "intent": string
            },
            "resolvedSlots": {
                slot name: {
                    // see Ranuras for details about the structure
                },
                ...
            }
        },
        ...
    ]
}
```

Cada campo de evento se describe a continuación.

## Versión del mensaje
<a name="lambda-input-messageversion"></a>

La versión del mensaje que identifica el formato de los datos del evento que se van a pasar a la función de Lambda y el formato previsto de la respuesta de una función de Lambda.

**nota**  
Puede configurar este valor a la hora de definir una intención. En la implementación actual, Amazon Lex V2 solo admite la versión 1.0 de los mensajes. Por lo tanto, la consola asume el valor predeterminado de 1.0 y no muestra el mensaje de la versión.

## Origen de invocación
<a name="lambda-input-invocationsource"></a>

El enlace de código que llamó a la función de Lambda. Se admiten los siguientes valores:

`DialogCodeHook`: Amazon Lex V2 llamó a la función de Lambda después de la entrada del usuario.

`FulfillmentCodeHook`: Amazon Lex V2 llamó a la función de Lambda después de llenar todos los slots requeridos y la intención estaba lista para su cumplimiento.

## Modo de entrada
<a name="lambda-input-inputmode"></a>

El modo de enunciado del usuario. Los valores posibles son los siguientes:

`DTMF`: el usuario introdujo el enunciado mediante un teclado táctil (multifrecuencia de doble tono).

`Speech`: el usuario pronunció el enunciado.

`Text`: el usuario escribió el enunciado.

## responseContentType
<a name="lambda-input-responsecontenttype"></a>

El modo de respuesta del bot al usuario. `text/plain; charset=utf-8` indica que se escribió el último enunciado, mientras que un valor que comience por `audio` indica que se pronunció el último enunciado.

## ID de sesión
<a name="lambda-input-sessionid"></a>

El identificador de sesión alfanumérico utilizado para la conversación.

## Transcripción de entrada
<a name="lambda-input-inputtranscript"></a>

Una transcripción de la entrada del usuario.
+ Para la entrada de texto, este es el texto que escribió el usuario. Para la entrada DTMF, esta es la clave que introdujo el usuario.
+ En el caso de entrada de voz, este es el texto en el que Amazon Lex V2 convierte el enunciado del usuario para invocar una intención o llenar un slot.

## Etiqueta de invocación
<a name="lambda-input-invocationlabel"></a>

Un valor que indica la respuesta que invocó la función de Lambda. Puede establecer etiquetas de invocación para la respuesta inicial, los slots y la respuesta de confirmación.

## bot
<a name="lambda-input-bot"></a>

Información sobre el bot que procesó la solicitud, que consta de los siguientes campos:
+ **id**: el identificador único asignado al bot cuando se creó. Puede ver el ID del bot en la consola de Amazon Lex V2 en la página **Configuración** del bot.
+ **Nombre**: el nombre que le dio al bot cuando lo creó.
+ **ID de configuración regional**: el identificador de la configuración regional que utilizó para su bot. Para obtener una lista de las configuraciones regionales, consulte [Idiomas y configuraciones regionales compatibles con Amazon Lex V2](how-languages.md).
+ **Versión**: versión del bot que ha procesado la solicitud.
+ **ID de alias**: ID de alias del bot: el identificador único asignado al alias del bot cuando se creó. Puede ver el ID del alias del bot en la consola de Amazon Lex V2 en la página **Alias**. Si no puede ver el ID de alias en la lista, seleccione el icono con forma de engranaje situado en la esquina superior derecha y active el **ID de alias**.
+ **Nombre de alias**: el nombre que le diste al alias del bot.

## Interpretaciones
<a name="lambda-input-interpretations"></a>

Lista de información sobre las intenciones que Amazon Lex V2 considera posibles coincidencias con el enunciado del usuario. Cada elemento es una estructura que proporciona información sobre la coincidencia del enunciado con una intención, con el siguiente formato:

```
{
    "intent": {
        // see Intención for details about the structure
    },
    "interpretationSource": "Bedrock | Lex",
    "nluConfidence": number,
    "sentimentResponse": {
        "sentiment": "MIXED | NEGATIVE | NEUTRAL | POSITIVE",
        "sentimentScore": {
            "mixed": number,
            "negative": number,
            "neutral": number,
            "positive": number
        }
    }
}
```

Los campos de la estructura son los siguientes:
+ **Intención**: estructura que contiene información sobre la intención. Consulte [Intención](lambda-common-structures.md#lambda-intent) para obtener más información sobre la estructura.
+ **Confianza de NLU**: puntuación que indica la confianza de Amazon Lex V2 en que la intención coincide con la intención del usuario.
+ **Respuesta del sentimiento**: un análisis del sentimiento de la respuesta, que contiene los siguientes campos:
  + **Sentimiento**: indica si el sentimiento del enunciado es`POSITIVE`,`NEGATIVE`, `NEUTRAL` o. `MIXED`
  + **Puntuación del sentimiento**: una estructura que asigna cada sentimiento a un número que indica la confianza de Amazon Lex V2 en que el enunciado transmite ese sentimiento.
+ **InterpretationSource**: indica si Amazon Lex V2 o Amazon Bedrock resuelven un espacio.

## proposedNextState
<a name="lambda-input-proposednextstate"></a>

Si la función de Lambda establece la `dialogAction` del `sessionState` en `Delegate`, este campo aparece y muestra la propuesta de Amazon Lex V2 para el siguiente paso de la conversación. En caso contrario, el siguiente estado depende de la configuración que devuelva en la respuesta de su función de Lambda. Esta estructura solo está presente si las dos afirmaciones siguientes son verdaderas:

1. El valor `invocationSource` es `DialogCodeHook`.

1. La predicción `type` de `dialogAction` es `ElicitSlot`.

Puede usar esta información para agregar `runtimeHints` en el momento correcto de la conversación. Consulte [Mejora del reconocimiento de los valores de las ranuras con sugerencias de tiempo de ejecución en la conversación](using-hints.md) para obtener más información. `proposedNextState` es una estructura que contiene los siguientes campos:

La estructura de `proposedNextState` es la siguiente:

```
"proposedNextState": {
    "dialogAction": {
        "slotToElicit": string,
        "type": "Close | ConfirmIntent | Delegate | ElicitIntent | ElicitSlot"
    },
    "intent": {
        // see Intención for details about the structure
    },
    "prompt": {
        "attempt": string 
    }
}
```
+ **Acción de diálogo**: contiene información sobre el siguiente paso que propone Amazon Lex V2. Los campos de la estructura son los siguientes: 
  + **slotToElicit**— El espacio a obtener a continuación, según lo propuesto por Amazon Lex V2. Este campo solo aparece si el valor de `type` es `ElicitSlot`. 
  + **Tipo**: el siguiente paso de la conversación propuesto por Amazon Lex V2. Se admiten los siguientes valores:

    `Delegate`: Amazon Lex V2 determina la siguiente acción.

    `ElicitIntent`: la siguiente acción es obtener una intención por parte del usuario.

    `ElicitSlot`: la siguiente acción es obtener un slot por parte del usuario.

    `Close`: finaliza el proceso de cumplimiento de la intención e indica que no habrá respuesta por parte del usuario.

    `ConfirmIntent`: la siguiente acción consiste en preguntar al usuario si los slots son correctos y si la intención está lista para ser cumplida.
+ **intención**: la intención que el bot ha determinado que el usuario intenta cumplir. Consulte [Intención](lambda-common-structures.md#lambda-intent) para obtener más información sobre la estructura.
+ **Solicitud**: una estructura que contiene el campo `attempt`, que se asigna a un valor que especifica cuántas veces Amazon Lex V2 ha pedido al usuario que pase al siguiente slot. Los valores posibles son `Initial` para el primer intento y `Retry1`, `Retry2`, `Retry3`, `Retry4` y `Retry5` para los intentos posteriores. 

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

Una estructura que contiene atributos específicos de la solicitud que el cliente envía en la solicitud. Utilice los atributos de solicitud para pasar información que no tiene por qué persistir durante toda la sesión. Si no hay atributos de solicitud, el valor será nulo. Para obtener más información, consulte [Cómo establecer atributos de solicitud para su bot Lex V2](context-mgmt-request-attribs.md).

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

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

## Transcripciones
<a name="lambda-input-transcriptions"></a>

Lista de transcripciones que Amazon Lex V2 considera posibles coincidencias con el enunciado del usuario. Para obtener más información, consulte [Uso de las puntuaciones de confianza en la transcripción de voz para mejorar las conversaciones con su bot Lex V2](using-transcript-confidence-scores.md). Cada elemento es un objeto con el siguiente formato, que contiene información sobre una posible transcripción:

```
{
    "transcription": string,
    "transcriptionConfidence": number,
    "resolvedContext": {
        "intent": string
    },
    "resolvedSlots": {
        slot name: {
            // see Ranuras for details about the structure
        },
        ...
    }
}
```

Los siguientes campos se describen a continuación:
+ **Transcripción**: una transcripción que Amazon Lex V2 considera una posible coincidencia con el enunciado de audio del usuario.
+ **Confianza de la transcripción**: puntuación que indica la confianza de Amazon Lex V2 en que la intención coincide con la intención del usuario.
+ **Contexto resuelto**: estructura que contiene el campo `intent`, que corresponde a la intención a la que pertenece el enunciado.
+ **Slots resueltos**: estructura cuyas claves son los nombres de cada slot que se resuelve mediante el enunciado. El nombre de cada slot se asigna a una estructura que contiene información sobre ese slot. Consulte [Ranuras](lambda-common-structures.md#lambda-slot) para obtener más información sobre la estructura.

# 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"
    }
}
```

# Estructuras comunes de una AWS Lambda función para Amazon Lex V2
<a name="lambda-common-structures"></a>

Dentro de la respuesta Lambda, hay una serie de estructuras que se repiten. En esta sección se proporcionan detalles sobre estas estructuras comunes.

## Intención
<a name="lambda-intent"></a>

```
"intent": {
    "confirmationState": "Confirmed | Denied | None",
    "name": string,
    "slots": {
        // see Ranuras for details about the structure
    },
    "state": "Failed | Fulfilled | FulfillmentInProgress | InProgress | ReadyForFulfillment | Waiting",
    "kendraResponse": {
        // Only present when intent is KendraSearchIntent. For details, see
// https://docs.aws.amazon.com/kendra/latest/dg/API_Query.html#API_Query_ResponseSyntax       }
}
```

El campo `intent` se asigna a un objeto con los siguientes campos:

### Estado de confirmación
<a name="lambda-intent-confirmationstate"></a>

Indica si el usuario ha confirmado los slots para la intención y si la intención está lista para su cumplimiento. Se admiten los siguientes valores:

`Confirmed`: el usuario confirma que los valores de los slots son correctos.

`Denied`: el usuario indica que los valores de los slots son incorrectos.

`None`: el usuario aún no ha llegado a la fase de confirmación.

### name
<a name="lambda-intent-name"></a>

El nombre de la intención.

### slots
<a name="lambda-intent-slots"></a>

Información sobre los slots necesarios para cumplir con la intención. Consulte [Ranuras](#lambda-slot) para obtener más información sobre la estructura.

### estado
<a name="lambda-intent-state"></a>

Indica el estado de cumplimiento de la intención. Se admiten los siguientes valores:

`Failed`: el bot no cumplió con la intención.

`Fulfilled`: el bot ha completado el cumplimiento de la intención.

`FulfillmentInProgress`: el bot está a punto de cumplir su intención.

`InProgress`: el bot está a punto de obtener los valores de slot necesarios para cumplir su intención.

`ReadyForFulfillment`: el bot ha obtenido todos los valores de slot disponibles para esa intención y está preparado para cumplirla.

`Waiting`: el bot espera la respuesta del usuario (limitado a la transmisión de conversaciones).

### Respuesta de Kendra
<a name="lambda-intent-kendraresponse"></a>

Contiene información sobre los resultados de la consulta de búsqueda de Kendra. Este campo solo aparece si la intención es una `KendraSearchIntent`. Consulte [la sintaxis de respuesta en la llamada a la API de consulta para Kendra](https://docs.aws.amazon.com/kendra/latest/dg/API_Query.html#API_Query_ResponseSyntax) para obtener más información.

## Ranuras
<a name="lambda-slot"></a>

El campo `slots` existe dentro de una `intent` estructura y está asignado a una estructura cuyas claves son los nombres de los slots correspondientes a esa intención. Si el slot no es un slot con varios valores (consulte [Uso de valores múltiples en un slot](multi-valued-slots.md) para obtener más información), se asigna a una estructura con el siguiente formato. Tenga en cuenta que `shape` es `Scalar`.

```
{
    slot name: {
        "shape": "Scalar",
        "value": {
            "originalValue": string,
            "interpretedValue": string,
            "resolvedValues": [
                string,
                ...
            ]
        }
    }
}
```

Si el slot es un slot con varios valores, el objeto al que se asigna contiene otro campo denominado `values`, que se asigna a una lista de estructuras, cada una de las cuales contiene información sobre el slot que forma el slot con varios valores. El formato de cada objeto de la lista coincide con el del objeto al que se asigna un slot normal. Tenga en cuenta que `shape` es `List`, pero la `shape` de los slots de los componentes que se encuentran por debajo de `values` es `Scalar`.

```
{
    slot name: {
    "shape": "List",
    "value": {
        "originalValue": string,
        "interpretedValue": string,
        "resolvedValues": [
            string,
            ...
        ]
    },
    "values": [
        {
            "shape": "Scalar",
            "value": {
                "originalValue": string,
                "interpretedValue": string,
                "resolvedValues": [
                    string,
                    ...
                ]
            }
        },
        {
            "shape": "Scalar",
            "value": {
                "originalValue": string,
                "interpretedValue": string,
                "resolvedValues": [
                    string,
                    ...
                ]
            }
        },
        ...
    ]
}
```

Los campos del objeto del slot se describen a continuación:

### Forma
<a name="lambda-slots-shape"></a>

La forma del slot. Este valor es `List` si hay varios valores en el slot (consulte [Uso de valores múltiples en un slot](multi-valued-slots.md) para obtener más información) y es `Scalar` en caso contrario.

### valor
<a name="lambda-slots-value"></a>

Un objeto que contiene información sobre el valor que el usuario proporcionó para una ranura y la interpretación de Amazon Lex V2, en el siguiente formato:

```
{
    "originalValue": string,
    "interpretedValue": string,
    "resolvedValues": [
        string,
        ...
    ]
}
```

Los campos se describen a continuación:
+ **OriginalValue**: la parte de la respuesta del usuario a la selección de franjas horarias que Amazon Lex V2 determina que es relevante para el valor de la ranura.
+ **InterpretedValue**: el valor que Amazon Lex V2 determina para la ranura, según lo introducido por el usuario.
+ **ResolvedValues**: lista de valores que Amazon Lex V2 determina que son posibles resoluciones para la entrada del usuario.

### valores
<a name="lambda-slots-values"></a>

Una lista de objetos que contiene información sobre los slots que componen el slot con valores múltiples. El formato de cada objeto coincide con el de un slot normal, con los campos `shape` y `value` descritos anteriormente. `values` solo aparece si el slot consta de varios valores (consulte [Uso de valores múltiples en un slot](multi-valued-slots.md) para obtener más información). El siguiente objeto JSON muestra dos slots de componentes:

```
"values": [
    {
        "shape": "Scalar",
        "value": {
            "originalValue": string,
            "interpretedValue": string,
            "resolvedValues": [
                string,
                ...
            ]
        }
    },
    {
        "shape": "Scalar",
        "value": {
            "originalValue": string,
            "interpretedValue": string,
            "resolvedValues": [
                string,
                ...
            ]
        }
    },
    ...
]
```

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

El campo `sessionState` está asignado a un objeto que contiene información sobre el estado de la conversación con el usuario. Los campos reales que aparecen en el objeto dependen del tipo de acción de diálogo. Consulte [Campos obligatorios en la respuesta](lambda-response-format.md#lambda-response-required) los campos obligatorios en una respuesta de Lambda. El formato del objeto `sessionState` es el siguiente:

```
"sessionState": {
    "activeContexts": [
        {
            "name": string,
            "contextAttributes": {
                string: string
            },
            "timeToLive": {
                "timeToLiveInSeconds": number,
                "turnsToLive": number
            }
        },
        ...
    ],
    "sessionAttributes": {
        string: string,
        ...
    },
    "runtimeHints": {
        "slotHints": {
            intent name: {
                slot name: {
                    "runtimeHintValues": [
                        {
                            "phrase": string
                        },
                        ...
                    ]
                },
                ...
            },
            ...
        }
    },
    "dialogAction": {
        "slotElicitationStyle": "Default | SpellByLetter | SpellByWord",
        "slotToElicit": string,
        "type": "Close | ConfirmIntent | Delegate | ElicitIntent | ElicitSlot"
    },
    "intent": {
        // see Intención for details about the structure
    },
    "originatingRequestId": string
}
```

Los siguientes campos se describen a continuación:

### Contextos activos
<a name="lambda-active-contexts"></a>

Una lista de objetos que contiene información sobre un contexto que un usuario utiliza en una sesión. Utilice los contextos para facilitar y controlar el reconocimiento de intenciones. Para obtener más información sobre contextos, consulte [Cómo establecer un contexto de intención para su bot Lex V2](context-mgmt-active-context.md). Cada objeto tiene el siguiente formato:

```
{
    "name": string,
    "contextAttributes": {
        string: string
    },
    "timeToLive": {
        "timeToLiveInSeconds": number,
        "turnsToLive": number
    }
}
```

Los siguientes campos se describen a continuación:
+ **Nombre**: el nombre del contexto.
+ **Atributos del contexto**: objeto que contiene los nombres de los atributos del contexto y los valores a los que están asignados.
+ **timeToLive**— Un objeto que especifica cuánto tiempo permanece activo el contexto. Este objeto puede contener uno o los dos siguientes campos:
  + **timeToLiveInSeconds**— El número de segundos que el contexto permanece activo.
  + **turnsToLive**— El número de turnos durante los que el contexto permanece activo.

### sessionAttributes
<a name="lambda-session-attributes"></a>

Un mapa de key/value pares que representa información contextual específica de la sesión. Para obtener más información, consulte [Cómo establecer atributos de sesión para su bot Lex V2](context-mgmt-session-attribs.md). El objeto tiene el siguiente formato:

```
{
    string: string,
    ...
}
```

### Sugerencias en tiempo de ejecución
<a name="lambda-runtime-hints"></a>

Proporciona sugerencias sobre las frases que es probable que un cliente utilice en un slot para mejorar el reconocimiento de audio. Los valores que proporcione en las sugerencias aumentan el reconocimiento de audio de esos valores en comparación con palabras que suenan similares. El formato del objeto `runtimeHints` es el siguiente:

```
{
    "slotHints": {
        intent name: {
            slot name: {
                "runtimeHintValues": [
                    {
                        "phrase": string
                    },
                    ...
                ]
            },
            ...
        },
        ...
    }
}
```

El campo `slotHints` se asigna a un objeto cuyos campos son los nombres de las intenciones del bot. Cada nombre de intención se asigna a un objeto cuyos campos son los nombres de los slots correspondientes a esa intención. El nombre de cada slot se asigna a una estructura con un solo campo, `runtimeHintValues`, que es una lista de objetos. Cada objeto contiene un campo `phrase` que se asigna a una sugerencia.

### Acción de diálogo
<a name="lambda-dialog-action"></a>

Determina la siguiente acción que debe realizar Amazon Lex V2. El formato del objeto es el siguiente:

```
{
    "slotElicitationStyle": "Default | SpellByLetter | SpellByWord",
    "slotToElicit": string,
    "type": "Close | ConfirmIntent | Delegate | ElicitIntent | ElicitSlot"
}
```

Los siguientes campos se describen a continuación:
+  **slotElicitationStyle**— Determina cómo Amazon Lex V2 interpreta la entrada de audio del usuario si `dialogAction` es `type` `ElicitSlot` de. Para obtener más información, consulte [Captura de valores de ranura con estilos de ortografía durante la conversación](spelling-styles.md). Se admiten los siguientes valores:

  `Default`: Amazon Lex V2 interpreta la entrada de audio de la manera predeterminada para ocupar un slot.

  `SpellByLetter`: Amazon Lex V2 escucha la ortografía del usuario sobre el valor del slot.

  `SpellByWord`: Amazon Lex V2 escucha la ortografía del valor del slot por parte del usuario mediante palabras asociadas a cada letra (por ejemplo, «m como en manzana»).
+  **slotToElicit**— Define el espacio que se debe obtener del usuario si el `type` de `dialogAction` es. `ElicitSlot` 
+ **Tipo**: define la acción que debe ejecutar el bot. Se admiten los siguientes valores:

  `Delegate`: permite a Amazon Lex V2 determinar el siguiente paso.

  `ElicitIntent`: pide al cliente que exprese una intención.

  `ConfirmIntent`: confirma los valores del slot del cliente y si la intención está lista para cumplirse.

  `ElicitSlot`: pide al cliente que indique un valor de slot para una intención.

  `Close`: finaliza el proceso de cumplimiento de la intención.

### Intención
<a name="lambda-sessionstate-intent"></a>

Para obtener información sobre la estructura del campo `intent`, consulte [Intención](#lambda-intent).

### originatingRequestId
<a name="lambda-originating-request-id"></a>

Un identificador único para la solicitud. Este campo es opcional para la respuesta de Lambda.

# Creación de una AWS Lambda función para su bot Amazon Lex V2
<a name="lambda-attach"></a>

Para crear una función Lambda para su bot de Amazon Lex V2, acceda AWS Lambda desde la consola de administración de AWS y cree una función nueva. Puede consultar la [guía para AWS Lambda desarrolladores](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) para obtener más información al respectoAWS Lambda.

1. Inicie sesión en la consola de administración de AWS y abra la AWS Lambda consola en [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/).

1. Seleccione **Funciones** en la barra lateral izquierda.

1. Seleccione **Crear función**.

1. Puede seleccionar **Autor desde cero** para empezar con un código mínimo, **Usar un esquema** para seleccionar de una lista código de muestra para casos de uso comunes, o **Imagen de contenedor** para seleccionar una imagen de contenedor para implementarla en su función. Si selecciona **Autor desde cero**, continúe con los siguientes pasos:

   1. Dele a la función un **Nombre de función** significativo para describir lo que hace.

   1. Seleccione un idioma en el menú desplegable de **Tiempo de ejecución** para escribir la función.

   1. Seleccione una **Arquitectura** de un conjunto de instrucciones para la función.

   1. Por defecto, Lambda crea un rol con permisos básicos. Para usar un rol existente o crear un rol mediante plantillas de políticas de AWS, expanda el menú **Cambiar el rol de ejecución predeterminado** y seleccione una opción.

   1. Amplíe el menú de **Configuración avanzada** para configurar más opciones.

1. Seleccione **Crear función**.

La siguiente imagen muestra lo que se ve al crear una nueva función desde cero:

![\[Una nueva función de Lambda.\]](http://docs.aws.amazon.com/es_es/lexv2/latest/dg/images/lambda/lambda-new-function.png)


La función del controlador de Lambda varía según el idioma que utilice. Como mínimo, toma un objeto `event` JSON como argumento. Puede ver los campos del `event` que Amazon Lex V2 proporciona en [AWS Lambdaformato de evento de entrada para Lex V2](lambda-input-format.md). Modifique la función del controlador para, en última instancia, devolver un objeto `response` JSON que coincida con el formato descrito en [AWS Lambdaformato de respuesta para Lex V2](lambda-response-format.md).
+ Cuando termine de escribir la función, seleccione **Implementar** para permitir que se use la función.

Recuerde que puede asociar cada alias de bot como máximo a una función de Lambda. Sin embargo, puede definir tantas funciones como necesite para su bot en el código Lambda y llamar a estas funciones en la función de controlador de Lambda. Por ejemplo, si bien todas las intenciones del mismo alias de bot deben llamar a la misma función de Lambda, puede crear una función de router que active una función independiente para cada intención. A continuación, se muestra un ejemplo de función de router que puede utilizar o modificar para su aplicación:

```
import os
import json
import boto3

# reuse client connection as global
client = boto3.client('lambda')

def router(event):
    intent_name = event['sessionState']['intent']['name']
    fn_name = os.environ.get(intent_name)
    print(f"Intent: {intent_name} -> Lambda: {fn_name}")
    if (fn_name):
        # invoke lambda and return result
        invoke_response = client.invoke(FunctionName=fn_name, Payload = json.dumps(event))
        print(invoke_response)
        payload = json.load(invoke_response['Payload'])
        return payload
    raise Exception('No environment variable for intent: ' + intent_name)

def lambda_handler(event, context):
    print(event)
    response = router(event)
    return response
```

**Cuándo utilizar las AWS Lambda funciones en las conversaciones de los bots de Amazon Lex V2**

Puede utilizar funciones de Lambda en los siguientes momentos de una conversación con un usuario:
+ En la respuesta inicial después de reconocer la intención. Por ejemplo, después de que el usuario diga que quiere pedir una pizza.
+ Después de obtener un valor de slot del usuario. Por ejemplo, después de que el usuario le diga al bot el tamaño de pizza que quiere pedir.
+ Entre cada reintento para obtener un slot. Por ejemplo, si el cliente no usa un tamaño de pizza reconocido.
+ Al confirmar una intención. Por ejemplo, al confirmar un pedido de pizza.
+ Para cumplir una intención. Por ejemplo, para hacer un pedido de pizza.
+ Una vez cumplida la intención y antes de que su bot cierre la conversación. Por ejemplo, para cambiar a una intención de pedir una bebida.

**Topics**
+ [Adjunte una AWS Lambda función a un bot de Amazon Lex V2 mediante la consola](lambda-attach-console.md)
+ [Adjunte una AWS Lambda función a un bot de Amazon Lex V2 mediante operaciones de API](lambda-attach-api.md)

# Adjunte una AWS Lambda función a un bot de Amazon Lex V2 mediante la consola
<a name="lambda-attach-console"></a>

Primero debe adjuntar una función Lambda a su alias de bot de Amazon Lex V2 antes de poder invocarla. Solo puede asociar una función de Lambda a cada alias de bot. Realice estos pasos para asociar la función de Lambda con la consola de AWS. 

1. Inicie sesión en la consola de administración de AWS y abra la consola de Amazon Lex en [https://console.aws.amazon.com/lex/](https://console.aws.amazon.com/lex/).

1. Seleccione **Bots** en el panel lateral izquierdo y, en la lista de bots, seleccione el nombre del bot al que desee adjuntar una función de Lambda.

1. En el panel lateral izquierdo, seleccione **Alias** en el menú de **implementación**.

1. En la lista de alias, seleccione el nombre del alias al que quiera adjuntar una función de Lambda.

1. En el panel **Idiomas**, seleccione el idioma en el que desee que aparezca una función de Lambda. Seleccione **Administrar idiomas en alias** para añadir un idioma si no está presente en el panel.

1. En el menú desplegable **Origen**, seleccione el nombre de la función de Lambda que quiera adjuntar.

1. En el menú desplegable **Versión o alias de la función de Lambda**, seleccione la versión o el alias de la función de Lambda que quiera utilizar. A continuación, seleccione **Guardar**. La misma función de Lambda se utiliza a todos los efectos en un idioma compatible con el bot.

**Establecer la intención de Amazon Lex V2 de invocar una función Lambda mediante la consola**

1. Tras seleccionar un bot, seleccione Intenciones en el menú lateral de la izquierda, debajo del idioma del bot para el que desee invocar la función de Lambda.

1. Seleccione la intención con la que desea invocar la función de Lambda para abrir el editor de intenciones.

1. Existen dos opciones para configurar el enlace de código de Lambda:

   1. Para invocar la función de Lambda después de cada paso de la conversación, desplácese hasta la sección de **Enlaces de código** en la parte inferior del editor de intenciones y seleccione la casilla **Usar una función de Lambda para la inicialización y la validación**, como se muestra en la siguiente imagen:  
![\[La sección de enlaces de código del editor de intenciones de Amazon Lex V2.\]](http://docs.aws.amazon.com/es_es/lexv2/latest/dg/images/lambda/lambda-code-hooks-all.png)

   1. Como alternativa, utilice la sección de **Enlaces de código de diálogo** en las etapas de la conversación en las que se invoca la función de Lambda. La sección del **Enlace de código de diálogo** aparece de la siguiente manera:  
![\[La sección de enlaces de código del editor de intenciones de Amazon Lex V2.\]](http://docs.aws.amazon.com/es_es/lexv2/latest/dg/images/lambda/lambda-code-hook-step.png)

      Existen dos formas de controlar la forma en que Amazon Lex V2 llama al enlace de código para obtener una respuesta:
      + Active el botón **Activar** para marcarlo como *activo* o *inactivo*. Cuando un enlace de código esté *activo*, Amazon Lex V2 lo llamará. Cuando el enlace de código esté *inactivo*, Amazon Lex V2 no lo ejecutará.
      + Amplíe la sección del **enlace de código de diálogo Lambda** y seleccione la casilla de verificación **Invocar función de Lambda** para marcarla como *habilitada* o *deshabilitada*. Solo puede activar o desactivar un enlace de código si está marcado como activo. Cuando está marcado como *activado*, el enlace de código se ejecuta con normalidad. Cuando está *deshabilitado*, no se llama al enlace de código y Amazon Lex V2 actúa como si el enlace de código se hubiera devuelto correctamente. Para configurar las respuestas después de que el enlace de código de diálogo se complete correctamente, falle o se agote el tiempo de espera, seleccione **Opciones avanzadas**

      El enlace de código Lambda se puede invocar en las siguientes etapas de la conversación:
      + Para invocar la función como **respuesta inicial**, desplácese hasta la sección **Respuesta inicial**, expanda la flecha situada junto a **Respuesta para confirmar la solicitud del usuario** y seleccione **Opciones avanzadas**. Busque la sección **Enlace de código de diálogo** en la parte inferior del menú que aparece.
      + Para invocar la función después de **obtener el slot**, desplácese hasta la sección **Slots**, expanda la flecha situada junto a la **Solicitud para slot** correspondiente y seleccione **Opciones avanzadas**. Busque la sección **Enlace de código de diálogo** cerca de la parte inferior del menú que aparece, justo encima de los **Valores predeterminados**.

        También puedes invocar la función después de cada activación. Para ello, expanda la **Información sobre la obtención del bot** en la sección de **Solicitudes de slots**, seleccione **Más opciones de solicitudes** y active la casilla de verificación situada junto a **Invocar el enlace de código Lambda después de cada obtención**.
      + Para invocar la función para **confirmar la intención**, desplácese hasta la sección **Confirmación**, expanda la flecha situada junto a **Solicitudes para confirmar la intención** y seleccione **Opciones avanzadas**. Busque la sección **Enlace de código de diálogo** en la parte inferior del menú que aparece.
      + Para invocar la función para **cumplir una intención**, desplácese hasta la sección **Cumplimiento**. Active el botón **Activo** para establecer el enlace de código en *activo*. Expanda la flecha situada junto a **Cumplimiento en proceso correctamente** y seleccione **Opciones avanzadas**. Seleccione la casilla de verificación situada junto a **Utilizar una función de Lambda para el cumplimiento** en la sección **Enlace de código Lambda de cumplimiento** para establecer el enlace de código como *activado*.

1. Una vez que haya establecido las etapas de conversación en las que se invocará la función de Lambda, vuelva a **Compilar** el bot para probar la función.

# Adjunte una AWS Lambda función a un bot de Amazon Lex V2 mediante operaciones de API
<a name="lambda-attach-api"></a>

Primero debe adjuntar una función Lambda a su alias de bot de Amazon Lex V2 antes de poder invocarla. Recuerde que puede asociar cada alias de bot como máximo a una función de Lambda. Realice estos pasos para asociar la función de Lambda mediante operaciones de API. 

Si va a crear un nuevo alias de bot, utilice la [CreateBotAlias](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_CreateBotAlias.html)operación para adjuntar una función Lambda. Para adjuntar una función Lambda a un alias de bot existente, utilice la [UpdateBotAlias](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_UpdateBotAlias.html)operación. Modifique el campo `botAliasLocaleSettings` para que contenga la configuración correcta:

```
{
    "botAliasLocaleSettings" : {
        locale: {
            "codeHookSpecification": {
                "lambdaCodeHook": {
                    "codeHookInterfaceVersion": "1.0",
                    "lambdaARN": "arn:aws:lambda:region:account-id:function:function-name"
                }
            },
            "enabled": true
        },
        ...
    }
}
```

1. El campo `botAliasLocaleSettings` se asigna a un objeto cuyas claves son las configuraciones regionales en las que desea adjuntar la función de Lambda. Consulte [Idiomas y configuraciones regionales compatibles](how-languages.md#supported-languages) para obtener una lista de las configuraciones regionales compatibles y los códigos que son claves válidas.

1. `lambdaARN`Para buscar la función Lambda, abre la AWS Lambda consola en [https://console.aws.amazon.com/lambda/casa](https://console.aws.amazon.com/lambda/home), selecciona **Funciones** en la barra lateral izquierda y selecciona la función que deseas asociar al alias del bot. En el lado derecho de la **Descripción de la función**, busque el `lambdaARN` de la **Función de ARN**. Debe contener una región, un ID de cuenta y el nombre de la función.

1. Para permitir que Amazon Lex V2 invoque la función de Lambda para el alias, defina el campo `enabled` en `true`.

**Establecer la intención de Amazon Lex V2 de invocar una función Lambda mediante operaciones de API**

Para configurar la invocación de la función Lambda durante una intención, utilice la [CreateIntent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_CreateIntent.html)operación si está creando una nueva intención o la [UpdateIntent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_UpdateIntent.html)operación si está invocando la función en una intención existente. Los campos que controlan la invocación de la función de Lambda en las operaciones de intención son `dialogCodeHook`, `initialResponseSetting`, `intentConfirmationSetting` y `fulfillmentCodeHook`.

Si invoca la función durante la generación de una ranura, utilice la [CreateSlot](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_CreateSlot.html)operación si va a crear una nueva ranura o utilice la [UpdateSlot](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_UpdateSlot.html)operación para invocar la función en una ranura existente. El campo que controla la invocación de la función de Lambda en las operaciones de slot es la `slotCaptureSetting` del objeto `valueElicitationSetting`.

1. Para configurar el enlace de código del cuadro de diálogo de Lambda para que se ejecute después de cada turno de la conversación, defina el `enabled` campo del siguiente [DialogCodeHookSettings](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_DialogCodeHookSettings.html)objeto del `dialogCodeHook` campo en: `true`

   ```
   "dialogCodeHook": {
       "enabled": boolean
   }
   ```

1. Como alternativa, puede configurar el enlace de código del diálogo Lambda para que se ejecute solo en puntos específicos de las conversaciones modificando el `codeHook` and/or `elicitationCodeHook` campo dentro de las estructuras que corresponden a las etapas de la conversación en las que desea invocar la función. Para utilizar el enlace de códigos del cuadro de diálogo Lambda para el cumplimiento de la intención, utilice el `fulfillmentCodeHook` campo de la operación [CreateIntent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_CreateIntent.html)o [UpdateIntent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_UpdateIntent.html). Las estructuras y los usos de estos tres tipos de enlaces de código son los siguientes:

## enlace de código
<a name="lambda-code-hook"></a>

El campo `codeHook` define los ajustes para que el enlace de código se ejecute en una etapa determinada de la conversación. Es un [DialogCodeHookInvocationSetting](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_DialogCodeHookInvocationSetting.html)objeto con la siguiente estructura:

```
"codeHook": {
    "active": boolean,
    "enableCodeHookInvocation": boolean,
    "invocationLabel": string,
    "postCodeHookSpecification": [PostDialogCodeHookInvocationSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_PostDialogCodeHookInvocationSpecification.html),
}
```
+ Cambie el campo `active` a `true` para que Amazon Lex V2 llame al enlace de código en ese momento de la conversación.
+ Cambie el campo `enableCodeHookInvocation` a `true` para que Amazon Lex V2 permita que el enlace de código se ejecute con normalidad. Si lo marca como `false`, Amazon Lex V2 actúa como si el enlace de código se hubiera devuelto correctamente.
+ La `invocationLabel` indica el paso de diálogo desde el que se invoca el enlace de código.
+ Utilice el campo `postCodeHookSpecification` para especificar las acciones y los mensajes que se producen después de que el enlace de código se ejecute correctamente, falle o se agote el tiempo de espera.

## elicitationCodeHook
<a name="lambda-elicitation-code-hook"></a>

El campo `elicitationCodeHook` define la configuración del enlace de código que se ejecutará en caso de que sea necesario volver a activar una o varios slots. Este escenario puede ocurrir si la no se logra la obtención de slots o si se deniega la confirmación de intención. El `elicitationCodeHook` campo es un [ElicitationCodeHookInvocationSetting](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ElicitationCodeHookInvocationSetting.html)objeto con la siguiente estructura:

```
"elicitationCodeHook": {
    "enableCodeHookInvocation": boolean,
    "invocationLabel": string
}
```
+ Cambie el campo `enableCodeHookInvocation` a `true` para que Amazon Lex V2 permita que el enlace de código se ejecute con normalidad. Si lo marca como `false`, Amazon Lex V2 actúa como si el enlace de código se hubiera devuelto correctamente.
+ La `invocationLabel` indica el paso de diálogo desde el que se invoca el enlace de código.

## fulfillmentCodeHook
<a name="lambda-fulfillment-code-hook"></a>

El campo `fulfillmentCodeHook` define la configuración para que el enlace de código se ejecute para cumplir la intención. Se asigna al siguiente [FulfillmentCodeHookSettings](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_FulfillmentCodeHookSettings.html)objeto:

```
"fulfillmentCodeHook": {
    "active": boolean,
    "enabled": boolean,
    "fulfillmentUpdatesSpecification": [FulfillmentUpdatesSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_FulfillmentUpdatesSpecification.html),
    "postFulfillmentStatusSpecification": [PostFulfillmentStatusSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_PostFulfillmentStatusSpecification.html)
}
```
+ Cambie el campo `active` a `true` para que Amazon Lex V2 llame al enlace de código en ese momento de la conversación.
+ Cambie el campo `enabled` a `true` para que Amazon Lex V2 permita que el enlace de código se ejecute con normalidad. Si lo marca como `false`, Amazon Lex V2 actúa como si el enlace de código se hubiera devuelto correctamente.
+ Utilice el campo `fulfillmentUpdatesSpecification` para especificar los mensajes que parecen para actualizar al usuario durante el cumplimiento de la intención y tiempo asociado a ellos.
+ Utilice el campo `postFulfillmentStatusSpecification` para especificar los mensajes y las acciones que se producen después de que el enlace de código se ejecute correctamente, falle o se agote el tiempo de espera.

Puede invocar el enlace de código Lambda en los siguientes puntos de una conversación configurando los campos `active` y `enableCodeHookInvocation`/`enabled` en `true`:

## Durante la respuesta inicial
<a name="lambda-hook-initial-response"></a>

Para invocar la función Lambda en la respuesta inicial después de reconocer la intención, utilice `codeHook` la estructura del campo de `initialResponse` [CreateIntent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_CreateIntent.html)la [UpdateIntent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_UpdateIntent.html)operación o. El `initialResponse` campo se asigna al siguiente objeto: [InitialResponseSetting](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_InitialResponseSetting.html)

```
"initialResponse": {
    "codeHook": {
        "active": boolean,
        "enableCodeHookInvocation": boolean,
        "invocationLabel": string,
        "postCodeHookSpecification": [PostDialogCodeHookInvocationSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_PostDialogCodeHookInvocationSpecification.html),
    },
    "initialResponse": [FulfillmentUpdatesSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_FulfillmentUpdatesSpecification.html),
    "nextStep": [PostFulfillmentStatusSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_PostFulfillmentStatusSpecification.html),
    "conditional": [ConditionalSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ConditionalSpecification.html)
}
```

## Después de la obtención de slots o durante la reactivación de slots
<a name="lambda-hook-elicit-slot"></a>

Para invocar la función Lambda después de obtener un valor de ranura, utilice `slotCaptureSetting` el campo dentro del campo de `valueElicitation` [CreateSlot](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_CreateSlot.html)la operación o. [UpdateSlot](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_UpdateSlot.html) El `slotCaptureSetting` campo se asigna al siguiente objeto: [SlotCaptureSetting](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_SlotCaptureSetting.html)

```
"slotCaptureSetting": {
    "captureConditional": [ConditionalSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ConditionalSpecification.html),
    "captureNextStep": [DialogState object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_DialogState.html),
    "captureResponse": [ResponseSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ResponseSpecification.html),
    "codeHook": {
        "active": true,
        "enableCodeHookInvocation": true,
        "invocationLabel": string,
        "postCodeHookSpecification": [PostDialogCodeHookInvocationSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_PostDialogCodeHookInvocationSpecification.html),
    },
    "elicitationCodeHook": {
        "enableCodeHookInvocation": boolean,
        "invocationLabel": string
    },
    "failureConditional": [ConditionalSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ConditionalSpecification.html),
    "failureNextStep": [DialogState object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_DialogState.html),
    "failureResponse": [ResponseSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ResponseSpecification.html)
}
```
+ Para invocar la función de Lambda después de que la obtención de slots se haya realizado correctamente, utilice el campo `codeHook`.
+ Para invocar la función de Lambda después de que se produzca un error en la obtención de slots y Amazon Lex V2 intente volver a intentar la obtención de slots, utilice el campo `elicitationCodeHook`.

## Tras la confirmación o denegación de la intención
<a name="lambda-hook-confirm-intent"></a>

Para invocar la función Lambda al confirmar una intención, utilice `intentConfirmationSetting` el campo de [CreateIntent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_CreateIntent.html)la [UpdateIntent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_UpdateIntent.html)operación o. El `intentConfirmation` campo se asigna al siguiente objeto: [IntentConfirmationSetting](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_IntentConfirmationSetting.html)

```
"intentConfirmationSetting": {
    "active": boolean,
    "codeHook": {
        "active": boolean,
        "enableCodeHookInvocation": boolean,
        "invocationLabel": string,
        "postCodeHookSpecification": [PostDialogCodeHookInvocationSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_PostDialogCodeHookInvocationSpecification.html),
    },
    "confirmationConditional": [ConditionalSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ConditionalSpecification.html),
    "confirmationNextStep": [DialogState object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_DialogState.html),
    "confirmationResponse": [ResponseSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_DialResponseSpecificationogState.html),
    "declinationConditional": [ConditionalSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ConditionalSpecification.html),
    "declinationNextStep": [FulfillmentUpdatesSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_FulfillmentUpdatesSpecification.html),
    "declinationResponse": [PostFulfillmentStatusSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_PostFulfillmentStatusSpecification.html),
    "elicitationCodeHook": {
        "enableCodeHookInvocation": boolean,
        "invocationLabel": string,
    },
    "failureConditional": [ConditionalSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ConditionalSpecification.html),
    "failureNextStep": [DialogState object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_DialogState.html),
    "failureResponse": [ResponseSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ResponseSpecification.html),
    "promptSpecification": [PromptSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_PromptSpecification.html)
}
```
+ Para invocar la función de Lambda después de que el usuario confirme la intención y sus slots, utilice el campo `codeHook`.
+ Para invocar la función de Lambda después de que el usuario rechace la confirmación de la intención y Amazon Lex V2 intente volver a intentar la obtención de slots, utilice el campo `elicitationCodeHook`.

## Durante el cumplimiento de la intención
<a name="lambda-hook-fulfill-intent"></a>

Para invocar la función Lambda para cumplir una intención, utilice `fulfillmentCodeHook` el campo de la operación o. [CreateIntent[UpdateIntent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_UpdateIntent.html)](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_CreateIntent.html) El `fulfillmentCodeHook` campo se asigna al siguiente objeto: [FulfillmentCodeHookSettings](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_FulfillmentCodeHookSettings.html)

```
{
    "active": boolean,
    "enabled": boolean,
    "fulfillmentUpdatesSpecification": [FulfillmentUpdatesSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_FulfillmentUpdatesSpecification.html),
    "postFulfillmentStatusSpecification": [PostFulfillmentStatusSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_PostFulfillmentStatusSpecification.html)
}
```

3. Una vez que haya establecido las etapas de conversación en las que se invocará la función de Lambda, utilice la operación `BuildBotLocale` para volver a compilar el bot para probar la función.

# Depuración de una función Lambda mediante registros CloudWatch
<a name="lambda-debug"></a>

[Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) es una herramienta de seguimiento de las llamadas y métricas de la API que puede utilizar para depurar las funciones de Lambda. Cuando pruebas tu bot en la consola o con llamadas a la API, CloudWatch registra cada paso de la conversación. Si utiliza una función de impresión en el código Lambda, también la CloudWatch muestra.

**Para ver CloudWatch los registros de la función Lambda**

1. Inicie sesión en la consola de administración de AWS y abra la CloudWatch consola en [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. En el menú **Registros** de la barra lateral izquierda, seleccione **Grupos de registros**.

1. Seleccione el grupo de registros de funciones de Lambda, que debe tener el formato `/aws/lambda/function-name`.

1. La lista de **Flujos de registro** contiene un registro para cada sesión con un bot. Seleccione el flujo de registros que desea ver.

1. En la lista de **Eventos de registro**, seleccione la flecha derecha situada junto a la **Marca de tiempo** para ampliar los detalles de ese evento. Todo lo que imprima desde el código Lambda aparecerá como un evento de registro. Utilice esta información para depurar el código.

1. Tras depurar el código, recuerde **Implementar** la función de Lambda y, si utiliza la consola, volver a cargar la ventana de **Prueba** antes de volver a probar el compartimento del bot.