REST API для отправки постов в Telegram, VK и Max из своего бэкенда

Один webhook, три платформы. Bearer-токен, JSON, REST.

Как настроить

1

Получите Bearer-токен

В Crosslybot создайте webhook input в разделе «Каналы». Bearer-токен (формат crossly_live_<random>) показывается ОДИН раз — сохраните в переменных окружения вашего сервиса.

2

Привяжите webhook к проекту

Создайте проект кросспостинга, выберите webhook как источник, добавьте целевые каналы (Telegram, VK, Max или их комбинацию). Настройте AI, фильтры, подписи.

3

Реализуйте отправку из вашего кода

POST на `https://wh.crosslybot.ru/v1/webhooks/{endpoint_id}`. Заголовки: Authorization: Bearer <token>, Content-Type: application/json, Idempotency-Key: <uuid>. Body — JSON с полями text, media, entities, buttons, is_advertisement.

4

Обработайте ответ

200 — пост принят и поставлен в очередь. 202 — пост уже был принят (по Idempotency-Key). 4xx — ошибка валидации (детали в JSON). 5xx — внутренняя ошибка, ретраим с экспоненциальной задержкой.

5

Используйте sandbox для тестов

POST `/v1/sandbox/test` валидирует payload без реальной публикации. Возвращает would_create_post + список ошибок и предупреждений. Идеально для CI/CD smoke-тестов.

Возможности

Простая аутентификация

Bearer в заголовке Authorization. Token rotation моментальный.

Idempotency-Key из коробки

Стандарт Stripe-style: передайте Idempotency-Key (или external_id в payload) — повторный запрос с тем же ID вернёт закэшированный результат. Безопасные ретраи.

Принимаем Telegram Bot API entities (IN)

Входящий webhook принимает поле entities в формате Telegram Bot API: type (bold, italic, code, text_link и т.д.), offset, length. Если у вас уже есть код для отправки в Telegram — он работает с Crosslybot почти без изменений. Исходящий webhook отдаёт text + text_html (без entities).

Префикс crossly_live_/test_

Тестовые токены имеют префикс crossly_test_ — легко грепаются в логах. Live-токены: crossly_live_. Никакой путаницы между средами.

Частые вопросы

Где документация на OpenAPI?

OpenAPI 3 спецификация доступна на https://wh.crosslybot.ru/openapi.json (планируется Phase 6 — публичная Swagger UI на /docs). Уже сейчас payload-схему можно посмотреть через sandbox-tester.

Какие лимиты по RPS?

Зависит от тарифа. Pro: burst 1/5 секунд + 300 запросов/час. Maxi: 1/2с + 1000/час. Business: 1/1с + 5000/час. При систематических нарушениях endpoint временно ставится на паузу с уведомлением владельцу — снимается из UI или через поддержку.

Поддерживает ли API batch-отправку нескольких постов?

В MVP — нет, по одному посту на запрос. Batch-endpoint (несколько постов одним запросом) рассматривается на будущее. Сейчас отправляйте в цикле — sequential queue гарантирует порядок.

Как использовать webhook из Python / Node.js / PHP?

Любой HTTP-клиент: requests (Python), node-fetch / axios (Node.js), Guzzle (PHP), стандартная библиотека Java/Go/Rust. Минимальный пример: POST с JSON, Authorization header — поддерживают все языки. Примеры будут в OpenAPI docs.

Webhook принимает iframe/HTML embed?

Нет. Webhook принимает только структурированный payload: text + entities + media[]. HTML-парсинг и rendering — задача источника (например, AI-агент конвертирует HTML в plain-text + entities перед отправкой).

Crosslybot предоставляет простой REST API для разработчиков: вместо подключения к трём разным API (Telegram Bot API, VK API, Max API) — один webhook URL и один Bearer-токен. Один JSON-запрос — пост публикуется во всех настроенных платформах.

API спроектирован под developer experience: входящий формат принимает Telegram entities (offset/length/type) — переиспользуй TG-код с минимальными правками. Исходящий формат отдаёт text + text_html — выбирай удобный для целевой платформы. Стандартные HTTP-коды, Idempotency-Key как у Stripe, префиксы токенов как у GitHub.

Минимальный пример (cURL)

curl -X POST https://wh.crosslybot.ru/v1/webhooks/{endpoint_id} \
  -H "Authorization: Bearer crossly_live_..." \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 8f4a-1234-..." \
  -d '{
    "text": "Привет из API!",
    "entities": [
      {"type": "bold", "offset": 0, "length": 6}
    ],
    "media": [
      {"type": "photo", "url": "https://cdn.example.com/img.jpg"}
    ]
  }'

В ответ — 200 OK + ID созданного поста. Crosslybot обрабатывает payload, прогоняет через AI/фильтры/подпись и публикует во все цели проекта.

Что в payload

ПолеТипОбязательноеОписание
textstringда*Текст поста (до 4096 для TG, 4000 для Max, 15895 для VK)
entitiesarrayнетФорматирование IN-payload в формате Telegram Bot API (offset/length/type)
mediaarrayда*Картинки/видео/аудио (HTTPS URL, до 10 элементов)
buttonsarrayнетURL-кнопки (rows × columns)
is_advertisementboolнетМаркер рекламного поста
ad_pause_minutesintнетДлительность авто-паузы цели после публикации (0-1440)
external_idstringнетУникальный ID для idempotency
metadataobjectнетПроизвольные пользовательские данные

*минимум одно из text/media/buttons.

Ответ API

{
  "ok": true,
  "id": "post_abc123",
  "trace_id": "tr_..." ,
  "queued_targets": 3
}

При ошибке валидации (4xx) — список конкретных проблем:

{
  "ok": false,
  "errors": [
    "media[0]: тип 'document' не поддерживается",
    "entity[2]: offset+length выходит за длину текста"
  ]
}

Что отличает Crosslybot REST API

  • Унификация трёх платформ: TG, VK, Max через один payload
  • Bearer-токен — простая интеграция с LLM-агентами и no-code инструментами
  • Idempotency-Key — безопасные ретраи, как у Stripe
  • Принимаем Telegram entities (IN) — большинство существующего кода для TG переиспользуется. Исходящий webhook отдаёт text + text_html для удобства любой платформы-приёмника.
  • AI-обработка из коробки: переводы, фильтры, замены, подпись

С чего начать

  1. Зарегистрируйтесь в Crosslybot (Pro+ тариф для webhook input)
  2. Создайте webhook endpoint, скопируйте Bearer-токен
  3. Привяжите к проекту с целями TG/VK/Max
  4. Тестируйте через sandbox: POST /v1/sandbox/test
  5. Интегрируйте в свой код

Webhook input доступен на тарифах Pro, Maxi и Business.

Бесплатный тариф

Готовы попробовать?

Подключите бота за 2 минуты. Бесплатный тариф — без карт и регистраций.

Подробнее о боте →