RU
Открыть CopyPost

Вебхуки: отправляем сообщения из Telegram в CRM и на свой сервер

2 минуты чтенияВебхукиИнтеграции

Как получать каждый пост из Telegram-каналов на свой HTTP-сервис: формат JSON, медиа по ссылкам, проверка подписи на Python.

Содержание
  1. Настройка
  2. Что приходит
  3. Проверка подписи
  4. Надёжность
  5. Лимиты

Иногда сообщения нужны не в другом канале, а в вашей системе: CRM, базе знаний, аналитике, своём боте. Для этого у пайплайна есть вебхуки — HTTP-запросы на ваш адрес при каждом доставленном сообщении.

Настройка #

  1. В разделе «Вебхуки» добавьте адрес вашего сервиса, например https://crm.example.com/telegram.
  2. В редакторе пайплайна отметьте этот вебхук.
  3. Скопируйте секрет вебхука — он нужен для проверки подписи.

Пайплайн может отправлять сообщения только в вебхук, без каналов-получателей.

Что приходит #

На каждое сообщение (альбом — одним запросом) приходит POST с JSON:

{
  "pipeline_id": 12,
  "account_id": 3,
  "chat_id": -1001234567890,
  "messages": [{
    "id": 4521,
    "date": 1791936000,
    "text": "Новость дня",
    "entities": [{"type": "bold", "offset": 0, "length": 7}],
    "media": {"type": "photo", "url": "https://cpo.st/m/…", "mime_type": "image/jpeg"}
  }]
}

Текст приходит уже после фильтров и замен пайплайна. Медиа передаются ссылками: файл скачивается при первом обращении и доступен 7 дней.

Проверка подписи #

Каждый запрос подписан: заголовок X-Copyposter-Signature содержит HMAC-SHA256 строки <X-Copyposter-Timestamp>.<тело запроса> с секретом вебхука. Проверка на Python:

import hmac, hashlib, time

def verify(secret: str, timestamp: str, body: bytes, signature: str) -> bool:
    if abs(time.time() - int(timestamp)) > 300:
        return False  # старый запрос — возможно, повтор
    expected = "sha256=" + hmac.new(secret.encode(), timestamp.encode() + b"." + body, hashlib.sha256).hexdigest()
    return hmac.compare_digest(expected, signature)

Надёжность #

Если сервис недоступен или отвечает 429/5xx, CopyPost повторит запрос через 1 с, 5 с, 30 с, 2 минуты и 10 минут. Отвечайте 2xx быстро, а тяжёлую обработку делайте в фоне.

Адрес должен быть публичным: вебхуки не отправляются на локальные и внутренние адреса.

Лимиты #

1000 запросов в месяц бесплатно, дальше — пакеты по 10 000 запросов. Текущий расход виден на странице «Тариф».