

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á.

# Noções básicas sobre sessões de bots do Amazon Lex V2
<a name="managing-sessions"></a>

Quando um usuário inicia uma conversa com seu bot, o Amazon Lex V2 cria uma *sessão*. As informações trocadas entre a aplicação e o Amazon Lex V2 compõem o estado da sessão para a conversa. Quando você faz uma solicitação, a sessão é identificada por um identificador especificado por você. Para mais informações sobre o identificador de sessão, consulte o campo `sessionId` na operação [RecognizeText](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_RecognizeText.html) ou [RecognizeUtterance](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_RecognizeUtterance.html).

É possível modificar o estado da sessão enviado entre o aplicativo e o bot. Por exemplo, você pode criar e modificar os atributos que contêm informações personalizadas sobre a sessão e alterar o fluxo da conversa definindo o contexto de diálogo para interpretar a próxima declaração.

Há três maneiras de atualizar o estado da sessão. 
+ Passe as informações da sessão em linha como parte de uma chamada para a operação `RecognizeUtterance` ou `RecognizeText`.
+ Use uma função do Lambda com a operação `RecognizeText` ou `RecognizeUtterance` que é chamada a cada turno da conversa. Para obter mais informações, consulte [Integrando uma AWS Lambda função ao seu bot Amazon Lex V2](lambda.md). A outra é usar a API de runtime do Amazon Lex V2 na sua aplicação para fazer alterações no estado da sessão. 
+ Use operações que permitem gerenciar informações da sessão para uma conversa com o bot. As operações são [PutSession](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_PutSession.html), [GetSession](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_GetSession.html) e [DeleteSession](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_DeleteSession.html). Você pode usar essas operações para obter informações sobre o estado da sessão do seu usuário com o bot e ter um controle apurado sobre o estado.

Use a operação `GetSession` quando desejar obter o estado atual da sessão. A operação retorna o estado atual da sessão, incluindo o estado do diálogo com o usuário, todos os atributos de sessão que foram definidos e valores de slot da intenção atual e quaisquer outras intenções que o Amazon Lex V2 identificou como possíveis intenções que correspondem ao enunciado do usuário.

A operação `PutSession` permite manipular diretamente o estado da sessão atual. Você pode definir a sessão, incluindo o tipo de ação de diálogo que o bot executará em seguida e as mensagens que o Amazon Lex V2 enviará ao usuário. Isso oferece a você controle sobre o fluxo da conversa com o bot. Defina o campo `type` da ação de diálogo como `Delegate` para que o Amazon Lex V2 determine a próxima ação do bot.

Você pode usar a operação `PutSession` para criar uma nova sessão com um bot e definir a intenção com a qual ele deve começar. Também é possível usar a operação `PutSession` para mudar de uma intenção para outra. Ao criar uma sessão ou alterar a intenção, você também pode definir o estado da sessão, como valores de slot e atributos de sessão. Quando a nova intenção é concluída, você tem a opção de reiniciar a intenção anterior. 

A resposta da operação `PutSession` contém as mesmas informações que a operação `RecognizeUtterance`. Você pode usar essas informações para solicitar a próxima informação ao usuário, da mesma forma que faria com a resposta da operação `RecognizeUtterance`.

Use a operação `DeleteSession` para remover uma sessão existente e começar de novo com uma nova sessão. Por exemplo, ao testar seu bot, você pode usar a operação `DeleteSession` para remover as sessões de teste do seu bot.

As operações de sessão trabalham com as funções do Lambda de atendimento. Por exemplo, se sua função do Lambda retornar `Failed` como o estado de atendimento, você poderá usar a operação `PutSession` para definir o tipo de ação de diálogo como `close` e `fulfillmentState` como `ReadyForFulfillment` para repetir a etapa de atendimento.

