Como podemos ajudar?

05. Passos do fluxo
58 min
Criado por Humanz em 03/06/2022 12:28
Atualizado por Maria Malheiro em 14/11/2023 20:34
 
Este conteúdo é extenso, então para te ajudar, segue aqui ao lado os títulos específicos de cada passo. É só clicar que você será direcionado! 
No artigo Construindo um fluxo de chatbot vimos a breve relação sobre os passos (steps) disponíveis para a criação dos fluxos. 
 
Abaixo iremos detalhar cada um deles e suas respectivas funções:

Criar novo passo: Disparar SMS

Aqui, você pode enviar um SMS durante um fluxo preenchendo os campos Título do passo (opcional) e Mensagem a ser enviada.
 
Na mensagem podem ser enviadas variáveis no formato padrão, por exemplo #{username}, caso sejam preenchidas ou respondidas durante a jornada.
 
img1.png
Certifique-se que:
 
  • A opção Sobrescrever destinatários originais seja selecionada;
  • No campo Destinatário precisa-se inserir uma variável que possua como valor o número de telefone com DDI+DDD+número, exemplo 5551999999999;
  • A forma como você irá escrever a variável no campo, exemplo "#{phone}", deverá ser informado apenas o nome sem os caracteres especiais, isto é, "phone".
 
💡Dica: Caso você utilize o componente Valida telefone padrão da Zenvia, a variável de saída tel imprime exatamente a informação que o usuário respondeu. Logo, basta orientá-lo a digitar com DDI + DDD + número que o SMS será enviado.
 
⚠️ Atenção: Para você conseguir enviar SMS de dentro da Zenvia Bots, é necessário ter uma conta específica para envio, contratada:
 
img2.png

Criar novo passo: Gera URL

Passo na qual a URL com a sessão de chat é gerada para ser encaminhada ao usuário.
 
  • ID da sala de Web Chat: ID gerado na configuração do canal de chat.
  • Domínio do Web Chat: domínio utilizado na sessão do chat.
  • Expira em: prazo na qual a sessão de chat irá expirar.

 

img3.png

Criar novo passo: Timer

Para criar um temporizador, informe:
 
  • Título do passo (opcional);
  • Minutos de espera (tempo de espera para executar o próximo passo).
  • Opção de mover as variáveis para o componente de Controle de Variáveis e criar um novo step logo abaixo no fluxo.

 

img4.png

Criar novo passo: Lead

O componente Lead permite a integração com as ferramentas de Inbound Marketing RD Station ou Sharpspring, especificamente para geração de leads na base da conta do cliente.
 
  1. Acesse o menu superior direito onde está localizado o nome da organização.
  2. Procure por Integrações.
  3. E conecte com a solução que a empresa já possui internamente.

 

img5.png

 A composição do componente é simples:
  • Adicione um Título ao passo (opcional).
  • Selecione o provedor que você integrou.
  • Em Ação, caso seja a primeira vez no fluxo que estiver sendo criado o passo, selecione Criar.
  • Para a primeira opção de Campo, selecione E-mail.
  • Em Expressão informe a variável do seu fluxo que possua como valor o dado desejado. No caso, o primeiro sempre é o e-mail.
  • Escreva-o conforme o padrão da Zenvia Bots: #{user_email}, por exemplo.

 

img6.png

 

Criar novo passo: Fork e Join

O Fork e Join permitem realizar uma bifurcação no fluxo, permitindo que a jornada execute duas tarefas em paralelo. Normalmente são utilizados em lógicas que envolvem controlar o tempo de execução em determinada tarefa. Exemplo: caso a tarefa não seja executada no tempo estimado, e para isso utilizamos também o passo (step) de timer, é possível escalonar o restante da jornada com base do cumprimento, ou não, da condição.

Fork

Cria uma bifurcação, realizando um paralelismo no fluxo, permitindo a execução de duas jornadas simultâneas.

Join

Agrupa a bifurcação dos passos (steps) realizada pelo Fork.

Na prática

Para realizar a configuração é necessário editar o componente com algum dado? Sim. 
 
  • Basta abrir o passo (step), excluir a palavra payload no campo Expressão e clicar em OK.
  • Automaticamente o Título do passo ficará definido como Dividir o fluxo.
  • Para o Join, o título automático é Unificar o fluxo.

 

