O que são slots no Watson Conversation?
Coletar informação através de um chat bot nem sempre foi a tarefa mais fácil a ser realizada: logo quando você começa a criar seu fluxo já percebe que existem várias situações as quais o usuário falará a mesma informação.
E se ele resolver falar tudo de uma vez? E se ele primeiro falar a sua última variável?
Foi pensando nessa dificuldade em coletar informação através de interfaces de conversação que a equipe de desenvolvimento do Watson Conversation desenvolveu os slots (IMHO é a principal atualização dos últimos meses).
E o que são os slots do conversation?
De uma maneira simplista os slots são alternativas para formulários só que em forma de conversa, eles permitem que você colete várias informações do seu cliente sem ter que se preocupar (muito) com o fluxo.
Tem um exemplo aí?
Nada melhor que exemplos para explicar algo de tecnologia, não é mesmo?
Então vamos assumir o contexto de um chat bot que realiza o agendamento de consultas médicas, isso porquê o mesmo funcionaria para agendamento de praticamente qualquer coisa.
A primeira tarefa a ser realizada é definir quais variáveis são necessárias que eu colete do meu usuário. No nosso caso temos:
- A especialidade do médico
- O local de atendimento
- O dia da consulta
- Horário da consulta
Com essa definição em mãos precisamos apenas criar uma intenção #agendar (se você ainda não está familiarizado com intenções e/ou o conversation sugiro ler esse artigo).
E então criamos as entidades @locais e @especialidades para determinar nossos médicos de plantão e lugares de atendimento das nossas clínicas (deixei o fuzzy matching funcionando para caso os usuários digitem errado).
Agora sim! Vamos criar um nó de diálogo para a intenção #agendamento e adicionar slots nela: para isso clique no botão customize no topo do nó.
Na janela que aparece você deverá habilitar os Slots e decidir se deseja mostrar uma mensagem inicial indicando ao usuário tudo que ele deverá preencher ali (opção Prompt for everything). Aqui vale ressaltar que se o usuário inserir qualquer variável dos slots então essa mensagem não será exibida.
No nosso caso optamos por deixar o Prompt for everything acionado então se um usuário escreve que deseja fazer uma consulta mas não especifica nenhuma variável respondemos da seguinte forma:
"Que bom que você nos procurou! Para fazer a sua reserva preciso saber qual médico, onde e quando você deseja realizar a consulta."
Além disso uma nova seção aparecerá no meio do seu nó de agendamento, ela conta com vários campos e botões novos, vamos repassar um por um:
- O primeiro campo "check for" é a condição de existência de um campo que você deseja obter.
- Se a condição do item 1 for preenchida então salvaremos esse valor no campo especificado em "Save it as" (no nosso caso se um usuário fala algo como "consulta com um pediatra" então a condição 1 é atendida e salvamos o termo "pediatra" no campo $especialidade).
- Caso a condição não seja atendida mostramos uma mensagem que pede aquela informação (exemplo: "Que tipo de médico você está buscando?")
- Representa se aquele campo é obrigatório ou não. Para deixar o campo como opcional você deverá deixar o item 3 em branco.
- Este botão permite você inserir novas variáveis no seu slot.
- O item 6 permite adicionar novas configurações referentes a uma variável específica. Vamos ver a janela que é aberta:
Toda a parte de cima da janela você já conhece, é na parte de baixo que surgem as novas opções que são:
6.1 Caso a variável seja encontrada então responda com algo (um exemplo aqui seria "Ótimo! Nossos especialistas de pediatria são os melhores do país" mas optamos por deixar em branco para que apenas a pergunta da próxima variável seja exibida).
6.2 Caso o campo não seja encontrado então vamos mudar a frase e explicar melhor aquele campo específico (no nosso caso respondemos dizendo quais especialidades temos na clínica). Aqui também é possível ter várias respostas dependendo do que o usuário perguntar, você poderia ter um condicional para caso o usuário perguntasse quem são os médicos que trabalham ali.
Handlers
Por último temos o item 7 da Figura 6: ele permite a criação de handlers que apesar de serem opcionais se mostram bastante úteis, são condicionais e respostas específicas para ajudar no preenchimento das variáveis.
Assim como você pode adicionar respostas para condições específicas dentro do preenchimento de uma variável você poderá fazê-lo para todas as variáveis ao utilizar um handler.
Explica melhor!
Caso você crie uma condição #horarioDeFuncionamento para quando a variável $hora não está preenchida então a resposta "Todas as nossas lojas funcionam das 7h as 18h" aparecerá apenas se estivermos perguntando essa variável $hora.
Mas e se o usuário deseja perguntar o horário de funcionamento quando for preencher o local? Então o seu bot não responderia a essa pergunta e é pra isso que usamos os handlers: eles viram condições globais daquele nó de modo que independente de qual variável estiver sendo preenchida naquele momento ele irá responder aquela informação ao ser questionado.
Obs: caso você opte por ter a condição #horarioDeFuncionamento tanto no seu handler quanto na sua variável o primeiro terá preferência e nunca entrará na mensagem da variável específica.
Tudo pronto! Agora é avisar pro usuário que a consulta foi marcada!
Para isso devemos preencher o campo "Then respond with:". Aqui uma boa prática é apresentar todas as informações que foram coletadas e não apenas responder "Consulta marcada!" pois isso dá uma chance do usuário conferir se as informações estão corretas.
Uma observação importante é que caso você opte por deixar alguma variável em branco então leve isso em consideração na sua mensagem final, use condições para verificar o preenchimento da mesma ou estruture bem a mensagem final para que ela não fique estranha para o usuário.
E a ordem das variáveis importa?
Não. Agora seu usuário pode escrever do jeito que ele quiser: tudo de uma vez, a o horário primeiro e a especialidade por último ou uma mistura das informações.
E porque essa é uma das atualizações mais importantes do Conversation?
Simples. Os slots permitem criar vários tipos de bots agora de maneira muito mais simples, alguns exemplos desses bots seriam:
- Cotação de seguros (carro, casa, viagem)
- Reserva de restaurante, carro, vôo ou hotel
- Agendamento de consulta e atendimento para obtenção de documentos
Isso tudo porquê esses procedimentos dependem basicamente da coleta de dados do seu usuário.