Максим Бушкарев
2 октября 2026 г.

Как я избавился от админки для Telegram-канала и научил ChatGPT публиковать посты

Как я превратил разговор с ChatGPT в безопасный процесс публикации постов и картинок в Telegram — с предпросмотром и явным подтверждением.

Хотел простую вещь: надиктовать мысль, увидеть готовый пост и сказать:

«Публикуй».

Без отдельной админки.
Без копипаста.
Без ручного перекидывания картинок.
Без постоянных переходов между ChatGPT, Telegram и каким-нибудь CMS.

Идею подсмотрел в канале «Вайбкодим». Там вообще много интересных находок, и за эту идею автору отдельное спасибо.

Я взял её за основу, а дальше мы с ChatGPT постепенно переделали всё под мой сценарий.

В итоге получилось почти ровно то, что я хотел.

Как это работает сейчас

Я могу написать мысль текстом или просто надиктовать её.

Дальше ChatGPT:

  • собирает из неё пост;
  • редактирует текст;
  • при необходимости придумывает и генерирует картинки;
  • показывает мне финальный вариант;
  • и только после моего подтверждения отправляет его в Telegram.

То есть путь выглядит примерно так:

идея → готовый пост → картинка → предпросмотр → подтверждение → Telegram

Самое важное здесь — публикация не происходит автоматически.

Сначала я вижу ровно то, что уйдёт в канал. И только потом говорю: «Публикуй».

Пиксельный путь от голосовой идеи до готового поста в Telegram

Зачем вообще понадобился свой плагин

С текстом всё оказалось довольно просто.

У Telegram есть Bot API. Создаёшь бота, добавляешь его администратором в канал и можешь отправлять сообщения программно.

Но мне нужен был не просто инструмент вида:

отправь вот этот текст в канал

Мне нужен был безопасный сценарий публикации.

Чтобы ChatGPT сначала подготовил пост, показал его мне, дождался подтверждения и только потом отправил.

Поэтому логику разделили на два шага:

prepare → preview → confirmation → send

Сначала вызывается prepare.

Он фиксирует:

  • точный текст;
  • канал;
  • картинки;
  • их порядок;
  • параметры публикации.

После этого возвращается предпросмотр и одноразовый review_token.

А уже после моего явного подтверждения вызывается send, который принимает именно этот токен.

Это простая вещь, но она сильно снижает шанс случайно отправить не тот текст, не ту картинку или вообще опубликовать что-то раньше времени.

TEST и MAIN

Отдельно я сделал два назначения:

  • TEST — черновой канал;
  • MAIN — основной канал.

Сначала всё отправлялось в тестовый канал.

Там можно было спокойно проверять:

  • разметку;
  • переносы;
  • ссылки;
  • превью;
  • картинки;
  • альбомы.

И только когда сценарий стал стабильным, появился MAIN.

Получается нормальный издательский процесс:

подготовить → проверить → подтвердить → опубликовать

Без риска случайно тестировать на живой аудитории.

С картинками оказалось интереснее

Вот тут началась самая занятная часть.

Текст ChatGPT может передать плагину напрямую.

Но с изображением не всё так просто.

Если картинка создана внутри ChatGPT, она сначала существует как внутренний файл. А Telegram нужен либо сам файл, либо доступный ему URL.

Локальный путь вроде:

/mnt/data/image.png

Telegram, конечно, открыть не может.

Поэтому пришлось сделать отдельный мост.

Пиксельная автоматизация публикации постов в Telegram

Сейчас схема такая:

ChatGPT
↓
файл изображения
↓
create_telegram_media_upload
↓
приватное хранилище R2
↓
временный HTTPS URL
↓
prepare_telegram_media_post
↓
preview
↓
подтверждение
↓
send_telegram_media_post
↓
Telegram

Изображение передаётся в плагин как файл.

Для него используются поля вроде:

download_url
file_id
mime_type
file_name

