

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

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