Я пять раз писал один и тот же модуль для Telegram-ботов. На шестой сделал отдельный сервис

Как устроены рассылки по базе Telegram-бота и почему вместо очередной админки я сделал собственный сервис за сутки.

Я пять раз писал один и тот же модуль для Telegram-ботов. На шестой сделал отдельный сервис

За последний год через меня прошло несколько десятков Telegram-ботов — своих и клиентских. Поэтому одни и те же задачи начинают повторяться очень быстро. Все мои боты самописные, потому что почти в каждом проекте есть что-то нестандартное: интеграции, личные кабинеты, загрузка файлов и собственная бизнес-логика. Да и не люблю я конструкторы)

И почти в каждом таком проекте рано или поздно появляется одна и та же просьба:

«А можно отправить сообщение всем пользователям бота?»

Акция, новость, напоминание, изменение расписания, новый товар, что угодно. Звучит как мелочь. Но каждый раз эта мелочь превращалась в отдельную задачу.

Можно быстро написать скрипт. Можно прикрутить маленькую админку. Можно дать токен маркетологу или разработчику. Можно подключить сторонний сервис. Все варианты рабочие, но ни один не нравился мне как человеку, который потом это поддерживает.

Скрипт одноразовый. Админка расползается по проектам. Токен бота отдавать кому попало небезопасно. SaaS нормальный, но часто избыточный: он продает автоворонки, A/B-тесты и CRM-логику там, где клиенту надо просто раз в месяц отправить сообщение по своей базе.

В какой-то момент я понял, что меня достало каждый раз заново делать одно и то же.

Так появился tgsend: один кабинет для рассылок по базам Telegram-ботов. Сначала для себя и клиентов, а дальше — посмотрим.

Первый боевой тест

Я не хотел делать красивую демку, которая работает только на тестовых десяти пользователях. Поэтому почти сразу запустил сервис на реальных базах.

В день запуска через сервис прошли три рассылки: две небольшие в моих ботах и одна клиентская по базе примерно из 3 тысяч chat_id. В клиентской рассылке Telegram принял около 2 тысяч сообщений. Остальные получатели к этому моменту уже заблокировали бота, удалили аккаунты или оказались недоступны по другим причинам.

Клиентская рассылка прошла примерно за 20 минут.

Это был как раз тот момент, ради которого я все затевал: не «смотрите, я сделал очередную админку», а «теперь у меня есть единый инструмент, который можно дать клиенту или использовать самому, не переписывая одно и то же в каждом проекте».

Что я хотел получить

Мне нужен был не маркетинговый комбайн, а спокойный рабочий сервис:

  • подключил бота;
  • добавил базу получателей;
  • собрал сообщение;
  • отправил тест себе;
  • запустил сразу или по расписанию;
  • посмотрел, кому дошло, а кому нет.

И желательно без ощущения, что для простой рассылки нужно открывать отдельную CRM. Хотя дашбордов и у меня хватает. Но я люблю статистику.

Админский дашборд
Админский дашборд

Как это выглядит внутри

Бот может писать только тем, кто сам запускал его через /start и не заблокировал. Поэтому база рассылки — это список chat_id. Дальше сервис идет по списку, учитывает лимиты Telegram и сохраняет результат по каждому получателю. Поэтому процедура базовая.

1. Подключить бота

Для подключения достаточно добавить токен существующего Telegram-бота. Сервис проверяет его через официальный Telegram Bot API, а после сохранения токен больше не показывается в интерфейсе.

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

2. Добавить базу

Базу можно загрузить файлом, подключить по URL с автообновлением или вставить chat_id вручную. Дубликаты убираются автоматически.

3. Собрать рассылку

Выбирается бот, база и получатели: вся база, отдельные пользователи или случайные N человек. Можно отправить сообщение в канал, добавить кнопки, фото, файлы или цепочку из нескольких сообщений.

В редакторе есть два режима. Обычный — для текста, кнопок, фотографий и файлов. Rich Text использует новый формат Rich Message в Telegram: в одном сообщении можно размещать изображения внутри текста, таблицы и отдельные контентные блоки.

