Перейти к содержимому

Внешнее действие

Внешнее действие — это действие автоматизации, которое отправляет данные карточки на указанный URL.

Сейчас внешнее действие запускается по кнопке процесса: пользователь нажимает кнопку в карточке, а Noiro отправляет HTTP-запрос во внешний сервис.

Внешнее действие нужно, когда часть работы должна выполняться в системе клиента: ERP, биллинге, внутреннем сервисе согласования, скоринге, классификаторе или другой интеграции.

В режиме Проектирование создайте или откройте кнопку процесса и добавьте действие Внешнее действие.

Укажите URL внешнего сервиса. Noiro будет отправлять на этот адрес данные карточки при нажатии кнопки.

После создания Noiro покажет signing secret. Сохраните его у себя сразу: повторно посмотреть секрет нельзя. Если секрет нужно заменить, откройте автоматизацию и нажмите Перегенерировать secret.

И Noiro, и ваш сервис используют один и тот же способ подписи тела запроса:

X-Noiro-Timestamp: 2026-05-03T12:00:00Z
X-Noiro-Signature: v1=<hmac_sha256(signing_secret, timestamp + "." + raw_body)>
Content-Type: application/json

X-Noiro-Signature переводится как подпись. Она нужна, чтобы принимающая сторона проверила, кто отправил запрос, и что тело запроса не было изменено.

Когда пользователь нажимает кнопку, Noiro отправляет POST на настроенный URL и подписывает сырой body этим способом.

Endpoint должен быстро принять запрос и сразу вернуть:

HTTP/1.1 200 OK
Content-Type: text/plain
OK

После такого ответа Noiro считает, что внешний сервис принял запуск в обработку, и ждёт callback. Долгую работу нужно выполнять после ACK и возвращать результат отдельным callback.

При временных ошибках доставки Noiro делает несколько повторных попыток. Повторяются сетевые ошибки, 429 и 5xx. Для 429 Noiro использует заголовок Retry-After, если он передан. Ошибки 4xx, включая 408 Request Timeout, не повторяются: endpoint должен быстро принять запрос и вернуть 200 OK. Если после попыток запрос всё равно не принят, Noiro сам помечает запуск внешнего действия как неуспешный.

В теле запроса есть:

  • runId — идентификатор запуска внешнего действия;
  • automationId — идентификатор автоматизации;
  • callbackUrl — адрес, куда нужно вернуть результат;
  • block — карточка, по которой нажали кнопку;
  • customFieldValues — значения пользовательских полей карточки.

На стороне вашего сервиса:

  1. Возьмите сырой body запроса без повторной сериализации.
  2. Возьмите значение X-Noiro-Timestamp.
  3. Соберите строку timestamp + "." + raw_body.
  4. Посчитайте HMAC-SHA256 с вашим signing secret.
  5. Сравните результат с частью после v1= в X-Noiro-Signature через constant-time compare.

Также стоит отклонять слишком старые timestamp, например старше пяти минут.

В теле запроса Noiro передаёт callbackUrl. После обработки отправьте на него POST.

Callback подписывается так же, как запрос Noiro к вашему сервису. Noiro проверяет X-Noiro-Signature тем же signing secret.

X-Noiro-Timestamp: 2026-05-03T12:00:30Z
X-Noiro-Signature: v1=<hmac_sha256(signing_secret, timestamp + "." + raw_body)>
Content-Type: application/json

Тело callback:

{
"data": {
"comment": "Клиент просит срочный ответ",
"priority": "high"
},
"fileIds": [
"018f0d1e-7d43-7c42-a6b5-2d4c7c2b2c31"
]
}

Callback принимает только данные результата. Статус запуска фиксирует Noiro: если подпись корректна и результат удалось применить к карточке, запуск становится успешным; если применить результат не удалось, Noiro помечает запуск как неуспешный.

Если внешний сервис должен прикрепить файлы, он передаёт только fileIds уже загруженных файлов. Callback не принимает binary/base64-контент и не скачивает файлы по внешним ссылкам.