img7.png

 
No exemplo abaixo, há um cenário onde é questionado ao usuário qual é a sua dúvida e foi inserido um timer de X tempo caso a pergunta não seja respondida. Se o usuário responder a pergunta, a variável #{duvida} será preenchida e o fluxo segue. Caso o tempo seja atingido primento, o fluxo segue com a continuação do Join sem popular a variável.
img9.png
Aprenda a criar a ramificação e se quiser, copie o Json em um fluxo em branco para ver a estrutura na Zenvia Bots:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
{
  "alias": "Teste",
  "description": "",
  "steps": [
    {
      "id": "step03",
      "type": "fork",
      "properties": {
        "timeUnit": "minute",
        "expirationInMinutes": ""
      }
    },
    {
      "id": "step0",
      "type": "sendChatActivity",
      "properties": {
        "from": "#{session['chatFrom']}"
      },
      "contents": [
        {
          "type": "text/plain",
          "payload": {
            "text": "Qual a sua dúvida?"
          }
        }
      ]
    },
    {
      "id": "step04",
      "type": "exclusiveJoin",
      "properties": {
        "timeUnit": "minute",
        "expirationInMinutes": ""
      }
    },
    {
      "id": "step02",
      "type": "chatEvent",
      "variables": {
        "duvida": "payload"
      }
    },
    {
      "id": "step05",
      "type": "timerEvent",
      "properties": {
        "expiresInMinutes": "2",
        "timeUnit": "minute",
        "expirationInMinutes": ""
      }
    },
    {
      "id": "idEventoFinal",
      "type": "endEvent",
      "label": "label 3",
      "properties": {
        "endEvent": "true"
      }
    },
    {
      "id": "idEventoInicial",
      "type": "chatEvent",
      "label": "Evento inicial",
      "properties": {
        "startEvent": "true"
      },
      "variables": {
        "chatFrom": "empty"
      },
      "conditions": [
        {
          "type": "channelSourceCondition",
          "values": [
            ""
          ]
        }
      ]
    }
  ],
  "connections": [
    {
      "from": "step03",
      "to": "step02"
    },
    {
      "from": "step05",
      "to": "step04"
    },
    {
      "from": "step03",
      "to": "step05"
    },
    {
      "from": "step04",
      "to": "idEventoFinal"
    },
    {
      "from": "step02",
      "to": "step04"
    },
    {
      "from": "step0",
      "to": "step03"
    },
    {
      "from": "idEventoInicial",
      "to": "step0"
    }
  ],
  "defaultConversationalChannel": "CHAT"
}

Criar novo passo: Json API

Passo que permite o fluxo se conectar com outros sistemas, realizando ações que geram resultados a partir de regras Json API (Rest).
 
Obs: Essa integração somente funcionará com APIs que retornam JSON como resposta.
 
img11.png
  • O Título do passo, automaticamente é preenchido como Chamada de API, onde a edição é opcional.
  • Em Método é possível escolher entre GET, POST, PUT, PATCH e DELETE.
  • Em URL é o campo a ser preenchido com o endpoint que o fluxo irá se conectar.
  • Caso a chamada possua a obrigatoriedade de ter parâmetros e cabeçalho, insira-os em Parâmetros de consulta e Cabeçalhos (HTTP), respectivamente.
 
A partir de cada método, o componente muda, variando os campos. Exemplo: ao escolher, POST, PUT, PATCH ou DELETE, habilita a opção de criar o body (corpo) da requisição, onde é possível incluir a formatação necessária para haver êxito na chamada.
 
Obs: Em qualquer campo do componente Json API é permitido inserir a impressão das variáveis colhidas durante o fluxo, no padrão da Zenvia Bots. Exemplo: #{nome}.
 
img12.png
  • Geralmente toda a chamada API resulta em um resultado a partir da conexão. Logo, o componente permite usar o formato padrão de absorção da variável, utilizando a expressão #{response} como padrão, clicando conforme abaixo:

img13.png

 
Veja um exemplo prático através deste artigo: Configurando a integração com API externa.
Importante!A Zenvia Bots não aceita caracteres especiais nos parâmetros, por exemplo, $. Você pode adicionar esse tipo de caractere nos query parameters com aspas simples, por exemplo '$param1' ou  adicionar diretamente na URL para aonde vai fazer o GET. 

