• Быстрый старт
    • Доступ и токен
  • СУЩНОСТИ
    • Страницы
      • Markdown
      • Аналитика страниц
    • Фреймы
      • Блоки
      • Бинды data-op-bind
      • Повторитель onpress/repeat
      • Сборка и копии
      • Фреймы в Markdown
      • Фреймы с данными
      • Готовые фреймы
    • Данные
    • Медиа
  • УСТРОЙСТВО САЙТА
    • Сайты
    • Настройки сайта
    • Меню
    • Языки и переводы
    • Стили и оформление
  • УПРАВЛЕНИЕ
    • Домены
    • Соцсети и контакты
    • SEO
    • Аналитика
    • Кэш
    • Дашборд и вход
    • Пользователи и профиль
    • Сайдбар документации
    • Ошибки и проблемы
  • КЕЙСЫ
    • Создание сайтов
    • Работа с контентом
    • Фреймы и данные
    • Настройка сайта
    • Перевод страницы
  • ПРИЛОЖЕНИЯ
    • Приложения
      • Закрытый доступ
      • Данные приложения
      • Внешние данные
      • Демо
    • Быстрый старт
    • Доступ и токен
  • СУЩНОСТИ
    • Страницы
    • Фреймы
    • Данные
    • Медиа
  • УСТРОЙСТВО САЙТА
    • Сайты
    • Настройки сайта
    • Меню
    • Языки и переводы
    • Стили и оформление
  • УПРАВЛЕНИЕ
    • Домены
    • Соцсети и контакты
    • SEO
    • Аналитика
    • Кэш
    • Дашборд и вход
    • Пользователи и профиль
    • Сайдбар документации
    • Ошибки и проблемы
    • Редиректы
    • Кредиты и автоматизация
    • Входящие
    • Кросспостинг
OnPress OnPress
  • Документация
  • Контакты
Войти
Обзор Справочник API
    • Быстрый старт
    • Доступ и токен
  • СУЩНОСТИ
    • Страницы
      • Markdown
      • Аналитика страниц
    • Фреймы
      • Блоки
      • Бинды data-op-bind
      • Повторитель onpress/repeat
      • Сборка и копии
      • Фреймы в Markdown
      • Фреймы с данными
      • Готовые фреймы
    • Данные
    • Медиа
  • УСТРОЙСТВО САЙТА
    • Сайты
    • Настройки сайта
    • Меню
    • Языки и переводы
    • Стили и оформление
  • УПРАВЛЕНИЕ
    • Домены
    • Соцсети и контакты
    • SEO
    • Аналитика
    • Кэш
    • Дашборд и вход
    • Пользователи и профиль
    • Сайдбар документации
    • Ошибки и проблемы
  • КЕЙСЫ
    • Создание сайтов
    • Работа с контентом
    • Фреймы и данные
    • Настройка сайта
    • Перевод страницы
  • ПРИЛОЖЕНИЯ
    • Приложения
      • Закрытый доступ
      • Данные приложения
      • Внешние данные
      • Демо
    • Быстрый старт
    • Доступ и токен
  • СУЩНОСТИ
    • Страницы
    • Фреймы
    • Данные
    • Медиа
  • УСТРОЙСТВО САЙТА
    • Сайты
    • Настройки сайта
    • Меню
    • Языки и переводы
    • Стили и оформление
  • УПРАВЛЕНИЕ
    • Домены
    • Соцсети и контакты
    • SEO
    • Аналитика
    • Кэш
    • Дашборд и вход
    • Пользователи и профиль
    • Сайдбар документации
    • Ошибки и проблемы
    • Редиректы
    • Кредиты и автоматизация
    • Входящие
    • Кросспостинг
Управление
Markdown
Открыть в ИИ
  • Открыть в ChatGPT
  • Открыть в Claude
  • Открыть в Gemini
  • Открыть в Perplexity
  • Открыть в Grok
  • Открыть в DeepSeek

