Smmly

Площадка работает · постим в канал сами, поле поста доезжает целиком

Постить в Телеграм из Codex CLI

Codex собрал релиз — и тут же рассказал о нём в канале, не выходя из терминала. В телеграм доезжает всё поле инструмента целиком: разметка, кнопки, второе сообщение, альбом. И это единственная ваша площадка, где агент может сам исправить то, что уже опубликовал, — потому вести боевой скрипт стоит начинать отсюда.

Что сказать Codex CLI, чтобы пост ушёл в Телеграм

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

Codex зовёт smmly_schedule_post с publishAt и возвращает groupId. Десять минут — не суеверие, а единственное окно отката в неинтерактивном прогоне: пока пост в очереди, он снимается целиком одним smmly_cancel_post, без права стирать что-либо в канале. Опубликованный мгновенно откатывается уже другой ценой — правкой или сносом из канала, и то и другое телега даёт двое суток.

разметку бери телеграмную и только жирный, курсив, ссылку и моно — списки и абзацы тегами не размечай

Просьба выглядит придирчивой ровно до первого прогона. Codex по привычке превращает маркдаун в HTML целиком, и на <p> или <li> пост отбивается ещё до очереди: «тег <p> площадка не понимает». Отказ приходит на ВЕСЬ замысел, поэтому ни телеграм, ни соседние каналы не получат ничего. Списки в телеграме делаются символом в начале строки, а не тегом.

приложи три скриншота из ./shots, подпиши их и кнопку не вешай

Скриншоты Codex кладёт через smmly_upload_media по одному и передаёт готовый блок media в пост. Про кнопку сказано не зря: клавиатуры у альбома в телеграме не бывает, и пост с кнопкой и двумя вложениями отбивается — «кнопки не вешаются на альбом». Кнопка живёт с одним вложением или вовсе без него.

посмотри статус <groupId>; если пост упал — покажи текст ошибки и не пересылай

smmly_post_status по каждому каналу: очередь, опубликован или ошибка со словами площадки. Хвост «не пересылай» нужен агенту, который работает сам: увидев ошибку, он охотно позовёт smmly_post ещё раз — а это второй пост, если между попытками прошло больше пяти минут. Упавшее возвращается в очередь через smmly_edit_post с retry: true, а не новой публикацией.

Что нужно, чтобы это заработало

  1. Опишите сервер в config.toml

    Codex ходит на удалённые MCP-серверы сам, а ключ берёт из переменной окружения — в конфиг он не попадает вовсе. Готовый блок, имя переменной и главная засада (переменная нужна той сессии, откуда запускается codex) — на странице клиента.

    Подключение Codex CLI →
  2. Заведите канал

    Наш бот администратором канала с правом «Публикация сообщений» — или свой бот от BotFather, если в администраторах должно стоять ваше имя. Разница между режимами вылезет позже, в неинтерактивном прогоне: см. ниже.

    Как подключить Телеграм →
  3. Сначала — тестовый канал с отдельным ярлыком

    Пустой канал, ярлык «тестовый», и первые прогоны скрипта идут туда. Телеграм для этого подходит лучше всех ваших площадок: то, что агент туда написал зря, он же и уберёт из канала. Ярлык агент повесит сам, если попросить.

Что доезжает в Телеграм

Длина поста
до 4096 знаков
Пост с вложением
подпись 1024 знака; длиннее — разъедется на два сообщения
Вложения
до 10 картинок, видео или файлов альбомом
Кнопки-ссылки
до 8, по одной в ряд — из всех наших площадок только здесь
Второе сообщение
уходит ответом на пост
Правка и снос в канале
есть, пока сообщению меньше двух суток

Единственная площадка, до которой доезжает всё поле инструмента целиком: buttons, firstComment, format: "html". smmly_edit_post переписывает уже опубликованное прямо в канале, smmly_cancel_post с fromChannel: true стирает его оттуда — и то и другое телеграм даёт делать двое суток, дальше отказ.

Обо что спотыкается эта пара

Разметка из маркдауна валит весь замысел

Телеграмный html — это белый список из полутора десятка тегов, а не HTML. Codex, который весь день имеет дело с разметкой и кодом, отдаёт абзацы <p>, списки <ul><li> и заголовки — и получает отказ на постановку в очередь. Отказ этот общий: замысел либо создаётся весь, либо не создаётся вовсе, поэтому один <li> оставляет без поста и ВК, и MAX. В интерактивной сессии вы это увидите и поправите за минуту; в прогоне по крону не увидит никто. Дешёвое лекарство — держать в инструкции агента одну строку: разметка только жирный, курсив, ссылка, моно и цитата; списки — символом в начале строки.

