Вебхуки (Webhooks)
Вебхук — это пользовательский публичный URL, привязанный к каналу. Каждый вебхук создаётся в админке и работает независимо: можно создать сколько угодно вебхуков на один канал, у каждого свой URL и свои настройки.
Вебхуки не требуют заголовков — токен зашит в URL. Поэтому они работают прямо из браузера через
fetch()без CORS-preflight, из CI, из IoT-железок, из любых no-code платформ (n8n, Zapier, IFTTT, Make).
Два режима
Заголовок раздела «Два режима»| Режим | Что делает | Когда использовать |
|---|---|---|
| Статический | Отправляет заранее заданный текст. Тело запроса игнорируется. | «Кнопочные» события: «Курьер вышел», «Билд упал», «Тревога». |
| Динамический | Принимает title/message/priority из запроса; настройки = дефолты. | Логи, мониторинг, формы на сайте, любые вызовы со своим текстом. |
Как создать вебхук
Заголовок раздела «Как создать вебхук»- Откройте админку: https://app.notifly.ru/.
- Создайте канал в разделе «Каналы» (если ещё нет).
- Перейдите в раздел «Вебхуки» в боковом меню → «Создать вебхук».
- Заполните:
- Название — ярлык для удобства.
- Канал — куда писать сообщения.
- Режим — статический или динамический.
- Заголовок / Текст / Приоритет — для статического это содержимое сообщения; для динамического — значения по умолчанию.
После создания вы увидите URL вида:
https://api.notifly.ru/webhook/W<...>И готовые сниппеты на curl / fetch / GET. Кнопка ✈️ рядом с вебхуком отправляет тестовое сообщение.
Статический вебхук
Заголовок раздела «Статический вебхук»Самый простой способ: один URL = одно фиксированное уведомление.
Достаточно GET или POST без тела.
# curlcurl -X POST "https://api.notifly.ru/webhook/W<TOKEN>"
# или просто GET — удобно открывать из адресной строки браузера / закладкиcurl "https://api.notifly.ru/webhook/W<TOKEN>"// JS из браузераfetch("https://api.notifly.ru/webhook/W<TOKEN>", {method: "POST"});Идеально для:
- кнопок «бытового» автоматизированного уведомления (Home Assistant, ESP32);
- триггеров в no-code (Zapier, n8n, IFTTT);
- закладок в браузере: открыл — отправилось.
Динамический вебхук
Заголовок раздела «Динамический вебхук»Принимает message (обязательно), title, priority любым способом:
JSON (Content-Type: application/json), form-data, query-параметры.
Настройки вебхука (заголовок/текст/приоритет) используются как значения по умолчанию — если поле не передано, возьмётся из настроек.
curl (JSON)
Заголовок раздела «curl (JSON)»curl -X POST "https://api.notifly.ru/webhook/W<TOKEN>" \ -H "Content-Type: application/json" \ -d '{"title":"Деплой","message":"Бэкенд раскатан","priority":5}'curl (form)
Заголовок раздела «curl (form)»curl "https://api.notifly.ru/webhook/W<TOKEN>" \ -F "title=Деплой" -F "message=Бэкенд раскатан" -F "priority=5"Из браузера (GET)
Заголовок раздела «Из браузера (GET)»https://api.notifly.ru/webhook/W<TOKEN>?title=Hello&message=pingJavaScript (fetch)
Заголовок раздела «JavaScript (fetch)»await fetch("https://api.notifly.ru/webhook/W<TOKEN>", { method: "POST", headers: {"Content-Type": "application/json"}, body: JSON.stringify({ title: "Заявка с сайта", message: "Иван оставил телефон +7…", priority: 6, }),});import requests
requests.post("https://api.notifly.ru/webhook/W<TOKEN>", json={ "title": "Новый платёж", "message": "₽12 500 от user@example.com", "priority": 7,})PowerShell
Заголовок раздела «PowerShell»Invoke-RestMethod -Uri "https://api.notifly.ru/webhook/W<TOKEN>" -Method POST -Body @{ title = "Сборка упала" message = "build #482 failed" priority = 8}GitHub Actions
Заголовок раздела «GitHub Actions»- name: Notify on failure if: failure() run: | curl -fsS -X POST "https://api.notifly.ru/webhook/${{ secrets.NOTIFLY_WEBHOOK }}" \ -H "Content-Type: application/json" \ -d "{\"title\":\"CI упал\",\"message\":\"${{ github.repository }}@${{ github.sha }}\",\"priority\":8}"Безопасность
Заголовок раздела «Безопасность»- Токен вебхука в URL = доступ на отправку только в один канал.
- Если токен утёк — удалите вебхук в админке, его URL сразу перестанет работать. Остальные вебхуки канала продолжат работать.
- Не публикуйте URL вебхука в открытом коде, если канал критичный.
- Вебхуки можно делать «одноразовыми»: создал → использовал → удалил.
Чем отличается от POST /message?
Заголовок раздела «Чем отличается от POST /message?»POST /message | POST /webhook/:token | |
|---|---|---|
| Токен | в заголовке X-Notifly-Key | в URL |
| CORS-preflight | да (кастомный заголовок) | нет |
| Из браузера | требует preflight | работает напрямую |
| Текст сообщения | всегда из запроса | можно задать заранее (статический режим) |
| Сколько на канал | 1 токен | сколько угодно — у каждого свой текст и режим |
Для серверов и CLI оба варианта работают; вебхуки удобнее, когда нужно:
- отправить заранее заданный текст одним нажатием;
- сделать несколько разных «триггеров» в один канал;
- интегрировать без настройки заголовков (no-code, браузер, IoT).