Реферальная программа — это система, которая вознаграждает клиентов или партнеров компании, предлагая стимулы или бонусы за привлечение новых участников.

С технической точки зрения реферальная программа включает несколько ключевых компонентов:

  1. Пригласительная ссылка — уникальный идентификатор, позволяющий пользователям или клиентам приглашать других для участия в программе. Приглашающий может поделиться этой ссылкой через различные каналы (например, в этой статье будет рассмотрена генерация ссылок через WhatsApp-бота, но ссылки реферальной программы можно отправлять через любой удобный мессенджер).
  2. База данных участников, реализованная через интеграцию MaviBot и Google Sheets, где записывается информация как о приглашенных, так и о приглашающих пользователях.
  3. Система отслеживания рефералов, которая отслеживает действия по привлечению новых участников по реферальным ссылкам. Система хранит данные обо всех рефералах, позволяя проверить, существует ли данный реферал в системе как ранее приглашенный пользователь.

Мы настоятельно рекомендуем ознакомиться с разделами «Основы создания ботов на Mavibot.ai» ссылка и «Google Sheets» ссылка перед созданием вашего чат-бота.

Реферальная система в WhatsApp

Функционал создаваемого бота будет включать блоки, состоящие из следующих компонентов:

  1. генерация реферальной (партнерской) ссылки; ссылка
  2. проверка, есть ли новый пользователь уже в базе данных; ссылка
  3. уведомление приглашающего пользователя о новом реферале; ссылка
  4. запись пользователей в базу данных; ссылка
  5. запрос списка рефералов. ссылка

Генерация реферальной ссылки

Создадим блок со встроенной ссылкой, которую бот отправит пользователю по команде «link». Для этого создайте новый блок в потоке одним из двух способов:

  1. Дважды щелкните по пустой области холста конструктора:

  1. Используя кнопку «Сохранить» в нижней части экрана и выбрав тип блока:

После этого в условии блока введите слово «Link» и установите тип совпадения «Игнорировать опечатки и неточности» (это полезно на случай опечаток пользователя или других ошибок в сообщении):

Чтобы определить, кто пригласил пользователя, бот создает ссылку по следующему шаблону: https://wa.me/(ваш номер телефона, привязанный к боту)?text=Вас%20рекомендовал%20#{phone}%20😌Привет

Рассмотрим шаблон ссылки подробнее: https://wa.me/(ваш номер телефона, привязанный к боту)?text=Вас%20рекомендовал%20#{phone}%20😌Привет, где:

  1. Замените скобки «(ваш номер телефона, привязанный к боту)» на соответствующий номер телефона;
  2. #{phone} автоматически заменяется на номер телефона пользователя, запросившего свою партнерскую ссылку.

Сгенерированную ссылку отправляем не как текст блока, а как вложение — кликабельную ссылку с уведомлением (см. рис. 2 и рис. 3):

  • выберите вставку вложения
  • выберите тип — Ссылка и вставьте ее в поле «URL вложения»:

В этом случае ссылка визуально будет выглядеть сокращенной:

Рис. 4. Вид в WhatsApp

Протестируем работу ссылки с помощью функции «Тест бота».

Вот результат: ссылка направляет пользователя в соответствующий чат мессенджера с вашим номером телефона:

Таким образом, вы успешно сгенерировали пригласительную ссылку, которую потенциальные пользователи могут использовать для доступа к чат-боту. Кроме того, при нажатии на эту ссылку пользователь перенаправляется в окно чата с предварительно заполненным сообщением. (См. рис. 6)

Рис. 6. Заполненное сообщение в WhatsApp

Проверка пользователя

Использование функций и регулярных выражений в блоке

Команда проверки и записи в базу данных будет работать только в том случае, если бот найдет номер телефона в сообщении пользователя. Поэтому необходимо разделить полученную фразу на части.

Для этого используется функция splitter().

Функция Splitter()

splitter(str, s, n) — разделяет строку на части. Функция возвращает массив элементов.

Параметры:

! str ****— исходная строка

! s ****— разделитель строки

n — максимальное количество элементов

Пример

Функция разделения строки:

Далее боту необходимо проверить, является ли последовательность цифр в строке номером телефона. Для этого используем следующие регулярные выражения:

  • Общий номер телефона: ^(\+)?((\d{2,3}) ?\d|\d)(([ -]?\d)|( ?(\d{2,3}) ?)){5,12}\d$
  • Поменять русский номер! Только российский номер телефона: ^((\+7|7|8)+([0-9]){10})$

