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
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
Texto 3
Estou me esforçando bastante, mas ainda estou aprendendo
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
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?