Интеграция вебхуков
Вебхук — это HTTP-запрос, который платформа сама отправляет вам при событии. Python SDK Socialift даёт вашему endpoint'у готовые блоки для вебхуков Meta: verify_challenge отвечает на GET-проверку, verify_request проверяет X-Hub-Signature-256 по сырому телу, parse_events разбирает доставку на события, а dedupe_key даёт стабильный ключ для отсева повторов. Передачу событий в CRM пишет ваш код.
Обновлено:
Что такое вебхук и чем он отличается от API
Вебхук — это HTTP-запрос, который сервер отправляет на ваш адрес в момент события. В обычном API запрос инициируете вы и ждёте ответа; в вебхуке наоборот — платформа вызывает вас. Поэтому о новом сообщении Direct или заполненной заявке вы узнаёте вскоре после события, без периодического опроса.
У Meta это происходит в два этапа: сначала адрес подтверждается GET-запросом (hub.mode, hub.verify_token, hub.challenge), затем события приходят POST-запросами с подписью HMAC-SHA256 в заголовке X-Hub-Signature-256.
Основная практическая сложность — правильно посчитать подпись: HMAC считается по сырому потоку байтов. Если распарсить JSON и сериализовать его заново, изменятся пробелы и порядок полей, и подпись не совпадёт.
Как подключить вебхук Meta
Откройте endpoint
Нужен HTTPS-адрес, поддерживающий методы GET и POST.
Ответьте на запрос подтверждения
Если в GET-запросе hub.verify_token совпадает с вашим значением, верните значение hub.challenge обычным текстом.
Проверьте подпись
Сравните значение из X-Hub-Signature-256 с HMAC-SHA256 от сырого тела, посчитанным на секрете приложения.
Разберите события
В одной доставке может прийти несколько объектов и изменений. Превратите каждое в отдельное событие.
Сделайте дедупликацию
Meta не присылает ID события и может повторить доставку. Собирайте ключ из содержимого (
leadgen_id,midсообщения, ID комментария) — в SDK этоdedupe_key(event)— и храните его в уникальной колонке.Отвечайте быстро
Возвращайте 200 сразу и уносите тяжёлую работу в очередь — иначе Meta посчитает доставку неуспешной.
Правильная проверка подписи
Код ниже показывает стандартную проверку из документации Meta без SDK. В Socialift SDK та же проверка — функция verify_request(app_secret, body, headers), которую вы вызываете в своём endpoint'е.
import hmac, hashlib
def verify(raw_body: bytes, header: str, app_secret: str) -> bool:
# заголовок выглядит так: "sha256=abcdef..."
if not header or not header.startswith("sha256="):
return False
expected = hmac.new(
app_secret.encode(), raw_body, hashlib.sha256
).hexdigest()
# сравнение за постоянное время — защита от timing-атак
return hmac.compare_digest(expected, header.split("=", 1)[1])Обратите внимание: raw_body — это сырые байты от фреймворка. Если считать по результату json.dumps(request.json), подпись почти всегда не совпадёт.
Что даёт Socialift SDK
Проверка подписи
verify_request(app_secret, body, headers) сверяет X-Hub-Signature-256 за постоянное время и возвращает False, если подписи нет или она неверна, — отвечайте 403.
Разбор событий
Структура entry/changes/messaging разворачивается в единый поток событий.
Удаление дублей
Meta не даёт ID события; dedupe_key(event) строит стабильный ключ из содержимого. Запишите его в уникальную колонку — и дубль сделки в CRM не появится.
Повторы со стороны Meta
Если endpoint не ответил, Meta повторяет доставку до 36 часов — будьте идемпотентны через dedupe_key. RetryPolicy в SDK относится только к исходящим API-запросам; пересылку событий в CRM и её повторы делает ваш код.
Догрузка содержимого лида
В событии leadgen только ID (leadgen_id, form_id, page_id). Ответы формы забираются fb.lead(leadgen_id, page_token) и приводятся к имени/телефону/email через socialift.leads.normalize(). Для страниц, подключённых в кабинете, сервер делает это сам — лиды видны в Playground через GET /crm/leads.
Диагностика
«Statistika» (статистика) в кабинете показывает активации SDK и вызовы API/Playground с числом ошибок. Доставки вебхуков там не видны — логируйте их в своём endpoint'е.
Какие события приходят
| Событие | Типичное действие в CRM | ||
|---|---|---|---|
| Новое сообщение Instagram Direct | есть | нет | Создать или обновить контакт и сделку |
| Комментарий под постом | есть | есть | Создать задачу, поставить в очередь ответа |
| Заполнена форма Lead Ads | есть | есть | Создать лид и назначить менеджера |
| Доступ отозван | есть | есть | Пометить подключение как разорванное |
естьнетТаблицу можно прокрутить вбок
Примечания и ограничения
Для вебхуков комментариев Instagram приложение должно быть в режиме Live, для comments нужен Advanced Access, а аккаунт должен быть публичным. Лиды из рекламы в Instagram приходят событием leadgen страницы Facebook. Вебхуки LinkedIn доступны только приложениям с одобренным сценарием; LinkedIn-клиент Socialift их не обрабатывает — данные забираются запросами.
Чек-лист безопасности endpoint'а
- Никогда не обрабатывайте запрос с непроверенной подписью.
- Не держите verify_token и app_secret в коде — только в переменных окружения.
- Endpoint должен быть доступен исключительно по HTTPS.
- Ограничьте размер тела запроса и защитите разбор JSON.
- Ставьте события в очередь: ответ должен быть 200, обработка — позже.
- Сохраняйте ключ дедупликации и метку времени (
entry.time) — для отсева дублей и аудита.
Частые вопросы
Как работает вебхук?
Когда на платформе происходит событие, она отправляет POST-запрос на ваш HTTPS-адрес. В теле — содержимое события, в заголовке — подпись. Вы проверяете подпись и возвращаете 200, подтверждая приём.
Почему не совпадает подпись вебхука?
Чаще всего подпись считают не по сырому телу, а по повторно сериализованному JSON. Вторая причина — неверный секрет приложения. Третья — прокси или фреймворк изменяет тело запроса.
Может ли одно событие прийти дважды?
Да. Meta повторяет неуспешную доставку до 36 часов, поэтому дубли — норма. ID события Meta не присылает: собирайте ключ из содержимого (в SDK — dedupe_key) и храните в уникальной колонке.
Можно ли обойтись опросом вместо вебхука?
Технически можно, но это быстро расходует лимиты и увеличивает время реакции. Для сообщений и заявок правильное решение — вебхук; опрос имеет смысл только как резервный механизм.
Источники
Связанные страницы
Подключите вебхуки сегодня
Получите токен и проверьте подпись первого события Meta через verify_request.
Получить бесплатный токен →