İçeriğe atla
OrqLabs

Mantık (Logic) node'ları

If, Switch, Filter, Loop, Merge, Wait, Remove duplicates ve Limit node'ları; motorun dallanma ve bekleme semantiği.

12 dk Son güncelleme:
Bu sayfada
  1. Kısaca
  2. Teknik ayrıntılar
  3. If (logic.if)
  4. Switch (logic.switch)
  5. Filter (logic.filter)
  6. Loop over items (logic.loop)
  7. Merge (logic.merge)
  8. Wait (logic.wait)
  9. Remove duplicates (logic.dedupe)
  10. Limit (logic.limit)
  11. Motor semantiği özet
  12. Sık sorulan sorular
  13. Sonraki adım

Bu rehberde: Akışı yönlendiren kutuları öğrenirsiniz: koşula göre dallanma, süzme, döngü, birleştirme, bekleme, tekrarları kaldırma ve sınırlama. "Atlandı" durumunun ne demek olduğunu anlarsınız.

⏱ 12 dakika

Kısaca

Mantık kutuları trafik polisi gibidir: "puan 70'in üstündeyse şu yola, değilse bu yola", "3 gün bekle", "aynı haberi iki kez işleme". Yapay zekâ kullanmazlar; maliyetleri yoktur.

Bir iş akışının anatomisi: tetikleyici başlatır, kutular sırayla çalışır, aralarında öğeler akar.
Bir iş akışının anatomisi: tetikleyici başlatır, kutular sırayla çalışır, aralarında öğeler akar.
Çalıştırma paneli: ① her kutunun durumu renkli, ② giriş/çıkış verisi, ③ loglar, ④ maliyet.
Çalıştırma paneli: ① her kutunun durumu renkli, ② giriş/çıkış verisi, ③ loglar, ④ maliyet.

Teknik ayrıntılar

Mantık node'ları item akışını yönlendirir, böler, birleştirir, bekletir ve süzer. LLM kullanmazlar. Motor kuralları:

  • Bir node, tüm gelen kenarlar teslim edildiğinde çalışır.
  • Kaynak dal hiç item üretmediyse hedef node SKIPPED olur; istisna logic.merge.
  • Çıktılar handle adıyla anahtarlanır; kenar sourceHandle belirtmezse main kullanılır.
  • Döngü yalnızca logic.loop ile kurulur; başka geri kenarlar doğrulamada reddedilir.
NodeTipGirdiÇıktı handle'larıEntegrasyonModel
Iflogic.if1true, false––
Switchlogic.switch1routes girdileri + default––
Filterlogic.filter1main––
Loop over itemslogic.loop1loop, done––
Mergelogic.merge2main––
Waitlogic.wait1main––
Remove duplicateslogic.dedupe1main––
Limitlogic.limit1main––

If (logic.if)

Her item'ı koşula göre true veya false handle'ına gönderir.

AnahtarEtiketTürZorunluVarsayılanNotlar
conditionCondition (expression)expressionEvet–Truthy/falsy değerlendirilir. Örnek: {{ $json.score >= 70 && $json.status === 'NEW' }}

Örnek 1: Chatbot şablonu: {{ $json.handoff === true }} → true → messaging.handoff; false → messaging.send.

Örnek 2 – medya var mı: {{ Array.isArray($json.mediaUrls) && $json.mediaUrls.length > 0 }} → true → social.publish (INSTAGRAM); false → ai.imagePrompt → social.publish.

Her iki dalı da aynı node'a bağlamak istiyorsanız logic.merge (append) kullanın; doğrudan iki kenar çekmek "tüm kenarlar teslim" kuralı nedeniyle beklenmedik SKIPPED üretir.

Switch (logic.switch)

Bir değeri adlandırılmış çıkışlara yönlendirir.

AnahtarEtiketTürZorunluVarsayılanNotlar
valueValueexpressionEvet{{ $json.category }}Dizeye çevrilip karşılaştırılır
routesRoutes (value → output name)listEvet["sales", "support", "other"]Her giriş bir çıkış handle'ı olur; eşleşmeyen değerler default handle'ına

Editör routes listesini değiştirdiğinizde node üzerindeki handle'ları günceller; bir route'u silerseniz ona bağlı kenar da silinir.

Örnek – niyet yönlendirmesi:

ai.classify (categories [sales, support, spam, other], outputKey category)
→ logic.switch (value {{ $json.category }}, routes [sales, support, spam])
   sales   → leads.create → agent.outreach
   support → agent.chatbot (knowledgeBaseId …)
   spam    → utility.noop
   default → messaging.handoff

ai.classify zaten kategori başına çıkış üretir; Switch, kategori dışı alanlarla ({{ $json.channel }}, {{ $json.platform }}) yönlendirmede daha kullanışlıdır.

Filter (logic.filter)

AnahtarEtiketTürZorunluVarsayılanNotlar
conditionConditionexpressionEvet–Koşulu sağlamayan item'lar atılır

Hiç item kalmazsa downstream SKIPPED. Örnek: {{ $json.impressions > 1000 && $json.ctr < 0.02 }} (Search Console fırsatları); {{ !($json.tags ?? []).includes("unsubscribed") }} (opt-out süzme).

Loop over items (logic.loop)

Item'ları partiler hâlinde işler. loop handle'ına bağlı zincirin sonu tekrar bu node'a bağlanır; motor tüm partiler bitince done handle'ını ateşler.

AnahtarEtiketTürZorunluVarsayılanNotlar
batchSizeBatch sizenumberHayır1Her turda loop'a giden item sayısı

done çıktısı, tüm turların loop zinciri sonundan dönen item'larının birleşimidir. Item'a $loop: { index, total, batch } alanı eklenir. En fazla 1.000 tur; süre maxRunDurationMs'e tabidir.

