Практика работы с Telegram

Бесплатный Telegram-бот рассылки на Python: подписка и очередь

Готовый учебный пример бота уведомлений: явная подписка, отписка, расписание, журнал отправок и обработка повторов. Исходный код можно скачать.

Редакция Telecobra · Обновлено 18 сентября 2026

Что получится после запуска

Собственный бот отправляет текстовые уведомления людям, которые включили подписку командой /subscribe. Владелец готовит текст в файле, выбирает время и ставит кампанию в локальную очередь. Пример подходит для новостей сообщества, напоминаний об эфире и обновлений продукта.

Это отдельный Python-проект. Для работы не нужна подписка Telecobra, но нужен свой бот и постоянно работающий компьютер или сервер. Веб-кабинет, вложения, редактор писем и готовый облачный хостинг в пример не входят.

Скачать Python-примеры с README и лицензией MIT →

В архиве только исходный код и инструкции. Токены, аккаунты и готовые базы пользователей в него не входят. Код бесплатный; компьютер, хостинг и интернет оплачиваются отдельно.

Первый запуск и контрольный подписчик

  1. Создайте бота через BotFather и сохраните токен в переменной среды TELEGRAM_BOT_TOKEN. Не вставляйте токен в статью, общий репозиторий или скриншоты.
  2. Установите Python 3.11 или новее. Распакуйте архив в отдельную папку, скопируйте config.example.json в config.json.
  3. Выполните init, затем run. Вторая команда начинает получать события и доставлять сообщения.
  4. Откройте диалог со своим ботом: отправьте /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 status

ID кампании уникален: повтор news-001 не создаёт вторую кампанию. Получатели фиксируются при добавлении в очередь; подписавшиеся позже не попадут в старое задание. При остановленном процессе отправки ждут следующего запуска. Прошедшая дата означает отправку при ближайшей обработке очереди.

Отписка, ошибки и повторные попытки

СобытиеПоведение примера
Подписчик отправил /stopНовые рассылки отключены, ожидающие сообщения ему отменяются. Уже отправленное сообщение не отзывается.
Telegram ответил 429Вся очередь ждёт retry_after. Нельзя считать заданную паузу гарантированным лимитом Telegram.
Telegram вернул message_idСтатус sent. Это подтверждение приёма API, а не прочтения человеком.
Тайм-аут или обрыв после отправкиСтатус unknown: автоматического повтора нет, поскольку сообщение могло дойти.
Процесс прервался во время отправкиПосле восстановления незавершённая отправка тоже получает unknown.

Запускайте один worker на одну базу. Не удаляйте SQLite для повторного старта: в ней подписки и история. Порядок восстановления после аварии и файл блокировки описаны в README.

Что проверено и как принять свой запуск

В учебном проекте выполнены локальные проверки с подменёнными ответами API: согласие, отписка, повторы update_id и кампании, расписание, 429, тайм-аут и восстановление. Реальная рассылка из этой статьи не запускалась.

  1. Получите одно уведомление на своём аккаунте и сопоставьте его с sent в журнале.
  2. Поставьте второе на будущее, отправьте /stop и убедитесь, что оно отменено.
  3. Перезапустите процесс с той же базой: уже отправленное не должно отправляться повторно.
  4. При unknown сначала проверьте диалог. Пример не обещает математически точную доставку ровно один раз.

Источники и документация

Одна платформа · разные задачи

Подписка Telecobra

Соберите инструменты для работы с Telegram в одном кабинете. Сроки доступа, цены и условия — на странице подписки.

В этой инструкции описана только часть возможностей платформы. Полный список доступен в разделе функций.