Publora Post — публикация и аналитика по API
Публикация, планирование и аналитика постов через Publora (MCP + REST).
Платформа — это параметр: механика одна для всех, различаются только лимиты и platformSettings.
Что понадобится. PUBLORA_API_KEY — свой, из кабинета Publora
(Settings → API). Сервис платный: Starter 15 постов/мес (X недоступен),
Pro 100, Premium 500. Без ключа навык всё равно полезен: он отдаёт готовый
текст для ручной вставки (manual-режим в scripts/lib/backend_selector.py).
Альтернатива без абонплаты — self-hosted Postiz (scripts/lib/postiz_client.py):
хостишь сам, POSTIZ_API_KEY + POSTIZ_BASE_URL со своим доменом.
Ни один хост в коде не зашит: без POSTIZ_BASE_URL клиент упадёт с внятной ошибкой,
а не уедет на чужой сервер.
Разграничение (не перепутай)
Если развёрнут свой Postiz — обычную публикацию дешевле гнать через него, а Publora
оставить на то, чего Postiz не умеет принципиально:
- LinkedIn-аналитика —
linkedin_post_stats, linkedin_account_stats, linkedin_followers, linkedin_profile_summary (+ REST /linkedin-post-statistics).
- LinkedIn-реакции и комментарии —
linkedin_create_reaction, linkedin_create_comment (+ REST /linkedin-comments, /linkedin-reactions).
- Telegram-доставка через Publora — в Postiz платформы Telegram нет вообще
(для собственного канала обычно проще Bot API — навык
tg-bot-publish).
Обычную публикацию (X, LinkedIn, Instagram, TikTok, Threads, Bluesky, YouTube, Facebook, Mastodon)
и всё, чего в Publora нет (Reddit, Pinterest, Slack, Discord, LinkedIn Pages), — через свой Postiz,
если он развёрнут.
- publora-post (этот скилл) — механика доставки на любую платформу + LinkedIn-эксклюзивы.
- tg-post — пишет посты в личный Telegram-канал твоим голосом. Контент — там, доставка — здесь или в
tg-bot-publish.
- linkedin-post-author / linkedin-post-writer / linkedin-comment-drafter — контент и стратегия LinkedIn; сюда приходят только за доставкой и статистикой.
Как пользоваться (общая механика)
- MCP: сервер
publora (https://mcp.publora.com, Authorization: Bearer $PUBLORA_API_KEY).
- REST fallback (если MCP недоступен или нужны
platformSettings): https://api.publora.com/api/v1, заголовок x-publora-key: sk_... (НЕ Authorization: Bearer).
- Подключённые аккаунты:
GET /platform-connections → берёшь platform ID нужной платформы.
- Публикация:
create_post c platforms: ["<platform-id>", ...] (можно несколько платформ разом), content, scheduledTime (ISO 8601, ОБЯЗАТЕЛЕН — для «сейчас» ставь now + 1 мин).
- Медиа:
get_upload_url (postGroupId, fileName, contentType, type: image|video) → PUT файла по presigned URL.
- Управление:
list_posts / update_post / delete_post.
- LinkedIn аналитика и engagement:
linkedin_post_stats, linkedin_account_stats, linkedin_followers, linkedin_profile_summary, linkedin_create_reaction, linkedin_create_comment (+ REST /linkedin-comments, /linkedin-reactions, /linkedin-post-statistics).
- Платформо-специфика (лимиты, форматы, настройки, troubleshooting) — в references ниже.
Platform ID форматы
| Платформа |
ID |
Пример |
| X/Twitter |
twitter-{id} |
twitter-123456789 |
| Threads |
threads-{id} |
threads-12345 |
| Instagram |
instagram-{id} |
instagram-11223344 |
| TikTok |
tiktok-{id} |
tiktok-99887766 |
| Bluesky |
bluesky-{did} |
bluesky-did:plc:abc123xyz |
| Telegram |
telegram-{chat_id} |
telegram-1001234567890 |
| LinkedIn |
linkedin-{id} |
linkedin-XXXXXXXXXX |
| YouTube |
youtube-{channel_id} |
youtube-UCxxx |
| Facebook |
facebook-{page_id} |
facebook-112233445566 |
| Mastodon |
mastodon-{id} |
mastodon-456 |
Ключевые лимиты-грабли (полные таблицы в references)
- X: 280 симв (emoji = 2), авто-треддинг, ручной разрыв
---, видео ≤ 2 мин, нужен платный Pro-план.
- Threads: 500 симв, максимум 1 хэштег, карусель 2-10 картинок.
- Instagram: только JPEG (PNG упадёт), только Business-аккаунт, текст-only постов нет.
- TikTok: только видео, ≥ 23 FPS, неаудированное приложение = только
SELF_ONLY (приватные).
- Bluesky: 300 симв, картинки ~1 МБ, app password (не основной пароль).
- Telegram (Bot API): caption ≤ 1 024 симв при медиа, видео ≤ 50 МБ, бот должен быть админом.
- LinkedIn: 3 000 симв (первые 210 видимы), никакого rich text, карусель = PDF-документ.
- Планы Publora: Starter 15 постов/мес (X недоступен), Pro 100, Premium 500.
References (полные тела бывших скиллов)
| Платформа / задача |
Файл |
| X/Twitter |
references/x-post/SKILL.md |
| Threads |
references/threads-post/SKILL.md |
| Instagram |
references/instagram-post/SKILL.md |
| TikTok |
references/tiktok-post/SKILL.md |
| Bluesky |
references/bluesky-post/SKILL.md |
| Telegram |
references/telegram-post/SKILL.md |
| YouTube / Facebook / Mastodon |
references/social-post/SKILL.md |
| LinkedIn публикация + comments/reactions REST (url_parser, PubloraClient, реакции INTEREST-маппинг) |
references/linkedin-post/SKILL.md |
| LinkedIn аналитика (post/account stats, followers, thread engagement, окно ответа автора) |
references/linkedin-analytics/SKILL.md |
Инструменты внутри навыка
| Файл |
Что делает |
scripts/lib/url_parser.py |
LinkedIn URL → URN (пост, коммент, share). Запусти без аргументов — прогонит примеры |
scripts/lib/publora_client.py |
REST-клиент Publora (посты, комменты, реакции, статистика) |
scripts/lib/postiz_client.py |
REST-клиент своего Postiz (только посты; реакций и комментов на чужие посты у него нет) |
scripts/lib/backend_selector.py |
Выбор бэкенда по переменным окружения: postiz → publora → diy → manual |
scripts/lib/approval.py |
Карточка подтверждения перед отправкой |
scripts/post_comment.py |
CLI: комментарий или реакция по ссылке на пост |
Подробности — в references/linkedin-post/SKILL.md.
Этими же lib/* пользуются linkedin-post-writer и linkedin-comment-drafter
(lib.active_backend(), lib.url_parser, lib.approval) — если навык удалить,
они останутся без бэкенда доставки.
1---2name: publora-post3description: Publora: публикация в 10 соцсетей по API + эксклюзивы — LinkedIn-аналитика, реакции и комментарии на чужие посты. Триггеры: «реакции linkedin», «запланируй пост через publora».4---56# Publora Post — публикация и аналитика по API78Публикация, планирование и аналитика постов через [Publora](https://publora.com) (MCP + REST).9**Платформа — это параметр**: механика одна для всех, различаются только лимиты и `platformSettings`.1011> **Что понадобится.** `PUBLORA_API_KEY` — свой, из кабинета Publora12> (Settings → API). Сервис платный: Starter 15 постов/мес (X недоступен),13> Pro 100, Premium 500. Без ключа навык всё равно полезен: он отдаёт готовый14> текст для ручной вставки (manual-режим в `scripts/lib/backend_selector.py`).15>16> Альтернатива без абонплаты — **self-hosted Postiz** (`scripts/lib/postiz_client.py`):17> хостишь сам, `POSTIZ_API_KEY` + `POSTIZ_BASE_URL` со своим доменом.18> Ни один хост в коде не зашит: без `POSTIZ_BASE_URL` клиент упадёт с внятной ошибкой,19> а не уедет на чужой сервер.2021## Разграничение (не перепутай)2223Если развёрнут свой Postiz — обычную публикацию дешевле гнать через него, а Publora24оставить на то, чего Postiz не умеет **принципиально**:25261. **LinkedIn-аналитика** — `linkedin_post_stats`, `linkedin_account_stats`, `linkedin_followers`, `linkedin_profile_summary` (+ REST `/linkedin-post-statistics`).272. **LinkedIn-реакции и комментарии** — `linkedin_create_reaction`, `linkedin_create_comment` (+ REST `/linkedin-comments`, `/linkedin-reactions`).283. **Telegram-доставка через Publora** — в Postiz платформы Telegram нет вообще29 (для собственного канала обычно проще Bot API — навык `tg-bot-publish`).3031Обычную публикацию (X, LinkedIn, Instagram, TikTok, Threads, Bluesky, YouTube, Facebook, Mastodon)32и всё, чего в Publora нет (Reddit, Pinterest, Slack, Discord, LinkedIn Pages), — через свой **Postiz**,33если он развёрнут.3435- **publora-post (этот скилл)** — механика доставки на любую платформу + LinkedIn-эксклюзивы.36- **tg-post** — пишет посты в личный Telegram-канал твоим голосом. Контент — там, доставка — здесь или в `tg-bot-publish`.37- **linkedin-post-author / linkedin-post-writer / linkedin-comment-drafter** — контент и стратегия LinkedIn; сюда приходят только за доставкой и статистикой.3839## Как пользоваться (общая механика)40411. **MCP**: сервер `publora` (`https://mcp.publora.com`, `Authorization: Bearer $PUBLORA_API_KEY`).422. **REST fallback** (если MCP недоступен или нужны `platformSettings`): `https://api.publora.com/api/v1`, заголовок `x-publora-key: sk_...` (НЕ `Authorization: Bearer`).433. **Подключённые аккаунты**: `GET /platform-connections` → берёшь platform ID нужной платформы.444. **Публикация**: `create_post` c `platforms: ["<platform-id>", ...]` (можно несколько платформ разом), `content`, `scheduledTime` (ISO 8601, ОБЯЗАТЕЛЕН — для «сейчас» ставь now + 1 мин).455. **Медиа**: `get_upload_url` (`postGroupId`, `fileName`, `contentType`, `type: image|video`) → PUT файла по presigned URL.466. **Управление**: `list_posts` / `update_post` / `delete_post`.477. **LinkedIn аналитика и engagement**: `linkedin_post_stats`, `linkedin_account_stats`, `linkedin_followers`, `linkedin_profile_summary`, `linkedin_create_reaction`, `linkedin_create_comment` (+ REST `/linkedin-comments`, `/linkedin-reactions`, `/linkedin-post-statistics`).488. **Платформо-специфика** (лимиты, форматы, настройки, troubleshooting) — в references ниже.4950### Platform ID форматы5152| Платформа | ID | Пример |53|---|---|---|54| X/Twitter | `twitter-{id}` | `twitter-123456789` |55| Threads | `threads-{id}` | `threads-12345` |56| Instagram | `instagram-{id}` | `instagram-11223344` |57| TikTok | `tiktok-{id}` | `tiktok-99887766` |58| Bluesky | `bluesky-{did}` | `bluesky-did:plc:abc123xyz` |59| Telegram | `telegram-{chat_id}` | `telegram-1001234567890` |60| LinkedIn | `linkedin-{id}` | `linkedin-XXXXXXXXXX` |61| YouTube | `youtube-{channel_id}` | `youtube-UCxxx` |62| Facebook | `facebook-{page_id}` | `facebook-112233445566` |63| Mastodon | `mastodon-{id}` | `mastodon-456` |6465### Ключевые лимиты-грабли (полные таблицы в references)6667- X: 280 симв (emoji = 2), авто-треддинг, ручной разрыв `---`, видео ≤ 2 мин, нужен платный Pro-план.68- Threads: 500 симв, максимум 1 хэштег, карусель 2-10 картинок.69- Instagram: **только JPEG** (PNG упадёт), только Business-аккаунт, текст-only постов нет.70- TikTok: только видео, ≥ 23 FPS, неаудированное приложение = только `SELF_ONLY` (приватные).71- Bluesky: 300 симв, картинки ~1 МБ, app password (не основной пароль).72- Telegram (Bot API): caption ≤ 1 024 симв при медиа, видео ≤ 50 МБ, бот должен быть админом.73- LinkedIn: 3 000 симв (первые 210 видимы), никакого rich text, карусель = PDF-документ.74- Планы Publora: Starter 15 постов/мес (X недоступен), Pro 100, Premium 500.7576## References (полные тела бывших скиллов)7778| Платформа / задача | Файл |79|---|---|80| X/Twitter | `references/x-post/SKILL.md` |81| Threads | `references/threads-post/SKILL.md` |82| Instagram | `references/instagram-post/SKILL.md` |83| TikTok | `references/tiktok-post/SKILL.md` |84| Bluesky | `references/bluesky-post/SKILL.md` |85| Telegram | `references/telegram-post/SKILL.md` |86| YouTube / Facebook / Mastodon | `references/social-post/SKILL.md` |87| LinkedIn публикация + comments/reactions REST (url_parser, PubloraClient, реакции INTEREST-маппинг) | `references/linkedin-post/SKILL.md` |88| LinkedIn аналитика (post/account stats, followers, thread engagement, окно ответа автора) | `references/linkedin-analytics/SKILL.md` |8990## Инструменты внутри навыка9192| Файл | Что делает |93|---|---|94| `scripts/lib/url_parser.py` | LinkedIn URL → URN (пост, коммент, share). Запусти без аргументов — прогонит примеры |95| `scripts/lib/publora_client.py` | REST-клиент Publora (посты, комменты, реакции, статистика) |96| `scripts/lib/postiz_client.py` | REST-клиент своего Postiz (только посты; реакций и комментов на чужие посты у него нет) |97| `scripts/lib/backend_selector.py` | Выбор бэкенда по переменным окружения: `postiz` → `publora` → `diy` → `manual` |98| `scripts/lib/approval.py` | Карточка подтверждения перед отправкой |99| `scripts/post_comment.py` | CLI: комментарий или реакция по ссылке на пост |100101Подробности — в `references/linkedin-post/SKILL.md`.102103Этими же `lib/*` пользуются `linkedin-post-writer` и `linkedin-comment-drafter`104(`lib.active_backend()`, `lib.url_parser`, `lib.approval`) — если навык удалить,105они останутся без бэкенда доставки.