# 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:

1. 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).
2. 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.
3. 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.

{% hint style="success" %}
Recomendamos fortemente revisar as seções “Básicos da criação de bots no Mavibot.ai” <mark style="color:vermelho;">**ссылка**</mark> e “Google Sheets” <mark style="color:vermelho;">**ссылка**</mark> antes de criar o fluxo do seu chatbot.
{% endhint %}

## Sistema de Indicações no WhatsApp

A funcionalidade do bot que está sendo criado incluirá blocos compostos pelos seguintes componentes:

1. geração de um link de indicação (afiliado); <mark style="color:vermelho;">**ссылка**</mark>
2. verificação se o novo usuário já está no banco de dados; <mark style="color:vermelho;">**ссылка**</mark>
3. notificação ao usuário que convidou sobre uma nova indicação; <mark style="color:vermelho;">**ссылка**</mark>
4. registro de usuários no banco de dados; <mark style="color:vermelho;">**ссылка**</mark>
5. solicitação de uma lista de indicações. <mark style="color:vermelho;">**ссылка**</mark>

### 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:

1. Clique duas vezes em uma área vazia na tela do construtor:

<figure><img src="/files/988672357c6e059ef0a5f8b8bcff45115034765e" alt="" width="563"><figcaption><p>Como criar um bloco com um clique do mouse</p></figcaption></figure>

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

<figure><img src="/files/a72343827df0da8715a4c32da5f8a236f246a567" alt="" width="563"><figcaption><p>Como criar um bloco com um tipo selecionado</p></figcaption></figure>

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):

<figure><img src="/files/7c8fb70942f07dfae013bc86a65c0ab79b9932f1" alt="" width="310"><figcaption><p>Fig. 1</p></figcaption></figure>

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

<figure><img src="/files/6d2d7ddd81b3507549ccbe270e2a2eb5a35eb13b" alt=""><figcaption><p>Fig. 2 Como inserir um link em um bloco do fluxo</p></figcaption></figure>

