---
title: "Etkinlik Kataloğu"
description: "ThunderPhone'un gönderdiği tüm webhook etkinlik türleri."
---

Her webhook gövdesi, değeri bu sayfadaki olay türlerinden biri olan bir `type` alanı
içerir. Bir [uç noktaya](/tr/webhooks/endpoints) abone olduğunuzda, `events` dizisi
istediğiniz olay türlerini içermelidir (veya her şeye abone olmak için boş
bırakılmalıdır — yalnızca açıkça adlandıran uç noktalara teslim edilen
tur başına olaylar [`telephony.turn`](#telephony-turn) /
[`web.turn`](#web-turn) hariç).

Bu olaylar iki teslimat biçimiyle iletilir:

* **Uç nokta teslimatları**, [yeniden denemeler](/tr/webhooks/overview) içeren, her zaman **engellemeyen** bildirimlerdir: herhangi bir 2xx ile yanıt verin; zarf, tekilleştirme için bir `event_id` içerir.
* **Engelleyici** alışverişler yalnızca [eski tek URL'li webhook](/tr/webhooks/overview) üzerinde çalışır: [`telephony.incoming` / `web.incoming`](/tr/webhooks/call-incoming) yapılandırma isteği (webhook modundaki numaralar: bir yeniden deneme dahil 13 sn; webhook modundaki widget anahtarları: 10 sn) ve webhook modundaki [araç yönlendirmesi](/tr/tools/overview). Yanıtınız canlı çağrıyı şekillendirir.

Aşağıdaki örnek yükler, uç nokta zarfını ağ iletim sırasıyla gösterir
(anahtarlar alfabetik olarak sıralanır: `data`, `event_id`, `type`);
eski teslimatlar `event_id` olmadan aynı `data` değerini taşır.

## Arama etkinlikleri

### `telephony.incoming`

Gelen bir arama [telefon numaralarınızdan](/api-reference/phone-numbers) birine ulaştığında gönderilir. Uç nokta teslimatları, numaranın ajana mı yoksa webhook'a mı yapılandırıldığına bakılmaksızın **her** gelen arama için gönderilen, beklemeden devam eden bildirimlerdir. Atanmış bir ajanı olmayan numaralar ayrıca eski webhook üzerinde **engelleyici** yapılandırma isteğini alır — tam istek / yanıt şeması için [`telephony.incoming` / `web.incoming`](/tr/webhooks/call-incoming) bölümüne bakın.

```json
{
  "data": {
    "call_id": 987654321,
    "from_number": "+14155550199",
    "to_number": "+15551234567"
  },
  "event_id": "3f6b2ad0-1c9e-4a57-9f2b-8f6f0f9d2f11",
  "type": "telephony.incoming"
}
```

| Alan | Tür | Açıklama |
|-------|------|-------------|
| `agent_id` | integer \| null | Atandığında, aramayı yöneten yapay zeka ajanı |
| `agent_name` | string \| null | Atandığında, aramayı yöneten yapay zeka ajanı |

### `telephony.complete`

Gelen veya giden telefon araması sona erdiğinde gönderilir. Engelleyici değildir. Müsait olduğunda transkripti, kayıt URL'sini ve faturalandırma özetini içerir. Yük şeması için [`telephony.complete` / `web.complete`](/tr/webhooks/call-complete) bölümüne bakın.

| Alan | Tür | Açıklama |
|-------|------|-------------|
| `agent_id` | integer \| null | Atandığında, aramayı yöneten yapay zeka ajanı |
| `agent_name` | string \| null | Atandığında, aramayı yöneten yapay zeka ajanı |

### `telephony.tool`

Bir telefon araması bir [fonksiyon aracı](/tr/tools/overview) çağırdıktan sonra gönderilir. Engelleyici olmayan bir denetim bildirimi niteliğindedir — bu etkinlik teslim edildiğinde araç zaten çalıştırılmıştır; kendi fonksiyon araçlarınızı ve yerleşik `send_sms` aracını kapsar (diğer yerleşik, bilgi tabanı, uygulama bağlantısı veya MCP araçlarını kapsamaz). `send_sms` için hem `arguments.to` hem de `arguments.body` `[REDACTED]` olur. Tamamlanma transkriptleri de bunları gizler; içeriği ve alıcıyı, yanıttaki `message_id` değerini kullanarak kuruluş kapsamlı SMS kaynağından alın.

```json
{
  "data": {
    "arguments": { "date": "2026-04-21" },
    "call_id": 987654321,
    "from_number": "+14155550199",
    "response": {
      "response": { "available_slots": ["9:00 AM", "2:00 PM"] },
      "status": 200
    },
    "to_number": "+15551234567",
    "tool_name": "search_appointments"
  },
  "event_id": "1f0a7c3e-52d4-4a0e-8f4b-b1a6a1c0d9e2",
  "type": "telephony.tool"
}
```

`response`, çalıştırılan sonuçtur: başarı durumunda `{"status": <http status>,
"response": <your endpoint's JSON>}`, başarısızlık durumunda ise
`{"status": <status>, "error": "<message>"}`.

| Alan | Tür | Açıklama |
|-------|------|-------------|
| `agent_id` | integer \| null | Atandığında, aramayı yöneten yapay zeka ajanı |
| `agent_name` | string \| null | Atandığında, aramayı yöneten yapay zeka ajanı |

### `telephony.turn`

Bir telefon araması **devam ederken**, konuşma içeren her dönüş gerçekleştiğinde bir kez gönderilir — ajanın sesli tamamlamaları ve arayanın yazıya dökülen dönüşleri. [`GET /v1/calls/{call_id}/transcript`](/api-reference/calls#get-transcript) sorgulaması yapmak yerine, canlı konuşmayı düz webhook'lar üzerinden takip etmenizi sağlar. Engelleyici değildir.

<Note>
  **Açık abonelik gereklidir.** Diğer tüm etkinlik türlerinden farklı olarak dönüş etkinlikleri, boş bir `events` dizisi (tümüne abone olma) üzerinden asla teslim edilmez. Bir uç nokta bunları yalnızca `events` listesi açıkça `telephony.turn` / `web.turn` içerdiğinde alır.
</Note>

```json
{
  "data": {
    "call_id": 987654321,
    "entry_type": "completion",
    "from_number": "+14155550199",
    "position": 7,
    "role": "assistant",
    "start_ms": 15200,
    "text": "How many employees does your company have?",
    "to_number": "+15551234567"
  },
  "event_id": "8d3f5a2c-7b1e-4c9a-b6d0-2e4f6a8c0d1e",
  "type": "telephony.turn"
}
```

| Alan | Tür | Açıklama |
|-------|------|-------------|
| `agent_id` | integer \| null | Atandığında, aramayı yöneten yapay zeka ajanı |
| `agent_name` | string \| null | Atandığında, aramayı yöneten yapay zeka ajanı |
| `position` | integer | Arama geçmişindeki dönüş dizini — sıralama için sabit bir kimlik |
| `role` | string | `assistant` (ajan konuşması) veya `user` (arayan konuşması) |
| `text` | string | Yayınlama anında bilinen dönüş transkripti metni |
| `entry_type` | string | Temel geçmiş girişi türü: `completion` (ajan) veya `user_turn` / `span` (arayan) |
| `start_ms`, `end_ms` | integer | Arama başlangıcından itibaren ms cinsinden ses ofsetleri; yalnızca yayınlama anında oynatma zamanlaması zaten biliniyorsa bulunur |

<Note>
  Teslimat en az bir kez yapılır ve dönüşler **sırasız** gelebilir: zarfın `event_id` değeriyle yinelenenleri kaldırın ve `position` değerine göre sıralayın. Arayan transkriptleri yayınlandıktan sonra da iyileştirilebilir; arama sonrası [`telephony.complete`](/tr/webhooks/call-complete) transkripti yetkilidir. Yalnızca konuşulan dönüşler yayınlanır — araç çağrıları, fısıltılar ve diğer dahili girişler bu akışta asla görünmez.
</Note>

### `web.incoming`

Bir [web bileşeni](/tr/widget/overview) oturumu veya oluşturucu mikrofon test araması başladığında gönderilen, `telephony.incoming` etkinliğinin web kanalı eşdeğeridir. Uç nokta teslimatları, her web oturumu için beklemeden devam eder. `mode="webhook"` içindeki yayınlanabilir anahtarlar ayrıca eski webhook üzerinde **engelleyici** yapılandırma isteğini alır — bu engelleyici istek farklı bir biçime sahiptir (`origin_domain`, `publishable_key_prefix`; telefon numarası yoktur). [`telephony.incoming` / `web.incoming`](/tr/webhooks/call-incoming) bölümüne bakın.

```json
{
  "data": {
    "call_id": 987654322,
    "from_number": "web",
    "origin_domain": "https://example.com",
    "publishable_key_prefix": "pk_live_a1b2",
    "to_number": "+15551234567"
  },
  "event_id": "9a2b4c6d-8e0f-4a1b-9c2d-3e4f5a6b7c8d",
  "type": "web.incoming"
}
```

`from_number` her zaman değişmez `"web"` değeridir. Webhook modundaki bileşen oturumlarında `to_number` boştur (oturumun ajan numarası yapılandırmadan sonra atanır); oluşturucu mikrofon test aramalarında ise `origin_domain` ve `publishable_key_prefix` boştur.

| Alan | Tür | Açıklama |
|-------|------|-------------|
| `agent_id` | integer \| null | Atandığında, aramayı yöneten yapay zeka ajanı |
| `agent_name` | string \| null | Atandığında, aramayı yöneten yapay zeka ajanı |

### `web.complete`

Web bileşeni aramalarını (`direction: "web"`) ve oluşturucu mikrofon test aramalarını (`direction: "test"`) kapsayan, `telephony.complete` etkinliğinin web kanalı eşdeğeridir. Engelleyici değildir. [`telephony.complete`](/tr/webhooks/call-complete) ile aynı yük biçimine sahiptir; ayrıca `origin_domain` içerir ve `from_number` değeri `"web"` olarak ayarlanır.

| Alan | Tür | Açıklama |
|-------|------|-------------|
| `agent_id` | integer \| null | Atandığında, aramayı yöneten yapay zeka ajanı |
| `agent_name` | string \| null | Atandığında, aramayı yöneten yapay zeka ajanı |

<Note>
  Eski tek URL'li webhook'ta, oluşturucu mikrofon test aramaları geçmişte `telephony.complete` olarak raporlanır — burada yalnızca `direction: "web"` aramaları `web.complete` türünü kullanır. Uç nokta sistemi hem web hem de test aramalarını `web.*` ile eşler. Geçmiş yükler eski `direction` değerleri olan `widget` veya `mic` içerebilir.
</Note>

### `web.tool`

`telephony.tool` etkinliğinin web kanalı eşdeğeridir. `data`, `from_number` / `to_number` yerine `origin_domain` taşır.

| Alan | Tür | Açıklama |
|-------|------|-------------|
| `agent_id` | integer \| null | Atandığında, aramayı yöneten yapay zeka ajanı |
| `agent_name` | string \| null | Atandığında, aramayı yöneten yapay zeka ajanı |

### `web.turn`

Web bileşeni aramalarını ve oluşturucu mikrofon test aramalarını kapsayan [`telephony.turn`](#telephony-turn) etkinliğinin web kanalı eşdeğeridir. Aynı yük biçimine sahiptir, ancak `from_number` / `to_number` yerine `origin_domain` kullanır. `telephony.turn` gibi, **açık abonelik** gerektirir — boş bir `events` dizisi üzerinden asla teslim edilmez.

| Alan | Tür | Açıklama |
|-------|------|-------------|
| `agent_id` | integer \| null | Atandığında, aramayı yöneten yapay zeka ajanı |
| `agent_name` | string \| null | Atandığında, aramayı yöneten yapay zeka ajanı |

### `call.transfer_completed`

Bir [çağrı aktarımının](/tr/guides/call-transfers) nihai sonucuyla, çağrı başına bir kez gönderilir:
soğuk aktarım veya sesli AI ajanı ayrıldıktan sonra sıcak aktarımın geride bıraktığı
insanlar arası köprü.
Engelleyici değildir ve yalnızca uç noktalara teslim edilir (eski
tek URL'li webhook'a asla gönderilmez). Çağrının `telephony.complete` olayından sonra ulaşır:
operatör çağrıyı devraldığında veya aktarım başarısız olduğunda ya da
ThunderPhone çağrıyı köprülediyse köprü sona erdiğinde.

```json
{
  "data": {
    "agent_id": 12,
    "agent_name": "Front desk",
    "bridge_kind": "cold_fallback",
    "bridge_seconds": 255,
    "bridge_total_cents": 5,
    "call_id": 987654321,
    "destination": "+15555550102",
    "sip_status": 403,
    "transfer_outcome": "bridged"
  },
  "event_id": "5b0f6c1e-9d2a-5e7b-8c4d-1a2b3c4d5e6f",
  "type": "call.transfer_completed"
}
```

| Alan | Tür | Açıklama |
|-------|------|-------------|
| `call_id` | integer | Aktarılan çağrı |
| `agent_id` | integer \| null | Atanmışsa çağrıyı yöneten ajan |
| `agent_name` | string \| null | Atanmışsa çağrıyı yöneten ajan |
| `transfer_outcome` | string | `refer_accepted`: operatör çağrıyı devraldı. `bridged`: Operatör soğuk aktarımı reddettiği veya sıcak aktarımın ajanı ayrıldığı için ThunderPhone, arayanı ve hedefi kendisi bağlı tuttu. `bridge_unanswered`: Operatör soğuk aktarımı reddetti ve hedef, ThunderPhone'un kendi çağrısını yanıtlamadı. `failed`: aktarım gerçekleşmedi ve çağrı sona erdi |
| `destination` | string \| null | Çağrının aktarıldığı numara |
| `sip_status` | integer \| null | Operatör soğuk aktarımı reddettiğinde SIP durumu: `403` (örneğin çağrı aktarımı olmayan bir Twilio trunk'ı), `405` veya `501`. Operatör reddetmediyse `null` |
| `bridge_kind` | string \| null | Yalnızca `bridged`: `cold_fallback` (ThunderPhone'un bağladığı reddedilmiş bir soğuk aktarım) veya `warm` (ajan ayrıldıktan sonra sıcak aktarımın iki tarafı) |
| `bridge_seconds` | integer \| null | Yalnızca `bridged`: ThunderPhone'un faturalandırdığı köprü süresi, saniye cinsinden |
| `bridge_total_cents` | integer \| null | Yalnızca `bridged`: ücretsiz çağrı kredisi varsa düşüldükten sonra köprünün ABD doları senti cinsinden maliyeti; çağrının `billing_total_cents` değerinden ayrı faturalandırılır |

Aynı değerler, [çağrı nesnesinde](/api-reference/calls#call-object)
`transfer_outcome`, `transfer_destination`, `transfer_sip_status`,
`transfer_bridge_kind`, `transfer_bridge_seconds` ve
`transfer_bridge_total_cents` olarak da bulunur. `event_id`, bir çağrı için her teslimatta
aynıdır; bu nedenle yinelenen bir rapor ikinci bir etkinlik oluşturmaz.

---

## SMS olayları

SMS olayları, kuruluşun bağlı Twilio veya Telnyx hesabı üzerinden gönderilen mesajları açıklar. Mesaj gövdesi dahil edilmez ve `to` gizlenir.
İçerik veya alıcı gerektiğinde kuruluş kapsamındaki mesajı
[`GET /v1/sms/{message_id}`](/api-reference/sms#retrieve-a-message) ile alın.

### `sms.sent`

Müşterinin operatörü giden SMS isteğini kabul ettiğinde gönderilir. Bu, cihaz teslim alındısı değildir.

```json
{
  "data": {
    "accepted_at": "2026-09-19T15:42:10.113Z",
    "agent_id": 12,
    "call_id": 987654321,
    "created_at": "2026-09-19T15:42:09.901Z",
    "direction": "outbound",
    "error_code": null,
    "error_message": null,
    "from_number": "+15551234567",
    "id": "313a3117-827b-46e9-a01a-ac1493838724",
    "provider": "twilio",
    "provider_id": "SM0123456789abcdef0123456789abcdef",
    "segment_count": 1,
    "source": "agent_tool",
    "status": "accepted",
    "to": "[REDACTED]"
  },
  "event_id": "0ae347b4-1716-45bb-9a0e-b52373586e37",
  "type": "sms.sent"
}
```

### `sms.failed`

Kalıcı bir operatör reddinden sonra, geçici hatalar için yeniden deneme hakları tükendiğinde veya sonuç kesin olarak bilinmediğinde gönderilir. `error_code` sabit bir ThunderPhone kodudur ve `error_message`, mevcut olduğunda müşterinin yapması gereken işlemi belirtir. `status: "unknown"`, operatörün SMS'i kabul etmiş olabileceği anlamına gelir; ThunderPhone bunu otomatik olarak yeniden göndermeyeceğinden, operatör günlüğünde mutabakat sağlayın.

### `sms.received`

Gelen SMS desteği için ayrılmıştır. Mevcut sürümde hiçbir `sms.received` olayı yayınlanmaz. Gelen operatör webhook yapılandırması ve imza doğrulaması ayrı olarak sunulacaktır.

---

## Ses olayları

Özel ses oluşturma işlemi eşzamansızdır. Bu engellemeyen olaylar, [klon ayrıntı uç noktasını](/api-reference/custom-voices#list-and-retrieve-clones) yoklamak yerine kesin bir sonuca tepki vermenizi sağlar.

`voice.ready` ve `voice.failed` yalnızca `events: []` içeren kuruluş genelindeki bir uç noktaya teslim edilir. Açık olay filtreleri olarak seçilemezler.

### `voice.ready`

Özel ses işlenmeyi tamamladığında ve bir ajana atanabildiğinde gönderilir.

```json
{
  "data": {
    "voice": {
      "created_at": "2026-07-30T14:12:08.317Z",
      "display_name": "Support voice",
      "failure_reason": "",
      "gender": "female",
      "id": "cv_2f6f90b0e9a34ee8b39be7d1",
      "language": "en",
      "name": "custom:cv_2f6f90b0e9a34ee8b39be7d1",
      "status": "ready",
      "updated_at": "2026-07-30T14:13:31.605Z"
    }
  },
  "event_id": "2d5f0a61-e9b5-4a3c-b684-29d7d9e4b214",
  "type": "voice.ready"
}
```

### `voice.failed`

Özel ses işleme kalıcı bir hataya ulaştığında gönderilir.

```json
{
  "data": {
    "reason": "audio sample could not be processed",
    "voice": {
      "created_at": "2026-07-30T14:12:08.317Z",
      "display_name": "Support voice",
      "failure_reason": "audio sample could not be processed",
      "gender": "female",
      "id": "cv_2f6f90b0e9a34ee8b39be7d1",
      "language": "en",
      "name": "custom:cv_2f6f90b0e9a34ee8b39be7d1",
      "status": "failed",
      "updated_at": "2026-07-30T14:13:31.605Z"
    }
  },
  "event_id": "3493e985-1a75-4f77-a10a-e74af440cd31",
  "type": "voice.failed"
}
```

| Alan | Tür | Açıklama |
|-------|------|-------------|
| `voice.id` | dize | Özel sesin herkese açık kimliği |
| `voice.name` | dize | `custom:<public_id>` biçimindeki ajan ses değeri |
| `voice.display_name` | dize | Kuruluşa yönelik ses adı |
| `voice.language` | dize | Klonun tek dil kodu |
| `voice.gender` | dize | `male`, `female` veya boş bir dize |
| `voice.status` | dize | `voice.ready` için `ready`; `voice.failed` için `failed` |
| `voice.failure_reason` | dize | Başarı durumunda boş; hata durumunda işleme hatası ayrıntısı |
| `voice.created_at`, `voice.updated_at` | zaman damgası | ISO 8601 zaman damgaları |
| `reason` | dize | Hata ayrıntısı; yalnızca `voice.failed` üzerinde bulunur |

---

## Kalite olayları

### `call.graded`

Bir çağrı için [AI derecelendirme çalışması](/api-reference/calls#ai-call-grading)
tamamlandığında gönderilir. Engelleyici değildir.

```json
{
  "data": {
    "call_id": 987654321,
    "grade": {
      "call_outcome": "success",
      "created_at": "2026-04-20T18:25:11.002Z",
      "detected_issues": [],
      "graded_at": "2026-04-20T18:25:11.002Z",
      "grader_model": "heuristic-v1",
      "id": 5512,
      "score": 92,
      "status": "completed",
      "summary": "Caller asked about their policy and got a full answer…"
    },
    "report": null
  },
  "event_id": "7c1d2e3f-4a5b-4c6d-8e9f-0a1b2c3d4e5f",
  "type": "call.graded"
}
```

| Alan | Tür | Açıklama |
|-------|------|-------------|
| `agent_id` | integer \| null | Atanmışsa aramayı yöneten ajan |
| `agent_name` | string \| null | Atanmışsa aramayı yöneten ajan |
| `grade.id` | integer | Değerlendirme kimliği |
| `grade.score` | integer \| null | 0–100 |
| `grade.call_outcome` | string | `success`, `failure`, `unknown` veya `no_conversation` |
| `grade.summary` | string | Tek paragraflık özet |
| `grade.detected_issues` | array | Değerlendiricinin bulduğu sorun dizeleri |
| `grade.status` | string | Her zaman `completed` — yalnızca tamamlanan çalıştırmalar olay üretir |
| `grade.grader_model` | string | Sonucu hangi değerlendiricinin ürettiği (ör. `heuristic-v1`) |
| `grade.graded_at`, `grade.created_at` | timestamp | |
| `report` | object \| null | Müşteriye yönelik [arama raporu](/api-reference/calls#call-report): sonuç etiketi, dikkat gerektiriyor bayrağı ve nedeni, arayan, tek satırlık özet, arayan deneyimi. Erken bir sezgisel değerlendirmede bu değer, alanları yer tutucu olan `null` veya `pending` raporudur; tam değerlendirmenin olayı tamamlanmış raporu içerir |

<Note>
  Bir çağrı birden fazla kez derecelendirilebilir — hızlı bir sezgisel
  derecelendirmeyi, kayıt kullanılabilir olduğunda genellikle tam model
  derecelendirmesi izler ve manuel yeniden derecelendirmeler de mümkündür.
  Tamamlanan her çalışma kendi `call.graded` olayını gönderir; en son
  `graded_at` değerini yetkili kabul edin.
</Note>

### `call.data_extracted`

Yapılandırılmış veri çıkarma başarıyla tamamlandığında gönderilir; buna
`telephony.complete` / `web.complete` sonrasındaki geç yeniden deneme veya
[`POST /v1/calls/{call_id}/extract`](/api-reference/calls#run-data-extraction)
ile manuel yeniden çalıştırma da dahildir. Engelleyici değildir.

Engelleyici çıkarma modunda, tamamlama olayı normalde 75 saniyelik çıkarma
bütçesinden daha uzun süre beklemez. Çıkarma çalışanı işlemi kaybolursa,
üretim sonlandırma boşaltması (her beş dakikada bir), başka bir çıkarma
girişimi başlatmadan önce `blocking_deadline_at` süresi geçmiş bir tamamlamayı
serbest bırakır. Daha sonraki bir başarı, bu olay olarak ayrı şekilde teslim edilir.

<Warning>
  Çıkarılan değerler, modelin konuşmayı yorumlamasıdır. Null olmayan her değer,
  dayandığı alıntıyı, konuşmacı rolünü ve tur dizinini; ayrıca çalışma düzeyinde
  bir doğrulama işaretini içerir. Para, kimlik veya erişim içeren kararlar
  vermeden önce sonucu doğrulayın.
</Warning>

```json
{
  "data": {
    "call_id": 987654321,
    "agent_id": 12,
    "agent_name": "Acme intake",
    "extracted_data": {
      "status": "completed",
      "fields": {
        "customer_name": "Alex Morgan",
        "appointment_date": "2026-04-23"
      },
      "evidence": {
        "customer_name": {
          "quote": "My name is Alex Morgan",
          "speaker_role": "caller",
          "turn_index": 4
        },
        "appointment_date": {
          "quote": "April 23 works for me",
          "speaker_role": "caller",
          "turn_index": 7
        }
      },
      "verification": "verified",
      "field_reasons": {},
      "schema_version": "92850758e231a3c95a..."
    },
    "extracted_at": "2026-04-20T18:25:11.002Z",
    "model": "<model id>",
    "summary": "Alex Morgan called to book a follow-up visit and confirmed Thursday, April 23."
  },
  "event_id": "4d79ef1d-c2b1-4ed6-85b8-8326bd2895ef",
  "type": "call.data_extracted"
}
```

| Alan | Tür | Açıklama |
|-------|------|-------------|
| `agent_id` | integer \| null | Atandıysa çağrıyı yöneten yapay zeka ajanı |
| `agent_name` | string \| null | Atandıysa çağrıyı yöneten yapay zeka ajanı |
| `summary` | string \| null | Ajanın **Çağrı özeti oluştur** seçeneği açık olduğunda tamamlanan [çağrı özeti](/tr/webhooks/call-complete); böylece geç bir çıkarma olayı, tamamlama penceresini kaçıran özeti de teslim eder; aksi durumda `null`. Özeti olup çıkarma alanı olmayan ajanlar bu olayı hiçbir zaman göndermez: geç özeti `GET /v1/calls/{call_id}` üzerinden okuyun |
| `extracted_data.status` | string | Bu olay için her zaman `completed` |
| `extracted_data.fields` | object | Yapılandırılmış çıkarma alanı anahtarlarıyla eşlenmiş değerler; kullanılamayan değerler `null` olur |
| `extracted_data.evidence` | object | Çıkarma alanına göre eşlenmiş kanıtlar. Null olmayan bir değer, tam olarak yapısal denetimden geçmiş alıntıyı (en fazla 1.000 karakter), `speaker_role` değerini (`caller` veya `agent`) ve `turn_index` değerini içerir; modelin döndürdüğü daha uzun alıntılar kesilmek yerine reddedilir ve alanı `null` olduğunda kanıt her zaman `null` olur |
| `extracted_data.verification` | string | Yalnızca bağımsız kanıt geçişi, her aday alan için tam olarak bir geçerli karar döndürdüğünde `verified` olur. `unavailable`, geçişin başarısız olduğu, zaman aşımına uğradığı, yeterli bütçeye sahip olmadığı veya hatalı biçimlendirilmiş ya da kısmi çıktı döndürdüğü anlamına gelir. Tamamen kullanılamayan bir geçiş, müşteri incelemesi için yapısal olarak temellendirilmiş değerleri korur. Kısmi çıktı için geçerli kararlar uygulanır ve tam olarak bir geçerli kararı olmayan her aday null yapılır |
| `extracted_data.field_reasons` | object | Yapısal temellendirme veya bağımsız doğrulayıcı tarafından null yapılan alanlara göre eşlenmiş nedenler |
| `extracted_data.schema_version` | string | Bu çıkarma için kullanılan tam alan şemasının karması |
| `extracted_at` | timestamp | ISO 8601 tamamlanma zamanı |
| `model` | string | Çıkarma için kullanılan model |

### `campaign.completed`

Bir kampanya, zamanlaması sona erdiğinde veya tüm kişiler nihai durumlara
ulaştığında, `running` durumundan `completed` durumuna geçtiğinde bir kez
gönderilir. Çalıştırıcı yeniden denemeleri başka bir olay göndermez. Bu
kuruluş düzeyindeki yaşam döngüsü olayı yalnızca kuruluş kapsamlı uç noktalara
teslim edilir, ajan kapsamlı uç noktalara teslim edilmez. Engelleyici değildir.

```json
{
  "data": {
    "campaign_id": "3f6b2c9e-2a0d-4c63-b6d6-a708dc98f403",
    "name": "May win-back",
    "agent_id": 12,
    "status": "completed",
    "started_at": "2026-04-20T17:00:00Z",
    "completed_at": "2026-04-20T18:25:11Z",
    "counts": {
      "contacts_total": 150,
      "completed": 121,
      "failed": 11,
      "no_answer": 18,
      "remaining": 0
    }
  },
  "event_id": "8d8f52ce-6b46-423f-9dde-cea0b91ec135",
  "type": "campaign.completed"
}
```

Dört sonuç sayısı birbirinden ayrıdır ve toplamları `contacts_total` değerine
eşittir: `completed`, başarılı kişileri içerir; `no_answer`, nihai sonucu
yanıt yok olan nihai başarısız/tükenmiş kişileri içerir; `failed`, diğer tüm
nihai başarısız/tükenmiş kişileri içerir; `remaining` ise bekleyen,
zamanlanmış veya şu anda aranan kişileri içerir. Yeniden deneme bekleyen bir
kişi, en son girişiminde yanıt alınmamış olsa bile `remaining` olur. Devam
eden çağrılar, yalnızca bir kez alınan tamamlama anlık görüntüsünden önce
uzlaştırılır. `started_at`, yapılandırılmış kampanya başlangıcıdır veya
başlangıç yapılandırılmadıysa kampanya oluşturulma zamanıdır.

### `issue.reported`

Bir [sorun raporu](/api-reference/issue-reports) oluşturulduğunda gönderilir —
rapor ya kullanıcı tarafından kontrol panelinden (`source: "user"`) iletilir
ya da çağrı derecelendirmesi tarafından otomatik olarak (`source: "system"`)
oluşturulur. Engelleyici değildir.

```json
{
  "data": {
    "call_id": 987654321,
    "issue_report": {
      "created_at": "2026-04-20T18:25:11.002Z",
      "description": "Five-second silence before responding to the main question.",
      "id": 4321,
      "severity": "warning",
      "source": "system",
      "status": "open",
      "title": "Agent paused too long"
    }
  },
  "event_id": "5e6f7a8b-9c0d-4e1f-8a2b-3c4d5e6f7a8b",
  "type": "issue.reported"
}
```

| Alan | Tür | Açıklama |
|-------|------|-------------|
| `agent_id` | integer \| null | Atandıysa çağrıyı yöneten yapay zeka ajanı |
| `agent_name` | string \| null | Atandıysa çağrıyı yöneten yapay zeka ajanı |
| `issue_report.severity` | string | `critical`, `warning` veya `info` |
| `issue_report.status` | string | `open` veya `resolved` |
| `issue_report.source` | string | `user` (kontrol panelinden iletilmiş) veya `system` (derecelendirme tarafından oluşturulmuş) |

<Note>
  Bir çağrıyı yeniden derecelendirmek, sistem tarafından oluşturulan sorun
  raporlarını yeniden oluşturur; bu da yeniden oluşturulan raporlar için
  `issue.reported` olayını tekrar gönderir. Her temel sorun için yalnızca bir
  bildirim istiyorsanız `call_id` + `title` ile tekilleştirin.
</Note>

### `issue.escalated`

Bir sorun örüntüsü personel incelemesi için ThunderPhone'a gönderildiğinde
gönderilir: **ThunderPhone'a bildir** işleminden sonra veya Yapay zeka ile
düzeltme, müşteri tarafındaki düzeltmeyi onaylayamadığında ve sorunu otomatik
olarak yönlendirdiğinde. Bu olayı yalnızca kuruluş genelindeki uç noktalar alır.

```json
{
  "data": {
    "automatic": false,
    "cluster_id": "7ac2844c-2df0-4fa8-a560-7378da649e19",
    "escalation_id": "ec99f52b-c8c0-41dd-a4f2-dd8a07b10894",
    "status": "open"
  },
  "event_id": "d8f8f420-7a42-45ba-bcf1-b747f9bbecda",
  "type": "issue.escalated"
}
```

| Alan | Tür | Açıklama |
|-------|------|-------------|
| `automatic` | boolean | Otomatik yükseltme için `true`; manuel yükseltme için `false` |
| `cluster_id` | UUID | Yükseltilen sorun örüntüsü |
| `escalation_id` | UUID | Yükseltme kaydı |
| `status` | string | Olay gönderildiğinde `open` |

Bu bir bildirimdir, kanıt paketi değildir. Sorun örüntüsüyle ilişkilendirmek
için `cluster_id` kullanın. [ThunderPhone'a bildir](/tr/guides/issues)
bölümüne bakın.

---

## Test çağrısı etkinlikleri

### `test-call.completed`

Bir
[test çağrısı çalıştırması](/api-reference/test-calls#test-call-run-object)
çağrı başlatılırken başarısız olan ve hiç çağrı oluşturmayan çalıştırmalar dahil olmak üzere `completed` veya `failed` nihai durumuna ulaştığında gönderilir. Engellemez. Toplu CI çalıştırmalarını sohbet/bildirim sistemlerinize bağlamak için kullanışlıdır.

```json
{
  "data": {
    "test_call_run": {
      "call_id": 987654321,
      "completed_at": "2026-04-20T18:25:04.822Z",
      "error_message": "",
      "id": 7110,
      "status": "completed",
      "target_id": 12,
      "target_type": "agent"
    }
  },
  "event_id": "2b3c4d5e-6f7a-4b8c-9d0e-1f2a3b4c5d6e",
  "type": "test-call.completed"
}
```

| Alan | Tür | Açıklama |
|-------|------|-------------|
| `agent_id` | integer \| null | Atanmışsa çağrıyı yöneten yapay zeka ajanı |
| `agent_name` | string \| null | Atanmışsa çağrıyı yöneten yapay zeka ajanı |
| `test_call_run.target_type` | string | `agent` veya `phone_number` |
| `test_call_run.target_id` | integer | Çalıştırmanın hedeflediği, `target_type` ile eşleşen yapay zeka ajanı kimliği veya telefon numarası kimliği |
| `test_call_run.status` | string | `completed` veya `failed` |
| `test_call_run.call_id` | integer \| null | Çalıştırma çağrı yapılmadan önce başarısız olduysa `null` |
| `test_call_run.error_message` | string | Başarılı olduğunda boş |

---

## Uyarı etkinlikleri

### `alert.triggered`

**Geliştirici web kancalarına teslim et** kanalı etkin olan bir [uyarı kuralı](/tr/guides/alerts) eşiğini aştığında gönderilir.
Engellemez. Bir kural bir kez tetiklenir ve ardından bekleme süresine uyar; bu nedenle sürekli bir ihlal, her bekleme süresi penceresinde bir etkinlik üretir.

```json
{
  "data": {
    "comparator": "lt",
    "event_id": "b8e6a1d4-2c3f-4a5b-9c8d-7e6f5a4b3c2d",
    "fired_at": "2026-04-20T18:00:00+00:00",
    "metric": "success_rate",
    "metric_value": 71.4,
    "rule_id": "d2c3b4a5-6f7e-4d8c-9b0a-1c2d3e4f5a6b",
    "rule_name": "Success rate below 80%",
    "threshold": 80.0,
    "window_hours": 24
  },
  "event_id": "4d5e6f7a-8b9c-4d0e-9f1a-2b3c4d5e6f7a",
  "type": "alert.triggered"
}
```

| Alan | Tür | Açıklama |
|-------|------|-------------|
| `event_id` (`data` içinde) | UUID | Uyarı **tetiklenme** kimliği — zarfın teslimat `event_id` değerinden farklıdır |
| `rule_id`, `rule_name` | UUID, string | Tetiklenen kural |
| `metric` | string | `success_rate`, `failure_rate`, `avg_score`, `call_volume` veya `suite_regression` |
| `comparator` | string | `lt`, `lte`, `gt` veya `gte` |
| `metric_value` | number | Kural tetiklendiğinde metriğin pencere üzerindeki değeri |
| `threshold` | number | Yapılandırılmış eşik |
| `window_hours` | integer | Geriye dönük değerlendirme penceresi |
| `fired_at` | timestamp | |

Kurallar, metrikler, bekleme süreleri ve e-posta / Slack kanalları oluşturmak için [Uyarılar rehberine](/tr/guides/alerts) bakın.

---

## Geçiş etkinlikleri

### `migration.call.complete`

[`POST /v1/migrations/{id}/calls`](/api-reference/migration-calls) üzerinden yapılan bir arama,
hangi platformun aramayı gerçekleştirdiğine bakılmaksızın sona erdiğinde gönderilir. Engelleyici değildir. Arama
sona erdikten yaklaşık 5 dakika sonrasına kadar ulaşabilir. `data`,
[`telephony.complete`](/tr/webhooks/call-complete) içindeki tüm alanlara ek olarak bir `migration` bloğu içerir. ThunderPhone'un yaptığı bir arama,
aynı `call_id` ile her zamanki gibi `telephony.complete` de gönderir. Diğer platformdaki bir arama 2
saat sonra hâlâ bitmediyse ya da geçiş tamamlandıysa veya anahtarını önce kaybettiyse,
`status: "unknown"` ve transkript olmadan gönderilir.

```json
{
  "data": {
    "agent_id": 42,
    "agent_name": "Front desk",
    "billable_minutes": null,
    "billing_total_cents": null,
    "call_id": null,
    "direction": "outbound",
    "duration_seconds": 94,
    "end_reason": "user_hangup",
    "end_time": "2026-10-06T17:01:34+00:00",
    "extracted_data": null,
    "from_number": "+15551234567",
    "migration": {
      "arm": "vendor",
      "id": "5f0c2a9e-7b1d-4c3e-8a6f-2d9e1b4c7a30",
      "metadata": {
        "lead_id": "8812"
      },
      "routing_id": "9b2f8c1e-4d3a-4f6b-8e2d-1a7c5b9e0f34",
      "vendor": "retell",
      "vendor_call_id": "call_6a1f0e",
      "vendor_cost_usd": "0.1240"
    },
    "product": "",
    "recording_mode": "vendor",
    "recording_url": "https://…",
    "start_time": "2026-10-06T17:00:00+00:00",
    "status": "completed",
    "summary": "The callee booked a table for two on Thursday.",
    "thunderphone_retained_call_content": true,
    "to_number": "+14155552671",
    "transcripts": [
      {
        "content": "Hi Ada, this is Rosa's calling about your booking.",
        "role": "agent"
      },
      {
        "content": "Yes, Thursday works.",
        "role": "user"
      }
    ],
    "transfer_number": null,
    "unresolved_variables": [],
    "variables": {
      "first_name": "Ada"
    },
    "voice": ""
  },
  "event_id": "7c1e2f3a-4b5c-4d6e-8f7a-9b0c1d2e3f4a",
  "type": "migration.call.complete"
}
```

| Alan | Tür | Açıklama |
|-------|------|-------------|
| `migration.id` | UUID | Geçiş |
| `migration.routing_id` | UUID | Yönlendirilen arama; aramayı yaptığınızda döndürülen değer |
| `migration.arm` | string | `ours` (aramayı ThunderPhone yaptı) veya `vendor` (aramayı diğer platform yaptı) |
| `migration.vendor` | string | `retell`, `vapi`, `elevenlabs` veya `bland` |
| `migration.vendor_call_id` | string \| null | Diğer platformun arama kimliği; `ours` için `null` |
| `migration.metadata` | object | Aramayı yaparken gönderdiğiniz `metadata` |
| `migration.vendor_cost_usd` | string \| null | Diğer platformun bildirdiği arama maliyeti; bildirdiyse |
| `call_id` | integer \| null | ThunderPhone arama kimliği; `vendor` için `null` |
| `status` | string | `vendor` için: aranan kişi konuştuysa `completed`, konuşmadıysa `failed`, yukarıda açıklandığı gibi `unknown`. `ours` için: `telephony.complete` ile aynı |

Bir `vendor` araması için ThunderPhone'da faturalandırma veya veri çıkarma bilgisi yoktur:
`billable_minutes`, `billing_total_cents` ve `extracted_data` `null` değerindedir,
`product` ve `voice` boştur, `recording_mode` `vendor` değerindedir ve
`recording_url`, sağlandıysa diğer platformun bağlantısıdır.

### `migration.rollback`

Bir geçişin kademeli geçişi tüm aramaları kendiliğinden diğer
platforma geri taşıdığında gönderilir: 15 dakika içinde 3 arama ThunderPhone'a bağlanamadığında, ThunderPhone'a gönderilen 2 arama yapay zeka ajanı yanıtlamadan önce sonlandığında veya ThunderPhone'un görev sonuç oranı diğer platformunkinin yapılandırılan farktan daha fazla altına düştüğünde. Engellemez; geri alma başına bir kez gönderilir. Ardından ThunderPhone'un payı %0 olur ve geçiş, biri ajanın Geçiş sekmesinden yeniden başlatana kadar duraklatılır. Yük telefon numarası, transkript veya arama kimliği içermez.

```json
{
  "data": {
    "agent_id": 42,
    "agent_name": "Front desk",
    "dropped": 0,
    "migration_id": "5f0c2a9e-7b1d-4c3e-8a6f-2d9e1b4c7a30",
    "ours": {
      "graded": 20,
      "success_rate": 0.8
    },
    "ours_failed": 3,
    "ours_percent": 0,
    "previous_percent": 25,
    "reason": "ours_failed_burst",
    "rolled_back_at": "2026-10-10T12:05:00+00:00",
    "step": 1,
    "theirs": {
      "graded": 20,
      "success_rate": 0.8
    },
    "vendor": "retell"
  },
  "event_id": "3d1f6b2a-8c4e-5a7b-9d0e-2f1a3b4c5d6e",
  "type": "migration.rollback"
}
```

| Alan | Tür | Açıklama |
|-------|------|-------------|
| `migration_id` | UUID | Geçiş |
| `vendor` | dize | `retell`, `vapi`, `elevenlabs` veya `bland` |
| `reason` | dize | `ours_failed_burst` (15 dakika içinde 3 başarısız bağlantı), `dropped_calls` (30 dakika içinde yapay zeka ajanı yanıtlamadan önce sonlanan 2 arama) veya `rate_gap` (her iki taraf için en az `rollback_min_calls` değerlendirilmiş arama üzerinden görev sonuç oranı farkı) |
| `previous_percent` | tamsayı | Geri alma öncesindeki ThunderPhone arama payı |
| `ours_percent` | tamsayı | Her zaman `0` |
| `step` | tamsayı \| null | Bulunduğu zamanlama adımı (0 tabanlı) |
| `ours` / `theirs` | nesne \| null | Geçerli adımdaki değerlendirilmiş aramalar ve başarı oranları; adımda çok az arama varsa `theirs` son 30 günü temsil edebilir. Hiçbiri yoksa `null` |
| `ours_failed` | tamsayı | Son 15 dakikada sayılan başarısız bağlantılar |
| `dropped` | tamsayı | Son 30 dakikada yarıda kesilmiş olarak sayılan aramalar |
| `rolled_back_at` | zaman damgası | |

---

## İlgili

<CardGroup cols={2}>
  <Card title="telephony.incoming / web.incoming" icon="phone" href="/tr/webhooks/call-incoming">
    Yanıtlamanız gereken engelleyici gelen çağrı yükü.
  </Card>
  <Card title="telephony.complete / web.complete" icon="phone-slash" href="/tr/webhooks/call-complete">
    Çağrı sonrası transkript ve metrikler.
  </Card>
  <Card title="Webhook uç noktaları" icon="bolt" href="/tr/webhooks/endpoints">
    Bir URL'yi bu etkinliklerin bir alt kümesine abone edin.
  </Card>
  <Card title="Fonksiyon Araçları" icon="screwdriver-wrench" href="/tr/tools/overview">
    `telephony.tool` / `web.tool` etkinliklerinin nasıl oluşturulduğu.
  </Card>
</CardGroup>
