---
title: "Ajan adımları ve aktarımlar"
description: "Bir ajanı kendi talimatları, araçları ve toplanan değerleri olan adımlara ayırın ve çağrı sırasında çağrıları ajanlar arasında aktarın."
---

Tek bir istem, modele işin tamamını aynı anda verir. **Adımlar**, ona aramanın her seferinde tek bir aşamasını verir: her adımın kendi talimatları, kendi araçları, isteğe bağlı olarak kelimesi kelimesine söylenen bir satırı ve ilerlemeden önce toplaması gereken değerleri vardır. **Aktarımlar**, kuruluşunuzdaki başka bir yapay zeka ajanının, görüşme kaydı korunarak aramanın ortasında devralmasını sağlar; böylece arayan kişi kendini asla tekrar etmez.

Her ajan tek bir istem olarak başlar. Siz adım veya aktarım ekleyene kadar bu durum değişmez.

## Adımlar mı, tek bir istem mi?

| Adımları şu durumlarda kullanın | Tek bir istemi şu durumlarda koruyun |
| --- | --- |
| Aramanın sırasıyla gerçekleşmesi gereken aşamaları varsa: önce doğrulama, sonra rezervasyon. | Görüşme açıksa: SSS, danışma, genel destek. |
| Ajan ilerlemeden önce bir değer yakalanması gerekiyorsa. | Sabit bir sırayla toplanması gereken hiçbir şey yoksa. |
| "18 yaş altındaki arayanlar bir veliye yönlendirilir" gibi bir kural asla esnememeliyse. | Modelin muhakemesi her dal için yeterince iyiyse. |
| Aramanın belirli bir noktasında bir sorgulama çalıştırılması gerekiyorsa. | Arayan istediğinde araçlar çağrılabiliyorsa. |
| Aramanın bir bölümü, kendi istemi ve sesi olan farklı bir ajana aitse. | Tek bir persona her şeyi yönetiyorsa. |

Adımlar, betiklenmiş bir telefon ağacı değildir. Model, bir adım içinde görüşmeyi tek bir istemde yaptığı gibi yürütür. Adım; üzerinde çalıştığı konuyu, kullanabileceği araçları ve ayrılabilmesi için ihtiyaç duyduğu bilgileri belirler.

## Adımlı bir ajan nasıl oluşturulur

Bir ajanın adımları olduğunda, `prompt` alanı **paylaşılan talimatları** içerir: her adımda geçerli olan persona ve kurallar. Her adım bunların üzerine kendi talimatlarını ekler. Model her turda paylaşılan talimatları, mevcut adımın adını ve talimatlarını ve şimdiye kadar toplanan değerleri görür.

Oluşturucuda ajanı **Tek istem** seçeneğinden **Adımlar** seçeneğine geçirin. Her adım için adı, talimatları, söylenecek satırı, araçları, toplanan değerleri ve geçişleri içeren bir kart; bir aktarımlar seçici ve adımların salt okunur akış grafiğini görürsünüz. Tek bir isteme geri dönmeniz, paylaşılan talimatları ve tüm adımları birleştiren düzleştirilmiş bir istem sunar.

API üzerinden, `steps` ve `handoffs`,
[ajan](/api-reference/agents) alanlarıdır. Her ajan alanında olduğu gibi, bir `PATCH` bunları taslakta hazırlar; `POST /v1/agents/{agent_id}/deploy` bunları yayına alır. `"steps": null` göndermek, ajanı tekrar tek bir isteme geçirir. Test aramaları ve **Konuş** taslakta çalışır.

<Tip>
  [Yardımcı pilot](/tr/guides/ask-the-copilot), bir açıklamadan adımlar
  oluşturabilir ("rezervasyondan önce doğum tarihini doğrulayan bir adım ekle")
  ve diğerlerine dokunmadan tek bir adımı düzenleyebilir.
</Tip>

### Adım alanları

