В остальные сети Mellow Hub, наш сервис публикаций, ходит через провайдера публикаций или через приложения, зарегистрированные в каждой сети. Telegram не подошёл ни под одно: у провайдера Telegram нет, а сам Telegram не проверяет приложения и не имеет экрана входа. Зато есть боты. Поэтому мы сделали Telegram на собственном боте @MellowHubBot и просим у канала одно право. Рассказываем, как это устроено, что мы доказали 11 октября 2026 года и что пошло не так.
Ситуация и цель
Публиковать в Telegram-канале могут только администраторы. Способ «сделай сам» — создать бота в @BotFather, скопировать его токен туда, откуда вы публикуете, и сделать бота администратором. Для клиента это три лишних шага, и ключ доступа оказывается у него в руках.
Цель: человек подключает канал меньше чем за минуту, ничего не создаёт, даёт боту только право публиковать, а дальше пост, написанный один раз в Hub — руками или ИИ-агентом, — уходит в Telegram вместе с другими сетями.

Что мы сделали, по шагам
- Один бот на всех. Мы один раз создали @MellowHubBot. Его токен хранится в секретных настройках сервера — не в репозитории и не в логах, — и прочитать его оттуда нельзя ни нашим ИИ-агентам, ни кому-то ещё.
- Подключение — короткий разговор. Telegram некуда отправить человека и вернуть обратно, поэтому Hub выдаёт ссылку вида t.me/MellowHubBot?start=код. Код принадлежит одному профилю Hub и действует 20 минут.
- «Старт», затем одна кнопка. Человек нажимает «Старт». Бот отвечает на языке его Telegram одним сообщением с одной кнопкой. Это встроенная кнопка Telegram
request_chat(KeyboardButtonRequestChat в Bot API): Telegram показывает каналы, где человек администратор, и добавляет бота в выбранный администратором сcan_post_messages— и только с ним. - Не верить данным из обновления. Когда Telegram сообщает выбранный чат, бот сам спрашивает Telegram, что это за чат (канал ли), может ли бот там публиковать и администрирует ли его человек, нажавший кнопку. Только после этого канал добавляется в профиль.
- Вебхук, который никто не настраивает руками. Telegram ничего не подписывает: он повторяет секрет в заголовке каждого обновления. Наш секрет вычисляется из токена бота, так что второго секрета хранить не нужно, а запрос без него получает 404. Код сам ставит вебхук при первом подключении.
- Своё место в реестре. Каналы хранятся под собственным провайдером —
telegram. Все запросы для аккаунтов провайдера публикаций называют этого провайдера, и его сверка отключила бы строку Telegram под его именем в течение двух минут. - Публикация ежеминутным проходом. Текст — одно сообщение; одна картинка или видео — с текстом под ними; от двух до десяти файлов — альбом; подпись длиннее 1 024 символов — сначала медиа, потом текст отдельным сообщением; GIF — анимацией. Пост можно отправить без звука и без превью ссылки.
- Файлы. По ссылке Telegram сам скачивает картинку до 5 МБ и видео до 20 МБ. Больше — Hub скачивает файл и загружает сам: до 10 МБ и 50 МБ, это предел облачного Bot API для бота. У поста, запланированного больше чем на шесть часов вперёд, файлы копируются в наше хранилище: хранилище загрузок провайдера удаляет неиспользуемые файлы примерно через сутки.
- Один запрос. Ключа идемпотентности у Telegram нет. Перед каждым запросом задача отмечает, что отправляет; любой ответ снимает отметку. Запрос без ответа её оставляет, и такой пост автоматически больше не отправляется: он завершается как неподтверждённый со словами «проверьте канал, прежде чем публиковать снова».

