Como implementar o Slot utilizando o builder?


#1

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

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