Перейти к содержимому

Публикация

Модуль 12-scheduler завершает цикл: берёт generated-слот из plans/current-week.yaml и публикует его в канал — Telegram напрямую через Bot API, Instagram через /post-carousel (Buffer). Сам контент не генерирует и генерацию не триггерит — только доставка под апрувом человека. Публикация в канал возможна, только если этот канал явно включён через /autopublish (safe-default OFF).

Публикует один generated-слот в его канал — сейчас или по плану, плюс сверка и досыл очереди.

Когда использовать. Зови, когда слот уже сгенерён (статус generated) и готов уйти в канал — либо вручную по конкретному слоту, либо это делает за тебя хвост /today. Отдельно --reconcile и --due — служебные режимы без интерактива, их обычно вызывает оркестратор, а не ты руками.

Как вызвать

/publish <slug> [slot-id]
/publish <slug> <slot-id> --at HH:MM
/publish <slug> --reconcile
/publish <slug> --due
  • <slug> — id аккаунта.
  • [slot-id] — id слота из current-week.yaml. Не передан — покажет список generated-слотов и спросит.
  • --at HH:MM — запланировать на время вместо немедленной публикации. Без значения — дефолт из plans/schedule.yaml (schedule: {start, interval_hours}).
  • --reconcile — сверить ранее запланированные (scheduled) слоты с фактом публикации у backend’а и флипнуть в published. Без человека, зовётся в хвосте /today.
  • --due — досылка наступивших TG-слотов из спящей очереди publish-queue.yaml (fallback-путь).

Что на входе / на выходе

  • Вход: plans/current-week.yaml (сам generated-слот), identity/channels.yaml (какой канал у какой платформы), ассеты слота (content/{carousel,post,reel}/<slot-id>/*), plans/schedule.yaml (время по умолчанию), plans/publish-config.yaml (autopublish-гейт по каналу).
  • Выход: plans/current-week.yaml — обновляет только status слота (generatedscheduled/published) и метаданные (dueAt, buffer_post_id, trigger_id).

Пример

/publish max-tors 2026-07-13-trust-hook

Найдёт слот, соберёт payload (текст + медиа), пройдёт гейт autopublish, покажет апрув-карточку (канал, медиа, текст) и спросит «сейчас / по плану HH:MM / правки». После согласия отправит: TG — через Bot API сразу; IG — через /post-carousel (пуш на телефон, тап — финальный апрув).

Гейты/апрувы

  • Autopublish-гейт (STEP 1.5, обязателен). Канал выключен в /autopublish → dry-run: покажет payload, ничего не отправит, слот остаётся generated.
  • Апрув-карточка (STEP 2, непропускаемый узел). Без явного «сейчас» / «at HH:MM» / согласия — ничего не публикуется и не планируется. Правки → правишь content-файлы слота, payload собирается заново.
  • Для IG финальный гейт — тап на телефоне в момент публикации (Buffer notification). Для TG отдельного гейта в момент отправки нет — апрув при постановке единственный (routine постит сама).
  • scheduled-слот при повторном вызове не перепланируется — покажет «уже запланирован», предложит redo/отмену.

Связанные: источник generated-слотов и вызывающий ритуал — /today; IG-доставку реюзает /post-carousel; видео для reel-слота приходит через /create-viral-reel; включение канала — /autopublish.

Персистентный per-channel выключатель реальной публикации (safe-default OFF).

Когда использовать. Зови перед первой боевой публикацией в канал (или чтобы её осознанно выключить). Пока канал OFF — /publish в него не отправляет ничего, только показывает dry-run.

Как вызвать

/autopublish <slug>
/autopublish <slug> <instagram|telegram> <on|off>
  • <slug> — id аккаунта.
  • Без канала — покажет статус обоих каналов и остановится.
  • С каналом и on/off — переключит и покажет новое состояние обоих.

Что на входе / на выходе

  • Вход/выход: plans/publish-config.yaml аккаунта (единственный файл, который эта команда пишет). identity/channels.yaml не трогает.

Пример

/autopublish max-tors instagram on

Включит autopublish для Instagram, покажет статус instagram ON / telegram OFF и предупредит: «теперь публикует РЕАЛЬНО в боевой канал».

Гейты/апрувы

  • Нет отдельного гейта на саму команду, но при включении (on) агент явно предупреждает, что канал начнёт публиковать в боевой канал по-настоящему.
  • Safe-default: нет файла publish-config.yaml → оба канала OFF, ничего не подразумевается включённым.

Связанные: гейт, который читает /publish на каждой отправке; каналы (identity/channels.yaml) настраиваются в /onboard.