date.Бот один — @ryaae_bot. Труба уведомлений идёт мимо собеседника: скрипты шлют напрямую через Bot API, и RYA не видит их как свои реплики. Пишет бот только в личный чат Романа — групп и тем нет, все проекты одной лентой. Собеседник живёт на Memex (launchd rya-start, rya-health, rya-inbound-watchdog); на MacBook те же задания выключены с 05.08.
m — машина сама · a — сессия Claude по правилу трека. Ночью сессия шлёт вехи и проблемы примерно раз в полчаса (YTEVO02 v4, 02.10: девять вех с 02:39 до 06:18).
| Кто шлёт | Этап | Что | Формат | Когда |
|---|---|---|---|---|
| tg_status.py (headless) | Cut | одно живое: Этап · Идёт · Готово · Скачивание · Части · Дальше · Жду | HTML; первое тихо, дальше правка | раз в 300 с |
| sc_status.py (story_cut) | Cut | одно живое: Сейчас · Картинка X из Y · Графика · Очередь рендера · Последнее · Дальше | HTML; первое тихо, дальше правка | раз в 300 с |
| Job.tg · Job.tg_file (common.py) | Cut | старт рендера (тихо), ⛔ сбой до 700 знаков, «оригиналы скачаны, md5 совпали»; файлы до 50 МБ | HTML, без превью | по событиям |
| dc.py · Project.tg (doc_cut) | Cut | в очереди · ⛔ остановка на шаге · собран и итог приёмки · каждые 4 части | tg.py без флагов: HTML, превью включено | по событиям |
| deliver.py tg | Cut · выдача | сам не шлёт: копия под бота, 1080p или 720p, до 48 МБ | — | 1 на версию |
| sc_deliver.py pilot --send | Cut · пилот | видео 720p первых частей, до 48 МБ | curl sendVideo, тихо, без разметки | 1 на версию |
| shorts.py telegram → tg_send.py | Shorts | видео 1080×1920 с обложкой; подпись — название, статус выхода, пометка | Telethon в «Избранное», HTML | 1 на шортс |
| tg_forward.py · tg_review.py (в проекте) | Shorts · сдача | подводка «Шортс N · цитата» + видео без подписи; варианты и доска цвета | Telethon в «Избранное» | по запросу |
| pending.py (launchd, раз в 2 ч) | Shorts · доливка | ✅ новая версия залита и в графике · ℹ️ лимит заливок не освободился | простой текст | по исходу |
| scheduled_publish.py (launchd, раз в 5 мин) | Shorts · график | ✅ Опубликован шортс + ссылка · ⛔ не вышел + ошибка и журнал | простой текст, превью youtu.be | по событию |
| сессии Claude Code (tg.py руками) | все этапы | старт, вехи, «посмотри до рендера», ссылки, видео, итог ночи | чаще HTML; без превью — примерно треть | ночью ~ раз в 15–30 мин |
| цепочки проекта (hooks.sh, render_v*.sh, tg_live.py) | одноразовые | «сбой — шаг, журнал»; своё живое сообщение ночной сборки | HTML, правка | по событиям |
| review.py · watchdog · phone_brief (ревью ката) | трек Premiere | ▶ ✅ ⚠️ 🛑 ☁️ ⏳ 🏁 по стадиям; бриф — файлом | HTML, urllib, 3 попытки | по стадиям |
| render_queue.py · autocut · 11_sync | — | ничего не шлют: статусы автосборки слала сессия руками | — | — |
Проверено чтением кода и журналов сессий 26.09–03.10 (201 команда с Telegram). Смежные отправители того же бота — ночные оркестраторы, прокси-ферма, ингест дня, дневной отчёт канала — шлют короткие строки, кто HTML, кто простым текстом.
Настоящие сообщения из журналов сессий и кода: тексты дословно, адреса файлов на Drive скрыты.
Шесть настоящих сообщений 02–03.10.2026. Видео и картинки здесь — плашки: кадров фильмов и шортсов на странице нет.
Образцы формата по правилам Романа — то, к чему ведут «надо построить»: числа взяты из настоящих случаев, закреп, кнопки-ссылки и повтор отправки пока не сделаны.
Старое «обычный текст по умолчанию» (17.05) устарело: Роман просил не голый текст, а убрать мусор. С 15.09 — девять просьб о форматировании. Персона бота на Memex велит ставить моноширинный на пути — расходится с правилом 29.09 «имя файла обычным текстом».
deliver.py tg: двухпроходный x264 под --mb 48; 1080p, если видео остаётся ≥ ~1,15 Мбит/с, иначе 720ptg.py video rya $CHAT файл.mp4 «подпись» --width 1920 --height 1080 --duration Nsc_deliver.py pilot <проект> --send: склейка первых частей (p0001–p0003) → 720p до 48 МБ → бот, тихоshorts.py telegram → tg_send.py: до 2 ГБ, части по 512 КБ в 8 потоков ≈ 4 МБ/сСверено с документацией Bot API 10.3 (24.08.2026) 03.10.2026; «у нас» — поиск по коду ~/YTAI/scripts.
| Возможность | В API | У нас |
|---|---|---|
| HTML: жирный, курсив, ссылка, цитата, спойлер | ✓ | ✓ |
| Живая правка сообщения (editMessageText) | ✓ | ✓ |
| Превью ссылки (link_preview_options) | ✓ | ! |
| Видео файлом: обложка, потоковое | ✓ | ! |
| Файл больше 50 МБ | ! | ! |
| Кнопки-ссылки (url) | ✓ | ✗ |
| Кнопки «ок / править» (callback) | ✓ | ✗ |
| Закреп живого статуса | ✓ | ✗ |
| Альбом 2–10 видео и фото | ✓ | ✗ |
| Темы на проект в личке с ботом | ✓ | ✗ |
| Rich-сообщение: таблица, заголовки | ✓ | ! |
| Реакция бота на сообщение | ✓ | ✗ |
Частично: превью выключено примерно в трети сообщений сессий; обложку видео выбирает Telegram (у tg.py нет thumbnail и cover); больше 50 МБ — не ботом, а Telethon (свой сервер Bot API дал бы до 2000 МБ); rich — один ручной тест 02.10. reply_markup, pinChatMessage, sendMediaGroup, message_thread_id, setMessageReaction в коде конвейера — 0 вхождений.
| Проверка | Норма | Чем | Откуда взялась |
|---|---|---|---|
| Теги — с parse_mode html | есть жирный или ссылка — всегда html, иначе теги уйдут буквами | tg.py text (html по умолчанию) | 17.05: теги ушли сырым текстом |
| Длина | текст до 4096 знаков, подпись к видео и файлу до 1024 | Bot API | лимиты Telegram |
| Время в статусе | только из date, не досчитывать | сессия | 29.09: «у тебя внутренние часы сломаны?» |
| Вехи — отдельно от живого | финал, сбой, «посмотри» — новым сообщением: правка пуша не даёт | Job.tg · tg.py text | персона RYA: «отдельное сообщение, не edit» |
| Видео — файлом с названием | до 48 МБ ботом, больше — Telethon в «Избранное» | deliver.py tg · tg_send.py | 29.09: «видео отправь с названием файла» |
| Ссылка — с названием и превью | название жирным, ссылка с карточкой; имя файла простым текстом | tg.py text без --no-preview | 29.09: «почему нет такого превью?» |
| Сбой — с шагом и журналом | что упало, на каком шаге, что делаю дальше, журнал | dc.py · обёртки цепочек | YTLAB01: «сбой» 15:46 был своей проверкой вёрстки |
| На YouTube — после «ок» | черновики шортсов — файлами в Telegram и в 04_Shorts | shorts.py telegram | 02.10: «не надо заливать до согласования» |
| Секреты и хэндоффы — не в Telegram | ни токенов, ни ключей; хэндофф — в чат сессии | персона RYA · память | 20.09: «в телеграм не надо» |
| Файл | Что хранит | Кто пишет |
|---|---|---|
| задание проекта · ключ telegram | бот и чат — куда слать вехи и статус | сессия при создании задания |
| 00_Setup/08_Cut/status.json · tg_status_msg.json | этап, идёт, готово; id живого сообщения | Job.status; tg_status.py, sc_status.py |
| ~/.config/ytai/publish_schedule.json · shorts_pending.json | график выхода и очередь доливки | shorts.py schedule · pending.py |
| ~/Library/Logs/ytai_publish_schedule.log · ytai_shorts_pending.log | что вышло, что нет и почему | сторожа launchd |
| TELEGRAM_UI.md (стандарт флота, 11.08.2026) | уровни формата, rich, кнопки, опросы | флот ботов |
| память feedback_telegram_plain_text | правила Романа о формате с датами | сессия в день просьбы |
| эта страница | кто что шлёт, образцы, проверки, что построить | сессия, нашедшая новый отправитель или ошибку |
TG=~/bin/tg.py; CHAT=<личный чат Романа из ключа telegram задания> python3 $TG text rya $CHAT "<b>YTCG37 · v6 собран</b> Приёмка чистая…" --parse html # веха: жирный заголовок, ссылка с превью python3 $TG text rya $CHAT "…" --silent # тихо — для промежуточного python3 $TG video rya $CHAT small.mp4 "подпись" --width 1920 --height 1080 --duration 282 # видео до 50 МБ python3 $TG raw rya editMessageText '{"chat_id": …, "message_id": …, "text": "…", "parse_mode": "HTML"}' # правка; подпись видео — editMessageCaption
Есть теги — всегда --parse html. Без --no-preview ссылка получает карточку.
nohup python3 ~/YTAI/scripts/05_editing/0510_headless_cut/tg_status.py --job $J --every 300 & # headless: одно сообщение, правка раз в 5 мин nohup python3 ~/YTAI/scripts/05_editing/0511_story_cut/sc_status.py $P --every 300 & # story_cut: части, графика, очередь рендера touch $P/00_Setup/08_Cut/STOP_STATUS # остановить; иначе — finished в status.json или через сутки
$V ~/YTAI/scripts/05_editing/0510_headless_cut/deliver.py tg --job $J --file film.mp4 --out small.mp4 --mb 48 # копия под бота $V ~/YTAI/scripts/05_editing/0511_story_cut/sc_deliver.py pilot $P --send # пилот 720p первых частей $V ~/YTAI/scripts/07_shorts/0701_finished/shorts.py telegram --job $JOB --only S06,S07 --note "…" # шортсы в «Избранное» (Telethon)
launchctl list | grep -E 'ytai-publish-schedule|ytai-shorts-pending' # сторожа: раз в 5 мин и раз в 2 ч tail -20 ~/Library/Logs/ytai_publish_schedule.log # что вышло и что нет
Токен бота — в файлах окружения на маке и на Memex, не в git и не в KB.