REST API для отправки постов в Telegram, VK и Max из своего бэкенда
Один webhook, три платформы. Bearer-токен, JSON, REST.
Как настроить
Получите Bearer-токен
В Crosslybot создайте webhook input в разделе «Каналы». Bearer-токен (формат crossly_live_<random>) показывается ОДИН раз — сохраните в переменных окружения вашего сервиса.
Привяжите webhook к проекту
Создайте проект кросспостинга, выберите webhook как источник, добавьте целевые каналы (Telegram, VK, Max или их комбинацию). Настройте AI, фильтры, подписи.
Реализуйте отправку из вашего кода
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.
Обработайте ответ
200 — пост принят и поставлен в очередь. 202 — пост уже был принят (по Idempotency-Key). 4xx — ошибка валидации (детали в JSON). 5xx — внутренняя ошибка, ретраим с экспоненциальной задержкой.
Используйте 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
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
text | string | да* | Текст поста (до 4096 для TG, 4000 для Max, 15895 для VK) |
entities | array | нет | Форматирование IN-payload в формате Telegram Bot API (offset/length/type) |
media | array | да* | Картинки/видео/аудио (HTTPS URL, до 10 элементов) |
buttons | array | нет | URL-кнопки (rows × columns) |
is_advertisement | bool | нет | Маркер рекламного поста |
ad_pause_minutes | int | нет | Длительность авто-паузы цели после публикации (0-1440) |
external_id | string | нет | Уникальный ID для idempotency |
metadata | object | нет | Произвольные пользовательские данные |
*минимум одно из 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-обработка из коробки: переводы, фильтры, замены, подпись
С чего начать
- Зарегистрируйтесь в Crosslybot (Pro+ тариф для webhook input)
- Создайте webhook endpoint, скопируйте Bearer-токен
- Привяжите к проекту с целями TG/VK/Max
- Тестируйте через sandbox: POST /v1/sandbox/test
- Интегрируйте в свой код
Webhook input доступен на тарифах Pro, Maxi и Business.
Готовы попробовать?
Подключите бота за 2 минуты. Бесплатный тариф — без карт и регистраций.