Criar novo passo: Configura Webhook

Configurar um Webhook em uma jornada automatizada é uma opção prática que possibilita construir a comunicação entre dois ambientes.
 
Na Zenvia Bots, para implementar este passo (step), basta seguir as orientações abaixo:
 
  1. Crie um Título do passo (opcional).
  2. Defina o Tipo do Webhook (Fixo ou Dinâmico).
  3. Crie um Identificador / nome do Webhook.
  4. Automaticamente, assim que você gerar o Identificador, a URL será gerada.
  5. Em Contato (chave primária), é necessário inserir a informação utilizada para identificar o retorno da chamada, para o fluxo. Ou seja, o que estamos esperando como sendo o ID da conversa, definido com qualquer nomenclatura. Esse campo garante a segurança dos dados.
  6. Em Json Path, o que o meio externo (API) precisa devolver para fazer chaveamento com o campo Contato. 
  7. Em Opções Avançadas, há a opção de declarar variáveis novas para serem usadas durante todo o fluxo, conforme a necessidade do criador da jornada.

 

img14.png

 

Criar novo passo: Recebe Webhook

Este passo representa o Webhook em estado de aguardo, esperando o ID da chamada e outras informações para poder consumir e seguir na jornada.
 
  1. Insira um Título do passo (opcional)
  2. Utilize as variáveis padrões listadas no componente para gerir as informações ou separe o retorno das variáveis (instanciar o conteúdo recebido), assim como na chamada de Json API, localizado nesse mesmo artigo.

 

img15.png

 
Webhook em uma imagem:
 
img16.png
Criar novo passo: Dispara E-mail
Contemplando a biblioteca de componentes inteligentes dentro da Zenvia Bots, há o passo (step) que proporciona disparos de e-mail em determinado momento da jornada. Ele não fica visível para o usuário no momento da ação, ou seja, o disparo acontece em paralelo com a experiência a partir do gatilho configurado.
 
Para que esse processo seja realizado com sucesso, é necessário:
 
  • Cliente possuir a contratação da ferramenta de mercado SendGrid.
  • Acesse o menu superior direito, onde está localizado o nome da organização.
  • Procure por Integrações.
  • E conecte o ID da sua conta SendGrid no campo de E-mail.

 

img17.png

 
Para editar o componente, siga os passos abaixo:
 
  1. Assunto do e-mail: informação visível no e-mail principal, com o tema proposto da comunicação.
  2. Endereço do e-mail de origem: demonstra de onde está partindo o e-mail ou quem está enviando.
  3. Endereço do e-mail de destino: dado que representa para quem será enviado.
  4. Conteúdo do e-mail: conteúdo de comunicação desejada.
Lembrando que, todos os campos de texto podem ser frisados com variáveis.
No campo Endereço do e-mail de destino é possível inserir apenas um e-mail.
 
Caso seja necessário enviar para mais de um e-mail, é possível colher e-mails em jornadas paralelas, dependendo do usuário e absorvendo o dado em alguma variável, #{user_email}, por exemplo.
 
img18.png
Falando em variáveis: o que acontece quando o e-mail não é disparado em alguns casos?
 
Principal cenário de atenção:
 
Se for disparado um e-mail imprimindo algumas variáveis do fluxo no Conteúdo, obrigatoriamente precisamos popular todas elas com as respectivas informações. 
 
Caso ocorra de alguma variável estar sem conteúdo (vazia), o Dispara E-mail não irá compreender a ação e ela não acontecerá!
 
Ou seja, não informe no conteúdo do e-mail variáveis que não passaram pelo caminho da jornada.

Criar novo passo: Valida CNPJ

Componente que pergunta o CNPJ de um usuário e aguarda a resposta. A partir disso é validada a informação e caso não haja o padrão de um CNPJ válido, o questionamento é realizado novamente.
 
Configurando as informações de entrada*:
 
*Informações de entrada referem-se a dados obrigatórios para que a lógica do passo (step) seja realizada com êxito.
 
  • Pergunta após resposta incorreta: frase enviada ao usuário quando o CNPJ respondido não esteja correto.
  • Pergunta inicial: texto para perguntar ao usuário qual o CNPJ.
  • Quantidade máxima de tentativas: quantidade de tentativas que o usuário terá para informar o CNPJ, ficando no looping de pergunta e resposta.
  • Mensagem de desistência: texto para enviar após o usuário errar a quantidade de vezes estabelecida.
 
