

Aviso de fim do suporte: em 15 de setembro de 2025, o suporte para o Amazon Lex V1 AWS será interrompido. Após 15 de setembro de 2025, você não poderá mais acessar o console do Amazon Lex V1 nem os respectivos recursos. Se você estiver usando o Amazon Lex V2, consulte o [guia do Amazon Lex V2](https://docs.aws.amazon.com/lexv2/latest/dg/what-is.html) em vez disso. 

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Migração de uma função do Lambda do Amazon Lex V1 para o Amazon Lex V2
<a name="message-lambda"></a>

O Amazon Lex V2 permite somente uma função do Lambda para cada linguagem em um bot. A função do Lambda e suas configurações são definidas para o alias de bot que você usa no runtime. 

A função do Lambda é invocada para todas as intenções nessa linguagem se os hooks de diálogo e código de atendimento estiverem habilitados para a intenção.

As funções do Lambda do Amazon Lex V2 têm um formato de mensagem de entrada e saída diferente do Amazon Lex V1. Essas são as diferenças no formato de entrada da função do Lambda.
+ O Amazon Lex V2 substitui as estruturas `currentIntent` e `alternativeIntents` pela estrutura `interpretations`. Cada interpretação contém uma intenção, a pontuação de confiança da NLU para a intenção e uma análise de sentimento opcional.
+ O Amazon Lex V2 move o `activeContexts`, `sessionAttributes` no Amazon Lex V1 para a estrutura unificada `sessionState`. Essa estrutura fornece informações sobre o estado atual da conversa, incluindo o ID da solicitação de origem.
+ O Amazon Lex V2 não retorna o `recentIntentSummaryView`. Em vez disso, use as informações na estrutura `sessionState`.
+ A entrada do Amazon Lex V2 fornece o `botId` e o `localeId` no atributo `bot`.
+ A estrutura de entrada contém um atributo `inputMode` que fornece informações sobre o tipo de entrada: texto, fala ou DTMF.

Essas são as diferenças no formato de entrada da função do Lambda.
+ As estruturas `activeContexts` e `sessionAttributes` no Amazon Lex V1 são substituídas pela estrutura `sessionState` no Amazon Lex V2.
+ A `recentIntentSummaryView` não é incluída na saída:
+ A estrutura `dialogAction` do Amazon Lex V1 é dividida em duas estruturas, `dialogAction` que faz parte da estrutura `sessionState`, e `messages` que é necessária quando `dialogAction.type` é `ElicitIntent`. O Amazon Lex escolhe mensagens dessa estrutura para mostrar ao usuário.

Quando você cria um bot com o Amazon Lex V2 APIs, há somente uma função Lambda por alias de bot por linguagem, em vez de uma função Lambda para cada intenção. Se quiser continuar usando funções separadas, você pode criar uma função de roteamento que ativa uma função separada para cada intenção. A seguir há uma função de roteamento que você pode usar ou modificar para seu aplicativo.

```
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 atualizados
<a name="lambda-migrating"></a>

As tabelas a seguir fornecem informações detalhadas sobre os campos atualizados na solicitação e na resposta do Amazon Lex V2. Você pode usar essas tabelas para mapear campos entre as versões.

### Solicitação
<a name="migrating-lambda-request"></a>

Os campos a seguir foram atualizados no formato de solicitação da função do Lambda.

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

A estrutura `activeContexts` agora faz parte da estrutura `sessionState`.


| Estrutura V1 | Estrutura V2 | 
| --- | --- | 
|  activeContexts  |  sessionState.activeContexts  | 
|  Contextos ativos [\$1]. timeToLive  |  SessionState.ActiveContexts [\$1]. timeToLive  | 
|  Contextos ativos [\$1]. timeToLive. timeToLiveInSeconds  |  SessionState.ActiveContexts [\$1]. timeToLive. timeToLiveInSeconds  | 
|  Contextos ativos [\$1]. timeToLive. turnsToLive  |  SessionState.ActiveContexts [\$1]. timeToLive. turnsToLive  | 
|  activeContexts[\$1].name  |  sessionState.activeContexts[\$1].name  | 
|  activeContexts[\$1].parameters  |  sessionState.activeContexts[\$1].contextAttributes  | 

#### Intenções alternativas
<a name="lambda-migrating-alternative"></a>

A lista de interpretações do índice 1 ao N contém a lista de intenções alternativas previstas pelo Amazon Lex V2, junto com suas pontuações de confiança. O `recentIntentSummaryView` é removido da estrutura de solicitações no Amazon Lex V2. Para ver os detalhes do `recentIntentSummaryView`, use a operação [GetSession](API_runtime_GetSession.md).


| Estrutura V1 | Estrutura V2 | 
| --- | --- | 
|  alternativeIntents  |  interpretations[1:\$1]  | 
|  recentIntentSummaryExibir  |  N/D  | 

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

No Amazon Lex V2, bots e aliases têm identificadores. O ID do bot faz parte da entrada do codehook. O ID do alias está incluído, mas não o nome do alias. O Amazon Lex V2 oferece suporte a várias localidades para o mesmo bot, portanto, a ID de localidade é incluída.


| Estrutura V1 | Estrutura V2 | 
| --- | --- | 
|  bot  |  bot  | 
|  bot.name  |  bot.name  | 
|  N/D  |  bot.id  | 
|  bot.alias  |  N/D  | 
|  N/D  |  bot.aliasId  | 
|  bot.version  |  bot.version  | 
|  N/D  |  bot.localeId  | 

#### Intenção atual
<a name="lambda-migrating-intent"></a>

A `sessionState.intent` estrutura contém os detalhes da intenção ativa. O Amazon Lex V2 também retorna uma lista de todas as intenções, incluindo intenções alternativas, na estrutura `interpretations`. O primeiro elemento na lista de interpretações é sempre o mesmo que `sessionState.intent`.


| Estrutura V1 | Estrutura V2 | 
| --- | --- | 
|  currentIntent  |  sessionState.intent OU interpretations[0].intent  | 
|  currentIntent.name  |  sessionState.intent.name OU interpretations[0].intent.name  | 
|  CurrentIntent. nluConfidenceScore  |  interpretations[0].nluConfidence.score  | 

#### Ação do diálogo
<a name="lambda-migrating-dialog"></a>

O campo `confirmationStatus` agora faz parte da estrutura `sessionState`.


| Estrutura V1 | Estrutura V2 | 
| --- | --- | 
|  currentIntent.confirmationStatus  |  sessionState.intent.confirmationState OU interpretations[0].intent.confirmationState  | 
|  N/D  |  sessionState.intent.state OU interpretations[\$1].intent.state  | 

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

O campo `kendraResponse` agora faz parte das estruturas `sessionState` e `interpretations`.


| Estrutura V1 | Estrutura V2 | 
| --- | --- | 
|  kendraResponse  |  sessionState.intent.kendraResponse OU interpretations[0].intent.kendraResponse  | 

#### Sentimento
<a name="lambda-migrating-sentiment"></a>

A estrutura `sentimentResponse` é movida para a nova estrutura `interpretations`.


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

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

O Amazon Lex V2 fornece um único objeto `slots` dentro da estrutura `sessionState.intent` que contém os valores resolvidos, o valor interpretado e o valor original do que o usuário disse. O Amazon Lex V2 também oferece suporte a slots de vários valores definindo o `slotShape` como `List` e definindo a lista `values`. Os slots de valor único são compatíveis pelo campo `value`, presume-se que sua forma seja `Scalar`.


| Estrutura V1 | Estrutura V2 | 
| --- | --- | 
|  currentIntent.slots  |  sessionState.intent.slots OU interpretations[0].intent.slots  | 
|  currentIntent.slots[\$1].value  |  sessionState.intent.slots[\$1].value.interpretedValue OU interpretations[0].intent.slots[\$1].value.interpretedValue  | 
|  N/D  |  sessionState.intent.slots[\$1].value.shape OU interpretations[0].intent.slots[\$1].shape  | 
|  N/D  |  sessionState.intent.slots[\$1].values OU interpretations[0].intent.slots[\$1].values  | 
|  currentIntent.slotDetails  |  sessionState.intent.slots OU interpretations[0].intent.slots  | 
|  currentIntent.slotDetails[\$1].resolutions  |  sessionState.intent.slots[\$1].resolvedValues OU interpretations[0].intent.slots[\$1].resolvedValues  | 
|  currentIntent.slotDetails[\$1].originalValue  |  sessionState.intent.slots[\$1].originalValue OU interpretations[0].intent.slots[\$1].originalValue  | 

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

O campo `sessionId` do Amazon Lex V2 é igual ao campo `userId` no Amazon Lex V1. O Amazon Lex V2 também envia o nome `inputMode` do chamador: texto, DTMF ou fala.


| Estrutura V1 | Estrutura V2 | 
| --- | --- | 
|  userId  |  sessionId  | 
|  inputTranscript  |  inputTranscript  | 
|  invocationSource  |  invocationSource  | 
|  outputDialogMode  |  responseContentType  | 
|  messageVersion  |  messageVersion  | 
|  sessionAttributes  |  sessionState.sessionAttributes  | 
|  requestAttributes  |  requestAttributes  | 
|  N/D  |  inputMode  | 
|  N/D  |  originatingRequestId  | 

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

Os campos a seguir foram atualizados no formato de solicitação da função do Lambda.

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

A estrutura `activeContexts` é movida para a estrutura `sessionState`.


| Estrutura V1 | Estrutura V2 | 
| --- | --- | 
|  activeContexts  |  sessionState.activeContexts  | 
|  Contextos ativos [\$1]. timeToLive  |  SessionState.ActiveContexts [\$1]. timeToLive  | 
|  Contextos ativos [\$1]. timeToLive. timeToLiveInSeconds  |  SessionState.ActiveContexts [\$1]. timeToLive. timeToLiveInSeconds  | 
|  Contextos ativos [\$1]. timeToLive. turnsToLive  |  SessionState.ActiveContexts [\$1]. timeToLive. turnsToLive  | 
|  activeContexts[\$1].name  |  sessionState.activeContexts[\$1].name  | 
|  activeContexts[\$1].parameters  |  sessionState.activeContexts[\$1].contextAttributes  | 

#### Ação do diálogo
<a name="lambda-migrating-response-dialog"></a>

A estrutura `dialogAction` é movida para a estrutura `sessionState`. Agora você pode especificar múltiplas mensagens em uma ação de diálogo, e a estrutura `genericAttachments` agora é a estrutura `imageResponseCard`.


| Estrutura V1 | Estrutura V2 | 
| --- | --- | 
|  dialogAction  |  sessionState.dialogAction  | 
|  dialogAction.type  |  sessionState.dialogAction.type  | 
|  DialogAction. slotToElicit  |  SessionState.Intent.DialogAction. slotToElicit  | 
|  dialogAction.type.fulfillmentState  |  sessionState.intent.state  | 
|  dialogAction.message  |  messages  | 
|  dialogAction.message.contentType  |  messages[\$1].contentType  | 
|  dialogAction.message.content  |  messages[\$1].content  | 
|  dialogAction.responseCard  |  mensagens [\$1]. imageResponseCard  | 
|  dialogAction.responseCard.version  |  N/D  | 
|  dialogAction.responseCard.contentType  |  messages[\$1].contentType  | 
|  dialogAction.responseCard.genericAttachments  |  N/D  | 
|  dialogAction.responseCard.genericAttachments[\$1].title  |  mensagens [\$1]. imageResponseCard.título  | 
|  dialogAction.responseCard.genericAttachments[\$1].subTitle  |  mensagens [\$1]. imageResponseCard.subtítulo  | 
|  dialogAction.responseCard.genericAttachments[\$1].imageUrl  |  mensagens [\$1]. imageResponseCard.URL da imagem  | 
|  dialogAction.responseCard.genericAttachments[\$1].buttons  |  mensagens [\$1]. imageResponseCard.botões  | 
|  dialogAction.responseCard.genericAttachments[\$1].buttons[\$1].value  |  mensagens [\$1]. imageResponseCard.botões [\$1] .valor  | 
|  dialogAction.responseCard.genericAttachments[\$1].buttons[\$1].text  |  mensagens [\$1]. imageResponseCard.botões [\$1] .texto  | 
|  DialogAction. kendraQueryRequestCarga útil  |  DialogAction. kendraQueryRequestCarga útil  | 
|  DialogAction. kendraQueryFilterCadeia  |  DialogAction. kendraQueryFilterCadeia  | 

#### Intenções e slots
<a name="lambda-migrating-response-slots"></a>

Os campos de intenção e slots que faziam parte da estrutura `dialogAction` agora fazem parte da estrutura `sessionState`.


| Estrutura V1 | Estrutura 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/D  |  sessionState.intent.slots[\$1].value.shape  | 
|  N/D  |  sessionState.intent.slots[\$1].values  | 

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

A estrutura `sessionAttributes` agora faz parte da estrutura `sessionState`. A estrutura `recentIntentSummaryReview` não existe mais.


| Estrutura V1 | Estrutura V2 | 
| --- | --- | 
|  sessionAttributes  |  sessionState.sessionAttributes  | 
|  recentIntentSummaryExibir  |  N/D  | 