Papera ещё в разработке. Что-то может измениться или перестать работать, пока мы её строим.
MCPПример: один пост во все аккаунты

Пример: один пост во все аккаунты

Превратите узел контента в пост для соцсетей, подгоните его под каждую площадку, свяжите со своими аккаунтами и опубликуйте, с полным разбором шага подтверждения.

У вас есть проект с контентом, и вы хотите один пост из этого контента в Bluesky и в Telegram, сформулированный на каждой площадке немного по-своему. Вот прогон от узла контента до живых постов.

Что нужно: клиент ИИ, подключённый к Papera, проект с узлом контента внутри (см. презентацию из ваших заметок) и аккаунты, уже подключённые в приложении (см. Подключение аккаунта Bluesky и Подключение канала Telegram).

Идентификаторы ниже сокращены для читаемости.

1. Посмотрите, что уже есть

Вы: Возьми заметку о запуске в моём проекте Papera и опубликуй её в Bluesky и Telegram.

// get_workflow
{ "project_id": "9c1f2a84", "workflow_id": "41ac7d20" }

Возвращается граф: один узел контента content-3b71, и из него пока ничего не выведено.

2. Создайте пост

// attach_renderer
{
  "project_id": "9c1f2a84",
  "workflow_id": "41ac7d20",
  "source_node_id": "content-3b71",
  "renderer_id": "social-post"
}

social-post это пост, не привязанный к площадке: один пост, который может уйти в любой аккаунт. Вызов возвращает идентификатор узла поста output-77e0 и содержимое, выведенное из вашего узла контента.

3. Подгоните его под площадки

У Bluesky жёсткий лимит символов, у Telegram нет, поэтому дайте Bluesky собственную подпись, а Telegram пусть наследует общую версию по умолчанию:

// edit_post
{
  "project_id": "9c1f2a84",
  "workflow_id": "41ac7d20",
  "post_node_id": "output-77e0",
  "variants": {
    "bluesky": {
      "caption": "Scheduling is live. Pick a time, pick the accounts, done.",
      "hashtags": ["papera", "shipit"]
    }
  }
}

Версия перекрывает только те поля, которые задаёт, поэтому Telegram всё равно получает общую версию по умолчанию. Хэштеги пишутся без ведущего #.

4. Направьте его в ваши аккаунты

Добавьте узел для каждого подключённого аккаунта, используя connection_id из приложения:

// add_node
{ "project_id": "9c1f2a84", "workflow_id": "41ac7d20", "kind": "account", "connection_id": "conn-bsky-01" }
// add_node
{ "project_id": "9c1f2a84", "workflow_id": "41ac7d20", "kind": "account", "connection_id": "conn-tg-01" }

Затем свяжите пост с обоими одним вызовом:

// target_accounts
{
  "project_id": "9c1f2a84",
  "workflow_id": "41ac7d20",
  "post_node_id": "output-77e0",
  "account_node_ids": ["account-a1", "account-b2"]
}

Каждый аккаунт обрабатывается отдельно. Если какой-то не может принять пост, он возвращается в rejected с причиной, а другой всё равно подключается.

5. Добавьте триггер, который его запускает

Публикацию выполняет триггер, поэтому добавьте его и свяжите с постом:

// add_node
{ "project_id": "9c1f2a84", "workflow_id": "41ac7d20", "kind": "trigger" }
// connect_nodes
{
  "project_id": "9c1f2a84",
  "workflow_id": "41ac7d20",
  "from_node_id": "trigger-c3",
  "to_node_id": "output-77e0"
}

6. Прочитайте план до того, как что-то уйдёт наружу

// publish_post
{ "project_id": "9c1f2a84", "workflow_id": "41ac7d20", "post_id": "output-77e0" }

Этот вызов ничего не публикует. Papera возвращает план и токен, а ваш клиент показывает вам план:

Papera: Это запускает триггер trigger-c3. 1 пост в 2 аккаунта: заметка о запуске в @you.bsky.social (bluesky, 1 изображение) и в Papera News (telegram, 1 изображение). Публикация также заменяет сохранённый снимок текущим черновиком.

Читайте буквально: подтверждение запускает весь триггер целиком, поэтому уходит каждый пост, до которого он дотягивается, а не только названный вами. Здесь это один пост.

7. Подтвердите

// publish_post
{
  "project_id": "9c1f2a84",
  "workflow_id": "41ac7d20",
  "post_id": "output-77e0",
  "confirm_token": "ct_5b9e..."
}

Токен работает один раз, истекает через десять минут и привязан ровно к этим аргументам. Измените аргумент, и вместо действия вы получите новый план.

8. Проследите за результатом

// get_publish_status
{ "project_id": "9c1f2a84", "occurrence_id": "manual:trigger-c3" }

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

Варианты

Больше аккаунтов. Добавьте по узлу на каждое подключение и передайте их все в target_accounts одним вызовом.

Подгонка под каждую площадку. Дайте каждой площадке свою запись в variants: instagram, bluesky, telegram, linkedin.

Только часть контента. Поставьте трансформер между узлом контента и постом через attach_transformer и section_ids, чтобы пост выводился из выбранных вами разделов.

Позже, а не сейчас. Вместо publish_post поставьте триггер на расписание. См. пост каждую неделю.