Webhooks
Уведомляйте другую систему, когда публикация Sofia вышла или не удалась: подписанные вебхуки, регистрируемые через API, с повторными попытками.
Вебхук — это HTTP-вызов, который Sofia совершает, когда публикация вышла или не удалась. Используйте его, чтобы перенести контент в таблицу, уведомить мессенджер или запустить сценарий в Zapier или n8n.
Как добавить
- 1. Задайте адрес. Публичный https-адрес, на который Sofia отправит событие.
- 2. Выберите события.
post.publishedиpost.failed. - 3. Зарегистрируйте его.
POST /v1/webhooks: секрет подписи (whsec_…) показывается только в этом ответе. - 4. Отправьте тест.
POST /v1/webhooks/{id}/testотправляет событиеwebhook.test, подписанное так же, как остальные.
Полный запрос описан на вкладке API: Регистрация вебхука. Объявляются только публикации, созданные вашим приложением.
Как построить получателя
Всегда сначала отправляйте тест и сохраняйте полученное тело: это контракт, надёжнее любого описания. Sofia отправляет каждое событие через POST в формате JSON { id, type, createdAt, data } с заголовками Sofia-Event-Id, Sofia-Event-Type и Sofia-Signature.
- Проверяйте подпись.
Sofia-Signatureимеет видt=<unix time>,v1=<hex>, гдеv1— HMAC-SHA256 от<t>.<raw body>с вашим секретом. Вычисляйте его по необработанному телу и отклоняйте устаревшую метку времени. - Быстро отвечайте `2xx`, а работу делайте потом: медленную конечную точку не отличить от неработающей.
- Будьте идемпотентны. Одно и то же событие может прийти дважды: дедуплицируйте по
Sofia-Event-Id.
Если вебхук перестал срабатывать
Адрес недоступен
Sofia вызывает со своих серверов: адрес должен быть публичным https. Перенаправление никогда не отслеживается, а 10 секунд без ответа считаются сбоем.
Адрес возвращает ошибку
Любой ответ, кроме 2xx, запускает повторную попытку через 1 минуту, 5 минут, 30 минут и 2 часа, всего до 5 попыток. Сначала посмотрите свои журналы, затем воспроизведите с помощью POST /v1/webhooks/{id}/test.
Публикация создана не вашим приложением
Вебхук объявляет только публикации, созданные вашим приложением; публикация, созданная в интерфейсе, его не запускает.