16 августа 2026

Скил publishing — технические правила распространения контента по платформам

Как скил publishing в Datarim кодирует лимиты платформ, санитизацию HTML, паттерны разбивки длинных постов и рецепт комментариев под каналом — чтобы агенты публиковали контент правильно с первого раза.

Написать пост и опубликовать его — две разные задачи. Готовый текст может всё равно сломаться в момент публикации: обрезаться лимитом платформы, сломаться из-за неэкранированного HTML или встать не в тот тред в Telegram-канале. Скил publishing кодирует технические правила, которые касаются именно акта публикации, оставляя написание и проверку качества другим скилам.

Лимиты платформ и подсчёт символов

У каждой платформы свои лимиты. sendMessage Telegram допускает 4096 символов, подписи к sendPhoto — 1024, оба лимита считаются в UTF-16 code units, а не в байтах. Большинство кириллических символов — 1 юнит, большинство эмодзи — 2 (суррогатная пара). Скил предоставляет канонический счётчик на Python, telegram_units(text), реализованный через len(text.encode("utf-16-le")) // 2. LinkedIn ограничивает текст поста 3000 символами, Twitter/X — 280 (или 25 000 с Premium+), Facebook — 63 206.

Санитизация HTML для Telegram

Отправка текста с parse_mode=HTML и сырым & или < возвращает ошибку 400. Скил включает функцию tg_safe_html() на базе Python's html.parser: она экранирует сырые символы, пропускает без изменений разрешённые теги (<b>, <a href>, <code> и ещё несколько), удаляет запрещённые теги с сохранением их содержимого. Allowlist схем в атрибуте href блокирует ссылки javascript: и data: независимо от способа кавычки атрибута.

Паттерны разбивки длинных постов

Когда пост превышает лимит, скил определяет три именованных паттерна. Паттерн A — пост с фото от 1024 до 5096 юнитов: тизер-подпись в sendPhoto, остаток — как reply. Паттерн B — длинный пост без фото свыше 4096 юнитов: цепочка связанных sendMessage-вызовов. Паттерн C — пост с фото свыше 5096 юнитов: фото получает нумерованную подпись [1/N], каждое продолжение несёт свой номер. Точки разбивки выбираются по приоритету: сначала операторские маркеры (<!-- split-here -->), потом границы абзацев, потом границы предложений, в крайнем случае — разрез по последнему пробелу в рамках лимита.

Комментарии под каналом и правило ссылок в первом комментарии

Чтобы оставить комментарий под постом Telegram-канала, нужно обнаружить автопересланную копию в связанной группе через цикл опроса getUpdatesreply_to_message_id с ID поста канала не работает, потому что этот ID живёт в другом пространстве имён. После публикации комментария возвращённый message_thread_id должен совпадать с ID пересланного сообщения — иначе комментарий попал не в тот тред и его нужно удалить. В том же скиле зафиксировано универсальное правило ссылок: тело поста не должно содержать отдельного блока со ссылками — все CTA-URL относятся в первый комментарий автора. Подробнее — в справочнике publishing или в посте что такое Datarim.