Örnek – hız sınırlı toplu gönderim:

leads.query (limit 100) → logic.loop (batchSize 10)
  loop → messaging.sendEmail (to {{ $json.email }}, …) → logic.wait (duration 1 minutes) → [geri: logic.loop]
  done → utility.report (title "Gönderim tamamlandı: {{ $node["Loop over items"].all().length }} e-posta")

Ajan node'ları gelen tüm item'ları tek çağrıda görür; lead başına ayrı ajan çalıştırması için logic.loop (batchSize 1) → agent.outreach kullanın (maliyet item sayısıyla çarpılır).

Merge (logic.merge)

İki daldan gelen item'ları birleştirir; ikinci giriş input2 handle'ıdır (targetHandle: "input2").

AnahtarEtiketTürZorunluVarsayılanNotlar
modeModeselectHayırappendappend: A item'ları + B item'ları; byKey: aynı anahtarlı item'ların json'ları birleşir (B alanları A'nın üstüne yazar); waitBoth: iki dal da bitince yalnızca A item'larını geçirir (senkronizasyon)
keyKey fieldstringHayır–Yalnızca byKey; alan adı (email, leadId)

Bir dal boş biterse append diğer dalı geçirir; byKey yalnızca A'yı; waitBoth her iki dalın tamamlanmasını bekler (boş olsa da) ve A'yı geçirir.

Örnek 1 (şablon): GA4 raporu (A) + Instagram metrikleri (B, input2) → append → Analytics Strategist iki veri setini birlikte görür.

Örnek 2 – zenginleştirme birleştirme: leads.query → A; aynı item'lar leads.enrich → B; byKey (key email) → tek item'da hem orijinal hem zenginleştirilmiş alanlar.

Wait (logic.wait)

Çalıştırmayı duraklatır. Run WAITING olur, waitToken saklanır, worker kaynak tutmaz; koşul sağlanınca resume() ile devam eder.

AnahtarEtiketTürZorunluVarsayılanNotlar
modeModeselectHayırdurationduration, until, approval, reply
amountAmountnumberHayır1Yalnızca duration
unitUnitselectHayırhoursminutes, hours, days; yalnızca duration
untilUntil (ISO / expression)expressionHayır–Yalnızca until; geçmiş tarih → hemen devam
approvalTitleApproval titleexpressionHayır–Yalnızca approval; Onaylar sayfasında görünür
timeoutHoursTimeout (hours)numberHayır72approval ve reply modlarında

Çıktı item'ı (mod'a göre eklenen alanlar): approval → approved: true|false, approvalComment, editedPayload uygulanır; reply → reply: { text, receivedAt, messageId } veya timedOut: true. reply modu item'daki conversationId alanını kullanır.

Örnek 1 – outreach takibi: messaging.sendEmail → logic.wait (reply, timeoutHours 72) → logic.if ({{ $json.timedOut === true }}) → true → ikinci e-posta; false → leads.update (status REPLIED).

Örnek 2 – zamanlanmış yayın: logic.wait (until, until {{ $json.scheduledAt }}) → social.publish. (Uzun beklemelerde social.schedule tercih edilir.)

duration modunda 1 dakikanın altındaki süreler 1 dakikaya yuvarlanır; test modunda bekleme atlanır.

Remove duplicates (logic.dedupe)

Önceki çalıştırmalarda görülen anahtarları (iş akışı başına, 90 gün) atar.

AnahtarEtiketTürZorunluVarsayılanNotlar
keyKey fieldexpressionEvet{{ $json.id }}Dizeye çevrilir; boş anahtarlı item'lar geçirilir

Aynı çalıştırma içindeki tekrarlar da atılır. Örnek: data.rss (onlyNew false) → logic.dedupe (key {{ $json.guid }}); social.getComments → logic.dedupe (key {{ $json.commentId }}).

Limit (logic.limit)

AnahtarEtiketTürZorunluVarsayılanNotlar
countMax itemsnumberHayır10İlk N item geçer

Sıralama için önce data.code ile sort yapın. Örnek: analytics.searchConsole → data.code (sort by impressions desc) → logic.limit (20) → ajan.

Motor semantiği özet

DurumSonuç
Node'a gelen tüm kenarlar item taşıdıNode çalışır
Bir kenar boş (kaynak SKIPPED/boş) ve node merge değilNode SKIPPED, item boş aşağıya yayılır
logic.merge append ve bir dal boşDiğer dal geçer
logic.if bir dala hiçbir item yönlendirmediO dal SKIPPED
logic.looploop zinciri her partide çalışır, done bir kez
logic.wait/utility.approvalRun WAITING; resume() sonrası aynı sürümle devam
Node FAILED ve onError: stopRun FAILED, kalan node'lar PENDING kalır

Sık sorulan sorular

Bir kutu neden "Atlandı" oldu? Ona hiç öğe gelmedi (örneğin Eğer tüm öğeleri diğer dala gönderdi). Bu bir hata değildir.

İki dalı tek kutuya nasıl bağlarım? Araya Birleştir koyun. Doğrudan iki bağlantı çekmek beklenmedik "Atlandı" sonuçları verir.

Bekle kutusu kaynak tüketir mi? Hayır. Çalıştırma "Bekliyor" durumuna geçer ve koşul gerçekleşince kaldığı yerden devam eder.

Sonraki adım

OrqLabs ile başlayın

İlk iş akışınızı bugün kurun

Ücretsiz planla başlayın: hesaplarınızı bağlayın, bir şablon seçin, onay adımlarıyla kontrol sizde kalsın. Kredi kartı gerekmez.