Вебхуки: отправляем сообщения из Telegram в CRM и на свой сервер
Как получать каждый пост из Telegram-каналов на свой HTTP-сервис: формат JSON, медиа по ссылкам, проверка подписи на Python.
Иногда сообщения нужны не в другом канале, а в вашей системе: CRM, базе знаний, аналитике, своём боте. Для этого у пайплайна есть вебхуки — HTTP-запросы на ваш адрес при каждом доставленном сообщении.
Настройка #
- В разделе «Вебхуки» добавьте адрес вашего сервиса, например
https://crm.example.com/telegram. - В редакторе пайплайна отметьте этот вебхук.
- Скопируйте секрет вебхука — он нужен для проверки подписи.
Пайплайн может отправлять сообщения только в вебхук, без каналов-получателей.
Что приходит #
На каждое сообщение (альбом — одним запросом) приходит 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 запросов. Текущий расход виден на странице «Тариф».