Перейти до вмісту
На сайт

Воркфлоу

Воркфлоу — це граф кроків, який запускається, коли надходить подія, за розкладом або коли ви запускаєте його вручну. Кожен крок отримує результат попереднього. У панелі є візуальний конструктор, а той самий воркфлоу можна створити й через API.

Як виконується воркфлоу

Section titled “Як виконується воркфлоу”
  • Тригер запускає виконання і передає на вхід data події.
  • Вузли виконуються в топологічному порядку: вузол стартує лише тоді, коли завершилися всі вузли, від яких він залежить.
  • Вихідні дані кожного вузла стають вхідними для вузлів, з якими він з’єднаний. Вузол із кількома вихідними ребрами передає дані в кожну гілку паралельно.
  • Якщо умови вузла filter не виконано, усе, що йде після нього, пропускається. Вузол branch спрямовує виконання ребром true або false.
  • Кожен крок записує свій статус, вхідні й вихідні дані та тривалість, тож виконання можна переглянути крок за кроком. Список виконань повертає GET /api/v1/projects/{projectId}/workflows/{id}/executions.
triggerType Коли запускається
WEBHOOK_EVENT (типово) Для кожної події, тип якої збігається з triggerConfig.eventTypePattern. Без шаблону — для кожної події в проєкті. На одну подію воркфлоу виконується щонайбільше один раз.
MANUAL Коли ви викликаєте POST /api/v1/projects/{projectId}/workflows/{id}/trigger. JSON-тіло запиту стає вхідними даними.
SCHEDULE У моменти, задані triggerConfig.cron у часовому поясі triggerConfig.timezone. Вхідні дані: {"scheduledFor": "<момент запуску>"}.

cron має п’ять полів: хвилина, година, день місяця, місяць, день тижня, наприклад 0 9 * * 1-5 для 09:00 у робочі дні. Шосте поле для секунд не приймається, тож воркфлоу запускається щонайбільше раз на хвилину. timezone — назва з бази IANA, наприклад Europe/Kyiv, типово UTC; щоденний запуск зберігає свою місцеву годину під час переходу на літній і зимовий час. Некоректний вираз або часовий пояс відхиляється з 400 під час збереження воркфлоу.

Запуск стартує приблизно за десять секунд після свого часу і проходить через ту саму чергу, що й запуски від подій. Якщо Railhook не працював протягом кількох запланованих моментів, воркфлоу виконається один раз після відновлення, а не за кожен пропущений момент. Кожне виконання записує scheduledFor, і той самий момент ніколи не виконується двічі, навіть коли працює кілька інстансів API. Час наступного запуску повертається в полі nextRunAt воркфлоу; у вимкненого воркфлоу його немає. GET /api/v1/projects/{projectId}/workflows/schedule-preview?cron=...&timezone=... повертає три наступні моменти запуску, нічого не зберігаючи.

Увімкнути чи вимкнути воркфлоу можна через PATCH /api/v1/projects/{projectId}/workflows/{id}/toggle.

type Що робить Налаштування в data
webhookTrigger Точка входу. Передає вхідні дані тригера далі. немає
filter Пропускає виконання далі, лише якщо умови виконано; інакше наступні вузли пропускаються. conditions, те саме дерево умов, що й у правилах
branch Перевіряє умови й веде виконання ребром true або false. Якщо умов немає — true. conditions
transform Змінює структуру даних. Якщо задано обидва поля, перевагу має збережена трансформація; якщо її не знайдено, крок завершується помилкою. transformationId або template із плейсхолдерами {{field.path}}
http Викликає URL і передає відповідь далі. url (обов’язкове), method (типово POST), headers, body (типово — вхідні дані), timeout у секундах, від 1 до 60, типово 30
slack Надсилає повідомлення у вхідний вебхук Slack. webhookUrl, message, channel
delivery Доставляє дані на наявний ендпоінт звичайним конвеєром доставки, з повторними спробами. Дані записуються як подія в проєкті ендпоінта й, як і будь-яка інша подія, зараховуються до подій місяця. endpointId (обов’язкове), eventType (типово workflow.delivery)
createEvent Надсилає в Railhook нову подію, яка далі, як і будь-яка інша, проходить правила й підписки та зараховується до подій місяця. Проєкт має належати вашій організації; воркфлоу, що вказує на будь-який інший, зберегти не вдасться. projectId, eventType (обидва обов’язкові), payloadTemplate (типово — вхідні дані)
delay Призупиняє виконання, не займаючи при цьому потік воркера. delaySeconds, від 1 до 300, типово 5

Визначення складається зі списку nodes, де кожен вузол має id, type і свої data, та списку edges від source до target. Для ребра, що виходить із вузла branch, sourceHandle дорівнює "true" або "false".

Terminal window
curl -X POST "$RAILHOOK_URL/api/v1/projects/$PROJECT_ID/workflows" \
-H "X-API-Key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Big orders to the fraud service",
"enabled": true,
"triggerType": "WEBHOOK_EVENT",
"triggerConfig": { "eventTypePattern": "order.*" },
"definition": {
"nodes": [
{ "id": "start", "type": "webhookTrigger", "data": {} },
{ "id": "big", "type": "filter", "data": { "conditions": { "type": "predicate", "field": "amount", "operator": "GTE", "value": 1000, "valueType": "NUMBER" } } },
{ "id": "check", "type": "http", "data": { "url": "https://fraud.example.com/check", "method": "POST" } }
],
"edges": [
{ "source": "start", "target": "big" },
{ "source": "big", "target": "check" }
]
}
}'
Ліміт Типово
Одне виконання від початку до кінця 600 секунд
Один вузол 30 секунд
Вузол http або slack 60 секунд
Вузол createEvent 30 секунд