Preenchimento de Slot
Slots são um conceito significativo no Botpress NLU.
Considere-os como parâmetros necessá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:
- Clique na guia NLU;
- Abra a "Seção Intenção";
- Selecione a intenção à qual deseja adicionar slots e, em seguida, poderá definir seus slots;
- Clique em "Criar um Slot".

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.

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:
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.
- Na visualização "Flow Editor", clique em Insert skill > Slot;
- Escolha uma intenção a ser usada para o preenchimento do slot;
- Escolha um slot para preencher;
- 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.
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.

Tipos de Validação
Existem dois tipos de validações:
- Validação de Entrada: 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.
- Validação de Entrada Personalizada: 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 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:
- On extracted - O slot foi extraído com sucesso. Ele será armazenado em session.slots.<slot_name>;
- 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;
- 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.

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.

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.

Diretrizes ao Adicionar Slots
- Misture as posições dos slots nos enunciados.
Exemplo

- Evite a duplicação ao usar slots.
Exemplo para evitar

- 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

- Exemplos em enunciados devem corresponder à entidade definida.
Exemplo: 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.