---
title: Slots
slug: helper-plus/slots
description: Learn about the importance of slots in Botpress NLU and how they are used to complete actions associated with intents. Discover how to define and fill slots using the built-in slot filling feature, and understand the two types of validation available. Exp
createdAt: 2022-08-30T16:42:44.000Z
---

Slots são um conceito significativo no Botpress NLU. Você pode considerá-los como parâmetros necessários para concluir a ação associada a uma intenção.

## Marcação de Slots

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 objeto `event.nlu.slots `usando seu nome como chave.

## Definindo Slots

1. No Conversation Studio, acesse o módulo "**Compreensão de linguagem Natural**";
2. Abra a "**Seção Intenção**";
3. Selecione a intenção à qual deseja adicionar slots e assim poderá defini-los;
4. Clique em "**Criar um Slot**".

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

Vamos usar uma `book_flight` intenção. 

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/NTiCXf5xR1J_NqPwHQkNj_image.png)

### Exemplo

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

`event.nlu.slots` vai parecer com o código:

```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
  }
}
```

## Prenchimento 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&#x20;**&#x70;ossui uma habilidade embutida para lidar com o processo de preenchimento de slots.

## Criando uma Habilidade

Usaremos os slots que definimos anteriormente neste tutorial.

1. No Editor de fluxo, clique em "**Inserir habilidade**" e em "**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 as informações que você procura, como `From where are you departing?`, `Where do you want to go?`, 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/vlDEBE4sPPdnKjW95WWzj_image.png)

## Tipos de Validação

Existem dois tipos de validações:

- <u>**Validação de entrada**</u>**:** A 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.
- <u>**Validação de entrada personalizada**</u>**:** você 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 verdadeira ou falsa com base no resultado da validação.

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

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

## Resultados

Três resultados são possíveis:

- <u>**Na extração**</u>**:&#x20;**&#x4F; slot foi extraído com sucesso. Ele será armazenado em `session.slots.<slot_name>`.
- <u>**Em não encontrado**</u>**:&#x20;**&#x4F; 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.
- <u>**Em já extraído**</u>**:** 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 sobrescrevê-las.&#x20;

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

## Encadeando Vários Slots

Você pode 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/CFy-9uF31YfCGULFIpk7p_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ída como o slot `to`. 

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

::Image[]{src="https://api.archbee.com/api/optimize/pu5VMc-2TW3GQX4ly5Xp7/Dybs5X3z7D9u89WT-_cTZ_image.png" size="82" 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/I7jsGqsExm1ZwaoSjk9f-_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/yo7hoJAbQt0banZ4xvFtt_image.png" size="48" width="867" height="592" position="center" showCaption="false"}

- Limite o número de slots usados ​​para uma determinada sugestão de intent: no máximo três.
- 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/YJPYoOu0l8BsJjGpuNCjR_image.png" size="76" width="940" height="321" position="center" showCaption="false"}

- Exemplos em enunciados devem corresponder à entidade definida

### Exemplo

`Entity list`: Google, Slack, Github, Email `Intent`: "**Redefinir senha do Trello"&#x20;**(o valor do slot não faz parte da lista)

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