Automation İş Akışları
Bu rehber Automation motoruyla gerçek akışlar kurmayı anlatır: akış, bir olayla tetiklenen tipli düğümlerden oluşan bir grafiktir; koşullara göre dallanır, lookup'larla zenginleşir ve sizin sağlayıcılarınızla gönderir. Aşağıdaki her örnek, olduğu gibi yayınlanabilir eksiksiz bir akıştır.
Bir akışın anatomisi
Akış tanımında bir nodes dizisi ve ayrı bir edges dizisi vardır — düğümler işi taşır, kenarlar onları birbirine bağlar:
- Düğümler
id,typeve birconfignesnesi taşır. - Kenarlar
source,targetve birtypetaşır —success(ya dadefault),failureveyabranch. Branch kenarları ayrıca yönlendirici düğümün döndürdüğü birkeytaşır. saveAsbir düğümün çıktısını değişken adı altında saklar.{{ }}ifadeleri config değerlerinin içinde yukarı akış verisini okur:{{ input.payload.* }}— the triggering event{{ vars.* }}— variables prior nodes saved{{ nodes.<id>.output.* }}— a specific node's result
Taslaklar düzenlenebilir, yayınlar değişmezdir. Yayınlamadan önce taslağı her zaman simüle edin (yan etkisiz tam kuru koşum).
Örnek 1 — Kayıtta hoş geldin e-postası
Müşteri oluşturulduğunda kaydı zenginleştirin ve kendi SendGrid hesabınızla hoş geldin e-postası gönderin.
{
"name": "Welcome email on signup",
"version": "1",
"enabled": true,
"triggerType": "event",
"nodes": [
{ "id": "start", "type": "start" },
{
"id": "lookup", "type": "lookup_customer",
"config": { "customerId": "{{ input.payload.customerId }}", "saveAs": "customer" }
},
{
"id": "tpl", "type": "render_template",
"config": { "template": "Welcome, {{ vars.customer.firstName }}!", "saveAs": "body" }
},
{
"id": "email", "type": "send_email",
"config": {
"provider": "sendgrid",
"apiKeySecretRef": "vault:sg_prod",
"to": "{{ vars.customer.email }}",
"subject": "Welcome to Acme",
"body": "{{ vars.body }}",
"saveAs": "emailResult"
}
},
{ "id": "stop", "type": "stop" }
],
"edges": [
{ "id": "e1", "source": "start", "target": "lookup", "type": "success" },
{ "id": "e2", "source": "lookup", "target": "tpl", "type": "success" },
{ "id": "e3", "source": "lookup", "target": "stop", "type": "failure" },
{ "id": "e4", "source": "tpl", "target": "email", "type": "success" },
{ "id": "e5", "source": "email", "target": "stop", "type": "success" }
]
}Örnek 2 — Sipariş tutarına göre dallanma
Sipariş ödendiğinde yüksek tutarlı siparişler için farklı bir yol izleyin. if düğümü ilk durumunu değerlendirir ve bir branch anahtarı döndürür; koşucu, key'i eşleşen branch kenarını izler.
default dalına düşer — dallardan hiçbiri tutmazsa akış sessizce bitmez. Bu yüzden varsayılan dalı boş bırakmayın.{
"nodes": [
{
"id": "branch", "type": "if",
"config": {
"cases": [
{ "field": "input.payload.order.total", "op": "gt", "value": 50000, "key": "true" }
],
"defaultEdgeKey": "default"
}
}
],
"edges": [
{ "id": "b1", "source": "branch", "target": "smsVip", "type": "branch", "key": "true" },
{ "id": "b2", "source": "branch", "target": "emailReceipt", "type": "branch", "key": "default" }
]
}Bir if / switch durumunda field, koşum bağlamına giden düz bir yoldur (input.payload.order.total), {{ }} ifadesi değildir — motor o yoldaki değeri okur. Operatörler: eq, neq, gt, gte, lt, lte, in.
İkiden fazla dal için switch (değere göre branch kenarı seçer) ya da rule (success veya failure'a yönlendiren iç içe all / any / none koşul ağacı) kullanın.
Örnek 3 — Zenginleştirin, doğrulayın, sonra hareket edin
Göndermeden önce ödemeyi getirin, çözülen nesneyi doğrulayın ve yalnız şekli doğruysa devam edin.
{
"nodes": [
{
"id": "pay", "type": "lookup_payment",
"config": { "paymentId": "{{ input.payload.paymentId }}", "saveAs": "payment" }
},
{
"id": "check", "type": "validate_schema",
"config": {
"target": "{{ vars.payment }}",
"rules": [
{ "field": "status", "required": true, "enum": ["captured", "refunded"] },
{ "field": "amount", "required": true, "type": "number", "min": 1 }
]
}
}
],
"edges": [
{ "id": "e1", "source": "pay", "target": "check", "type": "success" },
{ "id": "e2", "source": "pay", "target": "stop", "type": "failure" },
{ "id": "e3", "source": "check", "target": "act", "type": "success" },
{ "id": "e4", "source": "check", "target": "stop", "type": "failure" }
]
}Sağlayıcılarınızı bağlama
send_email, send_sms ve send_invoice düğümleri sizin sağlayıcınızla ve sizin anahtarınızla teslim eder. Kimlik bilgisini önce kasaya koyun, sonra secretRef ile referans verin — ham anahtarı asla satır içine yazmayın.
{
"type": "send_email",
"config": {
"provider": "sendgrid",
"apiKeySecretRef": "vault:sg_prod",
"to": "{{ vars.customer.email }}",
"templateId": "welcome_v2",
"variables": { "name": "{{ vars.customer.firstName }}" }
}
}Hazır gelmeyen bir sağlayıcı mı lazım? generic_http_email ya da generic_http_sms kullanın ve isteğin tamamını (URL, metot, başlıklar, gövde) kendiniz tanımlayın.
Kurun, simüle edin, yayınlayın
Taslak oluşturun
curl https://api-gateway.lunixi.com/api/v1/automation/flows/draft \
-H "Authorization: Bearer at_live_5f3e2b1a..." \
-H "Content-Type: application/json" \
-d @welcome-flow.jsonGrafiği doğrulayın
curl https://api-gateway.lunixi.com/api/v1/automation/flows/validate \
-H "Authorization: Bearer at_live_5f3e2b1a..." \
-d @welcome-flow.jsonSimüle edin (tam kuru koşum, yan etki yok)
Gönderimler, webhook'lar ve HTTP çağrıları atlanır ve yerine sentetik sonuç konur; aşağı akıştaki düğümler yine çözülür, böylece yolun tamamını inceleyebilirsiniz.
curl https://api-gateway.lunixi.com/api/v1/automation/flows/{id}/simulate \
-H "Authorization: Bearer at_live_5f3e2b1a..." \
-d '{ "input": { "payload": { "customerId": "cus_123" } } }'Yayınlayın
Yayınlama, taslağı değişmez bir sürüme derler. Bir checksum kapısı, her değişiklikten sonra yeniden doğrulama + simülasyon ister.
curl https://api-gateway.lunixi.com/api/v1/automation/flows/{id}/publish \
-H "Authorization: Bearer at_live_5f3e2b1a..." -d '{}'Akışı mağazanızdan tetikleme
Bir entegrasyon kaydederek imzalı giriş URL'si ve HMAC secret'ı alın, sonra uygulamanızdan olay gönderin. WordPress / WooCommerce olayları otomatik olarak kanonik commerce.* anahtarlarına normalize edilir.
TS=$(date +%s)
BODY='{"event":"order.paid","data":{"order":{"id":"1042","total":52000}}}'
SIG=$(printf '%s.%s' "$TS" "$BODY" \
| openssl dgst -sha256 -hmac "$SIGNING_SECRET" -hex | sed 's/^.* //')
curl https://api-gateway.lunixi.com/api/v1/automation/integrations/wordpress/intg_123/events \
-H "X-Automation-Signature: sha256=$SIG" \
-H "X-Automation-Timestamp: $TS" \
-H "Content-Type: application/json" \
-d "$BODY"Yanıt durumu sonucu yansıtır (202 kabul edildi, 200 kopya, 401 imza hatalı, 409 nonce tekrarı, 429 hız limiti); böylece üretici taraftaki yeniden denemeler doğru davranır.
Elle koşumları yönetme
Para hareket ettiren ya da müşteriye mesaj gönderen akışlarda elle koşumu onay kuyruğuyla kapılandırın. Merchant varsayılan politikasını ayarlayın ya da akış bazında geçersiz kılın:
curl -X PUT https://api-gateway.lunixi.com/api/v1/automation/merchant-policy \
-H "Authorization: Bearer at_live_5f3e2b1a..." \
-d '{ "defaultManualRunPolicy": "approval" }'approval ile elle koşum çalışmaz, bekleyen bir talep olarak kuyruğa girer. automation:approve kapsamına sahip bir inceleyici karar verir:
curl https://api-gateway.lunixi.com/api/v1/automation/approvals/{id}/decide \
-H "Authorization: Bearer at_live_5f3e2b1a..." \
-d '{ "decision": "approve", "note": "Verified order total" }'Onaylamak, akışı yayınlanmış sürümüne göre koşturur. İstek gövdesinin tamamı mühürlenir ve tek koşum kaynağı olarak kullanılır; inceleyiciler redakte edilmiş bir izdüşüm görür.
Koşumları izleme
Akış bazında koşum geçmişini çekin ve tek bir koşumun düğüm düğüm izine inin:
# Bir akışın son koşumları
curl "https://api-gateway.lunixi.com/api/v1/automation/flows/{id}/runs?limit=50" \
-H "Authorization: Bearer at_live_5f3e2b1a..."
# Tek bir koşumun redakte izi
curl https://api-gateway.lunixi.com/api/v1/automation/flows/{id}/runs/{runId} \
-H "Authorization: Bearer at_live_5f3e2b1a..."Ayrıca genel bakış panosunu, gelen tetikleyici-olay kaydını, giden konnektör-teslimat kaydını ve yalnız-ekleme denetim izini sorgulayabilirsiniz. Tamamı için: Automation