Veja a seguir algumas ações que você pode executar com as operações de sessão:
+ Fazer com que o bot inicie uma conversa em vez de esperar pelo usuário.
+ Alternar entre as intenções durante uma conversa.
+ Voltar para uma intenção anterior.
+ Iniciar ou reiniciar uma conversa no meio da interação.
+ Validar valores de slot e fazer com que o bot solicite novamente valores que não são válidos.

Cada uma delas é descrita com mais detalhes a seguir.

## Iniciar uma nova sessão
<a name="session-start"></a>

Se você desejar que o bot inicie a conversa com o usuário, use a operação `PutSession`. 
+ Crie uma intenção de boas-vindas sem slots e uma mensagem de conclusão solicitando que o usuário indique uma intenção. Por exemplo, "O que você gostaria de pedir? Você pode dizer "Pedir uma bebida" ou "Pedir uma pizza".
+ Chame a operação `PutSession`. Defina o nome da intenção como o nome da intenção de boas-vindas e defina a ação de diálogo como `Delegate`. 
+ O Amazon Lex responderá com o prompt da sua intenção de boas-vindas para iniciar a conversa com o usuário.

## Alternar intenções
<a name="session-switch"></a>

Você pode usar a operação `PutSession` para alternar de uma intenção para outra. Também é possível usá-la para voltar para uma intenção anterior. Você pode usar a operação `PutSession` para definir atributos de sessão ou valores de slot para a nova intenção.
+ Chame a operação `PutSession`. Defina o nome da intenção como o nome da nova intenção e defina a ação de diálogo como `Delegate`. Você também pode definir quaisquer valores de slot ou atributos de sessão necessários para a nova intenção.
+ O Amazon Lex iniciará uma conversa com o usuário utilizando a nova intenção.

## Retomar uma intenção anterior
<a name="session-return"></a>

Para retomar uma intenção anterior, use a operação `GetSession` para obter o estado da intenção, executar a interação necessária e, depois, use a operação `PutSession` para definir a intenção como seu estado de diálogo anterior.
+ Chame a operação `GetSession`. Armazene o estado da intenção.
+ Execute outra interação, como cumprir uma intenção diferente.
+ Usando as informações salvas para a intenção anterior, chame a operação `PutSession`. Isso retornará o usuário para a intenção anterior no mesmo local na conversa.

Em alguns casos, pode ser necessário retomar a conversa do usuário com o bot. Por exemplo, digamos que você tenha criado um bot de atendimento ao cliente. Seu aplicativo determina que o usuário precisa conversar com um representante de atendimento ao cliente. Depois de falar com o usuário, o representante poderá direcionar a conversa de volta para o bot com as informações coletadas.

Para retomar uma sessão, use etapas semelhantes a estas:
+ Seu aplicativo determina que o usuário precisa falar com um representante de atendimento ao cliente.
+ Use a operação `GetSession` para obter o estado de diálogo atual da intenção. 
+ O representante de atendimento ao cliente se comunica com o usuário e resolve o problema.
+ Use a operação `PutSession` para definir o estado de diálogo da intenção. Isso pode incluir definir valores de slot, definir atributos de sessão ou alterar a intenção.
+ O bot retoma a conversa com o usuário.

## Validar valores de slot
<a name="session-validation"></a>

Você pode validar as respostas ao bot usando seu aplicativo cliente. Se a resposta não for válida, use a operação `PutSession` para obter uma nova resposta do usuário. Por exemplo, suponha que seu bot de pedido de flores só possa vender tulipas, rosas e lírios. Se o usuário pedir cravos, o aplicativo poderá fazer o seguinte:
+ Examinar o valor do slot retornado pela resposta `PostText` ou `PostContent`.
+ Se o valor do slot não for válido, chame a operação `PutSession`. Seu aplicativo deve limpar o valor do slot, definir o campo `slotToElicit` e definir o valor `dialogAction.type` como `elicitSlot`. Você também poderá definir os campos `message` e `messageFormat` se desejar alterar a mensagem usada pelo Amazon Lex para obter o valor de slot.