Информацию о работе с регулярными выражениями можно найти в статье «Регулярные выражения». ссылка

После того как бот проверит, что последовательность цифр действительно является номером телефона, сохраните его из сообщения как переменную (например, #{reff}).

Проверка номера телефона пользователя как реферала в базе данных

Теперь необходимо проверить, является ли номер телефона пользователя, перешедшего по ссылке, уже рефералом (ранее приглашенным кем-то и записанным в нашу базу данных). Для этого создайте в потоке блок с функцией поиска по столбцу.

Используйте функцию поиска по столбцу, нажав «API-запрос» в блоке, где необходимо задать следующие значения параметров:

! URL функции: https://store.salebot.pro/function/findcell ссылка

! Параметры JSON-запроса:

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

Параметры ответа:

"status": "1" — значение найдено

"status": "0" — значение не найдено

"data" — найденное значение

"cell_number" — расположение найденной ячейки

Поиск по столбцу и отображение текста из всей строки

Параметр return должен быть установлен в 0.
&#xNAN;{ "id": "your_table_id", "find": "text_to_search", "col": 2, "return": 0 }
Ответ: {"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"}}
Разбор ответа:

data — ответ

data|0 — Ячейка 1

data|1 — Ячейка 2

data|2 — Ячейка 3

data|3 — Ячейка 4

cell_number|row — строка

cell_number|col — столбец

Чтобы узнать больше о доступных функциях для работы с таблицами, обратитесь к статье «Google Sheets». ссылка

Блок уведомления

Чтобы уведомить пользователя, который поделился реферальной ссылкой, о том, что новый клиент успешно перешел по ней, мы создадим специальный блок. Для отправки уведомления о создании нового реферала используйте следующие параметры запроса (тип: POST - JSON):

Запросы выполняются методом POST по URL: https://chatter.salebot.pro/api/{api_key}/{action} Где:

  • api_key — ключ доступа к API вашего проекта, который можно получить в настройках проекта (см. рис. 11).

Вы можете получить ключ доступа, используя переменную #{api_key}, в которой хранится текущий сгенерированный токен доступа. Не забудьте сгенерировать токен перед его использованием.

! URL запроса: https://chatter.salebot.pro/api/#{api_key}/whatsapp_message ссылка

Подробнее о функциях API-запросов можно узнать здесь. ссылка

Добавление приглашенного и приглашающего пользователей в базу данных

Для этого мы будем использовать построчную запись в определенные столбцы, которая выполняется с помощью функции mapping.

Таблица должна иметь заполненный заголовок (хотя бы одна ячейка в первой строке).

! URL функции https://store.salebot.pro/function/gsheets ссылка

! Параметры JSON-запроса:

{ "id": "your_table_id", "mapping": { "a": "#{variable}", "b": "#{another_variable}", "d": "plain text" } }

Если вы хотите записывать строки не на первом листе, добавьте параметр list_name в запрос:

{ "id": "your_table_id", "mapping": { "a": "plain text", "b": "#{variable}" }, "list_name": "SheetName" }

Параметры:

  • id — идентификатор таблицы*
  • a, b, c, d — имена столбцов
  • list_name — имя вашего листа (например, "Sheet2")

*Убедитесь, что заменили на фактический идентификатор вашей таблицы.

Пример ответа: {"number_row":8}

Если запрос выполнен успешно, ответ будет содержать номер строки, который вы можете сохранить и использовать для дальнейших операций.

Просмотр списка рефералов

Добавим дополнительную команду боту, позволяющую пользователям просматривать свой список рефералов.

Чтобы найти все указанные значения в столбце, используйте функцию findcell с параметром "find_all". Это найдет все вхождения значения "find_all" в указанном столбце "col" и вернет список уникальных значений из столбца "return" в виде строки.

! URL функции: https://store.salebot.pro/function/findcell ссылка

! Параметры 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": "!" }

В сохраненных значениях укажите:

list → Список

quantity → Количество

Для пользователя отобразите сообщение:
"Вы пригласили #{spisok}, всего ваших рефералов: #{quantity}"

В других мессенджерах реализовать такую реферальную систему еще проще, потому что данные приглашающего передаются как скрытый параметр при переходе по ссылке, поэтому новому пользователю не нужно отправлять сообщение типа «Меня пригласил этот номер».