---
title: Preenchimento de Slot
slug: helper-new/preenchimento-de-slot
description: Learn about the significant concept of slots in Botpress NLU. Discover how slots are essential parameters for completing intent actions and how they can be defined for specific intents in the Botpress platform. Explore how Botpress handles the process of 
createdAt: 2022-08-31T11:07:42.000Z
---

**Slots&#x20;**&#x73;ão um conceito significativo no **Botpress NLU**. 

Considere-os como **parâmetros&#xA0;**&#x6E;ecessários para concluir a ação associada a uma intenção.

## Marcação de Slot

O Botpress Native NLU marcará cada palavra (token) de entrada do usuário. Palavras separadas por um hífen são tratadas como um token. Se o token for identificado corretamente como um slot, ele será anexado ao evento de extração NLU. 

Cada slot identificado será acessível no event.nlu.slots objeto usando seu nome como chave.

## Definindo Slots

Para definir um slot para uma intenção específica:

1. Clique na guia **NLU**;
2. Abra a "**Seção Intenção**";
3. Selecione a intenção à qual deseja adicionar slots e, em seguida, poderá definir seus slots;
4. Clique em "**Criar um Slot**".

![](https://api.archbee.com/api/optimize/pu5VMc-2TW3GQX4ly5Xp7/6w8AKwz_Y-ZVzwYnOZhwj_image.png)

Vamos usar uma intenção `book_flight`. 

Para reservar um voo, definiremos dois slots: `departure` e `destination`, ambos associados à `Airport Codes` entidade de lista personalizada. 

Feito isso, precisamos identificar cada slot do aeroporto.

![](https://api.archbee.com/api/optimize/pu5VMc-2TW3GQX4ly5Xp7/jx54WYlpIPe7uQLMMWWfC_image.png)

### Exemplo

O usuário disse: `I would like to go to SFO from Mumbai.` (*Eu gostaria de ir de Mumbai a São Francisco*)

`event.nlu.slots` vai parecer como isso:

```javascript
slots : {
  airport_to: {
    name: 'airport_to',
    value: 'SFO', // shorthand for entity.data.value
    entity: [Object] //detailed extracted entity
  },
  airport_from: {
    name: 'airport_from',
    value: 'BOM',  // shorthand for entity.data.value
    entity: [Object] //detailed extracted entity
  }
}
```

## Preenchimento de Slot

O preenchimento de slot é o processo de coleta de informações exigidas por uma intenção. Essas informações são definidas como slots, conforme mencionamos na seção acima. 

Ele lida com a validação de entrada e a resposta do chatbot quando a entrada é inválida. O Botpress possui uma habilidade embutida para lidar com o processo de preenchimento de slots.

## Criando uma Habilidade

Usaremos os slots que definimos anteriormente neste tutorial.

1. Na visualização "**Flow Editor**", clique em `Insert skill > Slot`;
2. Escolha uma intenção a ser usada para o preenchimento do slot;
3. Escolha um slot para preencher;
4. Escolha o conteúdo que seu chatbot irá pedir. Deve ser uma pergunta sobre a informação que você procura, como "**De onde você está partindo?**" ou "**Onde você quer ir?**" etc.
5. Escolha o conteúdo da resposta do seu chatbot quando a entrada for inválida. Deve orientar o usuário para uma resposta válida.

![](https://api.archbee.com/api/optimize/pu5VMc-2TW3GQX4ly5Xp7/EuUTRn1E6UfllgeE9MbP2_image.png)

## Tipos de Validação

Existem dois tipos de validações:

1. <u>**Validação de Entrada**</u>**:&#x20;**&#x41; primeira validação é baseada na extração de entidade. Se as informações fornecidas não corresponderem à entidade do slot, o chatbot notificará o usuário. Isso não se aplicará quando o slot tiver o tipo `@system.any`. Nesse caso, o chatbot fornecerá a frase completa do usuário quando não corresponder a um slot com confiança.
2. <u>**Validação de Entrada Personalizada**</u>**:&#x20;**&#x76;ocê pode usar uma ação para adicionar validação personalizada, como regex ou validação de tipo (número, string). A ação deve definir a variável `temp.valid` como `true` ou `false` com base no resultado da validação.

## Máximo de Tentativas de Repetição

Quantas vezes o chatbot deve tentar obter a resposta correta. `On not found` resultado será acionado quando o máximo for atingido.

## Resultados

Três resultados são possíveis:

1. `On extracted` - O slot foi extraído com sucesso. Ele será armazenado em `session.slots.<slot_name>`;
2. `On not found` - O slot não foi extraído. Isso também acontecerá quando o número máximo de tentativas for atingido ou quando a validação personalizada falhar;
3. `On already extracted` - O slot foi extraído anteriormente. Um caso de uso para isso seria perguntar ao usuário se as informações anteriores ainda são relevantes ou se ele gostaria de substituí-las.

![](https://api.archbee.com/api/optimize/pu5VMc-2TW3GQX4ly5Xp7/YThJjNd8tD74M_gtWXCXm_image.png)

## Encadeando Vários Slots

É possível encadear várias habilidades para preencher todos os espaços para uma determinada intenção. As habilidades de encadeamento são úteis quando todos os slots em uma determinada intenção são obrigatórios para que um conjunto de dados seja concluído.

No exemplo de reserva de voo, precisamos do `departure city`, `destination city` e `time of departure` para verificar se um voo está disponível. 

Como esses campos são obrigatórios, esse é um bom caso de uso para encadeamento de habilidades.

![](https://api.archbee.com/api/optimize/pu5VMc-2TW3GQX4ly5Xp7/p_SdAomnhEy7Ubu3gEYMk_image.png)

Esse fluxo resultará em uma conversa como a abaixo. 

Observe que na primeira frase, `I want to book a flight to NYC`, a intenção `book-flight` é correspondida e NYC foi extraído como o `to` slot. 

Em seguida, o chatbot tenta preencher os slots restantes `from` e `when`.

::Image[]{src="https://api.archbee.com/api/optimize/pu5VMc-2TW3GQX4ly5Xp7/BDe-O8tEQc-GZjbg6MiyI_image.png" size="88" width="873" height="460" position="center" showCaption="false"}

## Diretrizes ao Adicionar Slots

- Misture as posições dos slots nos enunciados.

### Exemplo

::Image[]{src="https://api.archbee.com/api/optimize/pu5VMc-2TW3GQX4ly5Xp7/qMyGvRfggOUgZsZSVs6EP_image.png" size="72" width="940" height="174" position="center" showCaption="false"}

- Evite a duplicação ao usar slots.

### Exemplo para evitar

::Image[]{src="https://api.archbee.com/api/optimize/pu5VMc-2TW3GQX4ly5Xp7/ie7ckIfuUsK9e5FEglrB0_image.png" size="46" width="867" height="592" position="center" showCaption="false"}

- Limite o número de slots usados ​​para um determinado intent.

Sugestão: máximo de 3

- Tente misturar enunciados com os espaços a serem: preenchidos, parcialmente preenchidos ou vazios.

### Exemplo

::Image[]{src="https://api.archbee.com/api/optimize/pu5VMc-2TW3GQX4ly5Xp7/y8EtGiq7bGEo7hOnC1xbR_image.png" size="66" width="940" height="321" position="center" showCaption="false"}

- Exemplos em enunciados devem corresponder à entidade definida.

<u>**Exemplo**</u>**:** `Entity list`: Google, Slack, Github, Email `Intent`: `Reset Trello`
`password` (o valor do slot não faz parte da lista)

- Ao usar slots, devem haver pelo menos cinco enunciados com um exemplo do slot; quanto mais slots, mais enunciados com exemplos.
