Um programa de indicação é um sistema que recompensa clientes ou parceiros da empresa, oferecendo incentivos ou bônus por trazer novos participantes.
Do ponto de vista técnico, um programa de indicação inclui vários componentes principais:
- Um link de convite — um identificador único que permite que usuários ou clientes convidem outros a participar do programa. O convidador pode compartilhar este link por vários canais (por exemplo, este artigo abordará a geração de links via um bot do WhatsApp, mas os links do programa de indicação podem ser compartilhados por qualquer mensageiro de sua preferência).
- Um banco de dados de participantes, implementado através da integração das funcionalidades do MaviBot e do Google Sheets, onde as informações sobre os usuários convidados e convidadores são registradas.
- Um sistema de rastreamento de indicações que monitora as ações relacionadas à atração de novos participantes por meio de links de indicação. O sistema armazena dados de todas as indicações, permitindo verificar se uma determinada indicação já existe no sistema como um usuário previamente convidado.
Recomendamos fortemente revisar as seções “Fundamentos da Criação de Bots no Mavibot.ai” link e “Google Sheets” link antes de criar o fluxo do seu chatbot.
Sistema de Indicação no WhatsApp
A funcionalidade do bot que está sendo criado incluirá blocos compostos pelos seguintes componentes:
- geração de um link de indicação (afiliado); link
- verificação se o novo usuário já está no banco de dados; link
- notificação ao usuário convidador sobre uma nova indicação; link
- registro de usuários no banco de dados; link
- solicitação de uma lista de indicações. link
Geração do link de indicação
Vamos criar um bloco com um link incorporado que o bot enviará ao usuário mediante o comando “link”. Para isso, crie um novo bloco no fluxo usando um dos dois métodos:
- Clique duas vezes em uma área vazia na tela do construtor:

- Usando o botão "Salvar" na parte inferior da tela e selecionando o tipo de bloco:

Depois disso, na condição do bloco, digite a palavra “Link” e defina o tipo de correspondência como “Ignorar erros de digitação e imprecisões” (isso é útil em caso de erros de digitação do usuário ou outros erros na mensagem):

Para identificar quem indicou o usuário, o bot cria um link usando o seguinte modelo: https://wa.me/(seu número de telefone vinculado ao bot)?text=Você%20foi%20recomendado%20por%20#{phone}%20😌Olá

Vamos analisar mais detalhadamente o link modelo: https://wa.me/(seu número de telefone vinculado ao bot)?text=Você%20foi%20recomendado%20por%20#{phone}%20😌Olá, onde:
- Substitua os parênteses "(seu número de telefone vinculado ao bot)" pelo número de telefone correspondente;
- #{phone} é automaticamente substituído pelo número de telefone do usuário que solicitou seu link de parceiro.
Enviamos o link gerado não como texto do bloco, mas como um anexo — um link clicável com uma notificação (veja a Fig. 2 e Fig. 3):
- escolha inserir um anexo
- selecione o tipo — Link e cole-o no campo 'URL do anexo':

Neste caso, o link aparecerá visualmente encurtado:

Vamos testar a funcionalidade do link usando o recurso "Testar Bot".

Aqui está o resultado: o link direciona o usuário para o chat do mensageiro apropriado com seu número de telefone:

Desta forma, você gerou com sucesso um link de convite que usuários em potencial podem usar para acessar o chatbot. Além disso, ao clicar neste link, o usuário é redirecionado para a janela de chat com uma mensagem pré-preenchida. (Veja a Fig. 6)

Verificação do usuário
Usando funções e expressões regulares em um bloco
O comando de verificação e entrada no banco de dados só funcionará se o bot encontrar um número de telefone na mensagem do usuário. Portanto, é necessário dividir a frase recebida em partes.
Para isso, utiliza-se a função splitter().
Função Splitter()
splitter(str, s, n) - divide uma string em partes. A função retorna um array de elementos.
Parâmetros:
! str ****- a string original
! s ****- o delimitador da string
n - o número máximo de elementos
Exemplo
Função de divisão de string:

Em seguida, o bot precisa verificar se a sequência de dígitos na string é de fato um número de telefone. Para isso, usamos as seguintes expressões regulares:
- Número de telefone geral:
^(\+)?((\d{2,3}) ?\d|\d)(([ -]?\d)|( ?(\d{2,3}) ?)){5,12}\d$ -
Alterar número russo! Apenas número de telefone russo:
^((\+7|7|8)+([0-9]){10})$

