O que são slots no Watson Conversation?

Renato dos Santos Rosa Leal
As Máquinas que Pensam
6 min readJun 26, 2017
Figura 1 — Forms ou chat bots?

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:

  1. A especialidade do médico
  2. O local de atendimento
  3. O dia da consulta
  4. 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).

Figura 2 — Exemplos da intenção agendamento

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

Figura 3 — Entidades do nosso bot

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

Figura 4 — Criando um Slot

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.

Figura 5 — Configuração inicial de um Slot

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:

Figura 6 — Opções de um Slot (no nosso bot ainda temos as condições de @sys-date e @sys-time)
  1. O primeiro campo "check for" é a condição de existência de um campo que você deseja obter.
  2. 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).
  3. 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?")
  4. Representa se aquele campo é obrigatório ou não. Para deixar o campo como opcional você deverá deixar o item 3 em branco.
  5. Este botão permite você inserir novas variáveis no seu slot.
  6. O item 6 permite adicionar novas configurações referentes a uma variável específica. Vamos ver a janela que é aberta:
Figura 7 — configurações de um campo específico

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.

Figura 8 — Condição Not Found para $especialistas

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.

Figura 9 — Preenchimento dos Handlers

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.

Figura 10 — Mensagem de finalização do slot

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.

Figura 11 — Quase todas variáveis na mensagem inicial.
Figura 12 — Começando pela última variável e depois pedindo as iniciais

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.

--

--