Длинная подпись не отказ, а другая форма поста

Пост с вложением и текстом длиннее 1024 знаков телеграм принимает: вложение уходит первым сообщением, текст — вторым, ответом на него, кнопки при этом переезжают на второе. Codex получит успешный ответ и честно доложит «опубликовано». Разъехавшийся пост — не поломка, но это другая вещь, чем вы просили: у неё два уведомления подписчикам и картинка без подписи в превью. Если формат важен, ограничивайте агента прямо в просьбе: «текст под картинку — не длиннее тысячи знаков».

Свой бот не виден нашей предполётной проверке

Привычка неинтерактивного скрипта — сначала спросить smmly_channels и посмотреть needsReauth, потом постить. Для канала на нашем боте это работает по-настоящему: выгнали бота или срезали права — вебхук телеграма помечает канал, и агент увидит флаг до отправки. Канал на СВОЁМ боте мы на вебхуке не держим вовсе, его апдейты до нас не доходят: флаг останется чистым, а пост упадёт словами площадки после трёх попыток с паузой. Проверка честна ровно настолько, насколько честен режим подключения, — знать это стоит до того, как на скрипт повесят ежедневную сводку.

Двое суток — весь срок, на который агент может передумать

Переписать опубликованное и стереть его из канала телеграм даёт боту двое суток, дальше отказ. Для человека это много, для скрипта — единственное окно: пост, ушедший в пятницу вечером, в понедельник уже неисправим. И флаг fromChannel: true, которым пост стирается из самого канала, необратим — в описании инструмента прямо сказано спросить человека, но в неинтерактивном прогоне спрашивать некого. Проще не давать агенту такой команды в скрипте вовсе: снимать с очереди можно смело, стирать из канала — руками.

Частые вопросы

Можно ли постить из Codex, запущенного не руками — из скрипта или по расписанию?

Да, наша сторона про это ничего не знает: MCP-сервер отвечает на запрос с ключом одинаково, кто бы его ни прислал. Меняется цена ошибки. В интерактивной сессии отказ валидатора вы прочитаете и перепишете текст; в прогоне по расписанию отказ уедет в лог, а пост не выйдет — и узнаете вы об этом по пустому каналу. Отсюда две привычки: спрашивать smmly_channels перед отправкой и ставить пост на время, а не публиковать мгновенно.

Codex сам придумает, о чём написать в канал?

Нет, и это не ограничение, а разделение труда: замысел приносите вы или ваш репозиторий. Зато материал у Codex под рукой — файл изменений, текст коммита, вывод сборки, скриншот из тестов. Рабочая формулировка звучит как «возьми вот это и сделай из него пост», а не «напиши что-нибудь в канал».

Что будет, если скрипт вызовет публикацию дважды?

В пределах пяти минут — ничего: одинаковый пост в те же каналы вернёт duplicate: true и groupId первого, второго сообщения в канале не появится. Окно короткое намеренно, оно закрывает ретрай после обрыва. Длинный автономный прогон из него выпадает: вернувшись к задаче через полчаса, агент опубликует второй раз. Для повторяемых вещей просите передавать свой ключ повтора — он вечный, и брать его надо из чего-то устойчивого вроде тега релиза, а не случайной строкой.

Как заставить агента поставить пост на нужное время, а не на три часа раньше?

Назвать город. Инструмент ждёт время со смещением часового пояса, и без смещения оно читается как всемирное — пост уходит на три часа раньше московского. «Завтра в 9 утра по Москве» агент превращает в правильную строку сам. В скрипте, где время подставляется подстановкой, смещение проще зашить в шаблон один раз.

Пост ушёл с опечаткой. Агент починит?

В телеграме — да, и здесь это редкость: попросите поправить текст по groupId, и сообщение перепишется прямо в канале. Вложения и второе сообщение подменить нельзя — площадка не даёт. Двое суток спустя отказ придёт уже от самой телеги. И помните про соседей по замыслу: если тот же пост уходил во ВКонтакте или MAX, там правка невозможна вовсе, и ответ придёт построчный — телеграм принял, остальные отказали.

из Codex CLI в другие площадки

Постить в Телеграм из других агентов

Конфиг подключения, пути к файлам и грабли самого клиента — на странице постинга из Codex CLI. Лимиты площадки, подключение канала и что умеет сам Телеграм — на его посадочной. Общая инструкция по MCP — здесь, поля инструментов и коды ошибок — в технической справке.

Пусть посты ставит агент

7 дней полного доступа за 10 ₽ — подключите каналы, возьмите ключ и проверьте на своих постах.

Попробовать за 10 ₽