Para obter informações sobre como trabalhar com expressões regulares, consulte o artigo intitulado "Expressões Regulares." link
Após o bot verificar que a sequência de dígitos é de fato um número de telefone, salve-o da mensagem como uma variável (por exemplo, #{reff}).
Verificando o número de telefone do usuário como uma indicação no banco de dados
Agora é necessário verificar se o número de telefone do usuário que seguiu o link já é uma indicação (previamente convidado por alguém e registrado em nosso banco de dados). Para isso, crie um bloco no fluxo com uma função de pesquisa por coluna.
Use a função de pesquisa por coluna clicando em "Requisição de API" no bloco, onde você precisa definir os seguintes valores de parâmetro:

! URL da função: https://store.salebot.pro/function/findcell link
! Parâmetros da requisição JSON:
{ "id": "id_da_sua_tabela", "find": "texto_para_pesquisar", "col": número_da_coluna_para_pesquisar, "return": número_da_coluna_para_retornar, "creds_path": "caminho_para_seu_arquivo_de_credenciais_de_autenticação" }
Parâmetros de resposta:
"status": "1" — valor encontrado
"status": "0" — valor não encontrado
"data" — o valor encontrado
"cell_number" — a localização da célula encontrada
Pesquisar por coluna e exibir texto de toda a linha
O parâmetro de retorno deve ser definido como 0.
&#xNAN;{ "id": "id_da_sua_tabela", "find": "texto_para_pesquisar", "col": 2, "return": 0 }
Resposta: {"status":"1","data":{"0":"\u0441\u043e\u043b\u043d\u0446\u0435","1":"\u0440\u0430\u0441\u0441\u0432\u0435\u0442","2":"\u043a\u0440\u044b\u0448\u0430","3":"","4":"\u043d\u0435\u0431\u043e"},"cell_number":{"row":4,"col":1, "col_letter":"A"}}
Detalhamento da resposta:
data — resposta
data|0 — Célula 1
data|1 — Célula 2
data|2 — Célula 3
data|3 — Célula 4
cell_number|row — linha
cell_number|col — coluna
Para saber mais sobre as funções disponíveis para trabalhar com tabelas, consulte o artigo intitulado "Google Sheets." link
Bloco de notificação
Para notificar o usuário que compartilhou o link de indicação de que um novo cliente o seguiu com sucesso, criaremos um bloco dedicado. Para enviar uma notificação sobre a criação de uma nova indicação, use os seguintes parâmetros de requisição (tipo: POST - JSON):

As requisições são feitas usando o método POST para a URL: https://chatter.salebot.pro/api/{api_key}/{action} Onde:
-
api_keyé a chave de acesso da API do seu projeto, que pode ser obtida nas configurações do projeto (veja a Fig. 11).

Você pode recuperar a chave de acesso usando a variável #{api_key}, que armazena o token de acesso gerado atual. Não se esqueça de gerar o token antes de usá-lo.
! URL da requisição: https://chatter.salebot.pro/api/#{api_key}/whatsapp_message link

Você pode encontrar mais detalhes sobre as funções de requisição de API aqui. link
Adicionando os usuários convidado e convidador ao banco de dados
Para isso, usaremos a entrada linha por linha em colunas específicas, o que é feito usando a função mapping.
A tabela deve ter um cabeçalho preenchido (pelo menos uma célula na primeira linha).
! URL da função https://store.salebot.pro/function/gsheets link
! Parâmetros da requisição JSON:
{ "id": "id_da_sua_tabela", "mapping": { "a": "#{variável}", "b": "#{outra_variável}", "d": "texto simples" } }
Se você quiser escrever linhas que não sejam na primeira planilha, adicione o parâmetro list_name à requisição:
{ "id": "id_da_sua_tabela", "mapping": { "a": "texto simples", "b": "#{variável}" }, "list_name": "NomeDaPlanilha" }
Parâmetros:
- id — identificador da tabela*
- a, b, c, d — nomes das colunas
- list_name — o nome da sua planilha (por exemplo, "Planilha2")
*Certifique-se de substituir pelo ID real da sua tabela.
Exemplo de resposta: {"number_row":8}
Se a requisição for executada com sucesso, a resposta incluirá o número da linha, que você pode salvar e usar para operações posteriores.
Visualizando a lista de indicações
Vamos adicionar um comando adicional ao bot que permite aos usuários visualizar sua lista de indicações.
Para encontrar todos os valores especificados em uma coluna, use a função findcell com o parâmetro "find_all". Isso localizará todas as ocorrências do valor "find_all" na coluna "col" especificada e retornará uma lista de valores únicos da coluna "return" como uma string.
! URL da função: https://store.salebot.pro/function/findcell link
! Parâmetros da requisição JSON:
{ "id": "id_da_tabela", "find_all": "valor_de_pesquisa", "list_name": "nome_da_planilha", "col": "número_da_coluna_para_pesquisar", "return": "número_da_coluna_para_retornar_valores", "find": "!" }

Nos valores salvos, especifique:
list → Lista
quantity → Quantidade
Para o usuário, exiba a mensagem:
"Você indicou #{spisok}, seu total de indicações: #{quantity}"
Em outros mensageiros, implementar tal sistema de indicação é ainda mais fácil porque os dados do convidador são passados como um parâmetro oculto durante a transição do link, então o novo usuário não precisa enviar uma mensagem como “Fui convidado por este número.”