Variáveis de saída*:
 
*São dados que podem ser utilizados na continuidade do fluxo, estabelecendo regras e informações. Além disso, ao utilizar o componente não há necessidade de criar uma Mensagem do Usuário para absorção da resposta, pois o dado já será preenchido em uma das variáveis de saída.
 
  • CNPJ formatado: #{user_cnpj_formatted} - Formata o CNPJ com pontuação e traço.
  • CNPJ válido: #{is_cnpj_valid} - Informa se o CNPJ respondido é true ou false.
  • CNPJ do usuário: #{user_cnpj} - CNPJ digitado pelo usuário.
 
Lembrete!Caso seja configurado um limite de X tentativas para o usuário responder corretamente e mesmo assim não houve sucesso na resposta, a variável de saída #{is_cnpj_valid} será igual a false. Ou seja, é possível realizar uma validação inserindo um Ponto de Decisão após o passo (step) de Valida CNPJ com a regra de que caso is_cnpj_valid == false, a jornada tomará outro rumo, como atendimento humano, por exemplo.
 
img19.png
 
img20.png

Criar novo passo: Valida CPF

Componente que pergunta o CPF de um usuário e aguarda a resposta. A partir disso é validada a informação e caso não haja o padrão de um CPF válido, questiona-se novamente.
 
Configurando as informações de entrada*:
 
*Informações de entrada referem-se a dados obrigatórios para que a lógica do passo (step) seja realizada com êxito.
 
  • Pergunta inicial: texto para perguntar ao usuário qual o CPF.
  • Pergunta após resposta incorreta: frase enviada ao usuário quando o CPF respondido não esteja correto.
  • Quantidade máxima de tentativas: quantidade de tentativas que o usuário terá para informar o CPF, ficando no looping de pergunta e resposta.
  • Mensagem de desistência: texto para enviar após o usuário errar a quantidade de vezes estabelecida.
 
Variáveis de saída*:
 
*São dados que podem ser utilizados na continuidade do fluxo, estabelecendo regras e informações. Além disso, ao utilizar o componente não há necessidade de criar uma Mensagem do Usuário para absorção da resposta, pois o dado já será preenchido em uma das variáveis de saída.
 
  • CPF formatado: #{user_cpf_formatted} - Formata o CPF com pontuação e traço.
  • Qtd tentativas erros: #{countTries} - Mostra a quantidade de tentativas. 
  • CPF válido: #{is_cpf_valid} - Informa se o CPF respondido é true ou false.
  • CPF do usuário: #{user_cpf} - CPF digitado pelo usuário.
 
Lembrete!Caso seja configurado um limite de X tentativas para o usuário responder corretamente e mesmo assim não houve sucesso na resposta, a variável de saída #{is_cpf_valid} será igual a false. Ou seja, é possível realizar uma validação inserindo um Ponto de Decisão após o passo (step) de Valida CPF com a regra de que caso is_cpf_valid == false, a jornada tomará outro rumo, como atendimento humano, por exemplo.
 
img21.png

Criar novo passo: Valida CEP

A Pergunta CEP valida o formato da informação, verifica a sua existência na API pública http://viacep.com.br e retorna informações de UF, Cidade, Bairro e rua.
 
Configurando as informações de entrada*:
 
*Informações de entrada referem-se a dados obrigatórios para que a lógica do passo (step) seja realizada com êxito.
 
  • Pergunta CEP: texto para perguntar ao usuário qual o CEP.
  • Pergunta após resposta incorreta: frase enviada ao usuário quando o CEP respondido não esteja no formato correto.
  • Pergunta após CEP não encontrado: texto para enviar após o usuário informar um CEP inexistente.
 
Variáveis de saída*:
 
*São dados que podem ser utilizados na continuidade do fluxo, estabelecendo regras e informações. Além disso, ao utilizar o componente não há necessidade de criar uma Mensagem do Usuário para absorção da resposta, pois o dado já será preenchido em uma das variáveis de saída.
 
  • Logradouro: #{logradouro} - Imprime o endereço do CEP.
  • Localidade: #{localidade} - Cidade do CEP.
  • CEP: #{cep} - CEP informado.
  • Bairro: #{bairro} - Bairro do CEP.
  • UF: #{uf} - Estado do CEP.

 

