Automation
Ticaret için kurulmuş bir iş akışı motoru. Bir olay gelir — sipariş ödenir, ödeme başarısız olur, müşteri kaydolur — ve Lunixi sizin tasarladığınız akışı koşturur: koşullara göre dallanır, ödemeyi veya müşteriyi getirir, şablon render eder, kendi sağlayıcınız üzerinden e-posta ya da SMS gönderir.
n8n seviyesinde, ama ödeme ve ticaret yerlisi: tetikleyiciler kanonik commerce.* olaylarına eşlenir, lookup'lar doğrudan sizin ödeme ve aboneliklerinizden okur, her koşum idempotent, kiracı-yalıtımlı ve tam gözlemlenebilirdir.
Bir akış nasıl koşar
- Tetikleyici — bir platform olayı, imzalı gelen webhook, cron zamanlaması ya da elle koşum akışı başlatır.
- Çözümleme — motor akışın yayınlanmış sürümünü yükler (taslaklar asla yan etki üretmez).
- Yürütme — grafiği düğüm düğüm gezer: koşullar dallanır, lookup'lar zenginleştirir, şablonlar render edilir, aksiyonlar gönderir.
- Kayıt — her koşum, her düğüm denemesi ve her giden teslimat, redakte edilmiş ve sorgulanabilir bir olay olarak kaydedilir.
Akışlar sürümlüdür. Taslak düzenlediğiniz şeydir; yayın değişmez, derlenmiş bir anlık görüntüdür. Canlı trafikte yalnız yayınlanmış akışlar koşar — ve bir taslağı yayınlamadan önce uçtan uca simüle edebilirsiniz.
Tetikleyiciler
Bir akış dört kaynaktan biriyle başlar.
| Tetikleyici | Ne tetikler | Not |
|---|---|---|
| Platform olayları | Lunixi servislerinden gelen olaylar — ödeme, fatura, abonelik, kullanım, KYC, fraud, organizasyon | Olay anahtarıyla akışınıza eşlenir (ör. payment.captured) |
| İmzalı webhook'lar | Mağazanızdan veya uygulamalarınızdan gelen HMAC imzalı HTTP | WordPress / WooCommerce olayları kanonik commerce.*'a eşlenir |
| Zamanlama | Standart 5/6 alanlı cron, zamanlama başına saat dilimi | ör. gecelik mutabakat, haftalık özet |
| Elle koşum | Panelden veya API'den tetiklediğiniz koşum | İsterseniz onay kuyruğuyla kapılanır |
Kanonik ticaret olayları
Mağazadan gelen olaylar kanonik bir taksonomiye normalize edilir; böylece bir kez yazdığınız akış, kaynak platform ne olursa olsun çalışır:
| Kaynak olay | Kanonik olay anahtarı |
|---|---|
| Sipariş oluşturuldu | commerce.order.created |
| Sipariş ödendi | commerce.order.paid |
| Sipariş iptal edildi | commerce.order.cancelled |
| Müşteri oluşturuldu | commerce.customer.created |
| Form gönderildi | commerce.form.submitted |
| Ürün stoğu azaldı | commerce.product.low_stock |
WordPress / WooCommerce girişi bugün canlıdır. Diğer mağaza konnektörleri yol haritasındadır — giriş sözleşmesi (HMAC + kanonik eşleme) tüm sağlayıcılarda aynıdır.
Düğüm kataloğu
Akış, tipli düğümlerden oluşan bir grafiktir. Her düğüm girdisini {{ }} ifadeleriyle yukarı akıştan okur ve sonucunu, sonraki düğümlerin başvurabileceği bir saveAs değişkenine yazar.
Mantık ve kontrol
| Düğüm | Ne yapar |
|---|---|
start / stop | Akış giriş noktası ve sonlandırma |
if | Tek koşullu boolean dallanma (true / varsayılan) |
switch | Çok durumlu dallanma — değere göre kenar seçer |
rule | İç içe all / any / none koşul ağacı → başarı / başarısızlık |
parallel / merge | Koşumu dallara yayar ve yeniden birleştirir |
subflow | Başka bir akışı alt akış olarak koşar (derinlik korumalı) |
Veri
| Düğüm | Ne yapar |
|---|---|
set_var | İfadeleri çözer ve koşum değişkeni yazar |
render_template | Mustache şablonunu bir değişkene render eder |
validate_schema | Alan kuralı doğrulaması (required / type / min / max / pattern / enum) |
required_input | Yan etki öncesi zorunlu girdilerin varlığını doğrular |
lookup_customer | id / dış id ile redakte müşteri kaydı getirir |
lookup_payment | id ile redakte ödeme kaydı getirir |
lookup_subscription | id ile abonelik getirir |
Aksiyonlar (yan etkili)
| Düğüm | Ne yapar |
|---|---|
send_email | Sizin e-posta sağlayıcınızla e-posta gönderir |
send_sms | Sizin SMS sağlayıcınızla SMS gönderir |
send_invoice | Faturayı e-posta veya SMS ile teslim eder |
create_invoice | Faturalama katmanı üzerinden fatura oluşturur |
http_request | Satır içi giden HTTP çağrısı (SSRF korumalı) |
webhook | Dayanıklı giden webhook'u kuyruğa alır |
Yan etkili her düğüm kuru koşumu dikkate alır. Bir akışı simüle ettiğinizde 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, ama hesabınızdan hiçbir şey çıkmaz.
Düğümler arası veri referansı
Herhangi bir düğüm config alanı, çalışma zamanında çözülen değerleri araya yerleştirebilir:
{{ input.payload.order.total }} // the triggering event
{{ vars.customer.email }} // output a prior node saved
{{ nodes.lookup_pay.output.status }} // a specific node's resultTek başına {{ vars.customer }} ham nesneyi döndürür; bir metnin içine gömülü {{ }} ise değeri araya yerleştirir.
Kendi sağlayıcınızı getirin
send_email, send_sms ve send_invoice, sizin sağlayıcı hesabınızla ve sizin API anahtarınızla teslim eder — Lunixi araya bir gönderim servisi olarak girmez. Sağlayıcıyı bir kez bağlar, kimlik bilgisini kasada saklar ve herhangi bir düğümden referans verirsiniz.
| Channel | Providers |
|---|---|
| SendGrid, Mailgun, or a generic HTTP provider | |
| SMS | Twilio, Netgsm, or a generic HTTP provider |
Genel HTTP sağlayıcısı bir kaçış kapısıdır: listede olmayan herhangi bir sağlayıcı için isteğin tamamını (URL, metot, başlıklar, gövde) siz tanımlarsınız.
API anahtarları düğüm yapılandırmasında asla saklanmaz. Düğüm yalnız, kasada yönetilen bir secret'a işaret eden secretRef taşır; bu değer çalışma zamanında merchant bazında çözülür. Ham anahtarı akışın içine yazmak, yayınlamayı engelleyen bir hatadır.
{
"type": "send_email",
"config": {
"provider": "sendgrid",
"apiKeySecretRef": "vault:sg_prod",
"to": "{{ vars.customer.email }}",
"templateId": "welcome_v2",
"variables": { "name": "{{ vars.customer.firstName }}" },
"saveAs": "emailResult"
}
}Akış motoru
| Capability | Behaviour |
|---|---|
| Branching | Typed edges — success, failure, branch, default. A node routes the run down the matching edge. |
| Parallel branches | A parallel node fans the run across branches that re-converge at a merge. Branches share context and accumulate deterministically. |
| Error handling | Executor errors are normalised to a stable code and routed to a failure edge; continueOnError is configurable per node. |
| Idempotency | Triggers and runs are claimed before any side effect. A replayed event or a reused idempotency key returns the original result instead of re-firing. |
| Draft / publish / versioning | Each publish creates an immutable, compiled version. A checksum gate forces re-validate → re-simulate before a changed draft can be republished. |
| Simulation (dry-run) | Run a draft end-to-end with zero side effects and inspect the redacted, node-by-node result. |
| Approval queue | Flows whose manual-run policy is approval enqueue a pending request; a reviewer with the right scope approves it, which then runs the flow. |
| Run history | Every run and node attempt is persisted with status, latency, the path taken, and redacted inputs/outputs. |
Parallel dalları tek bir koşum içinde mantıksal dağıtım olarak çalışır — durumu paylaşır ve deterministik yürürler; bağımsız işletim sistemi thread'i değildirler. Yüksek hacimli giden teslimat için, geri çekilmeli dayanıklı bir yeniden deneme worker'ı beta olarak mevcuttur.
Hızlı başlangıç
Akışı yönetim API'siyle kurun, simüle edin ve yayınlayın. Tüm yönetim çağrıları Bearer token kullanır (at_live_…); merchantId token'dan çözülür, gövdede asla gönderilmez.
# 1. Create a draft
curl https://api-gateway.lunixi.com/api/v1/automation/flows/draft \
-H "Authorization: Bearer at_live_5f3e2b1a..." \
-H "Content-Type: application/json" \
-d '{
"name": "Welcome email on signup",
"nodes": [ /* start → lookup_customer → send_email → stop */ ]
}'
# 2. Validate, then dry-run simulate (no side effects)
curl https://api-gateway.lunixi.com/api/v1/automation/flows/{id}/simulate \
-H "Authorization: Bearer at_live_5f3e2b1a..." \
-d '{ "input": { "payload": { "customerId": "cus_123" } } }'
# 3. Publish (immutable version)
curl https://api-gateway.lunixi.com/api/v1/automation/flows/{id}/publish \
-H "Authorization: Bearer at_live_5f3e2b1a..." -d '{}'
# 4. Manual run
curl https://api-gateway.lunixi.com/api/v1/automation/flows/{id}/run \
-H "Authorization: Bearer at_live_5f3e2b1a..." \
-d '{ "input": { "payload": { "customerId": "cus_123" } } }'JSON'u elle yazmak istemiyor musunuz? Panelde görsel bir akış kurucu var — düğümleri tuvale sürükleyin, kenarları bağlayın, her düğümü tipli bir denetçide yapılandırın, sonra aynı ekrandan simüle edip yayınlayın.
Gelen webhook'lar
Akışları mağazanızdan tetiklemek için bir entegrasyon kaydedersiniz; karşılığında imzalı bir giriş URL'si ve bir HMAC secret'ı (yalnız bir kez gösterilir) alırsınız. Olaylar şuraya gönderilir:
POST https://api-gateway.lunixi.com/api/v1/automation/integrations/{provider}/{integrationId}/eventsHer istek imzayla doğrulanır — Bearer token yoktur:
| Header | Value |
|---|---|
X-Automation-Signature | sha256=<hex> — HMAC-SHA256 of {timestamp}.{rawBody} |
X-Automation-Timestamp | Unix seconds; must be within ±300s |
X-Automation-Nonce | Optional; replayed nonces are rejected |
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" \
-d "$BODY"Yanıt durumu sonucu yansıtır; böylece üretici tarafınız doğru yeniden deneyebilir: 202 kabul edildi, 200 kopya, 401 imza hatalı, 404 eşleşen akış yok, 409 nonce tekrarı, 413 gövde çok büyük, 429 hız limiti.
Güvenlik ve çok kiracılılık
| Control | How it works |
|---|---|
| Tenant isolation | Every flow, integration, secret and run is scoped to your merchant. The authoritative merchant is resolved from your token or your integration registration — never from the request body. |
| Integration ownership | A (provider, externalId) pair is owned by exactly one tenant; a cross-tenant takeover attempt is rejected and ownership is never reassigned. |
| Signed ingress | HMAC-SHA256 over {timestamp}.{body}, a ±300s freshness window, and optional nonce replay protection. |
| SSRF-safe egress | Outbound calls are blocked from reaching private, loopback, link-local and metadata addresses. DNS is pinned at connect to defeat rebinding, and every redirect hop is re-checked. |
| Response hygiene | Outbound responses are size-capped and have sensitive headers (authorization, set-cookie, …) stripped before they can land in flow variables. |
| Secret handling | Credentials live in a vault and are resolved with a short-lived, scoped token at runtime. Secret values are never logged or persisted in flow definitions. |
| Rate limiting | Per-merchant sliding-window limits apply to both inbound triggers and outbound destinations. |
Manual runs can be governed per-merchant: set a default policy of open, operator, approval (route through the approval queue) or admin (require an elevated scope), and override it per flow.
Gözlemlenebilirlik
Her yüzey sorgulanabilir, redakte edilmiş ve merchant kapsamlıdır:
- Genel bakış — kayan pencerede koşum hacmi, başarı oranı, gecikme ve son hatalar.
- Koşum geçmişi — akış bazında koşumlar, düğüm düğüm ize kadar inilebilir.
- Tetikleyici olayları — gelen giriş kaydı.
- Konnektör teslimatları — giden HTTP kaydı.
- Denetim olayları — akış değişikliklerinin yalnız-ekleme izi.
{
"runId": "run_01HV3K9X...",
"flowId": "flow_8f2a9c",
"status": "success",
"latencyMs": 412,
"path": ["start", "if", "lookup_customer", "send_email", "stop"],
"nodes": [
{ "id": "lookup_customer", "status": "success" },
{ "id": "send_email", "status": "success", "output": { "delivered": true } }
]
}İlgili
- Automation İş Akışları — uçtan uca çalışılmış akış örnekleri
- Payment Orchestrator — akışları tetikleyen ödeme olayları
- Fraud — gönderimleri ve aksiyonları risk sinyaline göre kapılandırın