Результаты
Доказано вживую 11 октября 2026 года на закрытом тестовом канале основателя; каждый пост создал ИИ-агент, а опубликовал планировщик:
| Что | Результат |
|---|---|
| Подключение, Telegram для macOS | через 13 секунд после «Старта» |
| Права бота | публикация сообщений плюс can_manage_chat, который Telegram даёт любому администратору; остальные выключены |
| Только текст | вышел через 36 секунд после создания |
| Картинка, альбом из трёх, видео без звука | каждый вышел одним постом |
| Подпись длиннее 1 024 символов с картинкой | картинка, затем весь текст вторым сообщением |
| Запланирован, через три минуты перенесён | вышел через 17 секунд после нового времени |
| Запланирован, затем отменён | не вышел |
| Видео на 27 МБ | вышло через собственную загрузку Hub примерно за две с половиной минуты |
| Повторных попыток | ни одной на 8 постов |
13 октября основатель отключил канал в Hub на iPhone и подключил заново из Telegram для iOS: от начала до подключения меньше двух минут, следующее сообщение вышло через 24 секунды после создания. В тот же день Telegram открылся во всех профилях Hub, а 21 октября 2026 года стал десятой публичной сетью Hub с пошаговым гайдом на десяти языках. 14 октября у постов в Telegram появилось оформление (жирный, курсив, зачёркнутый, скрытый текст, код, ссылки, цитаты): оно отправляется разметкой entities, а не режимом parse mode, поэтому один случайный символ не может сорвать весь пост.
Что не сработало и что мы поменяли
- Не тот язык. Подключение, начатое ИИ-агентом, не несло языка, и бот ответил русскоязычному человеку по-английски. Исправили в тот же день: бот отвечает на языке Telegram того, кто открыл ссылку.
- Слишком большой файл, пойманный поздно. 21 октября видео на 59 МБ прошло нашу проверку перед отправкой — она не читала размер файла. Пост упал через 10 секунд после создания с ошибкой «слишком большой файл»; до Telegram ничего не дошло. Отклонять такой файл ещё до отправки — доработка, которую мы записали.
- Семь тихих минут. 3 ноября в 14:00 UTC Telegram — или путь к нему из региона нашего сервера — семь минут не принимал запросы. Четыре быстрые ошибки ушли в повтор, затем один запрос завис на 90 секунд, и пост завершился как неподтверждённый — ровно как задумано. Telegram так и не скачал картинку, ничего не вышло, и отправить пост снова после проверки канала было безопасно.
- Одного права хватает не на всё. Позже основатель попросил настроить через Hub название, описание, аватар и закреплённый пост своего публичного канала. Для этого нужно право на изменение информации о канале, а для закрепления — на редактирование чужих сообщений. Подключение по-прежнему просит только право публиковать; остальные владелец даёт в Telegram сам, если хочет.
- Нет просмотров. Telegram ничего не сообщает боту о том, кто видел пост в канале. Hub так и пишет на посте, а не показывает пустую цифру.
- Ещё не проверено вживую на 21 октября: бот удалён из канала в самом Telegram и возвращён, пост, назначенный на время, пока бота нет, и выбор канала в Telegram для Android и в веб-версии. В macOS и iOS это работает.

Как сделать самому
- Создайте бота в @BotFather командой /newbot и храните токен в хранилище секретов.
- Поставьте вебхук с секретным токеном и отвечайте 200 на каждое прочитанное обновление, чтобы Telegram не присылал повторно то, что вам не нужно.
- Начинайте подключение со ссылки с коротко живущим кодом, а в чате отправляйте одну кнопку
request_chat, которая просит канал и право публиковать сообщения. - Когда чат выбран, подтвердите его через getChat и getChatMember, прежде чем сохранять.
- Публикуйте через sendMessage, sendPhoto, sendVideo и sendMediaGroup; подпись — до 1 024 символов, текст — до 4 096 (лимиты всех соцсетей рядом), оформление — через entities, и не чаще одного сообщения в секунду в одном чате.
- Никогда не повторяйте запрос, на который не пришёл ответ. Отметьте его, завершите ошибкой и дайте человеку проверить.
- Или подключите канал к Mellow Hub за четыре шага, без собственного бота.
Цифры
| Что | Значение |
|---|---|
| Права, которые просит бот | 1: публикация сообщений |
| Срок действия кода подключения | 20 минут |
| От «Старта» до подключения, 11.10.2026 | 13 секунд |
| Живых постов 11.10.2026, повторов | 8, ни одного |
| Лимит текста и подписи | 4 096 и 1 024 символа |
| Файлы по ссылке / загрузкой | 5 МБ и 20 МБ / 10 МБ и 50 МБ |
| Темп Telegram в одном чате | около одного сообщения в секунду |