img22.png

Criar novo passo: Valida E-mail

Pergunta o e-mail de um usuário, valida a partir das regras de pontuação e estrutura padrão ([email protected]) e armazena a resposta.
 
Configurando as informações de entrada*:
 
*Informações de entrada referem-se a dados obrigatórios para que a lógica do passo (step) seja realizada com êxito.
 
  • Pergunta inicial: texto para perguntar ao usuário qual o E-mail.
  • Pergunta após resposta incorreta: frase enviada ao usuário quando o E-mail respondido não esteja correto.
  • Quantidade máxima de tentativas: quantidade de tentativas que o usuário terá para informar o E-mail, ficando no looping de pergunta e resposta.
  • Mensagem de desistência: texto para enviar após o usuário errar a quantidade de vezes estabelecida.
 
Variáveis de saída*:
 
*São dados que podem ser utilizados na continuidade do fluxo, estabelecendo regras e informações. Além disso, ao utilizar o componente não há necessidade de criar uma Mensagem do Usuário para absorção da resposta, pois o dado já será preenchido em uma das variáveis de saída.
 
  • E-mail válido: #{is_email_valid} - Informa se o E-mail respondido é true ou false.
  • E-mail do usuário: #{user_email} - E-mail informado na resposta.
Lembrete!Caso seja configurado um limite de X tentativas para o usuário responder corretamente e mesmo assim não houve sucesso na resposta, a variável de saída #{is_email_valid} será igual a false. Ou seja, é possível realizar uma validação inserindo um Ponto de Decisão após o passo (step) de Valida CPF com a regra de que caso is_email_valid == false, a jornada tomará outro rumo, como atendimento humano, por exemplo.
 
img23.png
 
img25.png

Criar novo passo: Valida Telefone

O componente Valida Telefone exerce a função de permitir que o usuário digite um número de telefone no formato com DDD + número. 
 
Configurando as informações de entrada*:
 
*Informações de entrada referem-se a dados obrigatórios para que a lógica do passo (step) seja realizada com êxito.
 
  • Texto para solicitar o telefone: pergunta inicial ao usuário.
 
Variáveis de saída*:
 
*São dados que podem ser utilizados na continuidade do fluxo, estabelecendo regras e informações. Além disso, ao utilizar o componente não há necessidade de criar uma Mensagem do Usuário para absorção da resposta, pois o dado já será preenchido em uma das variáveis de saída.
 
  • Telefone Formatado: #{telFormatado} - Dado impresso formatado (XX) XXXX-XXXX.
  • Tipo de Device: #{tipoTelefone} - Realiza a distinção entre fixo e celular.
  • Telefone: #{tel} - Número do telefone sem formatação.
 img26.png

Criar novo passo: Pergunta Nome

A funcionalidade do Pergunta Nome realiza o questionamento ao usuário, questionando o seu nome e armazena a resposta.
 
Configurando as informações de entrada*:
 
*Informações de entrada referem-se a dados obrigatórios para que a lógica do passo (step) seja realizada com êxito.
 
  • Pergunta: pergunta inicial ao usuário.
  • Pergunta após resposta incorreta: questionamento caso resposta incorreta.
 
Variáveis de saída*:
 
* São dados que podem ser utilizados na continuidade do fluxo, estabelecendo regras e informações. Além disso, ao utilizar o componente não há necessidade de criar uma Mensagem do Usuário para absorção da resposta, pois o dado já será preenchido em uma das variáveis de saída.
 
  • Nome do usuário: #{username} - Nome respondido
 
img27.png

Criar novo passo: Pergunta Data

O componente de Pergunta Data valida uma resposta no formato de dd/MM/aaaa, realizando o tratamento quando o usuário digitar algum elemento divergente do padrão.
 
Configurando as informações de entrada*:
 
