Воркфлоу
Воркфлоу — це граф кроків, який запускається, коли надходить подія, за розкладом або коли ви запускаєте його вручну. Кожен крок отримує результат попереднього. У панелі є візуальний конструктор, а той самий воркфлоу можна створити й через API.
Як виконується воркфлоу
Section titled “Як виконується воркфлоу”- Тригер запускає виконання і передає на вхід
dataподії. - Вузли виконуються в топологічному порядку: вузол стартує лише тоді, коли завершилися всі вузли, від яких він залежить.
- Вихідні дані кожного вузла стають вхідними для вузлів, з якими він з’єднаний. Вузол із кількома вихідними ребрами передає дані в кожну гілку паралельно.
- Якщо умови вузла
filterне виконано, усе, що йде після нього, пропускається. Вузолbranchспрямовує виконання ребромtrueабоfalse. - Кожен крок записує свій статус, вхідні й вихідні дані та тривалість, тож виконання можна переглянути крок за кроком. Список виконань повертає
GET /api/v1/projects/{projectId}/workflows/{id}/executions.
Тригери
Section titled “Тригери”triggerType |
Коли запускається |
|---|---|
WEBHOOK_EVENT (типово) |
Для кожної події, тип якої збігається з triggerConfig.eventTypePattern. Без шаблону — для кожної події в проєкті. На одну подію воркфлоу виконується щонайбільше один раз. |
MANUAL |
Коли ви викликаєте POST /api/v1/projects/{projectId}/workflows/{id}/trigger. JSON-тіло запиту стає вхідними даними. |
SCHEDULE |
У моменти, задані triggerConfig.cron у часовому поясі triggerConfig.timezone. Вхідні дані: {"scheduledFor": "<момент запуску>"}. |
Розклад
Section titled “Розклад”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.
Типи вузлів
Section titled “Типи вузлів”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 |
Як створити воркфлоу
Section titled “Як створити воркфлоу”Визначення складається зі списку nodes, де кожен вузол має id, type і свої data, та списку edges від source до target. Для ребра, що виходить із вузла branch, sourceHandle дорівнює "true" або "false".
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" } ] } }'Ліміти часу
Section titled “Ліміти часу”| Ліміт | Типово |
|---|---|
| Одне виконання від початку до кінця | 600 секунд |
| Один вузол | 30 секунд |
Вузол http або slack |
60 секунд |
Вузол createEvent |
30 секунд |