Configuração avançada de chatbots

O Tolvnow permite que você crie chatbots através de Fluxos visuais ou através de estruturas de código JSON.

Neste artigo iremos apresentar o procedimento de configuração avançado através do código JSON.  

Atenção: se você não tem experiência com programação, em especial, estruturas JSON, este artigo pode não ser adequado.

Esta opção permite que sejam feitas exatamente as mesmas funções que a criação por fluxo conversacional, sendo que na maioria das situações, não há vantagens em utilizar este método, mesmo para os programadores mais experientes. Entretanto, em alguns cenários, você pode utilizar a edição de código para copiar e colar blocos de forma mais rápida do que seria feito no diagrama visual. Entretanto, tome cuidado com os parâmetros ID dos blocos, pois é muito fácil duplicá-los. 


Estrutura básica do código JSON:

{
   "flow-version": 1,  
   "name": "novo fluxo",
   "startId" : 1, 
   "blocks": [] 
}


  • ​flow-version: versão do fluxo.
  • name: nome do fluxo
  • startId: código (id) do bloco inicial (o mesmo efeito do bloco start)
  • blocks: lista (array) dos blocos do fluxo conversacional

Dentro da propriedade blocks você irá incluir os passos que o sistema de chatbot irá percorrer para responder aos usuários. O encadeamento dos passos será feito através do uso das propriedades id e next. 

Veja este exemplo:

{
  "flow-version": 1,
  "name": "novo fluxo",
  "startId": 1,
  "blocks": [
    {
      "id": 1,
      "type": "start",
      "next": 2
    },
    {
      "id": 2,
      "type": "text-message",
      "data": {
        "text": "Olá! Bem vindo ao chatbot!"
      },
      "next": 3
    },
    {
      "id": 3,
      "type": "end"
    }
  ]
}


No código acima, utilizamos 3 blocos: start, text-message, end. Observe que o primeiro bloco indica a propriedade next como 2, que é o id do segundo bloco. No segundo bloco a propriedade next é 3, que é o id do terceiro e último bloco. O chatbot com a configuração acima simplesmente iniciaria, enviaria uma mensagem "Olá! Bem vindo ao chatbot!" e encerraria. De forma simples, é assim que o fluxo através dos blocks funciona. 

Agora vamos avançar nos diferentes tipos de blocos que o Tolvnow permite utilizar até o momento. 


Bloco indicador de início:

Este bloco pode ser usado como alternativa à propriedade startId. Indica onde o processamento do fluxo irá iniciar. Havendo a propriedade startId definida na raiz do JSON, este bloco pode ser desconsiderado.

​{
  "id": 1,
  "type": "start",
  "next": 2
}


Bloco para enviar mensagem de texto:

Este bloco é utilizado para enviar mensagens de texto. 

{
  "id": 2,
  "type": "text-message",
  "data": {
    "text": "Olá! Bem vindo ao chatbot!"
  },
  "next": 22
}
​


Bloco para indicar espera (atraso):

Este bloco indica ao chatbot para esperar ou atrasar o fluxo em um determinado tempo em segundos. Este bloco é especialmente utilizado para tornar o fluxo de conversa mais humanizado e de fácil leitura. Por exemplo, se você for enviar diversas mensagens em sequencia, pode ser desagradável para o usuário ler todas elas na sequencia, desta forma, pode ser interessante incluir um pequeno atraso de alguns segundos. 

​
{
  "id": 28,
  "type": "delay",
  "data": {
    "time_seconds": 4
  },
  "next": 4
}

A propriedade data.time_seconds indica a quantidade de segundos que o chatbot irá esperar até seguir para a próxima etapa (text-message ou variable-request).


Bloco para captura de informações / perguntas

O chatbot deve efetuar perguntas para o usuário, como por exemplo, "Qual é o seu nome?". Para isso, utilizamos um bloco chamado variable-request. Como este bloco possui particularidades, vamos aprofundar um pouco mais. 

​{
  "id": 5,
  "type": "variable-request",
  "data": {
    "request": "Qual é o seu nome?",
    "data-type": "name",
    "set-as-name": true,
    "set-as-email": false,
    "set-as-identifier": true,
    "variable-name": "name",
    "success-message": "Ok, obrigado {{name}}!",
    "error-message": "Não entendi seu nome corretamente. Podes me informar novamente?"
  },
  "next": 6
}