*Informações de entrada referem-se a dados obrigatórios para que a lógica do passo (step) seja realizada com êxito.
 
  • Pergunta inicial: texto para perguntar ao usuário qual a Data.
  • Pergunta após resposta incorreta: frase enviada ao usuário quando a Data respondida não esteja correta.
  • Quantidade máxima de tentativas: quantidade de tentativas que o usuário terá para informar a Data, ficando no looping de pergunta e resposta.
  • Mensagem de desistência: texto para enviar após o usuário errar a quantidade de vezes estabelecida.
 
Variáveis de saída*:
 
*São dados que podem ser utilizados na continuidade do fluxo, estabelecendo regras e informações. Além disso, ao utilizar o componente não há necessidade de criar uma Mensagem do Usuário para absorção da resposta, pois o dado já será preenchido em uma das variáveis de saída.
 
  • Data válida: #{is_date_valid} -  Informa se a Data respondida é true ou false.
  • Data: #{user_date} - Data respondida com a formatação.

 

img30.png

O Pergunta Data também possui a mesma lógica de outros componentes vistos nesse artigo (como valida CNPJ e CPF), com o que diz respeito ao tratamento de tentativas. 

Criar novo passo: Pesquisa NPS

O passo de NPS permite a criação de uma pesquisa de satisfação durante a jornada do fluxo.
 
Configurando as informações de entrada*:
 
*Informações de entrada referem-se a dados obrigatórios para que a lógica do passo (step) seja realizada com êxito.
 
  • Pergunta Quantitativa: questionamento a respeito do grau de satisfação do usuário.
 
Variáveis de saída*:
 
*São dados que podem ser utilizados na continuidade do fluxo, estabelecendo regras e informações. Além disso, ao utilizar o componente não há necessidade de criar uma Mensagem do Usuário para absorção da resposta, pois o dado já será preenchido em uma das variáveis de saída.
 
  • Nota: #{nota} - Nota quantitativa.
  • Resp_qualitativa: #{resp_qualitativa} - Comentário caso a nota esteja abaixo da média esperada.

 

img31.png

Criar novo Passo: Integração Zenvia Conversion

Os clientes que contrataram a Zenvia Conversion podem adicionar este plugin em seu fluxo no momento que entenderem ser necessário o transbordo para atendimento humano.

Como funciona?
Basicamente, o usuário inicia uma conversa pelo canal WhatsApp e no momento que a automação chegar ao step de 'Integração Zenvia Conversion' o usuário é transferido para uma sala com atendentes na aplicação da Zenvia Conversion.
A atendente mantem o atendimento personalizado pelo canal de WhatsApp e ao finalizar a conversa, a interação com usuário pode ser encerrada ou retornada à automação do fluxo. 
 
Configurando as informações de entrada*:
 
As informações estão subdivididas em essenciais e mais parâmetros. Onde, o primeiro grupo é de preenchimento obrigatório e o segundo opcional.

Seguindo a tendência pela maioria dos casos, os campos já estão preenchidos com uma frase de sugestão, mas você pode ajustar as mensagens e demais configurações de forma que fique integrado à proposta de seu fluxo. 
 
Variáveis de saída*:
 
*São dados que podem ser utilizados na continuidade do fluxo, estabelecendo regras e informações. Além disso, ao utilizar o componente não há necessidade de criar uma Mensagem do Usuário para absorção da resposta, pois o dado já será preenchido em uma das variáveis de saída.
 
img33.png
A primeira entrega desta funcionalidade requer alguns cuidados na configuração:
1- Somente para o canal WhatsApp, sendo que o número do canal credenciado na Zenvia Conversion deve ser o mesmo credenciado na Zenvia Bots;
2- Somente após a contratação do produto Zenvia Conversion e a conta de WhatsApp será gerado um token de acesso informado pela Zenvia Conversion e cadastrado no plugin Zenvia Conversion da Zenvia Bots.

Criar novo passo: Mês por extenso

A funcionalidade do Mês por extenso realiza a identificação do número enviado e retorna o mês por extenso para uso no fluxo.
 
Configurando as informações de entrada*:
 
*Informações de entrada referem-se a dados obrigatórios para que a lógica do passo (step) seja realizada com êxito.
 
  • Número do mês: variável criada para armazenar o número correspondente ao mês
 
Variáveis de saída*:
 
