

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

# Criar caminhos de conversação
<a name="building-paths"></a>

Normalmente, o Amazon Lex V2 gerencia o fluxo de conversas com seus usuários. Para bots simples, o fluxo padrão pode ser suficiente para criar uma boa experiência para seus usuários. No entanto, para bots mais complexos, talvez você queira assumir o controle da conversa e direcionar o fluxo para caminhos mais complexos.

Por exemplo, em um bot que reserva aluguel de carros, talvez você não alugue para motoristas mais jovens. Nesse caso, você pode criar uma condição para verificar se um motorista tem menos de uma certa idade e, em caso afirmativo, pular para a resposta de encerramento. 

![\[Um fluxograma mostrando o fluxo de conversa de um bot de aluguel de carros que não aluga para motoristas com menos de 24 anos.\]](http://docs.aws.amazon.com/pt_br/lexv2/latest/dg/images/conditional-flowchart.png)


Para criar essas interações, você pode configurar a próxima etapa em cada ponto da conversa, avaliar condições, definir valores e invocar hooks de código.

A ramificação condicional ajuda a criar caminhos para seus usuários por meio de interações complexas. É possível usar uma ramificação condicional a qualquer momento em que passar o controle da conversa para o seu bot. Por exemplo, você pode criar uma condição antes que o bot extraia o primeiro valor do slot, pode criar uma condição entre obter cada valor do slot ou pode criar uma condição antes que o bot encerre a conversa. Para obter uma lista dos locais em que você pode adicionar condições, consulte [Adicionar intenções](add-intents.md).

Quando você cria um bot, o Amazon Lex V2 cria um caminho padrão para a conversa com base na ordem de prioridade dos slots. Para personalizar o caminho da conversa, você pode modificar a próxima etapa em qualquer ponto da conversa. Para obter mais informações, consulte [Configurar as próximas etapas na conversa](paths-nextstep.md). 

Para criar caminhos alternativos com base nas condições, você pode usar uma ramificação condicional em qualquer ponto da conversa. Por exemplo, é possível criar uma condição antes que o bot obtenha o primeiro valor do slot. Você pode criar uma condição entre obter o valor de cada slot ou criar uma condição antes que o bot encerre a conversa. Para obter uma lista dos locais em que permitem adicionar condições, consulte [Adicionar condições às conversas ramificadas](paths-branching.md).

Você pode definir condições com base nos valores dos slots, nos atributos da sessão, no modo de entrada e na transcrição da entrada ou em uma resposta da Amazon Kendra. 

É possível configurar os valores de slots e dos atributos da sessão em qualquer momento da conversa. Para obter mais informações, consulte [Definir valores durante a conversa](paths-setting-values.md).

Você também pode definir a próxima ação como hook de código de diálogo para executar uma função do Lambda. Para obter mais informações, consulte [Invocar hook de código de diálogo](paths-code-hook.md). 

A imagem a seguir mostra a criação de um caminho para um slot no console. Neste exemplo, o Amazon Lex V2 exibirá o slot “age”. Se o valor do slot for menor que 24, o Amazon Lex V2 salta para a resposta de fechamento, caso contrário, o Amazon Lex V2 seguirá o caminho padrão.

![\[O console Amazon Lex V2 mostrando o editor de condições de um slot.\]](http://docs.aws.amazon.com/pt_br/lexv2/latest/dg/images/conditional-slot.png)


**nota**  
Em 17 de agosto de 2022, o Amazon Lex V2 lançou uma mudança na forma como as conversas são gerenciadas com o usuário. Essa alteração oferece mais controle sobre o caminho que o usuário percorre na conversa. Para obter mais informações, consulte [Alterações nos fluxos de conversas do Amazon Lex V2](understanding-new-flows.md). Os bots criados antes de 17 de agosto de 2022 não são compatíveis com mensagens de hook de código de diálogo, definição de valores, configuração das próximas etapas e adição de condições.

# Configurar as próximas etapas na conversa
<a name="paths-nextstep"></a>

Você pode configurar uma próxima etapa em cada estágio da conversa para criar conversas. Normalmente, o Amazon Lex V2 configura automaticamente as próximas etapas padrão para cada estágio da conversa de acordo com a seguinte ordem.

 Resposta inicial → Elicitação de slots → Confirmação (se ativa) → Cumprimento (se ativa) → Resposta de encerramento (se ativa) → Encerrar conversa

Você pode modificar as próximas etapas padrão e criar a conversa com base na experiência esperada do usuário. As próximas etapas a seguir podem ser configuradas em cada estágio da conversa:

**Ir para**
+ **Resposta inicial** — A conversa é reiniciada a partir do início da intenção. Você pode optar por ignorar a resposta inicial ao configurar a próxima etapa.
+ **Elicitar um espaço** — Você pode extrair qualquer espaço na intenção.
+ **Avalie as condições** — Você pode avaliar as condições e ramificar a conversa em qualquer etapa da conversa.
+ **Invocar hook de código de diálogo** — Você pode invocar a lógica de negócios em qualquer etapa.
+ **Confirme a intenção** — O usuário será solicitado a confirmar a intenção.
+ **Cumprir a intenção** — O cumprimento da intenção começará como a próxima etapa.
+ **Resposta** de encerramento — A resposta de encerramento será devolvida ao usuário.

**Mudar para**
+ **Intenção** — Você pode fazer a transição para uma intenção diferente e continuar a conversa com essa intenção. Também pode pular a resposta inicial da intenção ao fazer a transição.
+ **Intent: slot específico** — Você pode obter diretamente um slot específico em uma intenção diferente se já tiver capturado alguns valores de slot na intenção atual.

**Aguarde a entrada do usuário** — O bot espera que o usuário forneça informações para reconhecer qualquer nova intenção. Você pode configurar prompts como “Há mais alguma coisa em que eu possa ajudá-lo?” antes de definir a próxima etapa. O bot estará em estado de diálogo `ElicitIntent`.

**Encerrar conversa** — A conversa com o bot está encerrada.

**nota**  
Em 17 de agosto de 2022, o Amazon Lex V2 lançou uma mudança na forma como as conversas são gerenciadas com o usuário. Essa alteração oferece mais controle sobre o caminho que o usuário percorre na conversa. Para obter mais informações, consulte [Alterações nos fluxos de conversas do Amazon Lex V2](understanding-new-flows.md). Os bots criados antes de 17 de agosto de 2022 não são compatíveis com mensagens de hook de código de diálogo, definição de valores, configuração das próximas etapas e adição de condições.

# Definir valores durante a conversa
<a name="paths-setting-values"></a>

O Amazon Lex V2 oferece a capacidade de definir valores de slots e valores de atributos de sessão em cada etapa da conversa. Em seguida, você pode usar esses valores durante a conversa para avaliar as condições ou usá-los durante o cumprimento da intenção.

É possível definir valores de slot para a intenção atual. Se a próxima etapa da conversa for invocar outra intenção, você poderá definir valores de slot da nova intenção.

Se o slot atribuído não for preenchido ou se o caminho JSON não puder ser analisado, o atributo será definido como `null`.

Use a sintaxe a seguir ao usar valores de slot e atributos de sessão:
+ **Valores do slot** — coloque o nome do slot entre chaves (“\$1 \$1”). Para valores de slot na intenção atual, é só usar o nome do slot. Por exemplo, .`{slot}` Se estiver definindo um valor na próxima intenção, você deverá usar o nome da intenção e o nome do slot para identificar o slot. Por exemplo, .`{intent.slot}`

  Exemplos:
  +  `{PhoneNumber} = "1234567890"` 
  +  `{CheckBalance.AccountNumber} = "99999999"` 
  +  `{BookingID} = "ABC123"` 
  +  `{FirstName} = "John"` 

  O valor de um slot pode ser qualquer um dos seguintes:
  + uma string constante
  + um caminho JSON que se refere ao bloco de transcrições na resposta do Amazon Lex (para inglês-EUA e inglês-REINO UNIDO)
  + um atributo da sessão

  Exemplos:
  +  `{username} = "john.doe" ` 
  +  `{username_confidence} = $.transcriptions[0].transcriptionConfidence ` 
  +  `{username_slot_value} = [username] ` 
**nota**  
Os valores do slot também podem ser definidos como `null`. Se precisar extrair novamente um valor de slot que tenha sido preenchido, defina o valor como `null` antes de solicitar ao cliente o valor do slot novamente. Se o slot atribuído não for preenchido ou se o caminho JSON não puder ser analisado, o atributo será definido como `null`.
+ **Atributos da sessão** — coloque o nome do atributo entre colchetes (“[ ]”). Por exemplo, .`[sessionAttribute]`

  Exemplos:
  +  ` [username] = "john.doe" ` 
  +  ` [username_confidence] = $.transcriptions[0].transcriptionConfidence ` 
  +  ` [username_slot_value] = {username} ` 

  O valor do atributo de sessão pode ser qualquer um dos seguintes:
  + uma string constante
  + um caminho JSON que se refere ao bloco de transcrições na resposta do Amazon Lex (para inglês-EUA e inglês-REINO UNIDO)
  + uma referência de valor de slot
**nota**  
Se o slot atribuído não for preenchido ou se o caminho JSON não puder ser analisado, o atributo será definido como `null`.

**nota**  
Em 17 de agosto de 2022, o Amazon Lex V2 lançou uma mudança na forma como as conversas são gerenciadas com o usuário. Essa alteração oferece mais controle sobre o caminho que o usuário percorre na conversa. Para obter mais informações, consulte [Alterações nos fluxos de conversas do Amazon Lex V2](understanding-new-flows.md). Os bots criados antes de 17 de agosto de 2022 não são compatíveis com mensagens de hook de código de diálogo, definição de valores, configuração das próximas etapas e adição de condições.

# Adicionar condições às conversas ramificadas
<a name="paths-branching"></a>

Você pode usar a *ramificação condicional* para controlar o caminho que seu cliente percorre na conversa com seu bot. As condições podem ser definidas com base nos valores dos slots, nos atributos da sessão, no modo de entrada e na transcrição da entrada ou em uma resposta da Amazon Kendra.

É possível definir até quatro ramificações. Cada ramo tem uma condição que deve ser satisfeita para que o Amazon Lex V2 o siga. Se nenhuma das ramificações tiver sua condição satisfeita, uma padrão será seguida.

Ao definir uma ramificação, você define a ação que o Amazon Lex V2 deve realizar se as condições correspondentes a essa ramificação forem avaliadas como verdadeiras. Você pode definir usando qualquer um destes métodos:
+ Uma resposta enviada ao usuário.
+ Valores de slots a serem aplicados aos slots.
+ Valores de atributo de sessão para a sessão atual.
+ A próxima etapa da conversa. Para obter mais informações, consulte [Criar caminhos de conversação](building-paths.md).

![\[Você pode escolher opções diferentes para ramificação condicional.\]](http://docs.aws.amazon.com/pt_br/lexv2/latest/dg/images/conditional-choose.png)


Cada ramo condicional tem uma expressão booleana que deve ser satisfeita para que o Amazon Lex V2 o siga. Existem operadores booleanos, funções e operadores quantificadores e de comparação que podem ser usados para suas condições. Por exemplo, a condição a seguir retornará verdadeira se o slot \$1age\$1 for menor que 24.

```
{age} < 24
```

A condição a seguir retornará verdadeira se o slot de vários valores \$1toppings\$1 contiver a palavra “abacaxi”.

```
{toppings} CONTAINS "pineapple"
```

Você pode combinar vários operadores de comparação com um operador booleano para condições mais complexas. Por exemplo, a condição a seguir retorna verdadeira se o valor do slot \$1make\$1 for “Honda” e o valor do slot \$1model\$1 for “Civic”. Use parênteses para definir a ordem de avaliação.

```
({make} = "Honda") AND ({model} = "Civic")
```

Os tópicos a seguir fornecem detalhes sobre os operadores e funções de ramificação condicional.

**nota**  
Em 17 de agosto de 2022, o Amazon Lex V2 lançou uma mudança na forma como as conversas são gerenciadas com o usuário. Essa alteração oferece mais controle sobre o caminho que o usuário percorre na conversa. Para obter mais informações, consulte [Alterações nos fluxos de conversas do Amazon Lex V2](understanding-new-flows.md). Os bots criados antes de 17 de agosto de 2022 não são compatíveis com mensagens de hook de código de diálogo, definição de valores, configuração das próximas etapas e adição de condições.

**Topics**
+ [Operadores de comparação](#branching-comparison)
+ [Operadores booleanos](#branching-boolean)
+ [Operadores quantificadores](#branching-quentifier)
+ [Funções](#branching-function)
+ [Expressões condicionais](#sample-conditional-expressions)

## Operadores de comparação
<a name="branching-comparison"></a>

O Amazon Lex V2 oferece suporte aos seguintes operadores de comparação de condições:
+ Igual (=)
+ Não é igual (>)
+ Menor que (<)
+ Menor ou igual a (<=)
+ Maior que (>)
+ Maior ou igual a (>=)

Ao usar um operador de comparação, ele usa as seguintes regras.
+ O lado esquerdo deve ser uma referência. Por exemplo, para referenciar um valor de slot, você usa `{slotName}`. Para referenciar um valor de atributo de sessão, você usa `[attribute]`. Para o modo de entrada e a transcrição de entrada, você usa `$.inputMode` e `$.inputTranscript`.
+ O lado direito deve ser constante e do mesmo tipo do lado esquerdo.
+ Qualquer expressão que faça referência a um atributo que não tenha sido definido é tratada como inválida e não é avaliada.
+ Ao comparar um slot de vários valores, o valor usado é uma lista separada por vírgula de todos os valores interpretados.

As comparações são baseadas no tipo de slot da referência. Eles são resolvidos da seguinte forma:
+ **Strings**: strings são comparados com base em sua representação ASCII. A comparação diferencia maiúsculas de minúsculas.
+ **Números**: slots baseados em números são convertidos da representação da string em um número e depois comparados.
+ **Data/hora**: os slots baseados na hora são comparados com base na série temporal. A data ou hora anterior é considerada menor. Para durações, períodos mais curtos são considerados menores. 

## Operadores booleanos
<a name="branching-boolean"></a>

O Amazon Lex V2 oferece suporte a operadores booleanos para combinar operadores de comparação. Ele permite a criação declarações semelhantes às seguintes:

```
({number} >= 5) AND ({number} <= 10)
```

Você também pode usar as seguintes operações:
+ E (&&)
+ OU (\$1\$1)
+ NÃO (\$1)

## Operadores quantificadores
<a name="branching-quentifier"></a>

Os operadores quantificadores avaliam os elementos de uma sequência e determinam se um ou mais elementos satisfazem a condição.
+ **CONTÉM**: determina se o valor especificado está contido em um slot de vários valores e retorna verdadeiro se estiver. Por exemplo, `{toppings} CONTAINS "pineapple"` retorna verdadeiro se o usuário pediu abacaxi em sua pizza.

## Funções
<a name="branching-function"></a>

As funções devem ser prefixadas com a string `fn.`. O argumento para a função é uma referência a um slot, atributo de sessão ou atributo de solicitação. O Amazon Lex V2 fornece duas funções para obter informações dos valores de slots, sessionAttribute ou requestAttribute.
+ **fn.COUNT()**: conta o número de valores em um slot de vários valores. 

  Por exemplo, se o slot `{toppings}` contiver o valor “calabresa, abacaxi”:

  `fn.COUNT({toppings}) = 2`
+ **Fn.IS\$1SET()**: o valor é verdadeiro se um slot, atributo de sessão ou atributo de solicitação estiver definido na sessão atual.

  Com base no exemplo anterior:

  `fn.IS_SET({toppings})`
+ **fn.LENGTH()**: é o tamanho do valor do atributo da sessão, do valor do slot ou do atributo do slot definido na sessão atual. Essa função não oferece suporte a slots de vários valores ou slots compostos.

  Exemplo:

  Se o slot `{credit-card-number}` contiver o valor “123456781234”:

  `fn.LENGTH({credit-card-number}) = 12`

## Expressões condicionais
<a name="sample-conditional-expressions"></a>

Aqui estão alguns exemplos de expressões condicionais. NOTA: `$.` representa o ponto de entrada para a resposta JSON do Amazon Lex V2. O valor a seguir `$.` será analisado na resposta do Amazon Lex V2 para recuperar o valor. Expressões condicionais usando a referência de caminho JSON para o bloco de transcrições na resposta do Amazon Lex V2 só serão suportadas nas mesmas localidades que oferecem suporte às pontuações de transcrição do ASR.


| Tipo de valor | Caso de uso | Expressões condicionais | 
| --- | --- | --- | 
| Slot personalizado | O valor do slot pizzaSize é igual a grande | \$1pizzaSize\$1 = "large" | 
| Slot personalizado | pizzaSize é igual a grande ou médio | \$1pizzaSize\$1 = "large" OU \$1pizzaSize\$1 = "medium"  | 
| Slot personalizado | Expressões com () e AND/OR | \$1pizzaType\$1 = "pepperoni" OU \$1pizzaSize\$1 = "medium" OU \$1pizzaSize\$1 = "small"  | 
| Slot personalizado (slot de vários valores) | Verifique se uma das coberturas é cebola | \$1toppings\$1 CONTAINS "Onion" | 
| Slot personalizado (slot de vários valores) | O número de coberturas é superior a 3 | fn.COUNT(\$1topping\$1) > 2 | 
| AMAZON.AlphaNumeric | bookingIDé ABC123 | \$1bookingID\$1 = "ABC123" | 
| AMAZON.Number | o valor do slot de idade é maior que 30 | \$1age\$1 > 30 | 
| AMAZON.Number | o valor do slot de idade é igual a 10 | \$1age\$1 = 10 | 
| AMAZON.Date | O valor do slot dateOfBirth anterior a 1990 | \$1dateOfBirth\$1 < "1990-10-01" | 
| AMAZON.State | O valor do slot destinationState é igual a Washington | \$1destinationState\$1 = "washington" | 
| AMAZON.Country | O valor do slot destinationCountry não é Estados Unidos | \$1destinationCountry\$1 \$1= "united states" | 
| AMAZON.FirstName | O valor do slot firstName é João | \$1firstName\$1 = "John" | 
| AMAZON.PhoneNumber | O valor do slot phoneNumber é 716767891932 | \$1phoneNumer\$1 = 716767891932 | 
| AMAZON.Percentage | Verifique se o valor percentual do slot é maior ou igual a 78 | \$1percentage\$1 >= 78 | 
| AMAZON.EmailAddress | O valor do slot emailAddress é userA@hmail.com | \$1emailAddress\$1 = "userA@hmail.com" | 
| AMAZON.LastName | O valor do slot lastName é Fulano | \$1lastName\$1 = "Doe" | 
| AMAZON.City | O valor do slot da cidade é igual a Seattle | \$1city\$1 = "Seattle" | 
| AMAZON.Time | O horário é depois das 20h | \$1time\$1 > "20:00" | 
| AMAZON.StreetName | O valor do slot streetName Boren Avenue | \$1streetName\$1 = "boren avenue" | 
| AMAZON.Duration | O valor do slot travelDuration é inferior a 2 horas | \$1travelDuration\$1 < P2H | 
| Modo de entrada | O modo de entrada é fala | \$1.inputMode = "Speech" | 
| Transcrição de entrada | A transcrição de entrada é igual a “Quero uma pizza grande” | \$1.inputTranscript = "I want a large pizza" | 
| Atributos da sessão | verifique o atributo customer\$1subscription\$1type | [customer\$1subcription\$1type] = "yearly" | 
| Atributos de solicitação | verifique o sinalizador retry\$1enabled | ((retry\$1enabled)) = "TRUE" | 
| Resposta de Kendra | A resposta de Kendra contém perguntas frequentes | fn.IS\$1SET(((x-amz-lex:kendra-search-response-question\$1answer-question-1))) | 
| Expressão condicional com transcrições | Expressões condicionais usando o caminho JSON de transcrições | \$1.transcriptions[0].transcriptionConfidence < 0.8 AND \$1.transcriptions[1].transcriptionConfidence > 0.5 | 
| Definir atributos de sessão | Defina os atributos da sessão usando transcrições, caminho JSON e valores de slot. | [sessionAttribute] = "\$1.transcriptions..." AND [sessionAttribute] = "\$1<slotName>\$1" | 
| Definir valores do slot | Defina os atributos da sessão usando transcrições, caminho JSON e valores de slot. | \$1slotName\$1 = [<sessionAttribute>] AND \$1slotName\$1 = "\$1.transcriptions..." | 

**nota**  
`slotName`refere-se ao nome de um slot no bot Amazon Lex V2. Se o slot não for resolvido (nulo) ou se o slot não existir, as atribuições serão ignoradas em runtime. `sessionAttribute` refere-se ao nome do atributo da sessão que é definido pelo cliente no momento da criação.

# Invocar hook de código de diálogo
<a name="paths-code-hook"></a>

Em cada etapa da conversa, quando o Amazon Lex V2 envia uma mensagem ao usuário, você pode usar uma função Lambda como a próxima etapa da conversa. Você pode usar a função para implementar a lógica de negócios com base no estado atual da conversa.

A função do Lambda que é executada está associada ao alias do bot que você está usando. Para invocar a função do Lambda em todos os hooks de código de diálogo em sua intenção, você deve selecionar **Usar uma função Lambda para inicializar e validar** a intenção. Mais informações sobre como escolher uma função do Lambda, ver [Criação de uma AWS Lambda função para seu bot Amazon Lex V2](lambda-attach.md).

Há duas etapas para usar uma função do Lambda. Primeiro, você deve ativar o hook do código de diálogo em qualquer ponto da conversa. Segundo, você deve definir a próxima etapa da conversa para usar o hook de código de diálogo.

A imagem a seguir mostra o hook do código de diálogo ativado.

![\[Mostra que o hook do código de resposta condicional está ativo.\]](http://docs.aws.amazon.com/pt_br/lexv2/latest/dg/images/code-hook-active.png)


Em seguida, defina o hook de código como a próxima ação para a etapa da conversa. Você pode fazer isso configurando a próxima etapa da conversa para Invocar o hook de código de diálogo. A imagem a seguir mostra uma ramificação condicional em que invocar o hook do código de diálogo é a próxima etapa do caminho padrão da conversa.

![\[Ramificação condicional mostrando um hook de código como a próxima etapa da conversa.\]](http://docs.aws.amazon.com/pt_br/lexv2/latest/dg/images/code-hook-choose.png)


Quando os hooks de código estão ativos, você pode definir três respostas para retornar ao usuário:
+ **Sucesso**: enviado quando a função do Lambda foi concluída com sucesso.
+ **Falha**: enviado se houve um problema com a execução da função do Lambda ou se a função do Lambda retornou um valor `intent.state` de `Failed`.
+ **Tempo limite**: enviado se a função do Lambda não for concluída no período de tempo limite configurado.

![\[Fluxograma mostrando as opções disponíveis para mensagens após a execução de uma função do Lambda.\]](http://docs.aws.amazon.com/pt_br/lexv2/latest/dg/images/conditional-code-hook.png)


Escolha o **hook de código de diálogo do Lambda** e, em seguida, escolha **Opções avançadas** para ver as três opções de respostas que correspondem à invocação da função do Lambda. É possível definir valores, configurar as próximas etapas e aplicar condições correspondentes a cada resposta para criar o fluxo de conversação. Na ausência de uma condição ou de uma próxima etapa explícita, o Amazon Lex V2 decide a próxima etapa com base no estado atual da conversa. 

Na página de **opções avançadas**, você também pode optar por ativar ou desativar a invocação da função do Lambda. Quando a função é ativada, o hook do código de diálogo é invocado com a invocação do Lambda, seguida pela mensagem de sucesso, falha ou tempo limite com base nos resultados da invocação do Lambda. Quando a função está desativada, o Amazon Lex V2 não executa a função do Lambda e age como se o hook do código de diálogo tivesse sido bem-sucedido.

Você também pode definir um rótulo de invocação que é enviado para a função do Lambda quando ela é invocada por essa mensagem. Isso pode ajudar a identificar a seção da sua função do Lambda a ser executada.

**nota**  
Em 17 de agosto de 2022, o Amazon Lex V2 lançou uma mudança na forma como as conversas são gerenciadas com o usuário. Essa alteração oferece mais controle sobre o caminho que o usuário percorre na conversa. Para obter mais informações, consulte [Alterações nos fluxos de conversas do Amazon Lex V2](understanding-new-flows.md). Os bots criados antes de 17 de agosto de 2022 não são compatíveis com mensagens de hook de código de diálogo, definição de valores, configuração das próximas etapas e adição de condições.