

Aviso de fin de soporte: el 15 de septiembre de 2025, AWS dejaremos de ofrecer soporte para Amazon Lex V1. Después del 15 de septiembre de 2025, ya no podrá acceder a la consola de Amazon Lex V1 ni a los recursos de Amazon Lex V1. Si utiliza Amazon Lex V2, consulte en su lugar la [guía Amazon Lex V2](https://docs.aws.amazon.com/lexv2/latest/dg/what-is.html). 

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.

# Migración de una función de Lambda de Amazon Lex V1 a Amazon Lex V2
<a name="message-lambda"></a>

Amazon Lex V2 solo admite una función de Lambda para cada idioma en un bot. La función de Lambda y sus valores se configuran para el alias del bot que se utiliza en tiempo de ejecución. 

La función de Lambda se invoca para todas las intenciones en el idioma correspondiente si los enlaces de código de diálogo y de cumplimiento están habilitados para la intención.

Las funciones de Lambda de Amazon Lex V2 tienen un formato de mensaje de entrada y de salida diferente al de Amazon Lex V1. A continuación se indican las diferencias en lo que respecta al formato de entrada de las funciones de Lambda.
+ Amazon Lex V2 reemplaza las estructuras `currentIntent` y `alternativeIntents` por la estructura `interpretations`. Cada interpretación contiene una intención, la puntuación de confianza de NLU para dicha intención y un análisis de opiniones opcional.
+ Amazon Lex V2 mueve los objetos `activeContexts` y `sessionAttributes` de Amazon Lex V1 a la estructura `sessionState` unificada. Esta estructura proporciona información acerca del estado actual de la conversación, incluido el ID de la solicitud de origen.
+ Amazon Lex V2 no devuelve `recentIntentSummaryView`. En su lugar, utilice la información de la estructura `sessionState`.
+ La entrada de Amazon Lex V2 proporciona `botId` y `localeId` en el atributo `bot`.
+ La estructura de entrada contiene un atributo `inputMode` que proporciona información acerca del tipo de entrada, que puede ser texto, voz o DTMF.

A continuación se indican las diferencias en lo que respecta al formato de salida de las funciones de Lambda.
+ Las estructuras `activeContexts` y `sessionAttributes` de Amazon Lex V1 se reemplazan por la estructura `sessionState` en Amazon Lex V2.
+ `recentIntentSummaryView` no se incluye en el resultado.
+ La estructura `dialogAction` de Amazon Lex V1 se divide en dos estructuras: `dialogAction`, que forma parte de la estructura `sessionState`, y `messages`, que se requiere cuando `dialogAction.type` es `ElicitIntent`. Amazon Lex selecciona los mensajes de esta estructura para mostrárselos al usuario.

Cuando crea un bot con Amazon Lex V2 APIs, solo hay una función Lambda por alias de bot por idioma, en lugar de una función Lambda para cada intención. Si desea continuar usando funciones distintas, puede crear una función de enrutamiento que active una función distinta para cada intención. A continuación se muestra un ejemplo de función de enrutamiento que puede utilizar o modificar en 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
```

## Lista de campos actualizados
<a name="lambda-migrating"></a>

En las siguientes tablas se incluye información detallada sobre los campos actualizados en el formato de solicitud y respuesta de Lambda para Amazon Lex V2. Utilice las tablas para asignar campos entre versiones.

### Solicitud
<a name="migrating-lambda-request"></a>

Los campos siguientes se han actualizado en el formato de solicitud de las funciones de Lambda.

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

La estructura `activeContexts` ahora forma parte de la estructura `sessionState`.


| Estructura de V1 | Estructura de V2 | 
| --- | --- | 
|  activeContexts  |  sessionState.activeContexts  | 
|  ActiveContexts [\$1]. timeToLive  |  Estado de sesión. Contextos activos [\$1]. timeToLive  | 
|  Contextos activos [\$1]. timeToLive. timeToLiveInSeconds  |  Estado de sesión. Contextos activos [\$1]. timeToLive. timeToLiveInSeconds  | 
|  Contextos activos [\$1]. timeToLive. turnsToLive  |  Estado de sesión. Contextos activos [\$1]. timeToLive. turnsToLive  | 
|  activeContexts[\$1].name  |  sessionState.activeContexts[\$1].name  | 
|  activeContexts[\$1].parameters  |  sessionState.activeContexts[\$1].contextAttributes  | 

#### Intenciones alternativas
<a name="lambda-migrating-alternative"></a>

La lista de interpretaciones del índice 1 al N contiene la lista de intenciones alternativas que Amazon Lex V2 ha predicho, junto con las puntuaciones de confianza correspondientes. `recentIntentSummaryView` se ha eliminado de la estructura de solicitud en Amazon Lex V2. Para obtener información acerca de `recentIntentSummaryView`, utilice la operación [GetSession](API_runtime_GetSession.md).


| Estructura de V1 | Estructura de V2 | 
| --- | --- | 
|  alternativeIntents  |  interpretations[1:\$1]  | 
|  recentIntentSummaryVer  |  N/A  | 

#### Bot
<a name="lambda-migrating-bot"></a>

En Amazon Lex V2, los bots y los alias cuentan con identificadores. El ID del bot forma parte de la entrada del enlace de código. Se incluye el ID del alias, pero no su nombre. Amazon Lex V2 admite varias configuraciones regionales para el mismo bot, por lo que se incluye el ID de la configuración regional.


| Estructura de V1 | Estructura de V2 | 
| --- | --- | 
|  bot  |  bot  | 
|  bot.name  |  bot.name  | 
|  N/A  |  bot.id  | 
|  bot.alias  |  N/A  | 
|  N/A  |  bot.aliasId  | 
|  bot.version  |  bot.version  | 
|  N/A  |  bot.localeId  | 

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

La estructura `sessionState.intent` contiene los detalles de la intención activa. Amazon Lex V2 también devuelve una lista con todas las intenciones, incluidas intenciones alternativas, en la estructura `interpretations`. El primer elemento de la lista de interpretaciones coincide con el primer elemento de `sessionState.intent`.


| Estructura de V1 | Estructura de V2 | 
| --- | --- | 
|  currentIntent  |  sessionState.intent O interpretations[0].intent  | 
|  currentIntent.name  |  sessionState.intent.name O interpretations[0].intent.name  | 
|  CurrentIntent. nluConfidenceScore  |  interpretations[0].nluConfidence.score  | 

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

El campo `confirmationStatus` ahora forma parte de la estructura `sessionState`.


| Estructura de V1 | Estructura de V2 | 
| --- | --- | 
|  currentIntent.confirmationStatus  |  sessionState.intent.confirmationState O interpretations[0].intent.confirmationState  | 
|  N/A  |  sessionState.intent.state O interpretations[\$1].intent.state  | 

#### Amazon Kendra
<a name="lambda-migrating-kendra"></a>

El campo `kendraResponse` ahora forma parte de las estructuras `sessionState` y `interpretations`.


| Estructura de V1 | Estructura de V2 | 
| --- | --- | 
|  kendraResponse  |  sessionState.intent.kendraResponse O interpretations[0].intent.kendraResponse  | 

#### Opinión
<a name="lambda-migrating-sentiment"></a>

La estructura `sentimentResponse` se mueve a la nueva estructura `interpretations`.


| Estructura de V1 | Estructura de V2 | 
| --- | --- | 
|  sentimentResponse  |  interpretations[0].sentimentResponse  | 
|  sentimentResponse.sentimentLabel  |  interpretations[0].sentimentResponse.sentiment  | 
|  sentimentResponse.sentimentScore  |  interpretations[0].sentimentResponse.sentimentScore  | 

#### Ranuras
<a name="lambda-migrating-slots"></a>

Amazon Lex V2 proporciona un solo objeto `slots` en el interior de la estructura `sessionState.intent` que contiene los valores resueltos, el valor interpretado y el valor original de lo que ha dicho el usuario. Amazon Lex V2 también admite ranuras con múltiples valores si se establece `slotShape` como `List` y si se configura la lista `values`. El campo `value` admite ranuras con un solo valor y se asume que su forma es `Scalar`.


| Estructura de V1 | Estructura de V2 | 
| --- | --- | 
|  currentIntent.slots  |  sessionState.intent.slots O interpretations[0].intent.slots  | 
|  currentIntent.slots[\$1].value  |  sessionState.intent.slots[\$1].value.interpretedValue O interpretations[0].intent.slots[\$1].value.interpretedValue  | 
|  N/A  |  sessionState.intent.slots[\$1].value.shape O interpretations[0].intent.slots[\$1].shape  | 
|  N/A  |  sessionState.intent.slots[\$1].values O interpretations[0].intent.slots[\$1].values  | 
|  currentIntent.slotDetails  |  sessionState.intent.slots O interpretations[0].intent.slots  | 
|  currentIntent.slotDetails[\$1].resolutions  |  sessionState.intent.slots[\$1].resolvedValues O interpretations[0].intent.slots[\$1].resolvedValues  | 
|  currentIntent.slotDetails[\$1].originalValue  |  sessionState.intent.slots[\$1].originalValue O interpretations[0].intent.slots[\$1].originalValue  | 

#### Otros
<a name="lambda-migrating-other"></a>

El campo `sessionId` de Amazon Lex V2 es el mismo que el campo `userId` de Amazon Lex V1. Amazon Lex V2 también envía el objeto `inputMode` de la persona que llama: texto, DTMF o voz.


| Estructura de V1 | Estructura de V2 | 
| --- | --- | 
|  userId  |  sessionId  | 
|  inputTranscript  |  inputTranscript  | 
|  invocationSource  |  invocationSource  | 
|  outputDialogMode  |  responseContentType  | 
|  messageVersion  |  messageVersion  | 
|  sessionAttributes  |  sessionState.sessionAttributes  | 
|  requestAttributes  |  requestAttributes  | 
|  N/A  |  inputMode  | 
|  N/A  |  originatingRequestId  | 

### Respuesta
<a name="migrating-lambda-response"></a>

Los campos siguientes se han modificado en el formato de mensaje de respuesta de las funciones de Lambda.

#### Contextos activos
<a name="lambda-migrating-resonse-context"></a>

La estructura `activeContexts` se mueve a la estructura `sessionState`.


| Estructura de V1 | Estructura de V2 | 
| --- | --- | 
|  activeContexts  |  sessionState.activeContexts  | 
|  Contextos activos [\$1]. timeToLive  |  Estado de sesión. Contextos activos [\$1]. timeToLive  | 
|  Contextos activos [\$1]. timeToLive. timeToLiveInSeconds  |  Estado de sesión. Contextos activos [\$1]. timeToLive. timeToLiveInSeconds  | 
|  Contextos activos [\$1]. timeToLive. turnsToLive  |  Estado de sesión. Contextos activos [\$1]. timeToLive. turnsToLive  | 
|  activeContexts[\$1].name  |  sessionState.activeContexts[\$1].name  | 
|  activeContexts[\$1].parameters  |  sessionState.activeContexts[\$1].contextAttributes  | 

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

La estructura `dialogAction` se mueve a la estructura `sessionState`. Ahora puede especificar varios mensajes en una acción de diálogo. La estructura `genericAttachments` es ahora la estructura `imageResponseCard`.


| Estructura de V1 | Estructura de V2 | 
| --- | --- | 
|  Acción de diálogo  |  sessionState.dialogAction  | 
|  dialogAction.type  |  sessionState.dialogAction.type  | 
|  DialogAction. slotToElicit  |  Estado de sesión. Intent.DialogAction. slotToElicit  | 
|  dialogAction.type.fulfillmentState  |  sessionState.intent.state  | 
|  dialogAction.message  |  Mensajes  | 
|  dialogAction.message.contentType  |  messages[\$1].contentType  | 
|  dialogAction.message.content  |  messages[\$1].content  | 
|  dialogAction.responseCard  |  mensajes [\$1]. imageResponseCard  | 
|  dialogAction.responseCard.version  |  N/A  | 
|  dialogAction.responseCard.contentType  |  messages[\$1].contentType  | 
|  dialogAction.responseCard.genericAttachments  |  N/A  | 
|  dialogAction.responseCard.genericAttachments[\$1].title  |  mensajes [\$1]. imageResponseCard.título  | 
|  dialogAction.responseCard.genericAttachments[\$1].subTitle  |  mensajes [\$1]. imageResponseCard.subtítulo  | 
|  dialogAction.responseCard.genericAttachments[\$1].imageUrl  |  mensajes [\$1]. imageResponseCard.URL de la imagen  | 
|  dialogAction.responseCard.genericAttachments[\$1].buttons  |  mensajes [\$1]. imageResponseCard.botones  | 
|  dialogAction.responseCard.genericAttachments[\$1].buttons[\$1].value  |  mensajes [\$1]. imageResponseCard.botones [\$1] .valor  | 
|  dialogAction.responseCard.genericAttachments[\$1].buttons[\$1].text  |  mensajes [\$1]. imageResponseCard.botones [\$1] .texto  | 
|  DialogAction. kendraQueryRequestCarga útil  |  DialogAction. kendraQueryRequestCarga útil  | 
|  DialogAction. kendraQueryFilterCadena  |  DialogAction. kendraQueryFilterCadena  | 

#### Intenciones y ranuras
<a name="lambda-migrating-response-slots"></a>

Los campos de intención y ranura que formaban parte de la estructura `dialogAction` ahora forman parte de la estructura `sessionState`.


| Estructura de V1 | Estructura de V2 | 
| --- | --- | 
|  dialogAction.intentName  |  sessionState.intent.name  | 
|  dialogAction.slots  |  sessionState.intent.slots  | 
|  dialogAction.slots[\$1].key  |  sessionState.intent.slots[\$1].key  | 
|  dialogAction.slots[\$1].value  |  sessionState.intent.slots[\$1].value.interpretedValue  | 
|  N/A  |  sessionState.intent.slots[\$1].value.shape  | 
|  N/A  |  sessionState.intent.slots[\$1].values  | 

#### Otros
<a name="lambda-migrating-response-other"></a>

La estructura `sessionAttributes` ahora forma parte de la estructura `sessionState`. La estructura `recentIntentSummaryReview` se ha eliminado.


| Estructura de V1 | Estructura de V2 | 
| --- | --- | 
|  sessionAttributes  |  sessionState.sessionAttributes  | 
|  recentIntentSummaryVer  |  N/A  | 