*São dados que podem ser utilizados na continuidade do fluxo, estabelecendo regras e informações. Além disso, ao utilizar o componente não há necessidade de criar uma Mensagem do Usuário para absorção da resposta, pois o dado já será preenchido em uma das variáveis de saída.
 
  • month_name: variável que terá o mês por extenso correspondente ao número enviado como parâmetro de entrada.

 

img34.png

 

Criar novo Passo: Integração Watson

Com a utilização do componente há possibilidade de cadastrar as credenciais da Workspace do Watson Assistant que a empresa já possui, gerando ações sobre bases de conhecimento, prevendo saídas específicas a partir de respostas configuradas.
 
Configurando as informações de entrada*:
 
*Informações de entrada referem-se a dados obrigatórios para que a lógica do passo (step) seja realizada com êxito.
 
*Todas as informações a seguir do Watson deverão ser retiradas diretamente na página de Skills do Watson, buscando as informações de API Details, especificamente acessando a base de conhecimento (dados) que será desejada para a integração.
 
img36.png
 
Local acessando o Watson (IBM) para a composição do componente:
 
img37.png
  • Código de Autorização: código em Base64, concatenando as informações de API key e seu valor apresentado na tela. Exemplo:
 
img38.png 
 
Uma dica para concatenar os dados é utilizar o site https://www.base64encode.org/ e inserir o dado conforme abaixo: 
 
img39.png
 
O dado resultante será, nesse formato: YXBpa2V5OnQ5gTU1nZU5hV0FWXXbkJ2ZWJaWnFpLWFlWQldKYzhoNGw=
 
Insira esse resultado acompanhado da palavra “Basic”: 
 
Basic YXBpa2V5OnQ5gTU1nZU5hV0FWXXbkJ2ZWJaWnFpLWFlWQldKYzhoNGw=
 
  • URL do Watson: início da URL localizada no campo Legacy v1 workspace URL:

 

img40.png

 
Ou
 
img41.png
 
Inserir o dado apenas até o .net ou até o .com
 
  • Restante da URL: inserir o restante da URL localizada no campo Legacy v1 workspace URL, inserindo a informação /?version=2018-09-20 no final. Exemplo:
 
/assistant/api/v1/workspaces/b2a4d877-8a6f-4d6f-981e-XXXXX287d27/message/?version=2018-09-20
 
Ou
 
/instances/b2a4d877-8a6f-4d6f-981e-XXXXX287d27/v1/workspaces/c8eabcad-XXX-48a2-XXX-d1b7f205XXc6/message/?version=2018-09-20

Tela completa do componente Watson

 

img43.png

  • Mais parâmetros: opção para informar as intenções de saída do Watson, continuando o fluxo conversacional.
  • Nome das intenções para saída do Watson: nomear as intenções que estão configuradas dentro do Watson Assistant, fazendo com que no momento em que elas sejam acionadas na ferramenta, o componente retorne para a jornada na Zenvia Bots. Exemplo:
 
Caso haja uma intenção chamada AtendimentoHumano, onde a pessoa pede para falar com um atendente e nesse momento o Watson associa com a intenção, o usuário é retornado ao Zenvia Bots para ser direcionado a um humano no mesmo momento.
 
img44.png
Variáveis de saída:
 
  • Intenção do Watson que sairá para o fluxo guiado: #{out01} - nome da intenção por escrito.
 

Template de exemplo para ser utilizado na Zenvia Bots

