Smmly

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

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

Cursor собирает пост из того, что у него под рукой — коммитов, CHANGELOG.md, README, — и отправляет в канал, не выходя из редактора. Телеграм из наших площадок берёт больше всех: 4096 знаков, разметку, кнопки-ссылки, второе сообщение и правку уже опубликованного. Взамен он же строже всех к тексту, приехавшему из файлов с кодом.

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

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

Cursor читает файл сам — это его домашняя работа, — и зовёт smmly_post с текстом и полем buttons. Кнопки-ссылки вешает только телеграм: до восьми, по одной в ряд. Если вы попросите ту же кнопку для ВК или MAX, пост туда уйдёт без неё и молча. Одна засада: кнопки несовместимы с альбомом из двух и более вложений — на такой пост придёт отказ ещё до очереди.

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

Просьба выглядит занудной, но экономит вечер. Markdown телеграм не понимает: `**жирный**` приедет в канал звёздочками, а `##` — решётками. Разметка у нас одна — HTML, поле format: "html", теги b, i, code, pre, blockquote, ссылка. И главное: одиночный «<» в тексте телеграм считает началом тега, поэтому дженерик из кода валит публикацию целиком. Мы ловим это при постановке в очередь и отвечаем «одиночный «<» в тексте — экранируйте как &lt;», так что до канала брак не доедет — но и пост не уйдёт, пока агент не перепишет.

приложи скриншот из docs/img/release.png и запости с полным описанием релиза

Файл в репозитории публичного адреса не имеет, поэтому Cursor кладёт его через smmly_upload_media и передаёт ответ в поле media как есть. Дальше работает порог подписи: до 1024 знаков текст едет подписью к картинке, длиннее — картинка уходит первой, а текст следом отдельным сообщением ответом на неё. Пост не отбивается и ничего не теряется, но в канале это два сообщения, а не одно; кнопки в таком случае уезжают на то, где текст.

в последнем посте версия не та, поправь на 1.4.1

smmly_posts, чтобы найти groupId (между сессиями агент его не помнит), потом smmly_edit_post — и телеграм переписывает сообщение прямо в канале. Это работает двое суток, дальше площадка отказывает. Запомните, что так умеет ТОЛЬКО телеграм: та же фраза по строке ВК, MAX или X вернёт отказ, потому что править опубликованное там нечем.

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

  1. Подключите Cursor к Smmly

    Пять строк в mcp.json и перезапуск — обёрток и лишних программ не нужно. Где лежит файл, чем глобальный отличается от проектного и почему envFile здесь не работает, написано на странице клиента.

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

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

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

    Одно слово — «релизы», «блог», «тестовый». Дальше вы говорите «запости в релизы», и агенту не нужно помнить ни id, ни @имя. Ярлык ставится в кабинете, но и сам Cursor умеет: «повесь на телеграм-канал ярлык релизы».

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

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

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

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

Угловая скобка из кода валит весь пост

Самая частая поломка этой пары. Телеграм разбирает HTML, и одиночный «<» для него — начало тега: `Array<string>`, `a < b`, `<div>` в примере вёрстки. Мы проверяем разметку при постановке в очередь и отвечаем понятной строкой, но пост при этом не создаётся — ни в телеграм, ни в остальные каналы того же замысла. Лечится одной фразой в просьбе: «код оберни в code, скобки экранируй». Если код в посте не нужен вовсе, надёжнее попросить format: "plain" — тогда телеграм текст не разбирает и любые скобки проезжают как есть.

Markdown из файла телеграм показывает буквально

Cursor тащит текст оттуда, где markdown — норма: README, CHANGELOG, описание PR. В канал это уедет со звёздочками, решётками и палочками таблицы. Наша разметка одна и она HTML, конвертера из markdown у нас нет. Просите прямо: «перепиши в телеграмный HTML» — или отдавайте plain и живите без оформления. Отдельно про ссылки: в markdown они квадратно-круглые, телеграм такой формы не знает, ссылка должна быть тегом a либо просто адресом в тексте.

Скриншот плюс длинный текст — это два сообщения

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

Правка есть — двое суток и только здесь

Cursor привыкает, что опечатку можно поправить: в телеграме smmly_edit_post переписывает сообщение прямо в канале, а smmly_cancel_post с явным флагом сносит его оттуда. Обе возможности живут двое суток, дальше площадка отвечает отказом. И обе есть только у телеграма: в ВК и MAX опубликованное не правится вовсе, в X правки не существует у самого API. Если один и тот же пост идёт в несколько сетей, ответ на правку придёт построчный — телеграм переписал, остальные отказали, и это не ошибка, а разные площадки.

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

Cursor сам сходит в git за текстом поста?

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

Как отправить в канал кусок кода, чтобы он не развалился?

Обернуть в тег code (строчка) или pre (несколько строк) и экранировать «<», «>» и «&». Телеграм оба тега показывает, моноширинным и с кнопкой копирования, и это единственная наша площадка, которая так умеет: ВК покажет тот же код обычным текстом, а MAX pre не знает и снимет его, оставив содержимое. Так что «один пост в три сети» с кодом внутри честно выглядит только в телеграме.

Пост ушёл, а ссылки на него нет — это ошибка?

Нет, у закрытого канала ссылки на пост не бывает: адрес вида t.me/имя_канала собирается из публичного @имени, а у приватного его нет. Состояние «опубликован» при этом честное — сообщение в канале есть. Если ссылка нужна для отчёта в PR, постите в публичный канал.

Агент повторил вызов после таймаута — в канале будет два поста?

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

Можно одной фразой отправить релиз в телеграм и в остальные сети?

Да, через общий ярлык. Но помните про проверку: она идёт по всем выбранным площадкам ДО записи, и если хотя бы одна отказала, не создаётся ничего — ни одна сеть поста не получит. Именно поэтому длинный релизный текст с кодом чаще всего «не уходит никуда»: телеграм принял бы, а MAX отбил по длине. Разводите тексты — у инструмента есть поле textByProvider, и Cursor умеет отдать разные варианты одним вызовом.

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

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

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

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

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

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