E se eu tivesse um bot pra começar meu Contato Inteligente?

Texto pré-formatado`BOOOOMMMMM DIIIIIAAAAAAA

Aproveitando que estamos em rumo ao Hexa, apresento para vocês o time que traz esse golaço pi que Richarlison de bicicleta, vamos lá essa doc é um oferecimento @Rosiane_Nunes no Gol (UX), @Manel como Técnico (PM), no ataque @murilo.melo, @Isabella_Silva_Monte , @Giusier_Ferreira , @Leonardo_Xavier, @Diogo_Estevao_Ferre1

Então pega pipoca, faz a dança do pombo, pega o litrão de água e bora que hoje o trem ta grande

Documentação para criação chatbot

Esse bot é um bot base para desenvolvimento de inúmeros bots, e contém algumas skills importantes para o desenvolvimento de qualquer Contato Inteligente:

  • Script de markdown genérico para todos os canais;

  • Script de origem;

  • Script de validação de número (caso o canal possua);

  • Salvar telefone automático (caso o canal possua);

  • Relatório de exceções.

Para instalá lo, a primeira coisa que vamos fazer é baixar o JSON neste link.

Depois disso, é preciso subir dentro de um bot de nossa escolha.

Para isso, acesse o Builder do Blip e clique na engrenagem no canto esquerdo. Em seguida, na aba que irá abrir, selecione a aba “Versões” e então selecione “Carregar Fluxo”.

Pronto a base já está instalada. Agora basta realizar a conexão com seus bots e roteador, e adequar o texto conforme a sua necessidade.

Documentação base para criação chatbot

Variáveis de configuração


Variável: TraceTargetType

Valor: Http

Variável: TraceMode

Valor: All

Variável: TraceTarget

Valor: https://take-api-beholder.cs.blip.ai/api/traces/botpadrao4

Variável: timeOffSet

Valor: -3

Ações Globais

Requisição HTTP - SmallTalks

Vamos realizar uma requisição para nossa API de SmallTalks para avaliar a intenção da mensagem. Para isso, vamos adicionar uma ação de “Requisição HTTP” nas “Ações de Saída”. Devemos preencher da seguinte forma:

Método: GET

URL: https://smalltalksapi.cs.blip.ai/api/Analysis?text={{input.content}}

Cabeçalhos:

Key: Content-Type

Value: application/json

Salve tanto a resposta como o status, no nosso caso “responseSmallTalk” e “statusSmallTalk” respectivamente, conforme a imagem abaixo:

Definir variável - Bloco anterior

Agora, vamos criar uma variável para armazenar o ID do bloco anterior para podermos devolver o cliente ali, caso encontremos algum erro. Então vamos adicionar uma ação de “Definir Variável” nas “Ações de Saída”.

Nome da Variável: anterior

Valor: {{state.previous.id}}

Executar script - Identifica Smalltalk

Vamos adicionar um script que vai identificar a intenção dentro da entrada do cliente, e nos ajudará a saber se ele desejava algo além do esperado que ele tenha solicitado.

Uma vez identificado, podemos tratar isso como acharmos melhor.

Agora vamos até às ações globais e adicionamos uma “Ação de Entrada”, e a opção de “Executar Script”. Nas variáveis de entrada vamos passar a variável em que armazenamos o retorno da requisição à API do SmallTalks.

No nosso exemplo aqui “responseSmallTalk” e dentro do corpo do script vamos colocar o seguinte script:


const run = (resp) => {

const respSmallTalk = JSON.parse(resp);

let intent = "";

if (respSmallTalk.analysis.matchesCount > 0) {

if (respSmallTalk.analysis.matches.some(item => item.smallTalk == "GoodMorning" ||

item.smallTalk == "GoodAfternoon" ||

item.smallTalk == "GoodNight"))

intent = "Saudação";

else if (respSmallTalk.analysis.matches.some(item => item.smallTalk == "Greeting" ||

item.smallTalk == "Cordiality"))

intent = "Cordialidade";

else if (respSmallTalk.analysis.matches.some(item => item.smallTalk == "Sorry"))

intent = "Desculpas";

else {

intent = 'null';

}

}

else {

intent = 'null';

}

return intent;

}

Agora como de costume, é só salvar o retorno do script em uma variável da sua escolha. No nosso caso será “smallTalkIntent”.

Início

Ações

Agora vamos

Função negrito

Para utilizarmos a função de negrito será necessário que adicionemos um script ao fluxo. Este fluxo irá reconhecer o canal e então o script irá retornar o markdown correto para aquele canal. No bloco “Inicio”.

No menu de ações, adicione uma ação de saída e escolha a opção de “Executar Script” e insira este script:


function run(source) {

let bold = { 'start': '', 'end': '' };

try {

switch (source) {

case 'whatsapp':

return { 'start': '*', 'end': '*' };

case 'instagram':

return { 'start': '', 'end': '' };

case 'telegram':

return { 'start': '**', 'end': '**' };

case 'blipchat':

return { 'start': '<b>', 'end': '</b>' };

case 'email':

return { 'start': '<b>', 'end': '</b>' };

case 'workchat':

return { 'start': '<b>', 'end': '</b>' };

case 'messenger':

return { 'start': '<b>', 'end': '</b>' };

default:

return { 'start': '', 'end': '' };

}

}

catch (ex) {

return bold;

}

}

Agora você irá salvar o retorno deste script e então terá um JSON com duas chaves, uma de início e uma de fim.

Quando formos utilizar o markdown, ficará desta forma:

{{[email protected]}}TEXTOTEXTO{{[email protected]}}

Obs.: as chaves “}}” e “{{“ precisam ser coladas no texto.

Função Itálico

Para utilizarmos a função de itálico será necessário que adicionemos um script ao fluxo que irá reconhecer o canal e então o script irá retornar o markdown correto para aquele canal. Para isso, vamos ao bloco “Inicio”.

No menu de ações, adicione uma ação de saída e escolha a opção de “Executar Script” e insira este script:


function run(source) {

let italic = { 'start': '', 'end': '' };

try {

switch (source) {

case 'whatsapp':

return { 'start': '_', 'end': '_' };

case 'instagram':

return { 'start': '', 'end': '' };

case 'telegram':

return { 'start': '__', 'end': '__' };

case 'blipchat':

return { 'start': '<i>', 'end': '</i>' };

case 'email':

return { 'start': '<i>', 'end': '</i>' };

case 'workchat':

return { 'start': '<i>', 'end': '</i>' };

case 'messenger':

return { 'start': '<i>', 'end': '</i>' };

default:

return { 'start': '', 'end': '' };

}

}

catch (ex) {

return italic;

}

}

Agora você irá salvar o retorno deste script e então terá um JSON com duas chaves, uma de início e uma de fim.

Quando formos utilizar o markdown, ficará desta forma:

{{[email protected]}}TEXTOTEXTO{{[email protected]}}

Obs.: as chaves “}}” e “{{“ precisam ser coladas no texto.

Função quebra de linha

Para utilizarmos a função de quebra de linha será necessário que adicionemos um script ao fluxo que irá reconhecer o canal e então o script irá retornar o markdown correto para aquele canal. Para isso, vamos ao bloco “Inicio”.

No menu de ações, adicione uma ação de saída e escolha a opção de “Executar Script” e insira este script:


function run() {

let quebrarLinha = { 'simples': '', 'dupla': '' };

try {

var resource = /^[0-9]+$/.test("{{contact.identity}}".split('@')[0]);

switch (resource) {

case true:

return { 'simples': '\n', 'dupla': '\n\n' };

case false:

return { 'simples': '<br>', 'dupla': '<br><br>' };;

default:

return quebrarLinha;

}

}

catch (ex) {

return quebrarLinha;

}

}

Agora você irá salvar o retorno deste script e então terá um JSON com duas chaves, uma de início e uma de fim.

Quando formos utilizar o markdown, ficará desta forma:

{{[email protected]}}TEXTOTEXTO{{[email protected]}}

Obs.: as chaves “}}” e “{{“ precisam ser coladas no texto.

Script para verificar origem do cliente

Devido aos múltiplos canais, precisamos saber por qual canal nosso cliente chegou, para apresentarmos o menu correto para ele.

Algumas vezes o Blip encontra dificuldade para identificar isso através da variável “contact.source”. Então vamos rodar um script que irá identificar o canal do nosso cliente.

Para implementar esse script, vamos adicionar uma “Ação de Saída” no bloco “Inicio” e colocar nas variáveis de entrada apenas uma variável, que irá variar caso o bot esteja no modelo de roteador ou não.

Caso esteja no modelo de roteador, por segurança, passaremos a “tunnel.originator” . Caso esteja em uma estrutura de bot simples, utilizamos “contact.identity”.

O script que deve ser introduzido deve ser este aqui:


function run(identidadeDoContato) {

const source = identidadeDoContato.split('@')[1].split('.')[0];

switch (source) {

case 'wa':

return "whatsapp";

break;

case '0mn':

return "blipchat";

break;

case 'messenger':

return "messenger";

break;

case 'telegram':

return "telegram";

break;

case 'instagram':

return "instagram";

break;

case 'mailgun':

return "email";

break;

case 'workplace':

return "workchat";

break;

default:

return "outros"

break;

}

}

Este script deve salvar apenas o retorno do script, que no nosso caso utilizamos a variável “origem” para armazenar essa informação.

Script para pegar telefone do cliente

Essa função será responsável por capturar o número dos clientes que vêm do canal do WhatsApp.

Vamos colocar um script que irá fazer a captura. Adicionaremos uma “Ação de Saída” no bloco “Início” e criaremos uma ação de execução de script, que vai ter como variável de entrada a variável a “tunnel.originator”, caso o bot esteja na estrutura de roteador. E “contact.identity” caso esteja numa estrutura de bot simples.

O script que deve ser executado é este:


function run(identidadeDoContato) {

const telefone = identidadeDoContato.split('@')[0]

return telefone;

}

Agora iremos salvar o retorno em uma variável para salvar o número de telefone do nosso cliente. No nosso caso, vamos usar a variável “telefone”, e vamos inserir uma condição de execução para executar somente se a variável “origem” for igual a “whatsapp”.

Para vincular essa informação nos dados do nosso contato, adicionamos uma ação de “Definir Contato” e chamar a variável escolhida para armazenar o número de telefone. No nosso caso será a variável “telefone”, como no print abaixo:

Script para definir header

Para lidarmos com múltiplos canais, usamos múltiplos headers para os conteúdos dinâmicos para podermos montar um tipo de conteúdo para cada canal.

Adicionamos um script para identificar o canal e definir o header que deve ser utilizado. Vamos ao bloco “Inicio” e nas “Ações de Saída” adicionamos uma ação de “Executar Script”, nas variáveis de entrada vamos passar a variável que armazenamos o canal de origem do cliente, no nosso caso a “origem”, e dentro do script iremos inserir este script aqui:


const run = (source) => {

if (source != "whatsapp")

return "application/vnd.lime.select+json"

else

return "application/json"

}

Devemos apenas armazenar essa informação dentro de uma variável da sua escolha. Para salvar essa informação, no nosso caso será a variável “header”.

Condições de Saída

1 - Se: Variável / Condição: Existe / Variável: cliente / Ir Para: 1.1.0 Boas vindas cliente

Aqui avaliamos se a variável “cliente” existe, pois se existe o cliente já passou pelo fluxo. Esta validação é importante para não fazer as mesmas perguntas duas vezes.

2 - Se: Resposta do Usuário / Condição: Corresponde a Regex/ Valor: cliente / Ir Para: 1.0.0 Boas-vindas

Saída Padrão

Exceções

1.0.0 Boas-vindas

Utilizamos uma mensagem de boas-vindas em texto e em ações definimos uma variável com um valor “0” e o nome de “cliente”.

Para que na próxima vez que o cliente retorne no bot ele caia no bloco “1.1.0 Boas-vindas cliente”, definindo a saída do bloco início para “se variável cliente existe ir para boas-vindas cliente”

Ações

Definir Variável CLIENTE

Aqui iremos criar uma variável para que a próxima vez que o cliente retornar ao fluxo, o bot não voltar a fazer as mesmas perguntas.

Conteúdo

Texto 1

Olá, eu sou o {{[email protected]}}Bot Base{{[email protected]}}

Condições de Saída

1 - Se: Resposta do Usuário / Condição: Existe / Ir Para: 2.0.0 Solicita nome

Saída Padrão

Exceções

2.0.0 Solicita nome

Conteúdo

Texto 1

Me fala o seu {{[email protected]}}nome{{[email protected]}}, por favor.

Condições de Saída

1 - Se: Resposta do Usuário / Condição: Existe / Ir Para: 2.0.0 Recebe nome

Saída Padrão

Exceções

2.0.0 Recebe nome

Ações

Definir NOME

Após coletar o nome, iremos criar uma “Ação de Saída” escolhendo a ação de “Definir Contato” e dentro do campo contato passar a variável “input.content” e assim iremos salvar o nome que o cliente informou.

Condições de Saída

1 - Se: Resposta do Usuário / Condição: Existe / Ir Para: 3.0.0 Solicita telefone

Saída Padrão

Exceções

3.0.0 Solicita telefone

Conteúdo

Texto 1

E qual é o seu {{[email protected]}}telefone{{[email protected]}}?

Condições de Saída

1 - Se: Resposta do Usuário / Condição: Existe / Ir Para: 3.0.0 Recebê telefone

Saída Padrão

Exceções

3.0.0 Receber telefone

Ações

Script para validar telefone

Após coletar o telefone, iremos criar uma “Ação de Saída", vamos selecionar a opção de “Executar Script” nas “Variáveis de Entrada" e vamos passar “input.content” no corpo da ação. Para isso, devemos colocar o seguinte script:

function run(input) {

const telDigitado = input.replace(/[^\d]+/g, ''); // retira hífem, parênteses, espaço...

const telefoneValido = /^[1-9]{2}(?:[2-8]|9[1-9])[0-9]{3}[0-9]{4}$/.test(telDigitado); // valida

return telefoneValido;

}

Esse script irá validar se o número que o usuário passou é um número válido. Então vamos salvar essa informação em uma variável, no nosso caso “telefoneValido” ele irá retornar “True” caso seja válido e “False” caso não.

Definir telefone

Após coletar o nome, iremos criar uma “Ação de Saída” escolhendo a ação de “Definir Contato” e dentro do campo contato passar a variável “input.content” e assim iremos salvar o número de telefone que o cliente informou.

Condições de Saída

1 - Se: Resposta do Usuário / Condição: Existe / Ir Para: 4.0.0 Menu

Saída Padrão

Exceções

1.1.0 Boas-vindas para cliente

Conteúdo

Texto 1

Olá {{contact.name}}, bom te ver de novo por aqui.

Condições de Saída

1 - Se: Resposta do Usuário / Condição: Existe / Ir Para: 2.1.0 Questiona se nome está correto

2.1.0 Questiona se nome está correto

Ações

Script para definir body

Vamos adicionar um script que vai montar um json contendo o menu de acordo com o canal escolhido pelo cliente. Para isso vamos adicionar uma “Ação de Entrada” e nas variáveis de entrada inserir a variável em que armazenamos o canal que o cliente está, no nosso caso a variável “source” e dentro do corpo do script vamos colocar o seguinte script:


const run = (source) => {

if (source == "whatsapp")

let template = {

"recipient_type": "individual",

"type": "interactive",

"interactive": {

"type": "button",

"body": {

"text": "Continuo falando com {{contact.name}}?"

},

"action": {

"buttons": [

{

"type": "reply",

"reply": {

"id": "unique-postback-id",

"title": "Sim"

}

},

{

"type": "reply",

"reply": {

"id": "unique-id",

"title": "Não"

}

}

]

}

}

}

else

let template = {

"text": "Continuo falando com {{contact.name}}?",

"options": [

{

"order": 1,

"text": "Sim"

},

{

"order": 2,

"text": "Não"

}

]

};

return template;

}

Vamos salvar o retorno dentro de uma variável que armazenará o corpo do menu. No nosso caso vamos salvar na variável “body”.

Conteúdo

Conteúdo Dinâmico

Dentro do conteúdo vamos inserir um conteúdo dinâmico, pois com ele conseguimos apresentar o menu ou quick reply conforme o canal do cliente.

Vamos em conteúdos e adicionamos um “Conteúdo Dinâmico”. No cabeçalho vamos passar a variável que contém o cabeçalho de cada canal. No nosso caso, a variável é a “header” e no corpo do conteúdo a variável que contém o JSON que monta o menu. Ficará assim:

Condições de Saída

1 - Se: Resposta do Usuário / Condição: Existe / Ir Para: 2.1.0 Responde questiona nome

Saída Padrão

Exceções

2.1.0 Responde questiona nome

Condições de Saída

1 - Se: Resposta do Usuário / Condição: Igual a/ Valor: ( 1) (Sim)/ Ir Para: 3.1.0 Questiona se telefone está correto

2 - Se: Resposta do Usuário / Condição: Igual a/ Valor: (Não) (2)/ Ir Para: 2.0.0 Solicita nome

Saída Padrão

Exceções

3.1.0 Questiona se telefone está correto

Ações

Script para definir body

Vamos adicionar um script que vai montar um JSON contendo o menu conforme o canal escolhido pelo cliente.

Para isso, vamos adicionar uma “Ação de Entrada” e nas variáveis de entrada colocar a variável em que armazenamos o canal que o cliente está. No nosso caso, a variável “source” e dentro do corpo do script vamos colocar o seguinte script:


const run = (source) => {

if (source == "whatsapp")

let template = {

"recipient_type": "individual",

"type": "interactive",

"interactive": {

"type": "button",

"body": {

"text": "Para a gente começar, o seu {{[email protected]}}número de telefone{{[email protected]}} é : {{contact.phoneNumber}}?"

},

"action": {

"buttons": [

{

"type": "reply",

"reply": {

"id": "unique-postback-id",

"title": "Certo!"

}

},

{

"type": "reply",

"reply": {

"id": "unique-id",

"title": "Errado"

}

}

]

}

}

}

else

let template = {

"text": "Eu estou falando com {{[email protected]}}{{primeiroNome}}{{[email protected]}}?",

"options": [

{

"order": 1,

"text": "Certo!"

},

{

"order": 2,

"text": "Errado"

}

]

};

return template;

}

Vamos salvar o retorno dentro de uma variável que armazenará o corpo do menu. No nosso caso, vamos salvar na variável “body”.

Conteúdo

Conteúdo Dinâmico

Dentro do conteúdo vamos inserir um conteúdo dinâmico, pois com ele conseguimos apresentar o menu ou quick reply conforme o canal do cliente.

Vamos em conteúdos e adicionamos um “Conteúdo Dinâmico”. No cabeçalho vamos passar a variável que contém o cabeçalho de cada canal. No nosso caso, a variável é a “header” e no corpo do conteúdo a variável que contém o JSON que monta o menu. Ficará assim:

Condições de Saída

1 - Se: Resposta do Usuário / Condição: Existe / Ir Para: 2.1.0 Responde questiona nome

Saída Padrão

Exceções

3.1.0 Resposta questiona telefone

Condições de Saída

1 - Se: Resposta do Usuário / Condição: Igual á/ Valor: ( 1) (certo) (Certo!)/ Ir Para: 4.0.0 Menu

2 - Se: Resposta do Usuário / Condição: Igual á/ Valor: (Errado) (2)/ Ir Para: 3.0.0 Solicita telefone

Saída Padrão

Exceções

4.0.0 Menu

Ações

Script para definir body

Vamos adicionar um script que vai montar um JSON contendo o menu conforme o canal escolhido pelo cliente.

Para isso, vamos adicionar uma “Ação de Entrada” e nas variáveis de entrada colocar a variável em que armazenamos o canal que o cliente está. No nosso caso, a variável “source” e dentro do corpo do script vamos colocar o seguinte script:


const run = (source) => {

if (source == "whatsapp")

let template = {

"recipient_type": "individual",

"type": "interactive",

"interactive": {

"type": "list",

"body": {

"text": "Sobre o que você deseja falar hoje??"

},

"action": {

"button": "Ver opções",

"sections": [

{

"title": "Opções",

"rows": [

{

"id": "ID 1.1",

"title": "OPÇÃO 1"

},

{

"id": "ID 1.2",

"title": "OPÇÃO 2"

},

{

"id": "ID 1.3",

"title": "OPÇÃO 3"

},

{

"id": "ID 1.4",

"title": "OPÇÃO 4"

}

]

}

]

}

}

}

else

let template = {

"text": "Sobre o que você quer falar hoje?",

"options": [

{

"order": 1,

"text": "OPÇÃO 1"

},

{

"order": 2,

"text": "OPÇÃO 2"

},

{

"order": 3,

"text": "OPÇÃO 3"

},

{

"order": 4,

"text": "OPÇÃO 4"

}

]

};

return template;

}

Vamos salvar o retorno dentro de uma variável que armazenará o corpo do menu. No nosso caso, vamos salvar na variável “body”.

Conteúdo

Conteúdo Dinâmico 1

Dentro do conteúdo vamos inserir um conteúdo dinâmico, pois com ele conseguimos apresentar o menu ou quick reply conforme o canal do cliente.

Para isso, vamos em conteúdos e adicionar um “Conteúdo Dinâmico”. No cabeçalho vamos passar a variável que contém o cabeçalho de cada canal. No nosso caso, a variável é a “header” e no corpo do conteúdo a variável que contém o JSON que monta o menu. No nosso exemplo ficará assim:

Condições de Saída

1 - Se: Resposta do Usuário / Condição: Existe / Ir Para:4.0.0 Resposta menu

Saída Padrão

Exceções

4.0.0 Resposta menu

Condições de Saída

1 - Se: Resposta do Usuário / Condição: Igual á/ Valor: (OPÇÃO 1) (1)/ Ir Para:4.0.0 Resposta menu

2 - Se: Resposta do Usuário / Condição: Igual á/ Valor: (OPÇÃO 2) (2)/ Ir Para:4.0.0 Resposta menu

3 - Se: Resposta do Usuário / Condição: Igual á/ Valor: (OPÇÃO 3) (3)/ Ir Para:4.0.0 Resposta menu

4 - Se: Resposta do Usuário / Condição: Igual á/ Valor: (OPÇÃO 4) (4)/ Ir Para:4.0.0 Resposta menu

Saída Padrão

Exceções

5.1.0 Opção 1

Ações

REDIRECIONAR SUBBOT

Serviço: Subbot1

ENVIAR MENSAGEM: True

Valor do contexto: BotPrincipal

Conteúdo

Texto 1

Opção 1

Condições de Saída

Saída Padrão

Início

5.2.0 Opção 2

Ações

REDIRECIONAR SUBBOT

Serviço: Subbot2

ENVIAR MENSAGEM: True

Valor do contexto: BotPrincipal

Conteúdo

Texto 1

Opção 2

Condições de Saída

Saída Padrão

Início

5.3.0 Opção 3

Ações

REDIRECIONAR SUBBOT

Serviço: Subbot3

ENVIAR MENSAGEM: True

Valor do contexto: BotPrincipal

Conteúdo

Texto 1

Opção 3

Condições de Saída

Saída Padrão

Início

5.4.0 Opção 4

Ações

REDIRECIONAR SUBBOT

Serviço: Subbot4

ENVIAR MENSAGEM: True

Valor do contexto: BotPrincipal

Conteúdo

Texto 1

Opção 4

Condições de Saída

Saída Padrão

Início

Exceções

Condições de Saída

1 - Se: Resposta do Usuário / Condição: Igual á/ Valor: (sair)/ Ir Para: 0.0.0 Usuário escolhe sair

2 - Se: Variável / Variável: [email protected] /Condição: Igual á/ Valor: (true)/ Ir Para: 0.1.0 Xingamento

3 - Se: Variável / Variável: smallTalkIntent /Condição: Igual á/ Valor: (Saudação)/ Ir Para: 0.2.0 Saudação

4 - Se: Variável / Variável: smallTalkIntent /Condição: Igual á/ Valor: (Desculpas)/ Ir Para: 0.3.0 Desculpas

5 - Se: Variável / Variável: [email protected] /Condição: Igual á/ Valor: (Cordialidade)/ Ir Para: 0.4.0 Cordialidade

6 - Se: Variável / Variável: state.previous.name /Condição: Igual á/ Valor: (3.0.0 Recebe telefone)/ Ir Para: 0.6.0 Retorna para recebe telefone

7 - Se: Variável / Variável: state.previous.name /Condição: Igual á/ Valor: (3.1.0 Resposta questiona telefone)/ Ir Para: 0.5.0 Retorna para Resposta questiona telefone

8 - Se: Variável / Variável: smallTalkIntent/Condição: Igual á/ Valor: (null)/ Ir Para: 0.8.0 Erro padrão

9 - Se: Variável / Variável: state.previous.name /Condição: Igual á/ Valor: (2.1.0 Responde questiona nome)/ Ir Para: 0.7.0 Retorna para questiona nome

Saída Padrão

Início

0.0.0 Usuário escolhe sair

Ações

REDIRECIONAR PRINCIPAL S/M

Vamos nesse caso retornar o cliente ao início do fluxo,

Serviço: PrincipalWhatsApp

ENVIAR MENSAGEM: False

Condições de Saída

Saída Padrão

Início

0.1.0 Xingamento

Conteúdo

Texto 1

Poxa, não me xinga!

Eu tenho sentimentos :frowning:

Texto 2

Vamos tentar novamente…

Saída Padrão

Variável: {{anterior}}

0.2.0 Saudação

Ações

Executar script - Saudação

Aqui vamos usar um script para saudação de “Bom dia, Boa Tarde e Boa Noite”, conforme o horário.

Para isso, vamos nas “Ações de Saída” e dentro das "Variáveis de Entrada” vamos passar a variável “config.timeOffSet” e dentro do corpo o seguinte script:


const run = (offset) => {

var now = new Date();

now = now.getUTCHours() - 3;

if (now >= 6 && now < 12) {

return "Bom dia pra você também 😎"

}

else if (now < 18) {

return "Boa tarde pra você também 😊"

}

else

return "Boa noite pra você também 😁"

}

Depois disso, vamos salvar o retorno numa variável que vamos apresentar dentro das caixas de texto, no nosso caso a variável vai ser “saudacao”.

Conteúdo

Texto 1

{{saudacao}}

Texto 2

Agora, continuando…

Condições de Saída

Saída Padrão

Variável: {{anterior}}

0.3.0 Desculpas

Conteúdo

Texto 1

Desculpas aceitas…

Texto 2

Só peço um pouco de paciência da próxima vez :disappointed_relieved:

Texto 3

Estou me esforçando bastante, mas ainda estou aprendendo :sweat:

Texto 4

Agora, continuando…

Condições de Saída

Saída Padrão

Variável: {{anterior}}

0.4.0 Cordialidade

Conteúdo

Texto 1

Estou muito bem!

Obrigado por perguntar :blush:

Texto 2

Agora, continuando…

Condições de Saída

Saída Padrão

Variável: {{anterior}}

0.5.0 Retorna para Resposta questiona telefone

Conteúdo

Texto 1

Por favor, selecione a opção desejada.

Condições de Saída

Saída Padrão

3.1.0 Resposta questiona telefone

0.6.0 Retorna para receber telefone

Conteúdo

Texto 1

Por favor, digite um {{[email protected]}}número{{[email protected]}} válido.

Condições de Saída

Saída Padrão

3.0.0 Recebe telefone

0.7.0 Retorna para questionar nome

Conteúdo

Texto 1

Por favor, selecione a opção desejada.

Condições de Saída

Saída Padrão

2.1.0 Responde questiona nome

0.8.0 Erro padrão

Conteúdo

Texto 1

Desculpe, ainda estou aprendendo.

Vamos tentar novamente?

Condições de Saída

Saída Padrão

Variável: {{anterior}}

12 curtidas

Célula Atenas, só os filosofos kkk.Sensacional! Elite!

3 curtidas