Vamos analisar mais de perto o link modelo: [https://wa.me/(seu](https://wa.me/%28your) número de telefone vinculado ao bot)?text=Você%20foi%20recomendado%20por%20#{phone}%20😌Olá, onde:

1. Substitua os parênteses "(seu número de telefone vinculado ao bot)" pelo número de telefone correspondente;
2. \#{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
* &#x20;selecione o tipo — Link, e cole no campo 'URL do anexo':

<figure><img src="/files/a0bae56c1167b71036f93e23fd7eb1ec3d97d774" alt="" width="323"><figcaption><p>Fig. 3. Anexo -> tipo -> link</p></figcaption></figure>

Nesse caso, o link aparecerá visualmente encurtado:

![Fig. 4. Visualização no WhatsApp](https://lh5.googleusercontent.com/vW_tS8GIDqDbN0PkdgQsa6xeeiBBfxuC4Qp8QuzXRz98yI4fphKEUIE22MiBcq4q_RvlQLlAEtlVzcL-hln5DbHaM-F1tuSBNp9y5zhvR5efRmjzDbcTlox5AUDvhnVorlBEdYsX)

Vamos testar a funcionalidade do link usando o recurso **"Bot de Teste"** .

<figure><img src="/files/a5d5cf13e39a86775a6184e8187f1e03ee2ad64c" alt="" width="237"><figcaption><p>Fig. 5. Como testar um bot</p></figcaption></figure>

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

<figure><img src="/files/3f829bacac1ebd86d30bf2c72662acbaaf01df80" alt="" width="563"><figcaption><p>Testando a funcionalidade do link</p></figcaption></figure>

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)

![Fig. 6. Mensagem preenchida no WhatsApp](https://lh5.googleusercontent.com/60e0Pcv5362t53lD5Y0evDiAAmeyCoL-eSg_1wXPsgFiKw-Nn0Zmb3WUwBE16lCBr84e56RB863VJd8GFW4kqZAsXMRzEEIFum_ThIdbr58IqV9_JP-kp3IVnfNZoAsJ7d_n4OI4)

### Verificação do usuário&#x20;

**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.

{% tabs %}
{% tab title="Função splitter()" %}
**splitter(str, s, n)** - divide uma string em partes. A função retorna um array de elementos. <br>

Parâmetros:

<mark style="color:vermelho;">**!**</mark> <mark style="color:vermelho;">**str**</mark> <mark style="color:vermelho;"></mark><mark style="color:vermelho;">- a string original</mark>

<mark style="color:vermelho;">**!**</mark> <mark style="color:vermelho;">**s**</mark> <mark style="color:vermelho;"></mark><mark style="color:vermelho;">- o delimitador da string</mark>

**n** - o número máximo de elementos
{% endtab %}

{% tab title="Exemplo" %}
Função de divisão de string:

<figure><img src="/files/e61f7fb1492f14acb75472294413c6d536f4fccf" alt=""><figcaption><p>Fig. 8. Dividindo a string</p></figcaption></figure>
{% endtab %}
{% endtabs %}

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$`
* <mark style="color:vermelho;">**Trocar o número russo!**</mark> Somente número de telefone russo: `^((\+7|7|8)+([0-9]){10})$`

<figure><img src="/files/5a2a60937d1201c45b1375ce4e4034508dc4af96" alt="" width="500"><figcaption><p>Fig. 9. Expressão regular para número de telefone</p></figcaption></figure>

{% hint style="info" %}
Para saber mais sobre o trabalho com expressões regulares, consulte o artigo intitulado "Expressões Regulares". <mark style="color:vermelho;">**ссылка**</mark>
{% endhint %}

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:

<figure><img src="/files/32adf5bb3bbaf7aaf090425136aa031c09a7fa87" alt="" width="337"><figcaption><p>Fig. 9</p></figcaption></figure>

<mark style="color:vermelho;">**!**</mark>**&#x20;URL da função**: <https://store.salebot.pro/function/findcell> <mark style="color:vermelho;">**ссылка**</mark>

<mark style="color:vermelho;">**!**</mark>**&#x20;JSON** **parâmetros da solicitação:**&#x20;

**{ "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

{% tabs %}
{% tab title="Busca por coluna e exibição de texto da linha inteira" %}
O parâmetro return deve ser definido como 0.\
\&#xNAN;**{ "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:&#x20;

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&#x20;

cell\_number|col — coluna&#x20;
{% endtab %}
{% endtabs %}

{% hint style="info" %}
Para saber mais sobre as funções disponíveis para trabalhar com tabelas, consulte o artigo intitulado "Google Sheets". <mark style="color:vermelho;">**ссылка**</mark>
{% endhint %}

### 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**):

<figure><img src="/files/4d9dbecc0000fba1b70b259bdfa222ab151fed72" alt="" width="357"><figcaption></figcaption></figure>

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).

<figure><img src="/files/a7ef3c5c9be03495975678dde66118d00b8de5b0" alt="" width="563"><figcaption><p>Fig. 11.</p></figcaption></figure>

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.**

<mark style="color:vermelho;">**!**</mark>**&#x20;URL da solicitação:** [**https://chatter.salebot.pro/api/#{api\_key}/whatsapp\_message**](https://chatter.salebot.pro/api/#{api_key}/whatsapp_message) <mark style="color:vermelho;">**ссылка**</mark>

<figure><img src="/files/411f180b13f61c50a6190dce22386d0f422099d6" alt="" width="563"><figcaption><p>Fig. 12. Notificação no Whatsapp</p></figcaption></figure>

{% hint style="info" %}
Você pode encontrar mais detalhes sobre as funções de solicitação da API aqui. <mark style="color:vermelho;">**ссылка**</mark>
{% endhint %}

### 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.

{% hint style="danger" %}
A tabela deve ter um cabeçalho preenchido (pelo menos uma célula na primeira linha).
{% endhint %}

<mark style="color:vermelho;">**!**</mark>**&#x20;URL da função** <https://store.salebot.pro/function/gsheets> <mark style="color:vermelho;">**ссылка**</mark>

<mark style="color:vermelho;">**!**</mark>**&#x20;JSON** **parâmetros da solicitação:**&#x20;

{ "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.

<mark style="color:vermelho;">**!**</mark>**&#x20;URL da função:**  <https://store.salebot.pro/function/findcell> <mark style="color:vermelho;">**ссылка**</mark>

<mark style="color:vermelho;">**!**</mark>**&#x20;Parâmetros da solicitação JSON:**&#x20;

{ "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": "!" }

<figure><img src="/files/6766a4cfafc0543f630dde27cab1aa0328a8fb84" alt="" width="449"><figcaption></figcaption></figure>

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.”*


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.mavibot.ai/doc/pt/como-fazer.../programa-de-indicacao.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
