Smmly

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

Постить в ВК из Codex CLI

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

Что сказать Codex CLI, чтобы пост ушёл в ВК

сначала покажи мои каналы. если у сообщества ВК стоит needsReauth — ничего не постим, скажи и остановись

smmly_channels отдаёт по каналу площадку, название, ярлыки и два флага: disabled и needsReauth. Второй у ВК значит, что вход через VK ID умер и постить туда нечем. Просьба «остановись» здесь важнее самой проверки: без неё агент честно отправит пост, наш отправщик честно уронит строку ВК, и в терминале это будет выглядеть как успешная публикация — потому что в телеграм она и правда ушла.

поставь запись в сообщество с ярлыком «релизы» через пятнадцать минут, ключ повтора возьми из тега v2.4.0

Уходит smmly_schedule_post с publishAt и вашим ключом повтора. Ключ из тега, а не случайная строка: он вечный, и вызов с ним второй раз вернёт duplicate: true даже через неделю. Пятнадцать минут — окно, в которое запись ещё стоит в очереди и снимается целиком; после публикации во ВКонтакте не правится и не сносится ничего.

обложку не загружай файлом — дай публичной ссылкой на неё

Агент передаёт адрес в mediaUrls, и картинку скачиваем мы. Для скрипта это заметно лучше загрузки: адрес — стабильная строка, и повторный вызов после обрыва выглядит для нас тем же самым запросом. Загрузка файла каждый раз выдаёт новый ключ вложения, и защита от дубля на нём спотыкается. Файл, которого в интернете нет — свежий скриншот, собранная картинка, — всё равно идёт через smmly_upload_media: стена не принимает вложение ссылкой, ВК берёт только уже загруженную к нему фотографию.

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

smmly_post_status по groupId вернёт строку на канал и адрес вида vk.com/wall-123456_789. У ВК ссылка есть всегда — здесь это не украшение, а способ отличить «пост ушёл» от «пост создан»: в неинтерактивном прогоне никто не смотрит в сообщество глазами, и ссылка остаётся единственным доказательством.

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

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

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

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

    ВК подключается входом администратора через VK ID: вы входите, выбираете сообщество из списка своих. Ключ сообщества мы больше не принимаем — на нём ВК не даёт грузить фотографии на стену.

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

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

Что доезжает в ВК

Длина поста
до 4096 знаков; вложение лимит не режет
Картинки
до 10 — грузим их в ВК в три хода, ссылкой стена вложение не берёт
Видео
одно на запись, до 50 МБ — наш потолок, ждём перекодирование до минуты
Кнопки и второе сообщение
у записи на стене их нет
Правка и снос в группе
нет — со стены запись убираете вы сами
Тумблеры поста
от имени сообщества, пометка «реклама», закрепить

Адресуется как providers: ["vk"] или ярлыком. Разметку стена не понимает вовсе: format: "html" доедет текстом без тегов, ссылка развернётся в «подпись (адрес)». Тумблеры кладутся в options: {"vk": {"fromGroup": false}} — fromGroup включён по умолчанию. Править и сносить опубликованное ВК не даёт: на smmly_edit_post по строке ВК придёт отказ.

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

Мёртвый ключ роняет одну строку, а не весь пост — и делает это тихо

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

Долгая заливка, автономный повтор — и второй пост, который не снять

Стена не берёт вложение ссылкой: на каждую фотографию уходит три запроса подряд, и грузятся они по очереди — параллельные заливки ВК режет по частоте. Пост с альбомом уезжает заметно дольше телеграмного, а неинтерактивный шаг терпелив не бесконечно. Дальше начинается самое неприятное: повтор оборвавшегося вызова безопасен, только если аргументы те же до буквы. Автоматическая защита от дубля считает отпечаток по телу запроса, а каждая загрузка файла выдаёт НОВЫЙ ключ вложения — перезалив картинку перед повтором, агент отправит для нас другой запрос, и на стене появится вторая запись. Убрать её из сообщества мы не можем вовсе, удалять придётся руками во ВКонтакте. Лечится двумя привычками: свой ключ повтора на каждый пост и картинки ссылкой там, где это возможно.

Тумблеры проверяются против сегодняшнего набора каналов

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

Пока пост отправляется, его нельзя ни снять, ни поправить

Пост, который отправщик уже взял в работу, отвечает отказом и на правку, и на снятие: «пост уже отправляется, дождитесь результата». У телеграма это мгновение, у ВК с альбомом — самое долгое окно из ваших площадок, как раз из-за трёх запросов на картинку. Агент, который привык действовать цепочкой «опубликовал → спросил статус → сразу поправил», в этом окне получит отказ и, если его не остановить, начнёт повторять. Правильная реакция одна: подождать и спросить статус ещё раз, а не отправлять заново.

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

Что делать скрипту, когда сообщество ушло в «требует повторного подключения»?

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

Можно ли поручить Codex ежедневную сводку в сообщество?

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

Codex нарисовал картинку. Она дойдёт до стены?

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

Разметка из терминала доедет до стены?

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

Запись появится от имени сообщества или от моего?

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

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

Постить в ВК из других агентов

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

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

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

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