Реферальная программа — самый дешёвый канал привлечения для бота, потому что приводят пользователей сами клиенты. Telegram даёт удобный механизм через start-параметр в ссылке: t.me/your_bot?start=ref123. Разберём, как собрать программу, которая работает и не уходит в минус из-за фрода — от схемы БД до антифрода, метрик и юридической обвязки.
Зачем вообще реферал
Маркетинг через таргет в РФ дорожает: средний CAC в нишах SaaS, EdTech и e-commerce — 1500–8000 ₽ за активного. Реферальная программа стабильно даёт CAC в 2–5 раз ниже paid, потому что приглашение — это рекомендация от знакомого, а не холодный креатив.
Главные плюсы:
- CAC ниже — платите фиксированный бонус, а не аукцион.
- Конверсия в платёж выше — приглашённый идёт с социальным доказательством.
- Viral coefficient
k— если каждый пользователь приводит больше одного активного, рост экспоненциальный (см. метрики ниже). - LTV приглашённых часто выше — пришли осознанно через знакомого, а не через клик по баннеру.
Минусы — фрод, дополнительная нагрузка на саппорт и юридические нюансы. Решаемо, но игнорировать нельзя.
Механики вознаграждения
| Механика | Кому | Когда использовать |
|---|---|---|
| Bring-a-friend | Обоим скидка/бонус | Разовые покупки, e-commerce |
| Revshare | % с покупок реферала | Подписки, SaaS |
| Points | Баллы за каждого активного | Геймификация, лояльность |
| Tier-system | Уровни (бронза/серебро/золото) | Сообщества, статусные продукты |
| Milestone | «Приведи 5 друзей — премиум на месяц» | Boost старта, сезонные кампании |
| Stars | Награда в Telegram Stars | Контент, подписки внутри Telegram |
Двусторонняя награда (и рефереру, и приглашённому) работает в среднем на 30–80% лучше односторонней — у приглашённого есть осязаемый стимул нажать «Начать», а не закрыть бот.
Лучший выбор зависит от продукта. Для подписочного сервиса — revshare. Для разового продукта — bring-a-friend. Для сообществ — tier и points. Начинайте с одной простой механики и одного уровня вознаграждения.
Технический фундамент: deep links
Когда пользователь открывает ссылку t.me/your_bot?start=ref_USER_ID и нажимает «Начать», бот получает /start ref_USER_ID. В апдейте это первый текст сообщения. Парсим payload — это и есть код реферера.
Фиксируем связь: новый пользователь B пришёл от A. Запись хранится в БД на всё время — связь не должна теряться.
Важно:
- Payload приходит только при первом
/start. Если пользователь уже общался с ботом, его реферал засчитан раньше. - Длина payload — до 64 символов, только латиница, цифры,
_,-. - Не передавайте чувствительное — payload виден всем, кто откроет ссылку.
Генерация ссылки:
def make_ref_link(bot_username: str, user_id: int, source: str = "share") -> str:
payload = f"ref_{user_id}_{source}"
# ограничение Telegram — 64 символа на payload
assert len(payload) <= 64
return f"https://t.me/{bot_username}?start={payload}"
Парсинг /start с payload
import re
from aiogram import Router, types
router = Router()
PAYLOAD_RE = re.compile(r"^ref_(\d+)(?:_([a-zA-Z0-9-]+))?$")
@router.message(commands=["start"])
async def on_start(message: types.Message):
parts = message.text.split(maxsplit=1)
payload = parts[1] if len(parts) > 1 else None
user_id = message.from_user.id
referrer_id, source = None, None
if payload:
m = PAYLOAD_RE.match(payload)
if m:
referrer_id = int(m.group(1))
source = m.group(2) or "direct"
await register_user(
user_id=user_id,
referrer_id=referrer_id if referrer_id != user_id else None,
source=source,
)
Проверка referrer_id != user_id — базовая защита от самореферала через свою же ссылку.
Модель данных
Минимальная схема:
CREATE TABLE referrals (
id BIGSERIAL PRIMARY KEY,
referrer_id BIGINT NOT NULL,
invitee_id BIGINT NOT NULL UNIQUE,
source TEXT,
status TEXT NOT NULL DEFAULT 'pending',
reward_paid NUMERIC(10,2) DEFAULT 0,
created_at TIMESTAMPTZ DEFAULT now(),
activated_at TIMESTAMPTZ,
paid_at TIMESTAMPTZ
);
CREATE INDEX ON referrals (referrer_id);
CREATE INDEX ON referrals (status);
Статусы: pending (просто пришёл), activated (сделал ключевое действие), paid (бонус начислен), rejected (фрод/возврат).
UNIQUE на invitee_id гарантирует, что один и тот же пользователь не может быть «приведён» дважды.
Атрибуция: first-touch vs last-touch
Если пользователь открыл бот по ссылке A, не нажал «Начать», через неделю открыл по ссылке B и активировался — кому засчитывать?
- First-touch — кто привёл первым, тот и получает бонус. Логика проще, но у новичков может теряться payload.
- Last-touch — кто привёл последним перед активацией. Сложнее технически (нужно хранить все «касания»), зато справедливее к тому, кто реально дожал.
Чаще используют first-touch с окном атрибуции 30 дней: если за 30 дней с момента первого /start пользователь не активировался — связь обнуляется, считаем органикой.
Антифрод
Реферальная программа всегда привлекает любителей крутить. Минимум защиты:
- Активация после действия. Не платим за сам факт
/start, платим только если приглашённый сделал ключевое действие (оплата, регистрация компании, прохождение онбординга). - Один аккаунт на устройство. По телефону, IP, fingerprint браузера в Mini App. Эвристика: если за час с одного IP пришло 10 «приглашённых» — флаг.
- Лимит N приглашений в день. До 10–50 рефералов в сутки на аккаунт. Защищает от ботоводов.
- Запрет самореферала.
referrer_id != invitee_idплюс проверка по cookie/устройству. - Запрет круговых рефералов.
AпригласилB,B«приглашает»A— бан обоих. - Холд-период. Бонусы начисляются через 7–14 дней — успеваем отловить возвраты и накрутки.
Пример проверки на фрод перед начислением:
async def can_pay_reward(referrer_id: int, invitee_id: int) -> tuple[bool, str]:
if referrer_id == invitee_id:
return False, "self_referral"
# лимит в сутки
today_count = await db.fetchval(
"SELECT count(*) FROM referrals "
"WHERE referrer_id = $1 AND created_at > now() - interval '1 day'",
referrer_id,
)
if today_count > 50:
return False, "daily_limit"
# круговой реферал
reverse = await db.fetchval(
"SELECT 1 FROM referrals WHERE referrer_id = $1 AND invitee_id = $2",
invitee_id, referrer_id,
)
if reverse:
return False, "circular"
# проверка ключевого действия
activated = await db.fetchval(
"SELECT activated_at FROM referrals WHERE invitee_id = $1",
invitee_id,
)
if not activated:
return False, "not_activated"
return True, "ok"
Оставлять программу полностью открытой — гарантированно слить бюджет на ботоводов из условного Telegram-чата «лёгкие деньги».
Уведомления рефереру
Сразу после события — короткое сообщение в бот:
- «Ваш друг присоединился» — при
/startс payload. - «Друг прошёл онбординг» — при активации.
- «Вам начислено 300 ₽ / 50 баллов» — при выплате после холда.
Это ключевой триггер вирального цикла: пользователь видит, что система работает, и шарит ссылку дальше.
Mini App с дашбордом
Реферальный экран лучше делать в Mini App — там удобнее показывать статистику и кнопки шеринга.
| Блок | Содержимое |
|---|---|
| Личная ссылка | t.me/bot?start=ref_USER_ID + кнопка «Поделиться» |
| Статистика | приглашено / активировано / на холде |
| Выплаты | заработано всего, история начислений |
| Leaderboard | топ-100 рефереров недели/месяца |
| Условия | размер награды, холд, ограничения |
Leaderboard добавляет геймификации: люди соревнуются за позиции, особенно если топ-3 получают бонус сверху.
Шеринг ссылки
В Telegram удобный нативный шеринг через switch_inline_query или t.me/share/url:
const link = `https://t.me/${botUsername}?start=ref_${userId}`;
const text = "Залетай в бот, тут полезно. По моей ссылке нам обоим бонус.";
Telegram.WebApp.openTelegramLink(
`https://t.me/share/url?url=${encodeURIComponent(link)}` +
`&text=${encodeURIComponent(text)}`
);
Для офлайна — QR-код прямо в Mini App: пользователь показывает экран, друг сканирует камерой и попадает в бот с уже подставленным payload. Работает на конференциях, в офисе, в кофейне.
A/B-тесты
Что тестируется чаще всего:
- Размер награды — 100 ₽ vs 300 ₽ vs 10% от чека. Дороже не всегда лучше: на больших суммах включается фрод.
- Формулировка инвайта — «приглашаю в крутой бот» vs «дам тебе скидку 500 ₽».
- Дизайн реферального экрана — большая кнопка «Поделиться» vs ссылка с copy-кнопкой.
- Шеринг через QR vs только ссылка.
- Двусторонняя vs односторонняя награда.
Минимальная выборка для значимости — 1000+ пользователей в каждой группе. Меньше — не делайте выводов.
Метрики
| Метрика | Формула | Целевое значение |
|---|---|---|
Viral coefficient k | invites_sent × conversion_rate | k > 1 — рост экспоненциальный |
| CAC рефералов | сумма выплат / активированные | в 2–5 раз ниже paid |
| LTV рефералов | средний доход с приглашённого | сравнить с органикой |
| Payback | CAC / месячная маржа | менее 3 месяцев |
| Доля рефералов в воронке | активированные через ref / всего | от 15% — программа жива |
Часто 80% рефералов приходят от 5% пользователей — закон Парето в чистом виде. Этих топ-рефереров стоит выделять в отдельный VIP-сегмент: повышенный процент, ранний доступ к фичам, прямой канал связи.
Если k менее 0.3 — программа неинтересна, поднимайте награду или меняйте механику. Если k больше 1 — поздравляем, у вас вирусный продукт, но проверьте, не ботоводы ли это.
Кейсы
- Dropbox в 2008 — классика. «Пригласи друга — оба получают по 500 МБ к диску». Выросли с 100 тыс. до 4 млн пользователей за 15 месяцев почти без paid.
- Tinkoff (Т-Банк) — «Приведи друга, получи 500 ₽ на счёт». Десятки миллионов выплат, программа работает уже больше 10 лет.
- ВкусВилл — «Приведи друга, получи 300 баллов». Двусторонняя, бонусы тратятся внутри.
Общий паттерн: двусторонняя награда, понятный для пользователя бенефит, простой шеринг.
Юридическая обвязка
В пользовательском соглашении нужны:
- Условия программы и право их изменить.
- Запрет накрутки и определение того, что считается накруткой.
- Право заблокировать аккаунт и обнулить бонусы при нарушении.
- Налоговые обязательства получателя выплат.
Налогообложение бонусов (РФ, ст. 213 НК и подзаконные акты):
- Если награда — деньги (вывод на карту/счёт), это доход физлица. Платформа удерживает НДФЛ 13% или получатель должен оформить самозанятость / ИП.
- Если награда — внутренние баллы или скидка, доход не возникает до момента, когда баллы обмениваются на товар/услугу. Скидка не облагается НДФЛ.
- Stars — Telegram сам разруливает, для бизнеса проще.
Согласие на ПДн друга: когда пользователь шарит ссылку с подставленным контактом друга (например, через автоматический инвайт по номеру), нужно подтверждение, что у него есть согласие. Безопаснее — давать только ссылку, а не отправлять автоинвайт за пользователя.
Многоуровневые программы (MLM) — если структура напоминает финансовую пирамиду, это риск по 172.2 УК РФ. Консультируйтесь с юристом до запуска схемы 3+ уровней.
Многоуровневая программа
Если хотите MLM-схему «реферал моего реферала тоже мне платит», заведите уровни. Стандартно — 2–3 уровня:
- 1-й уровень — 20% от платежа.
- 2-й уровень — 5%.
- 3-й уровень — 2%.
Технически — рекурсивная функция, обходящая дерево рефералов вверх до N уровней. Внимательно с производительностью: при глубине 10+ запросов БД растёт лавинообразно. Кешируйте дерево или храните денормализованно.
Платежи и выплаты
Если реферальные бонусы — реальные деньги, нужен механизм вывода:
- На карту через ЮMoney, ЮKassa, СБП — потребуется самозанятость или ИП у получателя.
- На баланс в боте — внутренние бонусы, тратятся внутри сервиса. Самый простой и юридически чистый вариант.
- Stars — Telegram автоматически переводит с вашего бота на пользователя.
Не делайте «выводимый кэш» без юридической обвязки — это уже работа с физлицами как с подрядчиками, и за ней следят налоговая и ЦБ.
Итого
Реферальная программа в Telegram-боте — это start-параметр, БД с привязкой реферера, начисления после ключевого действия, антифрод и понятная юридическая обвязка. Размер вознаграждения подбирайте под маржу продукта; начинайте с одной механики и одного уровня. Двусторонняя награда работает лучше односторонней. Защита от накруток — обязательна. Метрики k, CAC, LTV, payback покажут, живёт ли программа. И не забывайте: 80% результата принесут 5% топ-рефереров — выделяйте их в VIP.
Частые вопросы
Как технически работает реферальная ссылка в Telegram?
Когда пользователь открывает ссылку t.me/your_bot?start=ref_USER_ID и нажимает «Начать», бот получает /start ref_USER_ID. В апдейте это первый текст сообщения. Парсим payload — это и есть код реферера. Фиксируем связь: новый пользователь B пришёл от A. Запись хранится в БД на всё время. Важно: payload приходит только при первом /start (если пользователь уже общался с ботом, его реферал засчитан раньше); длина payload до 64 символов, только латиница, цифры, _, -; не передавайте чувствительное — он виден всем, кто откроет ссылку.
Какие модели вознаграждения за рефералов работают лучше всего?
Шесть основных механик. Bring-a-friend — скидка обоим, для разовых покупок. Revshare — процент с покупок реферала, для подписочных сервисов. Points — баллы за каждого активного, для геймификации. Tier-системы — уровни бронза/серебро/золото для статусных продуктов. Milestone «приведи 5 друзей — премиум на месяц» для буста старта. Stars — награда в Telegram Stars для контента и подписок внутри Telegram. Двусторонняя награда (и рефереру, и приглашённому) в среднем на 30–80% эффективнее односторонней. Начинайте с одной простой механики и одного уровня, потом усложняйте.
Как защитить реферальную программу от накруток и фрода?
Минимум защиты: активация после действия — не платим за сам /start, только за оплату или прохождение онбординга. Один аккаунт на устройство — по телефону, IP, fingerprint в Mini App. Лимит 10–50 приглашений в сутки. Запрет самореферала — referrer_id не равен invitee_id плюс проверка по cookie. Запрет круговых рефералов — A пригласил B, B «приглашает» A — бан. Холд-период 7–14 дней до начисления. Эвристика по IP: если за час с одного адреса пришло 10 «приглашённых» — флаг на ручной разбор. Без антифрода программа уйдёт в минус за неделю.
Какие метрики смотреть у реферальной программы?
Пять ключевых. Viral coefficient k = invites_sent × conversion_rate; если k больше 1 — рост экспоненциальный. CAC рефералов — сумма выплат делёная на активированных, должен быть в 2–5 раз ниже paid. LTV рефералов — средний доход с приглашённого, сравниваем с органикой. Payback — CAC делённый на месячную маржу, цель менее 3 месяцев. Доля рефералов в воронке — от 15% значит программа жива. Дополнительно: топ-100 рефереров и их вклад. Часто 80% рефералов приходят от 5% пользователей — этих VIP стоит выделять отдельно.
Как сделать атрибуцию: first-touch или last-touch?
First-touch — кто привёл первым, тот и получает бонус. Логика проще, payload фиксируется при первом /start. Last-touch — кто привёл последним перед активацией; справедливее к тому, кто дожал, но сложнее технически: нужно хранить все «касания» и переписывать привязку при каждом новом payload. Чаще выбирают first-touch с окном атрибуции 30 дней: если за 30 дней с первого /start пользователь не активировался — связь обнуляется, считаем органикой. В обоих случаях храните полный лог касаний, чтобы можно было пересчитать задним числом если поменяете правила.
Какие юридические нюансы у реферальных программ в РФ?
Налогообложение зависит от типа награды. Деньги — это доход физлица: платформа удерживает НДФЛ 13% или получатель оформляет самозанятость/ИП. Внутренние баллы или скидка — доход не возникает до момента обмена баллов на товар; скидка НДФЛ не облагается (ст. 213 НК). Stars — Telegram сам разруливает. Согласие на ПДн друга нужно при автоматических инвайтах по контактам — безопаснее давать только ссылку, без автоотправки. Многоуровневые программы 3+ уровней — риск по 172.2 УК РФ если структура напоминает пирамиду. В пользовательское соглашение добавьте условия программы, право их изменить, определение накрутки, право блокировать аккаунт и налоговые обязательства получателя.
Как организовать выплаты по реферальной программе бота?
Три варианта. На карту через ЮMoney, ЮKassa, СБП — потребуется самозанятость или ИП у получателя, бизнес удерживает НДФЛ или работает по договору ГПХ. На баланс в боте — внутренние бонусы, тратятся внутри сервиса; самый простой и юридически чистый вариант. Stars — Telegram автоматически переводит с вашего бота пользователю, для контента и подписок внутри платформы. Не делайте «выводимый кэш» без юридической обвязки — это работа с физлицами как с подрядчиками, за ней следят налоговая и ЦБ. Холд 7–14 дней даёт время отловить возвраты и фрод до выплаты.