Визуальный редактор с поддержкой нового Rich Message в Telegram
Визуальный редактор с поддержкой нового Rich Message в Telegram
Обычный редактор и настройки для рассылки
Обычный редактор и настройки для рассылки

4. Запустить и не гадать, что происходит

Перед запуском можно отправить тест себе. Потом рассылка стартует сразу или по расписанию. Скорость настраивается от 1 до 30 сообщений в секунду.

Во время отправки видно прогресс. Рассылку можно поставить на паузу и продолжить позже. После завершения — выгрузить результат в CSV или повторно отправить только тем, кому не дошло.

Прогресс в реальном времени

Почему не готовый сервис

Готовые сервисы есть, и я не считаю их плохими. Если у вас ежедневные воронки, сегменты, прогревы, A/B-тесты и полноценный маркетинг — наверное, лучше взять готовый SaaS.

Но у многих небольших проектов задача проще. Есть бот на 200-800 человек. Иногда на пару десятков тысяч. Раз в месяц или квартал нужно отправить объявление. Платить каждый месяц за большой комбайн ради нескольких рассылок в год странно.

А у меня еще и клиентский контекст: кофейни, магазины и локальные проекты, которым неважно, как устроен Telegram Bot API. Им важно, чтобы сотрудник мог зайти, написать текст, нажать «Тест», потом «Запустить» — и не трогать токены, серверы и скрипты.

Вот ради этого я и сделал свой инструмент.

Как я сделал это за сутки

Точкой запуска стали два моих новых небольших бота. В них уже появилась первая аудитория, и я решил рассказать пользователям о другом своём проекте — боте для скачивания видео.

Открыл код и поймал себя на мысли: «Да блин, опять встраивать в админку отдельный модуль рассылок? Сколько можно?»

До этого я уже несколько раз решал ту же задачу в разных проектах. Поэтому вместо очередной локальной админки решил наконец собрать один нормальный сервис, к которому можно подключать разные боты.

Код писал с ИИ как со вторым пилотом. Он действительно сильно ускорил работу, но опыт не заменил.

При этом я не начинал с пустого места. У меня уже была готовая инфраструктура: серверы, настроенный Telegram Bot API, очереди, хранилище файлов и привычный стек для разработки таких сервисов. Поэтому мне не пришлось тратить время на выбор хостинга, настройку окружения и разбор базовых принципов работы Telegram.

ИИ к серверам я не подключаю и доступ к VPS ему не даю. Он помогает писать и проверять код, а развертывание, конфигурация и работа с инфраструктурой остаются на мне.

Основное время ушло не на команду «сгенерируй мне сервис», а на скучные, но важные вещи: удаление дублей chat_id, флуд-лимиты Telegram, зависшие задачи в очереди, часовые пояса, обработку файлов и нюанс с file_id, который нельзя просто взять у одного бота и использовать для отправки через другого.

Без опыта за сутки, скорее всего, получилась бы красивая демка. С опытом и ИИ удалось дойти до рабочего сервиса и первого клиентского запуска. Много тестировал и постоянно спрашивал себя: удобно или нет? Если нет — переделывал. И ещё точно буду переделывать.

Что еще есть в сервисе

По ходу разработки рядом появились вещи, без которых сервисом неудобно пользоваться в реальной работе: медиатека, Telegram-привязка аккаунта и настройки безопасности.

Что дальше

Сейчас это эксперимент с доступом по заявкам. Я тестирую сервис на своих и клиентских ботах и хочу понять, насколько эта боль вообще распространена.

Если у вас есть Telegram-бот, а рассылки до сих пор приходится запускать через отдельный скрипт или самодельную админку, можно оставить заявку на tgsend.ru.

И расскажите в комментариях, как вы решаете эту задачу сейчас: пишете свой модуль, используете готовый сервис или вообще не делаете рассылки?

Я, как обычно, решал свою задачу с мыслью, что занимаюсь очередной херней. Но вдруг кому-то тоже нужен такой сервис без лишнего функционала.