Skip to main content
Триггер Webhook начинает запуск, когда ваш сервер отправляет HTTP POST на этот Instance. У Workflow может быть один активный триггер Webhook.
1

Добавьте узел

На графе Добавить узелWebhook. Соедините со следующим шагом.
2

Опубликуйте и Запустите

Опубликуйте, затем Запустить на Обзоре. Скопируйте URL эндпоинта. Сменить секрет один раз показывает Секрет подписи — скопируйте и его. Секрет больше не показывается.

Вход

Вкладка инспектора Настройки. Правила пустого поля на графе: Предыдущие узлы. URL и секрет подписи — на Обзоре, не на этом узле.

Выход

Меню и пустое поле: Предыдущие узлы. Токены ниже — один триггер на графе (Trigger). Ключи JSON из POST не становятся отдельными строками — берите Body или разберите его в Code.

Вызов

Отправьте POST на URL эндпоинта с телом JSON. Этот JSON видит запуск. Instance должен быть в статусе Слушает. Если нажали Остановить, POST вернёт 503. Снова Запустить на Обзоре, затем повторите запрос. 202 значит: POST принят и запуск поставлен в очередь. Агент к этому моменту ещё может не закончить.
id — эта доставка (по нему смотрят статус). runId — запуск. thread — id разговора, который вы прислали, или null. В примерах в url вставьте URL эндпоинта целиком (https://…/api/hooks/…). В secretСекрет подписи.

Кто вызывает

Секрет подписи доказывает, что POST ваш. Один из двух способов:
  • Bearer — секрет в заголовке Authorization. Так проще получить первый 202.
  • HMAC — секрет в Authorization не кладёте. Подписываете тело. См. HMAC.

Один запрос дважды

В каждом POST нужен заголовок Idempotency-Key. Значение придумываете вы — обычно id события у вас в системе, например order-123. Не длиннее 256 символов. Если HTTP-клиент повторил тот же запрос, отправьте тот же ключ и тот же JSON. Riggery вернёт тот же 202 и не начнёт второй запуск. Тот же ключ с другим JSON — ответ 409. Для нового события — новый ключ.

HMAC

HMAC — если секрет не хотите класть в Authorization. Заодно проверяется, что JSON по дороге не меняли. Подпишите подряд: текущее unix-время в секундах, одну точку, затем ровно то тело, которое уйдёт в POST (лишний пробел или перевод строки ломает проверку). Алгоритм HMAC-SHA256, результат — hex. Заголовок: X-Riggery-Signature: t=TIME,v1=HEX TIME не старше 5 минут относительно часов сервера.
--data-binary отправляет то же тело, которое вы подписали.

Разово или диалог

Без thread каждый POST сам по себе. Агент не видит прошлые webhook-запросы. В 202 поле thread равно null. Чтобы это был один разговор (следующие POST видят историю), выберите id вроде crm-42 и шлите его каждый раз: заголовок X-Webhook-Thread или поле JSON thread. Буквы, цифры, ., _, -; от 1 до 128 символов. Слово event нельзя. Если заданы и заголовок, и JSON — строки должны совпасть.

Файлы

Чтобы приложить файлы, POST multipart/form-data: поле payload — JSON как строка; файлы — имена полей files или file. Для HMAC подписывайте всё multipart-тело, не только JSON.

Проверить запуск

202 — это ещё не ответ агента. Только то, что Riggery принял этот POST и начал запуск. Если вашему серверу нужно знать, закончился ли Workflow и что он вернул, найдите этот POST по полю id в JSON с кодом 202. Адрес — тот же URL эндпоинта, к которому добавлены /deliveries/ и id. Пример: POST был на https://riggery.dev/api/hooks/xxxxxxxx, в 202 пришло "id": "cldelivery01". Тогда GET: https://riggery.dev/api/hooks/xxxxxxxx/deliveries/cldelivery01 Тот же Bearer или HMAC, что у POST. Для HMAC подпись считается по пустому телу (у этого GET нет JSON). Повторяйте этот URL, пока run.status не станет succeeded или failed. Если на графе HTTP request ждёт подтверждения человеком, статус останется waiting_approval.
200 выглядит так:
run.output.text — результат, если запуск успел. run.error — если нет. Пока запуск ещё идёт, status равен queued или running, эти поля пустые.

Сменить URL или секрет

Сменить секрет, если секрет попал к чужим. URL эндпоинта тот же. Старые Bearer и HMAC перестают работать. Новый Секрет подписи копируют сразу — он показывается один раз. Сменить URL, когда нужен новый URL эндпоинта. Дальше POST идёт на новый адрес; прежний запросы больше не принимает. Секрет не меняется, пока его отдельно не смените.