Copie todo o Json abaixo e cole em um novo fluxo, substituindo o código existente para visualizar a lógica inicial com algumas dicas:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
{
  "alias": "[Template] Fluxo com Watson Assitant",
  "description": "",
  "steps": [
    {
      "id": "step0",
      "type": "callComponent",
      "label": "Integração Watson",
      "properties": {
        "componentId": "a531c540-9627-4fbf-891b-567ea61b7a64",
        "timeUnit": "minute",
        "expirationInMinutes": ""
      },
      "inputs": {
        "intents": "'atendimento, sair, voltarMenu'",
        "authorization_Watson": "'[CÓDIGO EM BASE 64 DA APIKEY:CÓDIGO]'",
        "url_Watson": "'[URL DA CONTA ATÉ .NET]'",
        "resource_Watson": "'[RESTANTE DA URL, INSERINDO \"/?version=2018-09-20\" ao final da URL. Ex: 12345/message/?version=2018-09-20]'"
      }
    },
    {
      "id": "step03",
      "type": "branch",
      "label": "Qual direção?"
    },
    {
      "id": "step04",
      "type": "sendChatActivity",
      "properties": {
        "from": "#{session['chatFrom']}"
      },
      "contents": [
        {
          "type": "text/plain",
          "payload": {
            "text": "Tchau!"
          }
        }
      ]
    },
    {
      "id": "step02",
      "type": "chatEvent",
      "properties": {
        "timeUnit": "minute",
        "expirationInMinutes": ""
      },
      "variables": {
        "userMsg": "payload"
      }
    },
    {
      "id": "step020",
      "type": "sendChatActivity",
      "properties": {
        "from": "#{session['chatFrom']}"
      },
      "contents": [
        {
          "type": "text/plain",
          "payload": {
            "text": "Conversação e configure o Watson Assitant conforme a sua conta na IBM"
          }
        }
      ]
    },
    {
      "id": "idEventoFinal",
      "type": "endEvent",
      "label": "label 3",
      "properties": {
        "endEvent": "true"
      }
    },
    {
      "id": "idEventoInicial",
      "type": "chatEvent",
      "label": "Evento inicial",
      "properties": {
        "startEvent": "true"
      },
      "variables": {
        "chatFrom": "empty"
      },
      "conditions": [
        {
          "type": "channelSourceCondition",
          "values": [
            ""
          ]
        }
      ]
    },
    {
      "id": "step0202",
      "type": "sendChatActivity",
      "properties": {
        "from": "#{session['chatFrom']}"
      },
      "contents": [
        {
          "type": "text/plain",
          "payload": {
            "text": "Quando o usuário responder uma pergunta para que seja absorvida no Watson, a variável precisa sempre ter a nomenclatura de \"userMsg\". Pois assim conseguimos entrar na base da IA."
          }
        }
      ]
    },
    {
      "id": "step0203",
      "type": "sendChatActivity",
      "properties": {
        "from": "#{session['chatFrom']}"
      },
      "contents": [
        {
          "type": "text/plain",
          "payload": {
            "text": "Há como configurarmos saídas de intenções específicas dentro do Watson. Ou seja, o cliente só interage com o bot novamente caso dentro da conversa na IA a resposta seja equivalente a alguma intenção de escape configurada no componente. Ex: interação na IA bate na intenção \"atendimento\", o componente do Flow identifica a intenção e popula a variável OUT01 com o seu nome. E com isso, é possível direcionar a jornada conforme exemplo abaixo."
          }
        }
      ]
    },
    {
      "id": "step05",
      "type": "sendChatActivity",
      "properties": {
        "from": "#{session['chatFrom']}"
      },
      "contents": [
        {
          "type": "text/plain",
          "payload": {
            "text": "Atendimento Humano"
          }
        }
      ]
    }
  ],
  "connections": [
    {
      "from": "step02",
      "to": "step0"
    },
    {
      "from": "step03",
      "to": "step05",
      "label": "Atendimento",
      "conditions": [
        {
          "type": "elCondition",
          "expression": "out01 == 'atendimento'"
        }
      ]
    },
    {
      "from": "step04",
      "to": "idEventoFinal"
    },
    {
      "from": "step03",
      "to": "step04",
      "label": "Sair",
      "conditions": [
        {
          "type": "elCondition",
          "expression": "out01 == 'sair'"
        }
      ]
    },
    {
      "from": "step020",
      "to": "step0202"
    },
    {
      "from": "step0",
      "to": "step0203"
    },
    {
      "from": "step0203",
      "to": "step03"
    },
    {
      "from": "step03",
      "to": "step020",
      "label": "Voltar",
      "conditions": [
        {
          "type": "elCondition",
          "expression": "out01 == 'voltarMenu'"
        }
      ]
    },
    {
      "from": "step05",
      "to": "idEventoFinal"
    },
    {
      "from": "step0202",
      "to": "step02"
    },
    {
      "from": "idEventoInicial",
      "to": "step020"
    }
  ],
  "defaultConversationalChannel": "CHAT"
}
⚠️ Atenção: Conforme o exemplo acima (código Json), a variável de Mensagem do Usuário, para acessar o componente do Watson, precisa sempre possui o nome de userMsg:
 
img45.png