Ana içeriğe geç

Workflows

Workflow, aracınızın adım adım ne yapması gerektiğinin görsel bir haritasıdır — kim önce konuşur, ne sorulur, ne zaman dallanılır, çağrı ne zaman aktarılır ve ne zaman başka bir aracıya devredilir. Bunu bir kanvas üzerinde düğümler yerleştirerek ve onları bağlayarak oluşturursunuz.

Tek bir prompt yeterli olmadığında bir workflow kullanın — çağrının net aşamaları olduğunda («önce nitelendir, sonra detayları topla, sonra rezerve et veya aktar»), arayanın yanıtlarına dayalı deterministik yönlendirmeye ihtiyaç duyduğunuzda (AI'nın «genelde halleder» yerine), ya da bir aracının bir iş parçasını uzmanına devretmesi gerektiğinde.

Prompt vs Workflow

Prompt uzun bir talimattır. Aracı onu bir kez okur ve çağrı boyunca kullanır. Workflow ise düğüm başına bir tane olmak üzere birçok küçük talimattır, aralarında açık geçişler vardır. Grafik çağrıyı yönetir — her düğümün aracısı yalnızca kendi parçasının sahibidir.

Aracınız tek bir prompt ile zaten iyi çalışıyorsa, workflow'a ihtiyacınız yoktur. Prompt'a «X ise Y» kuralları yığmaya başladığınızda ve güvenilir şekilde çalışmadığında workflow'a geçin.


Editör

Workflow editörü, aracı sayfasında kendi sekmesinde yaşar. Varsayılan olarak bir Start düğümü ve bir End düğümü olan bir kanvas görürsünüz. Araç çubuğundan düğüm ekler, kanvasa sürükler ve onları kenarlarla bağlarsınız.

Sağ panel seçtiğinize göre değişir:

  • Bir düğüme tık — ayar panelini açar (prompt, alanlar, çıkarma değişkenleri vb.).
  • Bir kenara tık — tetikleyici ayarlarını açar (AI decides / Condition / Always).
  • Variables paneli (toolbar düğmesi) workflow'un her değişkenini, onu ayarlayan veya okuyan düğüme tek tıkla atlayışla listeler.

Editörden doğrudan tarayıcıda Test Call çalıştırın — parlayan bir ateş böceği canlı olarak pozisyonu izler, böylece her an hangi düğümün aktif olduğunu tam olarak görürsünüz.

Kayıt ve durumlar

Workflow'ların üç durumu vardır:

  • Draft — düzenlenebilir, henüz canlı değil. Test etmek için Test Call kullanın.
  • Active — gerçek çağrılar için canlı. Aracı bu workflow'u sonraki çağrıdan itibaren kullanır.
  • Template — yeniden kullanılabilir şablon, asla doğrudan bir aracıya bağlı değildir. Birden fazla aracıda örnekleyebilirsiniz.

Düğümler

Her düğüm konuşmada bir adımdır. Farklı düğüm türleri farklı şeyler yapar — bazıları konuşur, bazıları dinler, bazıları yönlendirir, bazıları araç çalıştırır.

Agent

Agent düğümü bir workflow aşamasının kalbidir. Grafik bir Agent düğümüne ulaştığında, o aracı söz alır ve bir şey geçişi tetikleyene kadar konuşmayı yönlendirir.

Agent düğümünün kişiliğini ve görevini doğrudan kanvas üzerinde yapılandırırsınız (düğüme tıkladığınızda Prompt sekmesi açılır) — bu, o parçası için prompt'tur, tüm çağrı için değil. Düğüm başına bilgi tabanları ve araçlar da ekleyebilirsiniz.

Greeting — açılış cümlesi. Bu giriş düğümüyse (Start'tan sonraki ilk durak), arayanın duyduğu ilk şey budur.

Persona grafiğe aittir

Bir grafik bir çağrıyı yönettiğinde, aracının ana prompt'u (Model sekmesindeki) aktif düğümün prompt'uyla değiştirilir. Bu kasıtlıdır — grafik, aşama başına kişiliğin ve görevin sahibidir, onunla rekabet eden tek bir sabit prompt değil.

Subagent

Subagent, inline çalışan bir yardımcıdır — belirli bir görev için konuşmayı alır ve sonra sonucu kendisini çağırana geri verir.

Subagent'lar bir iş parçası yeniden kullanılabilirse veya farklı hissediyorsa iyi çalışır: «arayanın kimliğini doğrula», «teslimat adresi topla», «SPIN yöntemiyle bir lead nitelendir». Ana aracı subagent'ı çağırır, subagent işini yapar ve bir sonuç bildirir, ana aracı kaldığı yerden devam eder.

Subagent düğümleri Agent düğümüyle aynı sekmelere sahiptir (Prompt, Knowledge, Tools, Actions) — editör sizin için otomatik olarak gizli bir backing-aracı oluşturur. Bu gizli aracıyı ana listenizde görmezsiniz ve plan aracı limitinize sayılmaz.

Return variable — subagent sonucunu saklamak için alan (örn. identity_verified, lead_score).

Message (Say)

Say düğümü sabit bir cümle söyler — AI turu yok, doğaçlama yok. Geçişler için («Bir saniye, sizi aktarıyorum…»), zorunlu yasal bildirimler veya kelimelerin önemli olduğu önceden tanımlanmış onaylar için kullanın.

Text — ne söylenecek. Yakalanan değerleri enjekte etmek için {{variable}} token'larını destekler, örn. "Teşekkürler {{first_name}}, sizi {{appointment_time}} için rezerve ettim."

Bir Say düğümü turu tüketir — aracı üstüne bir şey eklemez.

Gather Input

Bir Gather Input düğümü bir soru sorar ve arayanın yanıtını bir değişkende yakalar.

Prompt — sorulacak soru. {{tokens}} destekler. Variable — yanıtın saklanacağı alan adı.

Devam etmeden önce somut bir değere ihtiyacınız olduğunda kullanın — email, hesap numarası, kişi sayısı, sorun kategorisi. Arayanın sonraki turu değer olur; hemen ardından bir Condition kenarıyla onun üzerinde dallanabilirsiniz.

Update State

Bir Update State düğümü, konuşmadan veya sormadan workflow değişkenlerine bir veya daha fazla değer yazar. Varsayılanları önceden ayarlamak, ilerleme bayrakları işaretlemek veya önceki adımlardan değerler oluşturmak için kullanın.

Variable / Value — bir anahtar-değer çifti. More variables (optional) — ek anahtar-değer çiftleri.

Hem anahtarlar hem de değerler {{tokens}} destekler, böylece mevcut olanlardan yeni değerler oluşturabilirsiniz.

Condition

Condition düğümü sadece yönlendirme düğümüdür — konuşmaz, sormaz, sadece çağrıyı eşleşen çıkış dalı boyunca gönderir.

Koşulun kendisi düğümde değil, her çıkış kenarında yaşar — aşağıdaki Condition kenarları bölümüne bakın.

Grafiğinizde net bir «fan-out» noktası istediğinizde Condition düğümünü kullanın: bir değişkenin değerine bağlı birçok dal. Agent düğümlerinin kenarlarına koşullar koymakla karşılaştırıldığında, özel bir Condition düğümü yönlendirme mantığını görsel olarak belirgin yapar.

Tool

Tool düğümü aracının bağlı araçlarından birini grafik adımı olarak çalıştırır — AI'nın çağırılmasında söz hakkı olmadan. Konuşma değil, bir gerçek istediğinizde kullanın: «bu müşteriyi bul», «stoku kontrol et», «şu anki havayı GET».

Şunları yapabilirsiniz:

  • Aracının mevcut araçlarından birini seçin (takvim sorgusu, bilgi tabanı araması, bir entegrasyonun belirli eylemi), veya
  • Düğümde doğrudan bir inline HTTP çağrısı yapılandırın (URL, yöntem, başlıklar, parametreler, body).

Aracın yanıtı tüm aşağı akış düğümlerine erişilebilir hale gelir. Yanıt bir JSON nesnesiyse, her üst düzey alan kendi değişkenine dönüşür — {"is_known": true, "tier": "gold"} gibi bir yanıt hem is_known hem de tier'i yazarak onlar üzerinde dallanmanıza olanak tanır.

Tool'da token'lar

Tool düğümündeki her metin alanı — URL, başlık değerleri, body — {{tokens}} destekler. Kod yazmadan bir URL yoluna, başlığa veya body'ye bir değişken sokun.

Bir araç çağrısı başarısız olursa (HTTP hatası, timeout, ağ), düğüm başarısızlığı kaydeder ve grafik devam eder — verisiz. Aşağı akış koşullarınızı «değer yok» durumunu ele alacak şekilde planlayın.

Integration

Integration düğümü, bağlı dış hizmetler için Tool'un odaklanmış bir varyantıdır — Google Calendar, Outlook, HubSpot. Sağlayıcıyı ve belirli eylemi seçersiniz (örn. check_availability, create_event), parametreleri verirsiniz ve düğüm entegrasyonu deterministik olarak çağırır.

Entegrasyon bu aracıda bağlı değilse, düğüm hiçbir şey yapmadan geçer — grafiğiniz devam eder. «Çalışmadı» durumu için aşağı akış koşullarını kontrol edin.

Phone Transfer

Phone Transfer düğümü çağrıyı (warm transfer) harici bir telefon numarasına aktarır. Başarılı bir aktarımdan sonra çağrı workflow'unuzdan ayrılmıştır — aracınız artık hatta değildir.

Number — başında + olan uluslararası formatta hedef (örn. +15551234567). {{tokens}} destekler, böylece hedef önceki bir adımdan gelebilir (örn. «hangi ofise bağlayalım?» sorusunun yanıtı).

Aktarım gerçekleşmezse (geçersiz numara, cevap yok, telefon bağlantısı kurulmamış), grafik geri çekilir ve mevcut aracı hatta kalır. Konuşma normal şekilde devam eder — aracı özür dileyip farklı bir yol deneyebilir.

End Call

End Call düğümü kapatır — aracı yapılandırılmış kapanışı söyler ve sonra telefonu kapatır. «Tüm tamamlandı» dalları için veya zor bir Condition'dan gelen «yardım edemeyiz, üzgünüz» dalı için temiz terminus olarak kullanın.

Bir giriş kenarı dışında yapılandırma gerektirmez.

Bir workflow'u yeniden kullanma (Sub-workflow)

Sub-workflow düğümü, başka bir workflow'u alt grafik olarak gömmek için ayrılmıştır. Bu düğüm editördedir, ancak henüz tam olarak bağlanmamıştır — grafik hiçbir şey yapmadan üzerinden geçer. Üretim çağrıları için ona güvenmeyin. Yeniden kullanılabilir alt grafikleri yayınladığımızda etkinleştireceğiz.


Kenarlar (Bağlantılar)

Bir düğümü sonrakine bir kenar ile bağlarsınız. Kenarın tetikleyicisi geçişin ne zaman tetiklendiğine karar verir.

Üç tetikleyici vardır:

TetikleyiciKim karar verirNe zaman tetiklenir
AI decidesAIKonuşma bunu doğal sonraki adım yaptığında. AI çağırabileceği bir «geçiş aracı» alır.
ConditionRuntimeBir değişken yazdığınız bir kural ile eşleştiğinde. AI yanıtlamadan önce değerlendirilir.
AlwaysRuntimeKoşulsuz — kaynak düğüm bittiği anda. Arayan girdisi yok, AI yok.

AI decides (niyet tabanlı)

Sadece AI ne zaman geçiş yapılacağına karar verebildiğinde AI decides kullanın — «arayan fiyatları sorarsa, satış aracısına aktar», «şikâyet gibi geliyorsa, özür subagent'ını çalıştır».

Kenara kısa bir niyet açıklaması yazarsınız (örn. «Arayan fiyatları soruyor veya yükseltme yapmak istiyor»). AI bunu o niyetle etiketlenmiş bir araç olarak görür ve konuşmaya dayanarak çağırıp çağırmayacağına karar verir. Birden fazla AI-decides kenarı varsa, AI tur başına en fazla bir tane seçer.

Condition (deterministik dallanma)

Grafiğin — AI'nın değil — bilinen bir gerçeğe göre karar vermesini istediğinizde Condition kullanın: «lead_score > 7 ise, closer'a gönder; yoksa nazikçe sonlandır».

Condition'lar AI yanıtlamadan önce değerlendirilir, bu yüzden o turda her zaman AI'ya karşı kazanırlar. AI eşleşen bir koşulu üzerine yazamaz.

Bu operatörlerle bir koşul oluşturabilirsiniz:

OperatörAnlamÖrnek
equalstam eşleşme (metin için büyük/küçük harf duyarsız)intent equals "billing"
not equalseşleşmiyorstatus not equals "active"
containsalt dize eşleşmesi (büyük/küçük harf duyarsız)feedback contains "broken"
greater thansayısal >lead_score greater than 7
less thansayısal <wait_minutes less than 5

Ayrıca All (hepsi eşleşmeli — AND) veya Any (en az biri eşleşmeli — OR) ile maddeleri birleştirebilirsiniz ve onları iç içe koyabilirsiniz. «Arayan bilinen biri ve tier'ı gold veya premium» gibi bir kural şu hale gelir:

All:
- is_known equals true
- Any:
- tier equals gold
- tier equals premium
Eksik değişkenler asla eşleşmez

Henüz ayarlanmamış bir değişkene (örn. AI hiç toplamadı) referans verirseniz, üzerindeki koşullar her zaman başarısız olur — hata yok, sadece eşleşmez. Yani loyalty_tier equals "gold", loyalty_tier hiç ayarlanmamışsa false döner. Dallarınızı bunu ele alacak şekilde tasarlayın — genellikle bir else dalı ile (aşağıya bakın).

Else dalı — hiçbir koşul eşleşmediğinde

Bir düğümden çıkan birden fazla Condition kenarınız varsa ve hiçbiri eşleşmezse, çağrı en düşük öncelikli olmayan-Condition kenarına düşer (Always veya bir AI-decides kenarı). Hiç fallback yoksa, AI kontrolü yeniden kazanır ve serbestçe devam edebilir.

Yaygın desen: bilinen yollar için birden fazla Condition artı bir catch-all'a giden bir Always kenarı (bir şey söyle, sonra End Call veya aktar).

Always (auto-advance)

Bir sonraki adım koşulsuz olduğunda Always kullanın — karar yok, arayan girdisi yok. İki doğal kullanım:

  • Adımları zincirleme: SAY → UPDATE_STATE → SAY → TOOL → Condition. Her adım biter ve Always kenarı hemen ilerletir.
  • Aracı konuşmayı bitirdikten sonra auto-ilerleme: çıkış Always kenarı olan bir Agent düğümü, «AI konuşmayı bıraktığında, ilerle» anlamına gelir — arayanın yanıt vermesine gerek yok. Bir bölüm sunan ve sonraki bölüme geçen bir sunucu aracı gibi monolog tarzı akışlar için yararlı.
Tetikleyiciler arasında öncelik

Condition ve Always (deterministik olanlar) AI decides'ı her zaman yener. Bir Condition eşleşirse, AI'nın geçiş araçları o turda göz ardı edilir. Bu, AI'nın atlayamadığı kurallar yazmanıza olanak tanır.


Değişkenler

Değişkenler workflow'un hafızasıdır. Bir workflow'daki çoğu şey ya bir değişken ayarlamak ya da bir tane okumaktır.

Değişken bildirme

Variables paneli (toolbar düğmesi), workflow'un her değişkenini onu ayarlayan veya okuyan adımlarla gösterir. Bir setter'a atlamak için bir değişkene tıklayın; bu, bir şeyin nereye yanlış gittiğini bulmanın en hızlı yoludur.

Panelde varsayılan değerle bir değişken bildirebilirsiniz — koşullarınızın «yokluk» nedeniyle sessizce başarısız olmaması için en başından var olması gereken escalated=false gibi bayraklar için yararlı.

Değişkenler nasıl ayarlanır

KaynakÖrnek
Varsayılan değerler (Variables panelinde bildirildi)Çağrı başlamadan önce ayarlanan escalated = false
Gather InputArayanın sözlü yanıtı düğümün değişkenine yakalanır
Update StateDoğrudan bir değer yazarsınız (literal veya {{tokens}} ile oluşturulmuş)
Tool / Integration sonucuTüm yanıt düğüm adının altında saklanır; yanıt bir JSON nesnesiyse, her üst düzey alan da kendi değişkenine dönüşür
Subagent returnSubagent'ın sonuçlandırdığı şey subagent düğümünün return değişkeninde saklanır

Değişkenleri okuma — {{tokens}}

Bir düğümde metin yazabildiğiniz her yerde — Agent prompt, Say metni, Gather prompt, Tool URL/body/header, Phone Transfer numarası, Update State değeri, koşul değerleri — bir {{variable}} ekleyebilirsiniz ve runtime'da yerine konur.

Noktalı yollar iç içe veriler için de çalışır — örn. bir Tool yanıtı {"customer": {"name": "Anna", "tier": "gold"}} idi, {{customer.name}} veya {{customer.tier}} okuyabilirsiniz.

Bilinmeyen token'lar görünür kalır

Bir token mevcut olmayan bir değişkene referans verirse, {{name}} literal metni olduğu gibi bırakılır (silinmez). Bu kasıtlıdır — bozuk şablonları test call'da kolayca tespit edilebilir hale getirir, sessizce yutmak yerine.


Yaygın desenler

Nitelendir → Dallan → Yönlendir

Start
└─ Agent (greeting + qualify)
└─ Gather Input (intent)
└─ Condition: intent == "sales" → Agent (sales)
└─ Condition: intent == "support" → Subagent (triage)
└─ Always (catch-all) → Say "Let me connect you" → Phone Transfer

Ara → Kişiselleştir

Start
└─ Tool (CRM lookup, writes is_known, name, tier)
└─ Condition: is_known == true → Agent (warm greeting with {{name}})
└─ Always (else) → Agent (cold greeting)

Yeniden kullanılabilir yardımcı (Subagent side-trip)

Agent (main conversation)
└─ AI decides: "Caller mentions an address" → Subagent (address collector)
└─ on finish: result = full_address
└─ Agent continues with {{full_address}}

Workflow ile yönlendirilen bir çağrı sırasında neler kilitli

Bir grafik çağrıyı yönettiğinde bazı varsayılanlar değişir:

  • Dil, workflow'un ilk aracısının kullandığı dile kilitlenir. AI çağrı ortasında dil değiştiremez. Bu, modelin gürültülü bir turda yanlış dile kaymasını önler.
  • Aracının ana prompt'u, aktif düğümün prompt'uyla değiştirilir. Bu «grafik personanın sahibidir» kuralıdır — Agent altındaki warning'e bakın.
  • İlk mesaj, aracının «Begin Message» alanından değil, giriş düğümünün greeting'inden gelir.

Döngü güvenliği — Step Budget

Her workflow'un çağrı başına bir maksimum geçiş sayısı vardır (varsayılan 25). Grafik yeni bir düğüme her geçtiğinde, sayaç bir azalır. Sıfıra ulaştığında, runtime kontrolden çıkmış döngüleri önlemek için geçişleri durdurur.

Bu durum için bir fallback düğümü (genellikle bir Phone Transfer veya End Call) seçebilirsiniz — bütçe tükendiğinde çağrı oraya yönlendirilir.

Bunu nadiren düşünmeniz gerekir — yanlışlıkla döngüye giren grafikler için bir güvenlik ağıdır. Normal kullanımda buna ulaşırsanız, muhtemelen bir yerde bir döngünüz vardır.


Test etme

Editörün Test Call düğmesi, workflow'un mevcut taslağıyla bir tarayıcı çağrısı açar. Çalışırken, kanvas üzerindeki düğümler arasında parlayan bir ateş böceği hareket eder, böylece çağrının tam olarak nerede olduğunu görürsünüz. Test call sırasında editör, değişikliklerin canlı durumun senkronizasyonunu bozmasını önlemek için kilitlenir.

Test Call'u şunları doğrulamak için kullanın:

  • Koşullarınız beklediğiniz değerlere eşleşiyor (ateş böceğinin tetikleneceğini düşündüğünüz bir dalı atladığını görün).
  • Token'larınız doğru şekilde yerine konuyor (bir değer ayarlanmamışsa asılı bir {{name}} için dinleyin).
  • Araç başarısızlıkları nazikçe degrade oluyor (fallback yolunuz gerçekten tetikleniyor).

Bilinmesi gereken başarısızlıklar

DurumNe olur
Tool / Integration çağrısı başarısız olurGrafik verisiz devam eder. Aşağı akış koşullarınız eksik değişkeni ele almalı.
Phone Transfer başarısız olur (geçersiz numara, cevap yok, telefon bağlantısı eksik)Grafik geri çekilir, mevcut aracı hatta kalır ve konuşma normal şekilde devam eder.
Subagent başlatılamazYan tur iptal edilir, ana aracı hatta kalır ve kısa bir başarısızlık cümlesi söylenir.
Metinde {{missing_variable}}Çıktıda literal olarak bırakılır — test call'larda tespit etmek kolay.
Sub-workflow düğümüŞu anda hiçbir şey yapmadan üzerinden geçer. Henüz ona güvenmeyin.
Step budget tükendiAyarlanmışsa fallback düğümüne saptırır, aksi takdirde AI kontrolü geri kazanır.

Bir Workflow NE ZAMAN kullanılmamalı

Workflow'lar güçlüdür ama her aracı için doğru cevap değildir. Şu durumlarda tek bir prompt'la kalın:

  • Konuşma açık uçludur («ürünlerimiz hakkında arayanın sorularını yanıtla»).
  • Net dallanma mantığınız yok — kararların çoğu AI'nın iyi ele aldığı yargılardır.
  • Yalnızca bir Agent düğümü ve bir End Call yazacaksınız — bu sadece ekstra adımlı bir prompt'tur.

Şu durumlarda workflow'a geçin:

  • Çağrıyı üç veya daha fazla farklı aşamayla bir akış şeması olarak çizebilirsiniz.
  • Bir değişken üzerinde en az bir deterministik dallanmaya ihtiyacınız var (bir Condition).
  • Birden fazla aracı arasında bir konuşma parçasını yeniden kullanmak istiyorsunuz (bir subagent).
  • Zaten bir prompt'a «arayan X derse, Y yapar» kuralları yığıyorsunuz ve güvenilir değiller.