Практика работы с Telegram
Бесплатный Telegram-бот рассылки на Python: подписка и очередь
Готовый учебный пример бота уведомлений: явная подписка, отписка, расписание, журнал отправок и обработка повторов. Исходный код можно скачать.
Что получится после запуска
Собственный бот отправляет текстовые уведомления людям, которые включили подписку командой /subscribe. Владелец готовит текст в файле, выбирает время и ставит кампанию в локальную очередь. Пример подходит для новостей сообщества, напоминаний об эфире и обновлений продукта.
Это отдельный Python-проект. Для работы не нужна подписка Telecobra, но нужен свой бот и постоянно работающий компьютер или сервер. Веб-кабинет, вложения, редактор писем и готовый облачный хостинг в пример не входят.
Скачать Python-примеры с README и лицензией MIT →
В архиве только исходный код и инструкции. Токены, аккаунты и готовые базы пользователей в него не входят. Код бесплатный; компьютер, хостинг и интернет оплачиваются отдельно.
Первый запуск и контрольный подписчик
- Создайте бота через BotFather и сохраните токен в переменной среды
TELEGRAM_BOT_TOKEN. Не вставляйте токен в статью, общий репозиторий или скриншоты. - Установите Python 3.11 или новее. Распакуйте архив в отдельную папку, скопируйте
config.example.jsonвconfig.json. - Выполните
init, затемrun. Вторая команда начинает получать события и доставлять сообщения. - Откройте диалог со своим ботом: отправьте
/start, затем/subscribe. Одна команда /start не включает рассылку.
python community_bot.py init
python community_bot.py runДля проверки достаточно одного вашего тестового подписчика. Команда status показывает число активных подписчиков и очередь без сетевой отправки.
Как поставить рассылку на время
Создайте notice.txt в UTF-8. Укажите собственную будущую дату с часовым поясом. Сначала посмотрите задание без --queue, затем повторите команду с этим флагом.
python community_bot.py broadcast --id news-001 --text-file notice.txt --at "2026-09-20T12:00:00+03:00"
python community_bot.py broadcast --id news-001 --text-file notice.txt --at "2026-09-20T12:00:00+03:00" --queue
python community_bot.py statusID кампании уникален: повтор news-001 не создаёт вторую кампанию. Получатели фиксируются при добавлении в очередь; подписавшиеся позже не попадут в старое задание. При остановленном процессе отправки ждут следующего запуска. Прошедшая дата означает отправку при ближайшей обработке очереди.
Отписка, ошибки и повторные попытки
| Событие | Поведение примера |
|---|---|
| Подписчик отправил /stop | Новые рассылки отключены, ожидающие сообщения ему отменяются. Уже отправленное сообщение не отзывается. |
| Telegram ответил 429 | Вся очередь ждёт retry_after. Нельзя считать заданную паузу гарантированным лимитом Telegram. |
| Telegram вернул message_id | Статус sent. Это подтверждение приёма API, а не прочтения человеком. |
| Тайм-аут или обрыв после отправки | Статус unknown: автоматического повтора нет, поскольку сообщение могло дойти. |
| Процесс прервался во время отправки | После восстановления незавершённая отправка тоже получает unknown. |
Запускайте один worker на одну базу. Не удаляйте SQLite для повторного старта: в ней подписки и история. Порядок восстановления после аварии и файл блокировки описаны в README.
Что проверено и как принять свой запуск
В учебном проекте выполнены локальные проверки с подменёнными ответами API: согласие, отписка, повторы update_id и кампании, расписание, 429, тайм-аут и восстановление. Реальная рассылка из этой статьи не запускалась.
- Получите одно уведомление на своём аккаунте и сопоставьте его с sent в журнале.
- Поставьте второе на будущее, отправьте /stop и убедитесь, что оно отменено.
- Перезапустите процесс с той же базой: уже отправленное не должно отправляться повторно.
- При unknown сначала проверьте диалог. Пример не обещает математически точную доставку ровно один раз.
Источники и документация
Одна платформа · разные задачи
Подписка Telecobra
Соберите инструменты для работы с Telegram в одном кабинете. Сроки доступа, цены и условия — на странице подписки.
В этой инструкции описана только часть возможностей платформы. Полный список доступен в разделе функций.