Реферальна програма — це система, яка винагороджує клієнтів або партнерів компанії, пропонуючи стимули або бонуси за залучення нових учасників.
З технічної точки зору, реферальна програма включає кілька ключових компонентів:
- Запрошувальне посилання — унікальний ідентифікатор, який дозволяє користувачам або клієнтам запрошувати інших до участі в програмі. Запрошувач може поширювати це посилання через різні канали (наприклад, у цій статті буде розглянуто створення посилань через WhatsApp-бота, але посилання реферальної програми можна поширювати через будь-який зручний месенджер).
- База даних учасників, реалізована через інтеграцію MaviBot та функціоналу Google Таблиць, де записується інформація як про запрошених, так і про запрошуючих користувачів.
- Система відстеження рефералів, яка контролює дії, пов'язані із залученням нових учасників за реферальними посиланнями. Система зберігає дані про всіх рефералів, що дозволяє перевірити, чи вже існує даний реферал у системі як раніше запрошений користувач.
Ми наполегливо рекомендуємо ознайомитися з розділами «Основи створення ботів на Mavibot.ai» посилання та «Google Таблиці» посилання перед створенням вашого чат-бота.
Реферальна система в WhatsApp
Функціонал створюваного бота включатиме блоки, що складаються з наступних компонентів:
- генерація реферального (партнерського) посилання; посилання
- перевірка, чи є новий користувач вже в базі даних; посилання
- сповіщення запрошуючого користувача про нового реферала; посилання
- запис користувачів у базу даних; посилання
- запит списку рефералів. посилання
Генерація реферального посилання
Створимо блок із вбудованим посиланням, яке бот надішле користувачеві за командою «посилання». Для цього створіть новий блок у потоці одним із двох способів:
- Двічі клацніть на порожній області полотна конструктора:

- Використовуючи кнопку «Зберегти» внизу екрана та обравши тип блоку:

Після цього в умові блоку введіть слово «Посилання» та встановіть тип збігу «Ігнорувати помилки та неточності» (це корисно у разі помилок користувача або інших помилок у повідомленні):

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

Розглянемо шаблонне посилання детальніше: https://wa.me/(ваш номер телефону, прив'язаний до бота)?text=Вас%20рекомендував%20#{phone}%20😌Привіт, де:
- Замініть дужки «(ваш номер телефону, прив'язаний до бота)» на відповідний номер телефону;
- #{phone} автоматично замінюється на номер телефону користувача, який запросив своє партнерське посилання.
Надсилаємо згенероване посилання не як текст блоку, а як вкладення — клікабельне посилання зі сповіщенням (див. Рис. 2 та Рис. 3):
- оберіть вставку вкладення
- оберіть тип — Посилання, та вставте його в поле «URL вкладення»:

У цьому випадку посилання візуально виглядатиме скороченим:

Протестуємо функціонал посилання за допомогою функції «Тестувати бота».

Ось результат: посилання перенаправляє користувача у відповідний чат месенджера з вашим номером телефону:

Таким чином, ви успішно згенерували запрошувальне посилання, яке потенційні користувачі можуть використовувати для доступу до чат-бота. Крім того, при натисканні на це посилання користувач перенаправляється у вікно чату з попередньо заповненим повідомленням. (Див. Рис. 6)

Перевірка користувача
Використання функцій та регулярних виразів у блоці
Команда перевірки та запису в базу даних спрацює лише в тому випадку, якщо бот знайде номер телефону в повідомленні користувача. Тому необхідно розділити отриману фразу на частини.
Для цього використовується функція splitter().
Функція Splitter()
splitter(str, s, n) - розділяє рядок на частини. Функція повертає масив елементів.
Параметри:
! str ****- вихідний рядок
! s ****- роздільник рядка
n - максимальна кількість елементів
Приклад
Функція розділення рядка:

Далі боту потрібно перевірити, чи є послідовність цифр у рядку дійсно номером телефону. Для цього використовуємо наступні регулярні вирази:
- Загальний номер телефону:
^(\+)?((\d{2,3}) ?\d|\d)(([ -]?\d)|( ?(\d{2,3}) ?)){5,12}\d$ -
Змінити російський номер! Лише номер телефону України:
^((\+380|380|0)+([0-9]){9})$

Інформацію про роботу з регулярними виразами можна знайти в статті «Регулярні вирази». посилання
Після того, як бот перевірить, що послідовність цифр дійсно є номером телефону, збережіть його з повідомлення як змінну (наприклад, #{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 Таблиці». посилання
Блок сповіщення
Щоб сповістити користувача, який поділився реферальним посиланням, про те, що новий клієнт успішно перейшов за ним, ми створимо окремий блок. Для надсилання сповіщення про створення нового реферала використовуйте наступні параметри запиту (тип: 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}"
В інших месенджерах реалізувати таку реферальну систему ще простіше, оскільки дані запрошувача передаються як прихований параметр під час переходу за посиланням, тому новому користувачеві не потрібно надсилати повідомлення на кшталт «Мене запросив цей номер».


