[Resolvido] Como implementar o Slot utilizando o builder?

Gente já fiz essa pergunta na comunidade no Facebook, mas como conheci o forum e vi que existe várias dúvidas da comunidade resolvi re-postar a pergunta aqui e pedir a opinião de vocês.

Situação: A situação que queremos utilizar o slot é o seguinte, o velho caso da pizzaria que o usuário pode pedir um pedido completo de pizza ex:. “eu quero uma pizza grande de frango” já informando a quantidade, sabor e o tamanho esses três atributos são obrigatórios e um pedido de pizza não pode ser finalizado antes desses atributos serem preenchidos.

O slot também deve ser capaz de entender a seguinte situação: 1. “Eu quero uma pizza” identificou o atributo quantidade ele questiona sobre qual o sabor da pizza: o usuário responde 2. “grande de frango” o slot deve identificar as duas intenções e finalizar o pedido.

Pensamos em duas diferentes abordagem de implementação no Builder, são elas:

  1. Uma implementação utilizando somente os blocos do builder e as condições de saída e as variáveis sendo salvas como informações extras do contato. Segue o print de uma implementação do fluxo:

Seriam 2 nós para cada um dos atributos, 1 para o caso de já ter sido encontrado e outro para que o usuário seja questionado sobre o atributo. Exemplo: 1.”Eu quero uma pizza”-(Identificado quantidade), o nó Pedir Pizza veria que sabor não foi fornecido, então ativaria o nó Sabor que questionaria sobre o sabor, o usuário responde: “grande de frango”-(Identificado tamanho e sabor), então o nó Sabor ativaria o nó Tamanho_semP, que por sua vez verificaria que quantidade já foi preenchida e ativaria o nó Quantidade_semP que finalizaria o fluxo de compra.

PS. Nessa abordagem não conseguimos salvar o atributo fora do seu respectivo nó, ou seja: não encontramos uma forma de salvar a entidade a partir de uma condição. Onde a entidade tamanho só seria salva se o valor da entidade fosse identificado na fala do usuário, por exemplo no fluxo acima não temos garantia que o usuário já informou o tamanho, caso ele já tenha informado e no Nó Sabor a entidade não esteja presente iremos sobrescrever com o valor vazio.

  1. A segunda possibilidade pensada, mas não implementada seria utilizar a ”Ação -> Executar Script” onde iríamos desenvolver uma função para recuperar as entidades identificadas, verificar as variáveis faltantes e encaminhar o usuário para o bloco que solicita essa informação.

Gostaria de um feedback como vocês costumam modelar esse tipo de situação e os problemas dessas duas possíveis soluções, citada acima.

2 Curtidas

Também tenho duvidas sobre esse cenário.
Algum exemplo?

@Delando_Junior, @Lucas_Harrison, eu descobri uma ótima forma de fazer SLOT no Bulder.

Funciona da seguinte forma:
Meu chatbot precisa verificar se o cliente possui NOME, TELEFONE, EMAIL e NOME DA EMPRESA

Solução:
1 - Bloco “Valida nome”:
image
Se o usuário possuir essa informação, ele passa para a proxima validação, que nesse caso seria “Valida telefone” e assim sucessivamente.

2 - Bloco “Solicita nome”:
image
Caso o cliente não tenha essa informação ele solicita nesse bloco e logo em seguida passa para a proxima validação que seria “Valida telefone”.

Dessa forma você conseguirá validar as informações necessárias para o seu caso.

Eu utilizei nesse exmplo variáveis padrões do BLIP, mas voce pode fazer validando intenções e entidades da mesma forma.
O funcionamento disso fica exatamente igual aos slots do DIALOGFLOW e do WATSON, sendo que um pouco mais trabalhoso.