Справочник: кросспостинг

Здесь все эндпоинты /site/$SITE/crosspost… с параметрами, ответами и отказами: каждая новая страница сайта после публикации сама уходит постом в ваш Telegram-канал; в консоли это «Настройки → Кросспостинг».

info

Во всех примерах API — https://onpress.pro/api/v2, SITE — id сайта (SITE_ID), OP_TOKEN — токен op_XXXX. Все эндпоинты страницы пишутся от /site/$SITE и доступны администратору сайта. Как получить токен и в какой форме приходят отказы — на странице «Доступ и токен».

Как подключить канал

Добавьте бота @onpress_tg_bot администратором канала с правом публикации сообщений, укажите канал через PUT /crosspost/telegram с channel и включите отправку тем же эндпоинтом с enabled: true. Платформа сразу проверяет, видит ли бот канал и может ли в нём публиковать; результат приходит в telegram.check.

Как выглядит пост

Пост собирается из самой страницы, без ИИ, одним сообщением. Сверху картинка: превью страницы, а если в начале статьи есть ещё картинки — альбом до четырёх. Ниже жирный заголовок и первые абзацы тела до первого подзаголовка, не больше трёх, с сохранённым жирным, курсивом, зачёркнутым и кодом. Последнее предложение (у длинного — его хвост) становится ссылкой на страницу; кнопок под постом нет. С картинкой текст идёт подписью и укладывается в 1000 знаков, без картинки — в 1600. Текст режется по границе абзаца, внутри абзаца — по границе предложения, слово посередине не рвётся. Страница из одних блоков без абзацев получает текстом своё SEO-описание.

Когда пост уходит

Пост уходит один раз — после первой публикации страницы, примерно через минуту, когда страница уже открывается по адресу. Правки опубликованной страницы второго поста не дают, отложенная страница уходит, когда выходит по расписанию. Не уходят: страницы, опубликованные до включения кросспостинга; страницы вне выбранных разделов; главная и служебные страницы (политика, контакты, 404 и подобные); заметки, перенесённые из Telegram-канала, — иначе пост вернулся бы в канал-источник; закрытые от индексации и под паролем; все страницы закрытого сайта; страницы с датой публикации старше трёх дней — так перенос архива не заваливает канал. Сверх 5 постов в час и 30 в сутки страницы пропускаются. Пропущенные из-за закрытия от индексации, пароля, закрытого сайта, даты и лимита видны в журнале, их можно отправить вручную.

Ошибка Telegram публикацию не ломает: страница выходит на сайте, а ошибка видна в журнале и в проверке канала. Если бота убрали из канала или лишили прав, отправка останавливается до новой успешной проверки.

GET /crosspost

Отдаёт канал, результат проверки, включена ли отправка, разделы, верхние разделы сайта для выбора и лимиты. Например:

curl -s "$API/site/$SITE/crosspost" -H "Authorization: Bearer $OP_TOKEN"
{
  "success": true,
  "site_id": "x9HTLHECq",
  "telegram": {
    "bot": "@onpress_tg_bot",
    "channel": "@channel",
    "chat": { "id": "-1001234567890", "title": "Мой канал", "username": "channel", "url": "https://t.me/channel" },
    "enabled": true,
    "active": true,
    "sections": ["/news/"],
    "check": { "ok": true, "code": "ok", "message": "", "checked_at": "2026-10-09T07:44:33Z" },
    "enabled_at": "2026-10-09T07:45:35Z"
  },
  "section_options": [
    { "path": "/news/", "title": "Новости", "pages": 18 }
  ],
  "limits": { "per_hour": 5, "per_day": 30, "max_age_days": 3 }
}
ПолеОписание
telegram.channelканал, как его передали
telegram.chatканал по данным Telegram: id, title, username, url; у закрытого канала username и url пустые
telegram.enabledвключена ли отправка
telegram.activeпосты действительно уходят: отправка включена и последняя проверка канала успешна
telegram.sectionsвыбранные разделы; [] — все страницы
telegram.checkпоследняя проверка канала, коды — в таблице проверки; null — канал не проверялся
section_optionsопубликованные страницы первого уровня, у которых есть опубликованные дочерние, по числу дочерних
limitsпостов в час, в сутки и предельный возраст страницы в днях