Vamos falar agora sobre cada uma das propriedades dentro da propriedade data:

  • ​request: é a pergunta que será exibida ao usuário, como se fosse uma mensagem.
  • data-type: é o tipo de dado esperado da resposta. O Tolvnow só permitirá que o fluxo continue se a resposta do usuário estiver de acordo com o data-type. Os data-type's disponíveis neste momento são: name, email, cpf, cnpj, phone, text-options. Sobre o text-options, vamos falar um pouco mais adiante, os demais são auto-explicativos. 
  • set-as-name: se definida como true (verdadeiro), o Tolvnow irá entender que este é o nome do usuário e irá definir a propriedade raiz nome do usuário com o valor desta variável.
  • set-as-email: se definida como true (verdadeiro), o Tolvnow irá entender que este é o e-mail do usuário e irá definir a propriedade raiz email do usuário com o valor desta variável.
  • set-as-identifier: se definida como true (verdadeiro), o Tolvnow irá entender que este é o e-mail do usuário e irá definir a propriedade raiz identificador do usuário com o valor desta variável.
  • variable-name: este é o nome da variável à qual a resposta do usuário será salva e identificada. 
  • success-message: mensagem que o chatbot irá informar ao usuário se a resposta for aceita / válida.
  • error-message: mensagem que o chatbot irá informar ao usuário se a resposta for inválida.

Veja que na propriedade success-message há uma marcação {{name}}. Se a variável com o nome "name" estiver definida, o Tolvnow irá automaticamente substituir pelo seu valor. Você pode usar {{nome_da_variavel}} em qualquer mensagem de resposta ao usuário, no bloco atual ou em blocos futuros.

O bloco de perguntas ainda possui o recurso de mandar opções de resposta, na forma de um menu, onde o usuário pode clicar para responder. Isto é feito utilizando o data-type text-options. Veja o exemplo abaixo:

{
  "id": 22,
  "type": "variable-request",
  "next": 23,
  "data": {
    "request": "Gostaria de saber mais informações deste imóvel?",
    "data-type": "text-options",
    "variable-name": "ack",
    "success-message": "Ok, vamos adiante.",
    "error-message": "Escolha uma das opções.",
    "options": [
      "Sim",
      "Não"
    ]
  }
}

No exemplo acima, o chatbot irá exibir a pergunta "Gostaria de saber mais informações deste imóvel?" e logo abaixo duas opções de resposta "Sim" e "Não". A resposta do usuário será salva na variável ack, para que possa ser avaliada em um passo seguinte.


Bloco condicional de desvio de fluxo:

O bloco condicional de desvio de fluxo tem o objetivo de desviar o fluxo do chatbot de acordo com o valor de uma variável. Veja o exemplo abaixo:

​{
  "id": 23,
  "type": "if-variable-value",
  "data": {
    "variable": "ack",
    "conditions": [
      {
        "value": "Sim",
        "next": 4
      },
      {
        "value": "Não",
        "next": 24
      },
      {
        "value": "default",
        "next": 24
      }
    ]
  }
}


No exemplo acima, iremos verificar o valor da variável ack. Obviamente, esta variável já deve ter sido criada anteriormente. O Tolvnow irá utilizar as opções listadas em conditions para desviar o fluxo para o bloco seguinte de acordo com o parâmetro next de cada item de conditions. Exemplo, se o valor da variável ack for "Sim", o próximo bloco processado pelo chatbot será aquele cujo id é 4. 

Temos  em conditions uma propriedade especial com valor default. Se o valor de ack não for localizado em nenhum item de conditions, será considerado, portanto, o valor de default, no caso do exemplo 24. Lembrando que o valor de next neste caso é o id do bloco seguinte a ser processado. 


Bloco de encerramento

O bloco de encerramento de fluxo serve para indicar ao Tolvnow que seu fluxo encerrou. Ele não é obrigatório, uma vez que caso o Tolvnow não localize em algum momento um bloco indicado como next, o fluxo será automaticamente encerrado.  Veja o exemplo:

​{
  "id": 11,
  "type": "end",
  "data": {
    "text": "Sessão encerrada."
  }
}


A propriedade data.text indica a mensagem que será exibida ao usuário quando o fluxo for encerrado.