Automation
Genel Bakış

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.

Tetikleyici, akış ve aksiyonMimari: bir olay akışı tetikler, akış koşullarını ve adımlarını çalıştırır ve sonuçta sizin sağlayıcınız üzerinden bir aksiyon üretir.Tetikleyiciorder.paidAkışkoşul → arama → şablonAksiyonsizin SendGrid’inizAÇIKLAMAOLAYSİZİN KURDUĞUNUZSİZİN SAĞLAYICINIZ
Aksiyon sizin sağlayıcınızdan çıkar — e-postayı biz göndermeyiz, sizin hesabınızla gönderilir. Böylece teslimat itibarı ve şablon sahipliği sizde kalır.

Bir akış nasıl koşar

  1. Tetikleyici — bir platform olayı, imzalı gelen webhook, cron zamanlaması ya da elle koşum akışı başlatır.
  2. Çözümleme — motor akışın yayınlanmış sürümünü yükler (taslaklar asla yan etki üretmez).
  3. Yürütme — grafiği düğüm düğüm gezer: koşullar dallanır, lookup'lar zenginleştirir, şablonlar render edilir, aksiyonlar gönderir.
  4. 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.

TetikleyiciNe tetiklerNot
Platform olaylarıLunixi servislerinden gelen olaylar — ödeme, fatura, abonelik, kullanım, KYC, fraud, organizasyonOlay anahtarıyla akışınıza eşlenir (ör. payment.captured)
İmzalı webhook'larMağazanızdan veya uygulamalarınızdan gelen HMAC imzalı HTTPWordPress / WooCommerce olayları kanonik commerce.*'a eşlenir
ZamanlamaStandart 5/6 alanlı cron, zamanlama başına saat dilimiör. gecelik mutabakat, haftalık özet
Elle koşumPanelden 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 olayKanonik olay anahtarı
Sipariş oluşturulducommerce.order.created
Sipariş ödendicommerce.order.paid
Sipariş iptal edildicommerce.order.cancelled
Müşteri oluşturulducommerce.customer.created
Form gönderildicommerce.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üğümNe yapar
start / stopAkış giriş noktası ve sonlandırma
ifTek 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 / mergeKoşumu dallara yayar ve yeniden birleştirir
subflowBaşka bir akışı alt akış olarak koşar (derinlik korumalı)

Veri

DüğümNe yapar
set_varİfadeleri çözer ve koşum değişkeni yazar
render_templateMustache şablonunu bir değişkene render eder
validate_schemaAlan kuralı doğrulaması (required / type / min / max / pattern / enum)
required_inputYan etki öncesi zorunlu girdilerin varlığını doğrular
lookup_customerid / dış id ile redakte müşteri kaydı getirir
lookup_paymentid ile redakte ödeme kaydı getirir
lookup_subscriptionid ile abonelik getirir

Aksiyonlar (yan etkili)

DüğümNe yapar
send_emailSizin e-posta sağlayıcınızla e-posta gönderir
send_smsSizin SMS sağlayıcınızla SMS gönderir
send_invoiceFaturayı e-posta veya SMS ile teslim eder
create_invoiceFaturalama katmanı üzerinden fatura oluşturur
http_requestSatır içi giden HTTP çağrısı (SSRF korumalı)
webhookDayanı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 result

Tek 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.

ChannelProviders
EmailSendGrid, Mailgun, or a generic HTTP provider
SMSTwilio, 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

CapabilityBehaviour
BranchingTyped edges — success, failure, branch, default. A node routes the run down the matching edge.
Parallel branchesA parallel node fans the run across branches that re-converge at a merge. Branches share context and accumulate deterministically.
Error handlingExecutor errors are normalised to a stable code and routed to a failure edge; continueOnError is configurable per node.
IdempotencyTriggers 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 / versioningEach 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 queueFlows whose manual-run policy is approval enqueue a pending request; a reviewer with the right scope approves it, which then runs the flow.
Run historyEvery 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}/events

Her istek imzayla doğrulanır — Bearer token yoktur:

HeaderValue
X-Automation-Signaturesha256=<hex> — HMAC-SHA256 of {timestamp}.{rawBody}
X-Automation-TimestampUnix seconds; must be within ±300s
X-Automation-NonceOptional; 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

ControlHow it works
Tenant isolationEvery 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 ownershipA (provider, externalId) pair is owned by exactly one tenant; a cross-tenant takeover attempt is rejected and ownership is never reassigned.
Signed ingressHMAC-SHA256 over {timestamp}.{body}, a ±300s freshness window, and optional nonce replay protection.
SSRF-safe egressOutbound 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 hygieneOutbound responses are size-capped and have sensitive headers (authorization, set-cookie, …) stripped before they can land in flow variables.
Secret handlingCredentials 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 limitingPer-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