| Alan | Anlamı |
| --- | --- |
| `id` | Zorunludur. Bir harfle başlayan, en fazla 40 karakter uzunluğunda küçük harfler, rakamlar ve alt çizgiler. Ajan içinde benzersizdir. |
| `name` | Zorunlu görünen ad, 1 ila 80 karakter. |
| `instructions` | Zorunludur, en fazla 20.000 karakter. `prompt` gibi `{{var}}` [arama değişkenlerini](/tr/guides/call-variables) destekler. |
| `say` | Adıma girildiğinde kelimesi kelimesine söylenen isteğe bağlı satır, en fazla 1.000 karakter. `{{var}}` destekler. |
| `tools` | `null`, adıma ajana bağlı tüm araçları verir. Bir liste, adımı ada göre yalnızca bu araçlarla sınırlar. `end_call` ve `transfer_call` gibi yerleşik eylemler her adımda ajanın ayarlarını izler. |
| `collect` | Adımın topladığı en fazla 20 değer. Her birinde `name`, `type`, `description` ve `required` (varsayılan `true`) bulunur. |
| `on_enter_tool` | İsteğe bağlı araç adı; adıma girildiğinde otomatik olarak çağrılır. [Webhook adımlarına](#webhook-steps) bakın. |
| `transitions` | Adımın daha sonra gidebileceği yerlerin sıralı listesi. [Geçişlere](#transitions) bakın. |
| `global_when` | İsteğe bağlıdır. Adımı herhangi bir adımdan erişilebilir yapar. [Genel adımlara](#global-steps) bakın. |
| `voice` | Bu adım için isteğe bağlı ses kimliği. Ajan özel bir ses yapılandırması kullandığında yoksayılır. |

Grafiğin kendisi `{"start_step": "<step id>", "steps": [...]}` şeklindedir. Arama `start_step` içinde başlar.

## Geçişler

Her geçişte `to`, bir adım kimliği ve aşağıdakilerden tam olarak biri bulunur:

- **`when`**: sade dil kullanılır ve **model karar verir**. Ajana, geçebileceği adımları listeleyen yerleşik bir `go_to_step` aracı verilir; her `when`, bu adımın seçilme nedeni olarak gösterilir.
- **`condition`**: toplanan değerlerle ilgili bir kuraldır ve **kod karar verir**. Model bunu atlayamaz veya konuşarak aşamaz.
- **`"always": true`**: kontrol yapmadan devam eder. Önce kod karar verir: bir adıma girilir girilmez veya gerekli değerleri toplandığında, model bir `when` seçemeden önce eşleşen ilk `condition` ya da `always` geçişi uygulanır. Bu nedenle `always` öğesini koşulların yedeği olarak koşullardan sonra yerleştirin veya bir adımı doğrudan sonraki adıma bağlamak için tek başına kullanın. `always` içeren bir adım hiçbir zaman `when` seçimini beklemez.

Bir `condition`, `{"value": <collected name or dotted path>, "op": <op>, "target": <literal>}` biçimindedir:

| `op` | Değer şu durumda doğru olur |
| --- | --- |
| `eq`, `ne` | `target` değerine eşitse veya eşit değilse |
| `lt`, `lte`, `gt`, `gte` | `target` değerinden küçükse, en fazla bu değerse, büyükse veya en az bu değerse |
| `in`, `not_in` | `target` listesindeki değerlerden biriyse veya biri değilse |
| `exists`, `missing` | toplanmışsa veya toplanmamışsa (`target` yoktur) |

`eq`, `ne`, `in` ve `not_in`, boşluklar kırpıldıktan sonra metni büyük/küçük harf duyarsız olarak karşılaştırır. Sayılar sayı olarak, tarihler ise `YYYY-MM-DD` dizeleri olarak karşılaştırılır. Hiç toplanmamış bir değer, `missing` dışındaki her işleci yanlış yapar.

`when` ve `global_when` değerlerini, söylenecek bir ifade olarak değil, "Arayan kişi randevu almak istiyor" gibi bir koşul olarak yazın. Ajan bunları dahili yönlendirme notları olarak görür ve bunları asla sesli okumaması veya adım değiştirdiğinden bahsetmemesi söylenir.

Model `go_to_step` çağrısı yaptığında:

1. Adımdaki her `required` değer mevcut olmalıdır. Bir değer eksikse modele hangisinin eksik olduğu söylenir ve arayandan bu değeri ister.
2. Değerler kaydedilir.
3. `condition` ve `always` geçişleri sırayla kontrol edilir. İlk eşleşme uygulanır.
4. Aksi durumda ajan, modelin seçtiği adıma geçer.
5. Hiçbir şey eşleşmez ve model herhangi bir adım belirtmezse ajan bulunduğu yerde kalır.

Bir [genel adıma](#global-steps) atlama istisnadır: arayan kişi konuyu değiştirmiştir; bu nedenle geçerli adımda hâlâ eksik gerekli değerler olsa ve bu adımın koşulları kontrol edilmeden önce geçiş yapılır.

`condition` ve `always` geçişleri bir adıma her girildiğinde de kontrol edilir; böylece kod tarafından belirlenen adımlar dizisi tek seferde yürütülür. Zincir şu durumlarda durur:

- bu çalıştırmada daha önce ziyaret ettiği bir adımda;
- 8 geçişten sonra;
- adımda hâlâ toplanması gereken gerekli değerler varsa, ancak adımda bir `on_enter_tool` bulunmuyorsa (bir webhook adımı her zaman sonucu üzerinden yönlendirilir).

Yalnızca zincirin durduğu adımdaki `say` satırı seslendirilir.

Geçişi olmayan bir adım **sonlandırıcıdır**. Ajan burada tamamlar ve normal yerleşik eylemlerini kullanarak aramayı sonlandırır veya bir insana aktarır.

## Değer toplama

Bir adımın ihtiyaç duyduğu öğeleri `collect` içinde listeleyin. Model, `go_to_step` çağrısı yaptığında değerleri iletir ve bu değerler aramanın geri kalanında kullanılabilir durumda kalır.

| `type` | İçerdiği değer |
| --- | --- |
| `string` | Herhangi bir metin |
| `number` | Bir sayı |
| `boolean` | `true` veya `false` |
| `date` | `YYYY-MM-DD` biçiminde bir tarih |

Toplanan değerler arama içeriğidir. Transkriptin yanında aramada görünür ve aynı saklama, silme ve sansürleme kurallarına tabidir. Ajanın arama kaydı kapatıldığında, toplanan değerler ne kaydedilir ne de webhook'larda gönderilir; adım zaman çizelgesi yine de korunur. Bkz. [Bir aramada nerede görüntülenir](#where-to-see-it-on-a-call).

## Söyleme satırları

`say`, ajan adıma girdiğinde tam olarak yazıldığı gibi seslendirilir. Model daha
sonra aynı yanıtta yeni adımda devam eder ve satırın az önce söylendiğini
bildiği için onu tekrarlamaz. Selamlamalar, zorunlu açıklamalar ve sabit
ifadeler için `say` kullanın; yanıtın kalanını modele bırakın.

Başlangıç adımının `say` değeri, herhangi bir onay duyurusundan sonra yapay
zeka ajanı ilk konuştuğunda kullandığı açılış satırıdır. Arayan kişi önce
konuşursa, bu satır yapay zeka ajanının bir kişiye verdiği ilk yanıtı açar;
asla bir IVR veya sesli mesaj karşılamasına açmaz.

Bir adımın `say` değeri, çağrı `__previous__` veya geri aktarma yoluyla o adıma
döndüğünde yeniden seslendirilmez. Satırı duyulmasını istediğiniz şekilde
yazın: sesin yanlış okuyabileceği her şeyi açıkça yazın. Söyleme satırları
`{{var}}` çağrı değişkenlerini destekler, ancak toplanan değerleri desteklemez.

## Webhook adımları

`on_enter_tool` değerini ajanın araçlarından birine ayarlayın; adım girilir
girilmez model beklenmeden çalışır. Bağımsız değişkenleri, adları aracın
parametre adlarıyla eşleşen toplanan değerlerdir. Sonuç, 4 KB ile
sınırlandırılmış `<tool>_result` adlı toplanan değer olarak saklanır ve adımın
`condition` ile `always` geçişleri hemen kontrol edilir; böylece sorgulama,
çağrıyı kendi sonucuna göre yönlendirebilir.

Saklanan değerin iki alanı vardır:

| Alan | İçerik |
| --- | --- |
| `status` | Uç noktanızın döndürdüğü HTTP durum kodu. |
| `response` | Yanıt gövdesi. |

Bir gövde alanına `lookup_account_result.response.<field>` ile, durum koduna
ise `lookup_account_result.status` ile yönlendirin.

Sorgulama, 8 saniyeye kadar veya daha kısaysa aracın kendi zaman aşımı süresi
boyunca çalışır. 3 saniyeden uzun sürerse, arayan kişinin sessizlikte
kalmaması için ajan kısa bir satır söyler. Uç noktanız 400 veya üzeri bir durum
döndürürse ya da zamanında yanıt vermezse, ajan arayan kişiye bunu şu anda
kontrol edemediğini bildirir ve yapabildiği işlemlerle devam eder.

## Genel adımlar

`global_when` içeren bir adıma, bu açıklama geçerli olduğunda herhangi bir
adımdan ulaşılabilir. Model, `when` için olduğu gibi karar verir. Bunu arayan
kişinin herhangi bir anda gündeme getirebileceği konular için kullanın:
faturalama soruları, bir insana aktarılma isteği, şikâyet.

Genel bir adımda `"to": "__previous__"` içeren geçiş, çağrıyı ondan önce etkin
olan adıma döndürür; böylece arayan kişi kaldığı yerden devam eder. Adım sürdürülür:
`on_enter_tool` yeniden çalışmaz, `say` tekrarlanmaz ve ajan baştan başlamadan
devam eder.

## Aktarımlar

`handoffs`, çağrıyı devralabilecek kuruluşunuzdaki diğer yapay zeka ajanlarını listeler:

```json
[{"agent_id": 413, "when": "The caller asks about billing or a refund"}]
```

Yapay zeka ajanı, bu ajanlar ve nedenlerle birlikte yerleşik bir `hand_off` aracı alır. Geçişlerde olduğu gibi, her `when` dahili bir yönlendirme notudur ve hiçbir zaman sesli olarak okunmaz.

Aktarım yaptığında yapay zeka ajanı, arayan kişiye nereye aktarıldığını kendi sesiyle bildiren kısa bir cümle söyler; örneğin, "Elbette, sizi faturalama ekibimize aktarıyorum." Ardından hedef yapay zeka ajanının istemi, adımları, araçları ve sesi devralır; çağrı aynı transkriptle devam eder. Yeni yapay zeka ajanı kendini kısaca tanıtır ve arayanın son talebini yanıtlar; aktarımı duyurmaz. Hedef ajanın bilgi tabanı bu andan itibaren kullanılabilir.

Bir çağrı ilk kez bir yapay zeka ajanına ulaştığında, o ajanın `start_step` adımında başlar: adımın `on_enter_tool` aracı çalışır ve `say` içeriği seslendirilir. Çağrı daha önce ziyaret ettiği bir yapay zeka ajanına geri aktarıldığında, bu yapay zeka ajanı `on_enter_tool` aracını çalıştırmadan, `say` içeriğini tekrarlamadan veya kendini yeniden tanıtmadan kaldığı adımdan devam eder. Toplanan değerler çağrıdaki tüm yapay zeka ajanları tarafından paylaşılır.

- Hedef, aynı kuruluştaki bir yapay zeka ajanı olmalıdır ve bir yapay zeka ajanı çağrıyı kendisine aktaramaz.
- Çağrı düzeyindeki tüm ayarlar çağrıyı yanıtlayan yapay zeka ajanında kalır: ürün, diller, ilk kimin konuşacağı, sesli mesaj, onay duyurusu ve diğer tüm çağrı ayarları.
- Hedefler daha fazla aktarım yapabilir veya çağrıyı geri aktarabilir. Bir çağrı en fazla 8 yapay zeka ajanına ulaşabilir.
- Test çağrısı, test ettiğiniz yapay zeka ajanının taslağını çalıştırır. Aktarım yaptığı yapay zeka ajanları ise yayındaki sürümlerini çalıştırır.
- İki yapay zeka ajanında aynı ada sahip ancak farklı tanımları olan bir araç varsa, çağrı için yalnızca biri korunur ve her zaman çağrıyı yanıtlayan yapay zeka ajanının aracı seçilir. Oluşturucu, kaydettiğinizde sizi uyarır.
- Bir yapay zeka ajanı, adımları olmadan da aktarımlara sahip olabilir. İstemin tamamı olduğu gibi kullanılır.

`go_to_step` ve `hand_off`, adımları veya aktarımları olan yapay zeka ajanlarında ayrılmıştır; bu nedenle kendi araçlarınız bu adları kullanamaz.

## Çağrıda nerede görebilirsiniz

Çağrıyı **Çağrı Geçmişi** bölümünde açın. Transkriptin yanındaki adım zaman çizelgesi, çağrının girdiği her adımı ve nedenini gösterir; toplanan değerler de burada listelenir.

[Çağrı nesnesi](/api-reference/calls#retrieve-a-call) ve çağrı tamamlandı webhook'u ([`telephony.complete` / `web.complete`](/tr/webhooks/call-complete)), aynı verileri `steps_trace` ve `collected_values` olarak taşır. Her ikisi de adımı olmayan çağrılarda bulunmaz.

```json
"steps_trace": [
  {"t_ms": 0, "agent": "a412", "step": "greet", "via": "start"},
  {"t_ms": 51230, "agent": "a412", "step": "verify", "via": "model"},
  {"t_ms": 98410, "agent": "a412", "step": "minor", "via": "condition"}
],
"collected_values": {"full_name": "Dana Reyes", "dob": "2010-04-02", "age": 15}
```

`agent`, ardından yapay zeka ajanı kimliği gelen `a` harfidir. `via`, çağrıyı neyin ilerlettiğini belirtir:

| `via` | Anlamı |
| --- | --- |
| `start` | Çağrı bu adımda başladı. |
| `model` | Model, `go_to_step`, bir `when` veya bir `global_when` aracılığıyla adımı seçti. |
| `condition` | Bir `condition` veya `always` geçişi eşleşti. |
| `on_enter` | Bir webhook adımının sonucunda bir geçiş eşleşti. |
| `handoff` | Başka bir yapay zeka ajanı devraldı. |

## Adımların çalıştığı yerler

Adımlar; gelen, giden ve kampanya çağrılarında, test çağrılarında, web ve widget çağrılarında **Spark**, **Bolt** ve tüm **Storm** ürünlerinde yerel olarak çalışır.

Diğer tüm yerlerde yapay zeka ajanı yine çalışır, yalnızca yapı olmadan: paylaşılan talimatları ve tüm adımları sırayla birleştiren düzleştirilmiş bir istem çalıştırır. Bu kapsam şunları içerir:

- deneysel Bolt ürünleri;
- kaydedilmiş bir yapay zeka ajanı oturumları da dahil olmak üzere [Realtime](/tr/guides/use-with-openai-realtime) oturumları;
- [dinamik çağrı yapılandırması](/tr/guides/dynamic-call-config) webhook'u tarafından döndürülen satır içi yapılandırmalar. `agent_id` döndüren bir webhook, ilgili yapay zeka ajanının adımlarını kullanır.

## Sınırlar

| Sınır | Değer |
| --- | --- |
| Ajan başına adım | 100 |
| Adım başına toplanan değer | 20 |
| Ajan başına aktarım hedefi | 8 |
| Tek bir çağrıda erişilebilen ajan | 8 |
| `steps` JSON'unun boyutu | 200 KB |
| Adım `instructions` | 20.000 karakter |
| `say` satırı | 1.000 karakter |
| Saklanan `on_enter_tool` sonucu | 4 KB |

Bir kuralı ihlal eden kayıt, hatalı alanın yolu ile birlikte `400` döndürür;
örneğin `steps.steps[2].transitions[0].to`. `tools` ve `on_enter_tool`
içindeki araç adları, ajana eklenmiş araçlar olmalıdır.

Adım başına diller, modeli atlayan komut dosyalı adımlar ve say satırları
içindeki toplanan değerler desteklenmez.

## İçe aktarılan ajanlar

Retell, Bland, Vapi veya ElevenLabs'ten [içe aktarma](/tr/guides/import-agents),
çoklu istemli ajanları, akışları, yolları ve iş akışlarını adım olarak; ekipleri
ve ajan aktarımlarını ise içe aktarılan ajanlar arasındaki aktarımlar olarak
getirir. İnceleme sayfası, içe aktarmadan önce ikisini de gösterir.

## Örnek: diş kliniği kayıt alma

Sırayla üç adım: karşılama, hastanın bilgilerini toplama, randevu oluşturma.

```json
{
  "prompt": "You are Ava, the front desk assistant at Acme Dental. Be warm and brief. Ask one question at a time.",
  "steps": {
    "start_step": "greet",
    "steps": [
      {
        "id": "greet",
        "name": "Greeting",
        "instructions": "Greet the caller and ask how you can help.",
        "say": "Thanks for calling Acme Dental, this is Ava. How can I help you today?",
        "tools": null,
        "collect": [],
        "transitions": [
          {"to": "details", "when": "The caller wants to book an appointment"}
        ]
      },
      {
        "id": "details",
        "name": "Patient details",
        "instructions": "Ask for the caller's full name, date of birth and the reason for the visit. Read the date of birth back and ask the caller to confirm it.",
        "tools": null,
        "collect": [
          {"name": "full_name", "type": "string", "description": "Caller's full name", "required": true},
          {"name": "dob", "type": "date", "description": "Date of birth", "required": true},
          {"name": "reason", "type": "string", "description": "Reason for the visit", "required": true},
          {"name": "new_patient", "type": "boolean", "description": "First visit to the practice", "required": false}
        ],
        "transitions": [
          {"to": "book", "when": "The caller has confirmed their details"}
        ]
      },
      {
        "id": "book",
        "name": "Book",
        "instructions": "Offer the two earliest open slots from book_slot and book the one the caller picks. Confirm the date and time, then say goodbye and end the call.",
        "tools": ["book_slot"],
        "collect": [],
        "transitions": []
      }
    ]
  }
}
```

`PATCH /v1/agents/{agent_id}` ile hazırlama ortamına alın, **Konuş** ile deneyin,
ardından yayına alın. `details` adımı; ad, doğum tarihi ve neden toplanmadan
randevu oluşturma adımına aktaramaz; `new_patient` isteğe bağlıdır.

## Örnek: yaş kısıtlamalı dal

Model herkesle konuşabilir, ancak randevu oluşturulacak kişiye kod karar verir.
Yaşı toplayın, ardından modelin kendi seçimi değerlendirilmeden önce buna göre
yönlendirin.

```json
{
  "id": "verify",
  "name": "Verify age",
  "instructions": "Ask for the caller's age.",
  "tools": null,
  "collect": [
    {"name": "age", "type": "number", "description": "Caller's age in years", "required": true}
  ],
  "transitions": [
    {"to": "guardian", "condition": {"value": "age", "op": "lt", "target": 18}},
    {"to": "book", "when": "The caller has given their age"}
  ]
}
```

On beş yaşında olduğunu söyleyen bir arayan, model neye karar verirse versin
`guardian` adımına gider. Diğer herkes `book` adımına gider. Her ikisi de
grafiğin başka yerlerindeki normal adımlardır.

## Örnek: hesap arama webhook adımı

Arayan kişi bir hesap numarası verir, arama sonraki adıma girildiğinde çalışır
ve sonucu rotayı belirler. Kısalık için `not_found`, `collections` ve `support`
adımları çıkarılmıştır.

```json
[
  {
    "id": "identify",
    "name": "Identify",
    "instructions": "Ask for the caller's account number and read it back digit by digit.",
    "tools": null,
    "collect": [
      {"name": "account_number", "type": "string", "description": "Account number", "required": true}
    ],
    "transitions": [
      {"to": "lookup", "when": "The caller has confirmed their account number"}
    ]
  },
  {
    "id": "lookup",
    "name": "Look up account",
    "instructions": "Tell the caller what you found on their account and ask how you can help.",
    "tools": ["lookup_account"],
    "collect": [],
    "on_enter_tool": "lookup_account",
    "transitions": [
      {"to": "not_found", "condition": {"value": "lookup_account_result.response.found", "op": "eq", "target": false}},
      {"to": "collections", "condition": {"value": "lookup_account_result.response.account_status", "op": "in", "target": ["past_due", "suspended"]}},
      {"to": "support", "when": "The caller needs help with an active account"}
    ]
  }
]
```

`lookup_account`, parametresinin adı bu olduğu için `account_number` değerini
alır. Yanıt gövdesinde `"found": false` varsa çağrı `not_found` adımına gider.
`account_status` değeri `past_due` veya `suspended` ise `collections` adımına
gider. Etkin bir hesap `lookup` adımında kalır; burada model yardımcı olur ve
`support` adımına geçer. Başarısız bir aramayı ayrı bir adıma göndermek için
önce durumla ilgili koşullar ekleyin: hata yanıtı durum kodunu saklar; bu
nedenle `{"value": "lookup_account_result.status", "op": "gte", "target": 400}`
bunu yakalar. Zaman aşımı veya yanıt alınmaması ise `"error"` değerini saklar;
bu nedenle
`{"value": "lookup_account_result.status", "op": "eq", "target": "error"}`
bunu yakalar.

## Örnek: resepsiyondan faturalandırmaya

İki yapay zeka ajanı vardır. Resepsiyon (ajan `412`) her çağrıyı yanıtlar ve
faturalandırma sorularını kendi istemi, araçları ve sesi olan bir
faturalandırma ajanına (ajan `413`) aktarır.

Resepsiyonda:

```json
{
  "handoffs": [
    {"agent_id": 413, "when": "The caller asks about a bill, a payment or a refund"}
  ]
}
```

Arayan kişiyi geri aktarabilmesi için faturalandırma ajanında:

```json
{
  "handoffs": [
    {"agent_id": 412, "when": "The billing question is resolved and the caller needs something else"}
  ]
}
```

Resepsiyon, "Sizi faturalandırma ekibimize aktarayım" gibi kısa bir ifade
kullanır; faturalandırma ajanı kendini tanıtır ve resepsiyonun bıraktığı yerden
görüşmeye devam eder. Faturalandırma geri aktardığında resepsiyon, arayan
kişiyi yeniden selamlamadan kaldığı yerden devam eder. Çağrının ürünü,
dilleri, onay duyurusu ve diğer çağrı ayarları resepsiyonda kalır; çünkü
çağrıyı resepsiyon yanıtlamıştır.

Faturalandırmanın yalnızca kendi yönergelerine ihtiyacı varsa ve ayrı bir
ajana ihtiyacı yoksa bunun yerine resepsiyonda genel bir adım kullanın. Soru
yanıtlandığında çağrı, arayan kişinin bulunduğu adıma geri döner:

```json
{
  "id": "billing",
  "name": "Billing questions",
  "instructions": "Answer questions about bills and payments. Offer to send a payment link by email.",
  "tools": null,
  "collect": [],
  "transitions": [
    {"to": "__previous__", "when": "The billing question is answered"}
  ],
  "global_when": "The caller asks about a bill or payment at any point"
}
```

## Sonraki adımlar

<CardGroup cols={2}>
  <Card title="İstem kılavuzu" icon="pen" href="/tr/guides/prompting">
    Telefonda etkili olan ortak talimatlar ve adım talimatları yazın.
  </Card>
  <Card title="Araç entegrasyonu oluşturun" icon="code" href="/tr/guides/build-tool-integration">
    Adımlarınızın ve webhook adımlarınızın çağırdığı araçları oluşturun.
  </Card>
  <Card title="Ajanlarınızı test edin" icon="flask" href="/tr/guides/test-agents">
    Yayına almadan önce aynı senaryoları her dalda çalıştırın.
  </Card>
  <Card title="Agents API" icon="robot" href="/api-reference/agents">
    Her ajan alanı, taslak ve yayına alma işlemi.
  </Card>
</CardGroup>