PUT /crosspost/telegram

Подключает канал, включает или выключает отправку и выбирает разделы. Все поля необязательны, меняется только переданное; новый канал проверяется сразу. Включить можно только канал, который прошёл проверку, и при включении всё уже опубликованное помечается и в канал не уходит. Ошибка Telegram запрос не роняет: канал сохраняется, check.ok — false, check.code — причина. Ответ — как у GET /crosspost. Например, подключить канал и отправлять в него только новости:

curl -s -X PUT "$API/site/$SITE/crosspost/telegram" \
  -H "Authorization: Bearer $OP_TOKEN" -H 'Content-Type: application/json' \
  -d '{"channel": "@channel", "enabled": true, "sections": ["/news/"]}'
ПолеТипПо умолчаниюОписание
channelstring—@имя, ссылка https://t.me/имя или числовой id закрытого канала (-100…)
enabledboolfalsetrue — новые страницы уходят в канал
sectionsarray[]пути разделов, до 20: news, /news/ и полный адрес приводятся к /news/; на многоязычном сайте /news/ подходит и к /news/…, и к /en/news/…; корень / разделом не считается; [] — все страницы
КодСтатусКогдаЧто делать
channel_required400канал не передан и ещё не подключёнпередайте channel
invite_link400ссылка-приглашение вида t.me/+… не называет каналпередайте @имя или числовой id
invalid_channel400channel не похож на каналисправьте поле
invalid_sections400sections не массив путей или их больше 20исправьте поле
invalid_enabled400enabled не true и не falseисправьте поле
unknown_field400в теле лишнее полеоставьте channel, enabled, sections
channel_not_ready409включение канала, который не прошёл проверку; результат в checkисправьте права бота и проверьте канал

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

check.codeЧто значит
okбот может публиковать
channel_not_foundканал не найден или бот в нём не состоит
bot_not_memberбот не добавлен в канал
bot_kickedбота удалили из канала
bot_not_adminбот не администратор канала
no_post_rightу бота нет права публиковать сообщения
not_a_channelэто группа или чат, а не канал
telegram_unreachable, rate_limited, telegram_errorTelegram не ответил, ограничил отправку или вернул другую ошибку

POST /crosspost/telegram/check

Повторяет проверку канала и сохраняет результат; тело не читается. Нужна, когда бота добавили или вернули ему права после ошибки: успешная проверка снова запускает отправку. Ответ — как у GET /crosspost. Например:

curl -s -X POST "$API/site/$SITE/crosspost/telegram/check" -H "Authorization: Bearer $OP_TOKEN"
КодСтатусКогдаЧто делать
not_connected404канал не подключёнподключите через PUT /crosspost/telegram

POST /crosspost/telegram/test

Отправляет в канал страницу в том же виде, в каком она ушла бы сама. Страница отправленной не помечается, правила отбора и лимиты не применяются, запись появляется в журнале с kind: "test". Например, тестовый пост страницы 7148:

curl -s -X POST "$API/site/$SITE/crosspost/telegram/test" \
  -H "Authorization: Bearer $OP_TOKEN" -H 'Content-Type: application/json' \
  -d '{"page": 7148}'
ПолеТипПо умолчаниюОписание
pageint или stringпоследняя опубликованнаяid или адрес страницы
{ "success": true, "site_id": "x9HTLHECq", "id": 135, "page_id": 7148, "status": "sent", "message_id": 175, "message_url": "https://t.me/channel/175", "photo": true, "images": 3 }

