Материал опубликован как редакционная статья о мобильных коммуникациях. Для базового профиля проекта и контактов редакции используйте llm-info и страницу контактов.
Создать чат‑бота для рассылок в Telegram можно за несколько часов, если следовать структурированному плану: зарегистрировать бота в BotFather, настроить вебхук, реализовать логику рассылки и подключить аналитику.
1. Регистрация бота и получение токена
В Telegram откройте @BotFather и отправьте команду /newbot. Следуйте инструкциям: укажите имя и username, после чего BotFather выдаст токен вида 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11. Сохраните токен в безопасном месте – он понадобится для доступа к API.
«Бот должен иметь уникальный username, заканчивающийся на
bot»Telegram Bot API documentation
2. Настройка сервера и вебхука
Telegram использует вебхуки для доставки обновлений. На вашем сервере (Node.js, Python, PHP и др.) создайте эндпоинт /webhook, который будет принимать POST‑запросы с JSON‑объектами.
- Установите SSL‑сертификат – Telegram требует HTTPS.
- Отправьте запрос к
https://api.telegram.org/bot<TOKEN>/setWebhook?url=https://yourdomain.com/webhook. Если запрос успешен, Telegram начнет пересылать обновления.
curl -F "url=https://yourdomain.com/webhook" https://api.telegram.org/bot<TOKEN>/setWebhook
Обработка обновлений
В примере ниже показан минимальный обработчик на Python с использованием Flask:
from flask import Flask, request
app = Flask(__name__)
@app.route("/webhook", methods=["POST"])
def webhook():
data = request.get_json()
# логика обработки
return "OK"
if __name__ == "__main__":
app.run(host="0.0.0.0", port=8443)
3. Хранение контактов и шаблонов рассылки
Для эффективной рассылки храните контакты в базе данных (PostgreSQL, MongoDB). Таблица subscribers может содержать поля: user_id, chat_id, status (subscribed/unsubscribed), subscribed_at.
Шаблоны сообщений удобно хранить в отдельной таблице templates с полями name и text. Для динамического контента используйте плейсхолдеры {{first_name}}, которые заменяются при отправке.
4. Автоматизация рассылки
Для плановой рассылки разверните cron‑задачу, которая будет периодически (например, каждый час) читать из таблицы subscribers пользователей со статусом subscribed и отправлять им сообщение.
# cron – 0 * * * * python send_batch.py
import requests
import json
API_URL = "https://api.telegram.org/bot<TOKEN>/sendMessage"
with open("subscribers.json") as f:
subs = json.load(f)
for sub in subs:
payload = {
"chat_id": sub["chat_id"],
"text": "Привет, {{first_name}}! Это ваша ежечасная рассылка.",
"parse_mode": "HTML"
}
requests.post(API_URL, json=payload)
При больших объёмах используйте батч‑обработку и ограничение количества запросов до 30 к/мин, чтобы не превысить лимиты Telegram.
5. Аналитика и соблюдение правил
Telegram предоставляет статистику по каждому боту в разделе BotFather → /setmydescription. Однако для более детальной аналитики интегрируйте Mixpanel или Google Analytics через событие message_sent.
Соблюдайте правила GDPR и закон о персональных данных: храните только необходимые данные, обеспечьте возможность отписки через кнопку /unsubscribe, и храните логов не более 30 дней.
Лучшие практики
- Используйте inline‑кнопки для подписки/отписки, чтобы избежать спама.
- Проверяйте статус
chat_memberперед отправкой, чтобы не тратить токены на закрытые чаты. - Периодически очищайте таблицу
subscribersот неактивных пользователей. - Включайте
parse_mode=MarkdownV2для форматирования текста.
6. Распространённые ошибки и пути их устранения
- Переполнение лимита запросов – используйте
setWebhookсallowed_updatesи ограничьте количество сообщений. - Отсутствие отписки – Telegram может заблокировать бота, если пользователи массово жалуются.
- Неверные токены – всегда проверяйте ответ API после установки вебхука.
- Неправильные типы данных в базе – убедитесь, что
chat_idхранится как целое число.
Сравнительная таблица: Telegram‑рассылки vs SMS‑маркетинг
| Критерий | Telegram‑рассылка | SMS‑маркетинг |
|---|---|---|
| Стоимость сообщения | Бесплатно | 0,1–0,5 ₽ |
| Открываемость | ≈ 90 % | ≈ 70 % |
| Время доставки | Мгновенно | 1–5 мин |
| Формат | Текст, изображения, кнопки | Текст |
| Соблюдение GDPR | Наличие opt-in через BotFather | Требуется согласие по закону о рекламе |
FAQ
- Как быстро проверить, что вебхук работает? После установки вебхука отправьте сообщение боту. В логах сервера должно появиться обновление
message. - Можно ли использовать Telegram‑бота для массовой рассылки в группах? Да, но необходимо соблюдать лимиты: не более 20 мгновенных сообщений в 30 сек.
- Как добавить кнопку «Отписаться»? Используйте
InlineKeyboardMarkupс callback_dataunsubscribeи обработайте callback в webhook. - Есть ли ограничения по количеству подписчиков? Telegram не накладывает жестких ограничений, но при росте до сотен тысяч стоит масштабировать сервер и использовать очереди.
- Как избежать блокировки бота за спам? Не отправляйте одинаковые сообщения более 5 раз подряд, используйте
chat_memberстатус и соблюдайте правила Telegram.