Telegram бот: проверить приглашения друзей уникальными ссылками
Как в Telegram-боте проверить, пригласил ли пользователь друзей в канал: уникальные пригласительные ссылки (createChatInviteLink), отслеживание usage_count, лимиты (member_limit), безопасность и альтернативы вроде реферальных ссылок. Примеры на Python.
Как в Telegram-боте проверить, пригласил ли пользователь друзей в канал? Способы реализации: уникальные пригласительные ссылки, лимиты и альтернативные идеи
В Telegram-боте проверить, пригласил ли пользователь друзей в канал, можно с помощью уникальных пригласительных ссылок, созданных методом createChatInviteLink из Telegram Bot API. Бот выдаёт каждому юзеру персональную ссылку, а потом смотрит на usage_count через getChatInviteLink — это покажет точное число приглашённых. Плюс задавайте лимиты вроде member_limit, чтобы избежать спама, или комбинируйте с реферальными ссылками t.me/bot?start=code для простых случаев.
Содержание
- Зачем отслеживать приглашения в Telegram-боте
- Основы пригласительных ссылок Telegram
- Метод 1: Уникальные ссылки через createChatInviteLink
- Отслеживание и проверка usage_count
- Лимиты и безопасность: member_limit, expire_date
- Альтернативы: Реферальные ссылки и другие идеи
- Частые ошибки и как их обойти
- Источники
- Заключение
Зачем отслеживать приглашения в Telegram-боте
Представьте: вы запускаете канал с эксклюзивным контентом, и хотите мотивировать юзеров приглашать друзей. За каждых 5 приглашённых — бонус. Но как бот поймёт, кто сколько принёс? Без трекинга это лотерея.
Уникальные пригласительные ссылки решают задачу на раз. Они позволяют строить реферальные системы, как в примере на GitHub. Плюс аналитика: откуда трафик, сколько стоит привлечение. В маркетинге это must-have — elama.ru прямо рекомендует для рекламы.
А если канал приватный? Тогда ссылки с creates_join_request заставят новичков ждать одобрения. Идеально для модерации.
Основы пригласительных ссылок Telegram
Telegram Bot API даёт мощный инструмент: ChatInviteLink. Это объект с кучей полей — invite_link (сам URL), creator (кто создал, по user.id), usage_count (сколько раз использовали), member_limit (лимит юзеров).
Бот должен быть админом канала с правами can_invite_users. Без этого — ошибка 403.
Ключ: каждая createChatInviteLink генерирует новую уникальную ссылку. Храните mapping в БД: user_id → link_code. Потом по usage_count минус 1 (сам создатель) = число друзей.
Но что если юзер пригласил, а потом отписался? Usage_count считает переходы, не активных. Для точности комбинируйте с getChatMember на новых мемберах.
Метод 1: Уникальные ссылки через createChatInviteLink
Давайте по шагам реализуем в Python с pyTelegramBotAPI. Сначала токен от BotFather, добавьте бота в канал как админа.
import telebot
from telebot.types import LabeledPrice
bot = telebot.TeleBot('YOUR_TOKEN')
@bot.message_handler(commands=['invite'])
def generate_invite(message):
chat_id = '@your_channel' # или -100xxxxxxxxxx
user_id = message.from_user.id
# Создаём уникальную ссылку с лимитом 10
invite = bot.create_chat_invite_link(
chat_id=chat_id,
member_limit=10, # Лимит приглашённых
name=f"ref_{user_id}" # Имя для идентификации
)
# Сохраняем в БД (пример с dict, в проде — SQLite/PostgreSQL)
db[user_id] = {'link': invite.invite_link, 'count': 0}
bot.reply_to(message, f"Твоя ссылка: {invite.invite_link}\nПриглашай друзей!")
Готово! Юзер получает t.me/+abc123. Каждый клик увеличивает usage_count.
Из официальной документации: всегда новая ссылка, можно expire_date для срока.
Отслеживание и проверка usage_count
Теперь проверяем. Добавьте команду /check или таймер (cron/loop).
@bot.message_handler(commands=['check'])
def check_invites(message):
user_id = message.from_user.id
if user_id not in db:
bot.reply_to(message, "Сначала сгенерируй ссылку!")
return
link = db[user_id]['link']
invite = bot.get_chat_invite_link('@your_channel', link) # По ссылке
invited = invite.usage_count - 1 # Минус себя
db[user_id]['count'] = invited
bot.reply_to(message, f"Ты пригласил {invited} друзей!")
Бинго. GetChatInviteLink возвращает свежие usage_count и pending_join_request_count (ожидающие).
Для реал-тайм: используйте updates с webhook. Или polling getChatInviteLinks — список всех ссылок.
Вопрос: а если кто-то спамит? revokeChatInviteLink по коду — и привет.
Лимиты и безопасность: member_limit, expire_date
Не давайте бесконечные ссылки. member_limit=5 — и ссылка умирает после 5 юзеров. Expire_date — через неделю.
В коде:
invite = bot.create_chat_invite_link(
chat_id=chat_id,
member_limit=5,
expire_date=int(time.time()) + 7*24*3600 # 7 дней
)
Плюс creates_join_request=True — все новички в очередь админам. Избегайте self-referral: проверяйте creator.id != joiner.id.
GitHub-пример tg-inviter показывает, как комбинировать лимиты.
Безопасность: не храните ссылки вечно, ротируйте. Бот не видит, кто именно зашёл — только счётчик.
Альтернативы: Реферальные ссылки и другие идеи
Уникальные ссылки — топ, но есть проще. Реферальная система через deep linking: t.me/yourbot?start=ref_userid.
В /start:
if message.text.startswith('/start ref_'):
referrer_id = int(message.text.split('_')[1])
# Записать в БД: new_user -> referrer
Плюс: не нужны права админа. Минус: юзер должен стартануть бота, не напрямую в канал. Идеально для публичных каналов.
Другие идеи: InviteMember интеграция — готовый сервис с оплатой. Или VC.ru бот для проверки подписки через getChatMember.
StackOverflow рекомендует: комбо ссылок + webhook на joins.
Частые ошибки и как их обойти
Бот не админ? 403 Forbidden. Решение: права can_invite_users.
Usage_count=1, хотя друзей нет? Самоклик. Минусуйте 1 или блокируйте по IP/user_id.
Ссылка не уникальна? Всегда новая от API.
БД не держит маппинг? Используйте SQLite:
CREATE TABLE invites (user_id INT PRIMARY KEY, link TEXT, count INT);
Из StackOverflow: проверяйте creator в getChatInviteLinks.
Тестируйте в тестовом канале — экономит нервы.
Источники
- Telegram Bot API — createChatInviteLink
- Telegram Bot API — getChatInviteLink
- GitHub — telegram-referral-bot
- Elama.ru — Пригласительные ссылки в Telegram
- StackOverflow — Unique invite links
- StackOverflow — Who sent invite link
- VC.ru — Бот для проверки подписки
- InviteMember — Telegram Integration
- GitHub — tg-inviter
Заключение
Telegram-бот легко проверит приглашения через уникальные ссылки createChatInviteLink + usage_count — это надёжно и масштабируемо. Добавьте member_limit для контроля, храните в БД, и реферальная система готова. Для простоты хватит deep linking, а для продвинутого — webhook + getChatMember. Начните с примера кода выше, протестируйте — и ваши юзеры сами потянут друзей. Удачи с каналом!