images — сколько картинок ушло: 0 — пост текстом, 1 — с картинкой, больше — альбом. Ошибка Telegram приходит в том же ответе: status: "failed", code и error.

КодСтатусКогдаЧто делать
not_connected404канал не подключёнподключите канал
no_pages404на сайте нет опубликованных страницпередайте page
channel_not_ready409канал не прошёл проверкупроверьте канал
page_not_published409страница не опубликованаопубликуйте её или возьмите другую

DELETE /crosspost/telegram

Снимает канал и останавливает отправку; журнал остаётся. Ответ — как у GET /crosspost. Например:

curl -s -X DELETE "$API/site/$SITE/crosspost/telegram" -H "Authorization: Bearer $OP_TOKEN"

GET /crosspost/log

Отдаёт журнал отправок, новые сверху: отправленные, упавшие и пропущенные записи. Страницы, которые в канал не идут по устройству — опубликованы до включения, вне разделов, служебные, из Telegram, — в журнал не попадают. Например, последние 30 записей:

curl -s "$API/site/$SITE/crosspost/log?limit=30" -H "Authorization: Bearer $OP_TOKEN"
ПараметрТипПо умолчаниюОписание
limitint30от 1 до 100
beforeint—следующая порция: значение next из прошлого ответа
{
  "success": true,
  "site_id": "x9HTLHECq",
  "items": [
    { "id": 141, "page_id": 7152, "kind": "auto", "status": "sent", "reason": null, "title": "Новая статья", "url": "https://example.com/news/new-article/", "message_id": 180, "message_url": "https://t.me/channel/180", "error": null, "attempts": 1, "created_at": "2026-10-09T08:04:17Z", "updated_at": "2026-10-09T08:04:19Z" }
  ],
  "next": null
}
ПолеОписание
kindauto — после публикации, test — тестовый пост, manual — отправлен вручную
statuspending, sent, failed, skipped
reasonу skipped — причина: noindex, password, site_closed, old_date, limit; у failed — код ошибки Telegram
errorу failed — текст ошибки Telegram
message_urlссылка на пост; у закрытого канала ведёт по номеру канала и открывается только его участникам
nextid для следующей порции; null — дальше пусто

POST /crosspost/log/{id}/send

Отправляет сейчас страницу из записи журнала со статусом failed или skipped, без правил отбора и лимита; тело не читается. Ответ — как у тестового поста. Например, запись 141:

curl -s -X POST "$API/site/$SITE/crosspost/log/141/send" -H "Authorization: Bearer $OP_TOKEN"
КодСтатусКогдаЧто делать
invalid_id400{id} не положительное целоевозьмите id из журнала
log_row_not_found404такой записи нетпроверьте id
not_connected404канал не подключёнподключите канал
not_resendable409запись уже отправлена или это тестовый постдля теста отправьте новый тестовый пост
page_not_published409страница больше не опубликована—
in_progress409запись отправляется прямо сейчасдождитесь результата в журнале
channel_not_ready409канал не прошёл проверкупроверьте канал
arrow_backНазад
Редиректы
Далееarrow_forward
SEO
На этой странице
  • Как подключить канал
    • Как выглядит пост
      • Когда пост уходит
        • GET /crosspost
          • PUT /crosspost/telegram
            • Коды проверки канала
          • POST /crosspost/telegram/check
            • POST /crosspost/telegram/test
              • DELETE /crosspost/telegram
                • GET /crosspost/log
                  • POST /crosspost/log/{id}/send
                  1. Главная
                  2. Docs
                  3. Документация OnPress v2
                  4. Справочник API
                  5. Справочник: кросспостинг
                  OnPress
                  OnPress
                  ИП Зуев И.В. ИНН: 360408359441
                  info@onpress.pro
                  © 2026
                  политика конфиденциальности публичная оферта
                  • visa
                  • mastercard
                  • sber
                  • tpay