А само поле файла отдельно объявлено в схеме плагина через:

_meta["openai/fileParams"] = ["image"]

После этого сервер:

  1. скачивает изображение;
  2. проверяет MIME;
  3. проверяет размер;
  4. сверяет сигнатуру файла;
  5. считает SHA-256;
  6. временно сохраняет файл в приватный R2;
  7. получает HTTPS-ссылку;
  8. передаёт её дальше в подготовку Telegram-поста.

То есть ChatGPT не должен сам разбираться, как донести локальный файл до Telegram.

Этим занимается серверная часть.

Какие действия в итоге появились

Для текста:

prepare_telegram_post
send_telegram_post

Для медиапостов:

prepare_telegram_media_post
send_telegram_media_post

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

create_telegram_media_upload

Вся идея плагина в том, что prepare ничего не публикует.

Он только готовит точное состояние будущего поста.

А send уже отправляет именно то, что было подтверждено.

Почему мне нравится эта схема

Раньше публикация выглядела примерно так:

идея
→ ChatGPT
→ копировать текст
→ сохранить картинку
→ открыть Telegram
→ вставить текст
→ добавить картинку
→ проверить
→ опубликовать

Сейчас:

идея
→ ChatGPT
→ посмотреть
→ сказать «публикуй»

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

У меня по-прежнему остаётся последнее слово.

ChatGPT может собрать текст, придумать картинку, подготовить всё к публикации.

Но сам момент отправки остаётся за мной.

Мне такой баланс нравится больше всего.

Пример промпта, с которого можно начать

Если захочется повторить похожую систему, можно дать агенту примерно такой запрос:

Сделай приватную интеграцию между ChatGPT и Telegram для безопасной
публикации текстовых и медиапостов.

Требования:

1. Использовать Telegram Bot API.

2. Поддержать два назначения:
   - TEST — тестовый канал;
   - MAIN — основной канал.

3. Никогда не публиковать сообщение сразу.

4. Для текста реализовать:
   - prepare_telegram_post
   - send_telegram_post

5. Для медиапостов реализовать:
   - prepare_telegram_media_post
   - send_telegram_media_post

6. prepare должен:
   - фиксировать точный текст;
   - фиксировать целевой канал;
   - фиксировать изображения и их порядок;
   - возвращать точный preview;
   - возвращать одноразовый review_token.

7. send должен принимать только review_token
   и отправлять именно ранее подтверждённую версию.

8. Для изображений, созданных или загруженных в ChatGPT,
   добавить отдельный action create_telegram_media_upload.

9. Вход image описать как file object с полями:
   - download_url
   - file_id
   - mime_type
   - file_name

10. Добавить:
    _meta["openai/fileParams"] = ["image"]

11. Сервер должен:
    - скачать файл;
    - проверить MIME;
    - проверить magic bytes;
    - проверить максимальный размер;
    - вычислить SHA-256;
    - временно сохранить изображение
      в приватном object storage;
    - вернуть HTTPS media URL.

12. Для Telegram использовать:
    - sendPhoto для одного изображения;
    - sendMediaGroup для нескольких изображений.

13. Все токены, пароли, API-ключи и секреты
    должны храниться только на сервере
    в environment variables.

14. Не показывать секреты в ChatGPT.

15. Разрешить публикацию только
    в заранее заданные TEST и MAIN каналы.

16. Перед реальной отправкой
    всегда требовать явное подтверждение пользователя.

Сначала собери архитектуру,
затем реализуй минимальную рабочую версию,
а потом отдельно проверь весь путь:
ChatGPT → preview → confirmation → Telegram.

Итог

По факту я не делал ещё одну админку для Telegram.

Я как раз хотел от неё избавиться.

Теперь интерфейс для публикации — это обычный разговор с ChatGPT.

Я могу надиктовать идею, получить готовый пост, посмотреть картинку и сказать одно слово:

«Публикуй».

И всё.