Programa de indicação
Um programa de indicações é 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ções inclui vários componentes principais:
Um link de convite— um identificador único que permite que usuários ou clientes convidem outras pessoas para participar do programa. Quem convida pode compartilhar esse link por vários canais (por exemplo, este artigo abordará a geração de links por meio de um bot do WhatsApp, mas os links do programa de indicações podem ser compartilhados por qualquer mensageiro de sua preferência).
Um banco de dados de participantes, implementado por meio da integração das funcionalidades do MaviBot e do Google Sheets, onde são registradas informações tanto do usuário convidado quanto de quem convidou.
Um sistema de rastreamento de indicações que monitora ações relacionadas à entrada 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 “Básicos da criação de bots no Mavibot.ai” ссылка e “Google Sheets” ссылка antes de criar o fluxo do seu chatbot.
Sistema de Indicações 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); ссылка
verificação se o novo usuário já está no banco de dados; ссылка
notificação ao usuário que convidou sobre uma nova indicação; ссылка
registro de usuários no banco de dados; ссылка
solicitação de uma lista de indicações. ссылка
Geração de link de indicação
Vamos criar um bloco com um link incorporado que o bot enviará ao usuário ao receber 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 de perto 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} é substituído automaticamente pelo número de telefone do usuário que solicitou o 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 as Fig. 2 e Fig. 3):
escolha inserir um anexo
selecione o tipo — Link, e cole no campo 'URL do anexo':

Nesse caso, o link aparecerá visualmente encurtado:
Vamos testar a funcionalidade do link usando o recurso "Bot de Teste" .

Aqui está o resultado: o link direciona o usuário para a conversa correspondente no mensageiro com o seu número de telefone:

Dessa forma, você gerou com sucesso um link de convite que os potenciais usuários podem usar para acessar o chatbot. Além disso, ao clicar nesse 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, a função splitter() é usada.
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
Função de divisão de string:

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

Para saber mais sobre o trabalho com expressões regulares, consulte o artigo intitulado "Expressões Regulares". ссылка
Depois que o bot verificar que a sequência de dígitos é realmente um número de telefone, salve-a da mensagem como uma variável (por exemplo, #{reff}).
Verificação do número de telefone do usuário como 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 (anteriormente convidado por alguém e registrado em nosso banco de dados). Para isso, crie um bloco no fluxo com uma função de busca de coluna.
Use a função de busca de coluna clicando em "Solicitaçã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 ссылка
! JSON parâmetros da solicitação:
{ "id": "your_table_id", "find": "text_to_search", "col": column_number_to_search_in, "return": column_number_to_return, "creds_path": "path_to_your_auth_credentials_file" }
Parâmetros da resposta:
"status": "1" — valor encontrado
"status": "0" — valor não encontrado
"data" — o valor encontrado
"cell_number" — a localização da célula encontrada
O parâmetro return deve ser definido como 0. { "id": "your_table_id", "find": "text_to_search", "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". ссылка
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 da solicitação (tipo: POST - JSON):

As solicitações são feitas usando o POST método para a URL: https://chatter.salebot.pro/api/{api_key}/{action} Onde:
api_keyé a chave de acesso à 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 atualmente. Não se esqueça de gerar o token antes de usá-lo.
! URL da solicitação: https://chatter.salebot.pro/api/#{api_key}/whatsapp_message ссылка

Você pode encontrar mais detalhes sobre as funções de solicitação da API aqui. ссылка
Adicionando os usuários convidados e quem convidou ao banco de dados
Para isso, usaremos a inserção linha por linha em colunas específicas, o que é feito usando o mapeamento função.
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 ссылка
! JSON parâmetros da solicitação:
{ "id": "your_table_id", "mapping": { "a": "#{variable}", "b": "#{another_variable}", "d": "plain text" } }
Se você quiser gravar linhas não na primeira planilha, adicione o parâmetro list_name à solicitação:
{ "id": "your_table_id", "mapping": { "a": "plain text", "b": "#{variable}" }, "list_name": "SheetName" }
Parâmetros:
id — identificador da tabela*
a, b, c, d — nomes das colunas
list_name — nome da sua planilha (por exemplo, "Sheet2")
*Certifique-se de substituir pelo ID real da sua tabela.
Exemplo de resposta: {"number_row":8}
Se a solicitação for executada com sucesso, a resposta incluirá o número da linha, que você pode salvar e usar para operações futuras.
Visualizando a lista de indicações
Vamos adicionar um comando extra ao bot que permite aos usuários visualizar sua lista de indicações.
Para encontrar todos os valores especificados em uma coluna, use a findcell função com o parâmetro "find_all". Isso localizará todas as ocorrências do "find_all" valor na "col" coluna especificada e retornará uma lista de valores únicos da "return" coluna como uma string.
! URL da função: https://store.salebot.pro/function/findcell ссылка
! Parâmetros da solicitação JSON:
{ "id": "table_id", "find_all": "search_value", "list_name": "sheet_name", "col": "column_number_to_search_in", "return": "column_number_to_return_values_from", "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 esse sistema de indicações é ainda mais fácil porque os dados de quem convidou são passados como um parâmetro oculto durante a transição pelo link, então o novo usuário não precisa enviar uma mensagem como “Fui convidado por este número.”
Atualizado