Пример: один пост во все аккаунты
Превратите узел контента в пост для соцсетей, подгоните его под каждую площадку, свяжите со своими аккаунтами и опубликуйте, с полным разбором шага подтверждения.
У вас есть проект с контентом, и вы хотите один пост из этого контента в 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 поставьте триггер на расписание.
См. пост каждую неделю.