---
title: "Eseménykatalógus"
description: "A ThunderPhone által kibocsátott összes webhookesemény-típus."
---

Minden webhook törzse tartalmaz egy `type` mezőt, amelynek értéke az oldalon szereplő eseménytípusok egyike. Amikor feliratkozik egy
[végpontra](/hu/webhooks/endpoints), az `events` tömbnek tartalmaznia kell a
kívánt eseménytípusokat (vagy üresnek kell lennie, ha mindenre fel szeretne iratkozni —
kivéve a körönkénti eseményeket [`telephony.turn`](#telephony-turn) /
[`web.turn`](#web-turn), amelyeket csak azoknak a végpontoknak kézbesítünk,
amelyek kifejezetten megnevezik őket).

Ezeket az eseményeket két kézbesítési mód továbbítja:

* **Végpontkézbesítések** mindig **nem blokkoló** értesítések
  [újrapróbálkozásokkal](/hu/webhooks/overview): válaszoljon
  bármely 2xx kóddal; a boríték deduplikáláshoz tartalmaz egy `event_id` azonosítót.
* A **blokkoló** adatcserék csak a
  [régi, egyetlen URL-es webhookon](/hu/webhooks/overview) futnak: a
  [`telephony.incoming` / `web.incoming`](/hu/webhooks/call-incoming)
  konfigurációs kérés (webhook módú számok: 13 mp, egy újrapróbálkozással együtt;
  webhook módú widgetkulcsok: 10 mp), valamint a webhook módú
  [eszközhívás](/hu/tools/overview). Az Ön válasza
  alakítja az élő hívást.

Az alábbi példaterhek a végpontborítékot a vezetékes sorrendjében mutatják
(a kulcsok ábécérendben: `data`, `event_id`, `type`); a régi kézbesítések
ugyanazt a `data` adatot tartalmazzák `event_id` nélkül.

## Hívási események

### `telephony.incoming`

Akkor kerül elküldésre, amikor egy bejövő hívás eléri az Ön egyik
[telefonszámát](/api-reference/phone-numbers). A végpontkézbesítések
minden bejövő híváshoz elküldött, azonnali válasz nélküli értesítések,
függetlenül attól, hogy a szám ügynökhöz vagy webhookhoz van-e
konfigurálva. A hozzárendelt ügynök nélküli számok emellett a régi
webhookon kapják meg a **blokkoló** konfigurációs kérést — a teljes
kérés-/válaszsémát itt találja:
[`telephony.incoming` / `web.incoming`](/hu/webhooks/call-incoming).

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

| Mező | Típus | Leírás |
|-------|------|-------------|
| `agent_id` | integer \| null | A hívást kezelő ügynök, ha volt hozzárendelve |
| `agent_name` | string \| null | A hívást kezelő ügynök neve, ha volt hozzárendelve |

### `telephony.complete`

Akkor kerül elküldésre, amikor egy bejövő vagy kimenő telefonhívás véget ér. Nem blokkoló.
Tartalmazza az átiratot, a felvétel URL-jét, ha elérhető, valamint a számlázási összesítőt. A
hasznos teher sémáját itt találja:
[`telephony.complete` / `web.complete`](/hu/webhooks/call-complete).

| Mező | Típus | Leírás |
|-------|------|-------------|
| `agent_id` | integer \| null | A hívást kezelő ügynök, ha volt hozzárendelve |
| `agent_name` | string \| null | A hívást kezelő ügynök neve, ha volt hozzárendelve |

### `telephony.tool`

Akkor kerül elküldésre, miután egy telefonhívás meghív egy
[függvényeszközt](/hu/tools/overview). Nem blokkoló naplózási értesítés —
az eszköz már lefutott, amikor ez az esemény kézbesítésre kerül; lefedi
az Ön saját függvényeszközeit és a beépített `send_sms` eszközt (de nem
más beépített, tudásbázis-, alkalmazáskapcsolati vagy MCP-eszközöket). A
`send_sms` esetében mind az `arguments.to`, mind az `arguments.body`
értéke `[REDACTED]`. A befejezési átiratok is kitakarják ezeket; a
tartalmat és a címzettet a szervezeti hatókörű SMS-erőforrásból kérheti
le a válasz `message_id` értékével.

```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"
}
```

A `response` a végrehajtott eredmény: siker esetén `{"status": <http status>,
"response": <your endpoint's JSON>}`, hiba esetén pedig
`{"status": <status>, "error": "<message>"}`.

| Mező | Típus | Leírás |
|-------|------|-------------|
| `agent_id` | integer \| null | A hívást kezelő ügynök, ha volt hozzárendelve |
| `agent_name` | string \| null | A hívást kezelő ügynök neve, ha volt hozzárendelve |

### `telephony.turn`

Telefonhívás **folyamatban léte** közben kerül elküldésre, minden
beszédet tartalmazó fordulóhoz annak megtörténtekor — az ügynök kimondott
válaszaihoz és a hívó átírt fordulóihoz. Lehetővé teszi az élő
beszélgetés követését egyszerű webhookokon keresztül, a
[`GET /v1/calls/{call_id}/transcript`](/api-reference/calls#get-transcript)
lekérdezése helyett. Nem blokkoló.

<Note>
  **Kifejezett feliratkozás szükséges.** Minden más eseménytípustól
  eltérően a fordulóesemények soha nem kerülnek kézbesítésre üres
  `events` tömbön keresztül (feliratkozás mindenre). Egy végpont csak
  akkor kapja meg őket, ha az `events` listája kifejezetten tartalmazza
  a `telephony.turn` / `web.turn` értéket.
</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"
}
```

| Mező | Típus | Leírás |
|-------|------|-------------|
| `agent_id` | integer \| null | A hívást kezelő ügynök, ha volt hozzárendelve |
| `agent_name` | string \| null | A hívást kezelő ügynök neve, ha volt hozzárendelve |
| `position` | integer | A forduló indexe a hívási előzményekben — stabil azonosító a rendezéshez |
| `role` | string | `assistant` (ügynöki beszéd) vagy `user` (hívói beszéd) |
| `text` | string | A forduló átiratszövege, az esemény kibocsátásakor ismert állapot szerint |
| `entry_type` | string | A mögöttes előzménybejegyzés típusa: `completion` (ügynök), vagy `user_turn` / `span` (hívó) |
| `start_ms`, `end_ms` | integer | Hangeltolások ms-ban a hívás kezdetétől; csak akkor szerepelnek, ha a lejátszási időzítés már ismert volt az esemény kibocsátásakor |

<Note>
  A kézbesítés legalább egyszeri, és a fordulók **nem sorrendben** is
  érkezhetnek: szűrje a duplikátumokat a boríték `event_id` értéke
  alapján, és rendezzen `position` szerint. A hívói átiratok a
  kibocsátás után még finomodhatnak; a hívás utáni
  [`telephony.complete`](/hu/webhooks/call-complete) átirat a hiteles
  forrás. Csak kimondott fordulók kerülnek kibocsátásra — az
  eszközhívások, a suttogások és más belső bejegyzések soha nem jelennek
  meg ebben a folyamban.
</Note>

### `web.incoming`

A `telephony.incoming` webcsatornás megfelelője, amely akkor kerül
elküldésre, amikor egy [webes widget](/hu/widget/overview)-munkamenet vagy
egy szerkesztőbeli mikrofonteszt-hívás elindul. A végpontkézbesítések
minden webes munkamenethez azonnali válasz nélküli értesítések. A
`mode="webhook"` módban lévő publikálható kulcsok emellett a régi
webhookon kapják meg a **blokkoló** konfigurációs kérést — ennek a
blokkoló kérésnek eltérő struktúrája van (`origin_domain`,
`publishable_key_prefix`; nincsenek telefonszámok). Lásd:
[`telephony.incoming` / `web.incoming`](/hu/webhooks/call-incoming).

```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"
}
```

A `from_number` mindig a szó szerinti `"web"` érték. Webhook módú
widget-munkameneteknél a `to_number` üres (a munkamenet ügynökszáma a
konfiguráció után kerül hozzárendelésre); szerkesztőbeli
mikrofonteszt-hívásoknál az `origin_domain` és a
`publishable_key_prefix` üres.

| Mező | Típus | Leírás |
|-------|------|-------------|
| `agent_id` | integer \| null | A hívást kezelő ügynök, ha volt hozzárendelve |
| `agent_name` | string \| null | A hívást kezelő ügynök neve, ha volt hozzárendelve |

### `web.complete`

A `telephony.complete` webcsatornás megfelelője, amely a webes
widget-hívásokat (`direction: "web"`) és a szerkesztőbeli
mikrofonteszt-hívásokat (`direction: "test"`) fedi le. Nem blokkoló.
A hasznos teher struktúrája megegyezik a
[`telephony.complete`](/hu/webhooks/call-complete) struktúrájával, az
`origin_domain` mezővel kiegészítve, a `from_number` pedig `"web"`
értékre van állítva.

| Mező | Típus | Leírás |
|-------|------|-------------|
| `agent_id` | integer \| null | A hívást kezelő ügynök, ha volt hozzárendelve |
| `agent_name` | string \| null | A hívást kezelő ügynök neve, ha volt hozzárendelve |

<Note>
  A régi, egyetlen URL-es webhookon a szerkesztőbeli
  mikrofonteszt-hívások korábban `telephony.complete` típusként
  jelentek meg — ott csak a `direction: "web"` hívások használják a
  `web.complete` típust. A végpontrendszer a webes és teszthívásokat is
  `web.*` típusra képezi le. A korábbi hasznos terhek a régi
  `widget` vagy `mic` `direction` értékeket tartalmazhatják.
</Note>

### `web.tool`

A `telephony.tool` webcsatornás megfelelője. A `data` a
`from_number` / `to_number` helyett az `origin_domain` értéket
tartalmazza.

| Mező | Típus | Leírás |
|-------|------|-------------|
| `agent_id` | integer \| null | A hívást kezelő ügynök, ha volt hozzárendelve |
| `agent_name` | string \| null | A hívást kezelő ügynök neve, ha volt hozzárendelve |

### `web.turn`

A [`telephony.turn`](#telephony-turn) webcsatornás megfelelője, amely
a webes widget-hívásokat és a szerkesztőbeli mikrofonteszt-hívásokat
fedi le. A hasznos teher struktúrája megegyezik, de a
`from_number` / `to_number` helyett az `origin_domain` szerepel.
A `telephony.turn` eseményhez hasonlóan ehhez is **kifejezett
feliratkozás** szükséges — üres `events` tömbön keresztül soha nem
kerül kézbesítésre.

| Mező | Típus | Leírás |
|-------|------|-------------|
| `agent_id` | integer \| null | A hívást kezelő ügynök, ha volt hozzárendelve |
| `agent_name` | string \| null | A hívást kezelő ügynök neve, ha volt hozzárendelve |

### `call.transfer_completed`

Hívásonként egyszer küldve, egy
[hívásátirányítás](/hu/guides/call-transfers) végső eredményével: hideg átirányítás esetén, illetve a meleg átirányítás után fennmaradó emberi kapcsolattal, miután az ügynök kilép.
Nem blokkoló, és csak végpontokra kerül kézbesítésre (a régi, egyetlen URL-es webhookra soha). A hívás `telephony.complete` eseménye után érkezik:
amikor a szolgáltató átveszi a hívást vagy az átirányítás sikertelen, illetve amikor
ThunderPhone áthidalta a hívást, az áthidalás befejeződésekor.

```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"
}
```

| Mező | Típus | Leírás |
|-------|------|-------------|
| `call_id` | integer | Az átirányított hívás |
| `agent_id` | integer \| null | A hívást kezelő ügynök, ha volt hozzárendelve |
| `agent_name` | string \| null | A hívást kezelő ügynök, ha volt hozzárendelve |
| `transfer_outcome` | string | `refer_accepted`: a szolgáltató átvette a hívást. `bridged`: ThunderPhone maga tartotta kapcsolatban a hívót és a célállomást, vagy azért, mert a szolgáltató elutasította a hideg átirányítást, vagy mert a meleg átirányítás ügynöke kilépett. `bridge_unanswered`: a szolgáltató elutasította a hideg átirányítást, és a célállomás nem fogadta ThunderPhone saját hívását. `failed`: az átirányítás nem sikerült, és a hívás véget ért |
| `destination` | string \| null | Az a szám, amelyre a hívást átirányították |
| `sip_status` | integer \| null | A szolgáltató SIP-állapota, amikor elutasította a hideg átirányítást: `403` (például hívásátirányítás nélküli Twilio-trönk), `405` vagy `501`. `null`, ha a szolgáltató nem utasította el |
| `bridge_kind` | string \| null | Csak `bridged` esetén: `cold_fallback` (ThunderPhone által összekapcsolt, elutasított hideg átirányítás) vagy `warm` (a meleg átirányítás két résztvevője, miután az ügynök távozott) |
| `bridge_seconds` | integer \| null | Csak `bridged` esetén: a ThunderPhone által számlázott áthidalási idő másodpercben |
| `bridge_total_cents` | integer \| null | Csak `bridged` esetén: az áthidalás költsége USD-centben, az esetleges ingyenes hívásegyenleg levonása után, a hívás `billing_total_cents` összegétől külön számlázva |

Ugyanezek az értékek a [hívásobjektumon](/api-reference/calls#call-object)
is elérhetők `transfer_outcome`, `transfer_destination`, `transfer_sip_status`,
`transfer_bridge_kind`, `transfer_bridge_seconds` és
`transfer_bridge_total_cents` néven. Az `event_id` minden kézbesítéskor azonos
egy adott hívásnál, ezért egy ismételt jelentés nem hoz létre második eseményt.

---

## SMS-események

Az SMS-események a szervezet csatlakoztatott Twilio- vagy Telnyx-fiókján
keresztül küldött üzeneteket írják le. Az üzenet törzse kimarad, a `to` pedig
ki van takarva. Amikor szüksége van a tartalomra vagy a címzettre, kérje le a
szervezeti hatókörű üzenetet a
[`GET /v1/sms/{message_id}`](/api-reference/sms#retrieve-a-message) végponton.

### `sms.sent`

Akkor kerül elküldésre, amikor az ügyfél szolgáltatója elfogad egy kimenő SMS-kérést. Ez nem
a készülékre történő kézbesítésről szóló visszaigazolás.

```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`

Végleges szolgáltatói elutasítás után, az átmeneti hibák miatti újrapróbálkozások
kimerülésekor, illetve akkor kerül elküldésre, ha az eredmény véglegesen ismeretlen. Az `error_code` stabil
ThunderPhone-kód, az `error_message` pedig megadja az ügyfél teendőjét, ha rendelkezésre áll.
A `status: "unknown"` azt jelenti, hogy a szolgáltató esetleg elfogadta az SMS-t;
egyeztesse ezt a szolgáltatói naplóban, mert a ThunderPhone nem küldi el újra
automatikusan.

### `sms.received`

Bejövő SMS-ek támogatásához van fenntartva. A jelenlegi kiadásban nem kerülnek kibocsátásra
`sms.received` események. A bejövő szolgáltatói webhook konfigurációja és az aláírás
ellenőrzése külön érkezik.

---

## Hangesemények

Az egyéni hang létrehozása aszinkron. Ezek a nem blokkoló események lehetővé teszik, hogy
lekérdezés helyett egy végleges eredményre reagáljon a
[hangklón részleteinek végpontján](/api-reference/custom-voices#list-and-retrieve-clones).

A `voice.ready` és a `voice.failed` csak egy szervezetszintű, `events: []` beállítású
végpontra érkezik. Nem választhatók ki explicit eseményszűrőként.

### `voice.ready`

Akkor kerül elküldésre, amikor az egyéni hang feldolgozása befejeződik, és hozzárendelhető egy
ügynökhöz.

```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`

Akkor kerül elküldésre, amikor az egyéni hang feldolgozása végleges hibával leáll.

```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"
}
```

| Mező | Típus | Leírás |
|-------|------|-------------|
| `voice.id` | string | Az egyéni hang nyilvános azonosítója |
| `voice.name` | string | Az ügynök hangértéke `custom:<public_id>` formátumban |
| `voice.display_name` | string | A szervezet számára megjelenített hangnév |
| `voice.language` | string | A klón egyetlen nyelvi kódja |
| `voice.gender` | string | `male`, `female` vagy üres karakterlánc |
| `voice.status` | string | `ready` a `voice.ready` esetén; `failed` a `voice.failed` esetén |
| `voice.failure_reason` | string | Siker esetén üres; hiba esetén a feldolgozási hiba részletei |
| `voice.created_at`, `voice.updated_at` | timestamp | ISO 8601 időbélyegek |
| `reason` | string | A hiba részletei; csak `voice.failed` esetén van jelen |

---

## Minőségi események

### `call.graded`

Akkor kerül elküldésre, amikor egy hívás [AI-értékelési futtatása](/api-reference/calls#ai-call-grading)
befejeződik. Nem blokkoló.

```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"
}
```

| Mező | Típus | Leírás |
|-------|------|-------------|
| `agent_id` | integer \| null | A hívást kezelő ügynök, ha volt hozzárendelve |
| `agent_name` | string \| null | A hívást kezelő ügynök, ha volt hozzárendelve |
| `grade.id` | integer | Értékelés azonosítója |
| `grade.score` | integer \| null | 0–100 |
| `grade.call_outcome` | string | `success`, `failure`, `unknown` vagy `no_conversation` |
| `grade.summary` | string | Egybekezdéses összefoglaló |
| `grade.detected_issues` | array | Az értékelő által talált problémák szövegei |
| `grade.status` | string | Mindig `completed` — csak a befejezett futások bocsátanak ki eseményt |
| `grade.grader_model` | string | Melyik értékelő készítette az eredményt (pl. `heuristic-v1`) |
| `grade.graded_at`, `grade.created_at` | timestamp | |
| `report` | object \| null | Az ügyfélnek szóló [hívásjelentés](/api-reference/calls#call-report): eredménycímke, figyelmet igényel jelző és indok, hívó, egysoros összefoglaló, hívói élmény. Egy korai heurisztikus értékelésnél `null`, vagy `pending` jelentés, amelynek mezői helyőrzők; a teljes értékelés eseménye tartalmazza a befejezett jelentést |

<Note>
  Egy hívás többször is értékelhető — a gyors heurisztikus értékelést
  gyakran teljes modellértékelés követi, amint elérhetővé válik a
  felvétel, és manuális újraértékelés is lehetséges. Minden befejezett
  futtatás saját `call.graded` eseményt bocsát ki; a legfrissebb
  `graded_at` értéket tekintse hitelesnek.
</Note>

### `call.data_extracted`

Akkor kerül elküldésre, amikor a strukturált adatkinyerés sikeresen befejeződik, beleértve a
`telephony.complete` / `web.complete` utáni késői újrapróbálkozást vagy a
[`POST /v1/calls/{call_id}/extract`](/api-reference/calls#run-data-extraction) útján indított manuális újrafuttatást.
Nem blokkoló.

Blokkoló kinyerési módban a befejezési esemény általában legfeljebb a
75 másodperces kinyerési keretre vár. Ha a kinyerési munkafolyamat elvész,
az éles környezetbeli véglegesítési feldolgozás (ötpercenként) kibocsát egy
befejezési eseményt, amelynek `blocking_deadline_at` értéke lejárt, mielőtt
újabb kinyerési kísérletet indítana. Egy későbbi siker külön eseményként
kerül kézbesítésre.

<Warning>
  A kinyert értékek a modell beszélgetésértelmezését tükrözik. Minden
  nem null érték tartalmazza az alapjául szolgáló idézetet, beszélői szerepet
  és fordulóindexet, valamint egy futásszintű ellenőrzési jelzőt. Pénzzel,
  személyazonossággal vagy hozzáféréssel kapcsolatos döntések előtt
  ellenőrizze az eredményt.
</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"
}
```

| Mező | Típus | Leírás |
|-------|------|-------------|
| `agent_id` | integer \| null | A hívást kezelő ügynök, ha volt hozzárendelve |
| `agent_name` | string \| null | A hívást kezelő ügynök, ha volt hozzárendelve |
| `summary` | string \| null | A befejezett [hívásösszefoglaló](/hu/webhooks/call-complete), ha az ügynöknél be van kapcsolva a **Hívásösszefoglaló létrehozása**, így a késői kinyerési esemény a befejezési időablakból kimaradt összefoglalót is kézbesíti; egyébként `null`. Az összefoglalóval, de kinyerési mezők nélkül rendelkező ügynökök soha nem bocsátják ki ezt az eseményt: késői összefoglalóhoz használja a `GET /v1/calls/{call_id}` végpontot |
| `extracted_data.status` | string | Ennél az eseménynél mindig `completed` |
| `extracted_data.fields` | object | A konfigurált kinyerési mezőkulcsok alapján kulcsolt értékek; a nem elérhető értékek `null` |
| `extracted_data.evidence` | object | A kinyerési mezők alapján kulcsolt bizonyítékok. Egy nem null érték tartalmazza a pontos, strukturálisan ellenőrzött idézetet (legfeljebb 1 000 karakter), a `speaker_role` értéket (`caller` vagy `agent`) és a `turn_index` értéket; a modell által visszaadott hosszabb idézetek levágás helyett elutasításra kerülnek, és a bizonyíték mindig `null`, ha a mezője `null` |
| `extracted_data.verification` | string | Csak akkor `verified`, ha a független bizonyítékellenőrzési lépés minden jelölt mezőhöz pontosan egy érvényes döntést adott vissza. Az `unavailable` azt jelenti, hogy a lépés meghiúsult, időtúllépés történt, nem állt rendelkezésre elegendő keret, vagy hibás formátumú, illetve részleges kimenetet adott vissza. A teljesen nem elérhető lépés megőrzi az ügyfél általi felülvizsgálathoz a strukturálisan megalapozott értékeket. Részleges kimenet esetén az érvényes döntések alkalmazásra kerülnek, és minden olyan jelölt mező nullázódik, amelyhez nincs pontosan egy érvényes döntés |
| `extracted_data.field_reasons` | object | A strukturális megalapozás vagy a független ellenőrző által nullázott mezők alapján kulcsolt indokok |
| `extracted_data.schema_version` | string | Az ehhez a kinyeréshez használt pontos mezőséma kivonata |
| `extracted_at` | timestamp | ISO 8601 szerinti befejezési idő |
| `model` | string | A kinyeréshez használt modell |

### `campaign.completed`

Egyszer kerül elküldésre, amikor egy kampány állapota `running` értékről
`completed` értékre vált, függetlenül attól, hogy az ütemezése ért véget, vagy minden
kapcsolat elérte a végállapotot. A futtató újrapróbálkozásai nem bocsátanak ki újabb
eseményt. Ez a szervezetszintű életciklus-esemény csak szervezeti hatókörű
végpontokhoz kerül kézbesítésre, ügynökszintű végpontokhoz nem. Nem blokkoló.

```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"
}
```

A négy eredményszám egymást kizárja, és összegük `contacts_total`:
a `completed` a sikeres kapcsolatokat tartalmazza; a `no_answer` azon végleges
sikertelen/kimerült kapcsolatokat tartalmazza, amelyek végső eredménye válasz nélküli volt;
a `failed` minden más végleges sikertelen/kimerült kapcsolatot tartalmaz; a `remaining`
pedig a függőben lévő, ütemezett vagy éppen hívott kapcsolatokat tartalmazza. Az újrapróbálkozásra
váró kapcsolat `remaining`, még akkor is, ha a legutóbbi kísérlet válasz nélküli volt.
A folyamatban lévő hívások egyeztetése az egyszeri befejezési pillanatfelvétel előtt történik.
A `started_at` a konfigurált kampányindítási idő, vagy a kampány létrehozásának időpontja,
ha nem volt indítási idő konfigurálva.

### `issue.reported`

Akkor kerül elküldésre, amikor létrejön egy [problémajelentés](/api-reference/issue-reports) —
akár egy felhasználó rögzíti a kezelőfelületről (`source: "user"`), akár
a hívásértékelés hozza létre automatikusan (`source: "system"`). Nem blokkoló.

```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"
}
```

| Mező | Típus | Leírás |
|-------|------|-------------|
| `agent_id` | integer \| null | A hívást kezelő ügynök, ha volt hozzárendelve |
| `agent_name` | string \| null | A hívást kezelő ügynök, ha volt hozzárendelve |
| `issue_report.severity` | string | `critical`, `warning` vagy `info` |
| `issue_report.status` | string | `open` vagy `resolved` |
| `issue_report.source` | string | `user` (a kezelőfelületről rögzítve) vagy `system` (értékelés által létrehozva) |

<Note>
  Egy hívás újraértékelése újraépíti a rendszer által létrehozott
  problémajelentéseket, ami ismét kibocsátja a `issue.reported` eseményt
  az újra létrehozott jelentésekhez. Ha alapvető problémánként csak egy
  értesítést szeretne, deduplikáljon `call_id` + `title` alapján.
</Note>

### `issue.escalated`

Akkor kerül elküldésre, amikor egy problémamintát munkatársi felülvizsgálatra
küldenek a ThunderPhonehoz: a **Jelentés a ThunderPhonenak** művelet után, vagy
amikor a Javítás AI-val nem tud ügyféloldali javítást megerősíteni, és automatikusan
továbbítja a problémát. Ezt az eseményt csak szervezetszintű végpontok kapják meg.

```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"
}
```

| Mező | Típus | Leírás |
|-------|------|-------------|
| `automatic` | boolean | `true` automatikus eszkaláció esetén; `false` manuális eszkaláció esetén |
| `cluster_id` | UUID | Eszkalált problémaminta |
| `escalation_id` | UUID | Eszkalációs rekord |
| `status` | string | Az esemény kibocsátásakor `open` |

Ez egy értesítés, nem a bizonyítékcsomag. A `cluster_id` használatával kapcsolhatja
össze a problémamintával. Lásd: [Jelentés a ThunderPhonenak](/hu/guides/issues).

---

## Teszthívási események

### `test-call.completed`

Akkor kerül elküldésre, amikor egy
[teszthívás-futtatás](/api-reference/test-calls#test-call-run-object)
végső állapotba kerül — `completed` vagy `failed`, beleértve azokat a futtatásokat is,
amelyek az indításkor meghiúsultak, és soha nem hoztak létre hívást. Nem blokkoló.
Hasznos a kötegelt CI-futtatások csevegési/értesítési rendszereihez való kapcsolásához.

```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"
}
```

| Mező | Típus | Leírás |
|-------|------|-------------|
| `agent_id` | integer \| null | A hívást kezelő ügynök, ha hozzá volt rendelve |
| `agent_name` | string \| null | A hívást kezelő ügynök, ha hozzá volt rendelve |
| `test_call_run.target_type` | string | `agent` vagy `phone_number` |
| `test_call_run.target_id` | integer | A futtatás célzott ügynökazonosítója vagy telefonszám-azonosítója, a `target_type` értékének megfelelően |
| `test_call_run.status` | string | `completed` vagy `failed` |
| `test_call_run.call_id` | integer \| null | `null`, ha a futtatás a hívás indítása előtt meghiúsult |
| `test_call_run.error_message` | string | Siker esetén üres |

---

## Riasztási események

### `alert.triggered`

Akkor kerül elküldésre, amikor egy [riasztási szabály](/hu/guides/alerts), amelynél engedélyezve van a **Kézbesítés fejlesztői webhookokra**
csatorna, átlépi a küszöbértékét. Nem blokkoló. Egy szabály egyszer aktiválódik, majd
betartja a várakozási idejét, így egy tartós küszöbsértés várakozási időablakonként egy eseményt hoz létre.

```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"
}
```

| Mező | Típus | Leírás |
|-------|------|-------------|
| `event_id` (a `data` mezőben) | UUID | A riasztás **aktiválási** azonosítója — eltér a boríték kézbesítési `event_id` értékétől |
| `rule_id`, `rule_name` | UUID, string | Az aktiválódott szabály |
| `metric` | string | `success_rate`, `failure_rate`, `avg_score`, `call_volume` vagy `suite_regression` |
| `comparator` | string | `lt`, `lte`, `gt` vagy `gte` |
| `metric_value` | number | A metrika értéke az értékelési ablakban, amikor a szabály aktiválódott |
| `threshold` | number | A konfigurált küszöbérték |
| `window_hours` | integer | Visszatekintő értékelési ablak |
| `fired_at` | timestamp | |

A szabályok, metrikák, várakozási idők, valamint az e-mail- és Slack-csatornák létrehozásáról lásd a [Riasztások útmutatót](/hu/guides/alerts).

---

## Migrációs események

### `migration.call.complete`

Akkor kerül elküldésre, amikor egy
[`POST /v1/migrations/{id}/calls`](/api-reference/migration-calls) végponton keresztül indított hívás véget ér,
függetlenül attól, hogy melyik platform kezelte. Nem blokkoló. A hívás befejezése
után legfeljebb körülbelül 5 perccel érkezik meg. A `data` tartalmazza a
[`telephony.complete`](/hu/webhooks/call-complete) összes mezőjét, valamint egy `migration` blokkot. A
ThunderPhone által indított hívás a szokásos módon `telephony.complete` eseményt is küld,
ugyanazzal a `call_id` értékkel. A másik platformon futó hívás, amely 2
óra elteltével sem ért véget, vagy amelynek migrációja előbb befejeződött, illetve elvesztette a kulcsát,
`status: "unknown"` értékkel és átirat nélkül kerül elküldésre.

```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"
}
```

| Mező | Típus | Leírás |
|-------|------|-------------|
| `migration.id` | UUID | A migráció |
| `migration.routing_id` | UUID | Az átirányított hívás azonosítója, amelyet a hívás indításakor kapott vissza |
| `migration.arm` | string | `ours` (a ThunderPhone indította) vagy `vendor` (a másik platform indította) |
| `migration.vendor` | string | `retell`, `vapi`, `elevenlabs` vagy `bland` |
| `migration.vendor_call_id` | string \| null | A másik platform hívásazonosítója; `ours` esetén `null` |
| `migration.metadata` | object | A hívás indításakor elküldött `metadata` |
| `migration.vendor_cost_usd` | string \| null | A másik platform által jelentett hívásköltség, ha jelentett ilyet |
| `call_id` | integer \| null | A ThunderPhone hívásazonosítója; `vendor` esetén `null` |
| `status` | string | `vendor` esetén: `completed`, ha a hívott fél beszélt, `failed`, ha nem beszélt, illetve a fentiek szerint `unknown`. `ours` esetén: a `telephony.complete` szerint |

`vendor` hívás esetén a ThunderPhone nem rendelkezik számlázási vagy kinyerési adatokkal:
a `billable_minutes`, a `billing_total_cents` és az `extracted_data` értéke `null`,
a `product` és a `voice` üres, a `recording_mode` értéke `vendor`, a
`recording_url` pedig a másik platform hivatkozása, ha megadott ilyet.

### `migration.rollback`

Akkor kerül elküldésre, amikor egy migráció fokozatos átváltása önállóan
minden hívást visszahelyez a másik platformra: 15 percen belül 3 hívásnak nem
sikerült kapcsolódnia a ThunderPhone-hoz, 2 ThunderPhone-hoz irányított hívás
az AI-ügynök válasza előtt véget ért, vagy a ThunderPhone feladateredmény-aránya
a konfigurált különbségnél nagyobb mértékben maradt el a másik platformétól.
Nem blokkoló, visszaállításonként egyszer kerül elküldésre. Ezt követően a
ThunderPhone részesedése 0%, és a migráció szünetel, amíg valaki újra nem
indítja azt az AI-ügynök Migráció lapján. A payload nem tartalmaz
telefonszámokat, átiratokat vagy hívásazonosítókat.

```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"
}
```

| Mező | Típus | Leírás |
|-------|------|-------------|
| `migration_id` | UUID | A migráció |
| `vendor` | string | `retell`, `vapi`, `elevenlabs` vagy `bland` |
| `reason` | string | `ours_failed_burst` (3 sikertelen kapcsolat 15 percen belül), `dropped_calls` (2 hívás az AI-ügynök válasza előtt ért véget, 30 percen belül) vagy `rate_gap` (a feladateredmény-arány különbsége oldalanként legalább `rollback_min_calls` értékelt hívás esetén) |
| `previous_percent` | integer | A ThunderPhone hívásrészesedése a visszaállítás előtt |
| `ours_percent` | integer | Mindig `0` |
| `step` | integer \| null | Az ütemezési lépés, amelyen a migráció volt (0-alapú) |
| `ours` / `theirs` | object \| null | Az aktuális lépés értékelt hívásai és azok sikerességi aránya; ha a lépésben túl kevés a hívás, a `theirs` az elmúlt 30 napot jelentheti. Ha nem voltak ilyenek, `null` |
| `ours_failed` | integer | Az elmúlt 15 percben számított sikertelen kapcsolatok |
| `dropped` | integer | Az elmúlt 30 percben megszakadtként számított hívások |
| `rolled_back_at` | timestamp | |

---

## Kapcsolódó elemek

<CardGroup cols={2}>
  <Card title="telephony.incoming / web.incoming" icon="phone" href="/hu/webhooks/call-incoming">
    A blokkoló bejövőhívás-adatcsomag, amelyre válaszolnia kell.
  </Card>
  <Card title="telephony.complete / web.complete" icon="phone-slash" href="/hu/webhooks/call-complete">
    Hívás utáni átirat és metrikák.
  </Card>
  <Card title="Webhook-végpontok" icon="bolt" href="/hu/webhooks/endpoints">
    Iratkoztasson fel egy URL-t ezen események egy részhalmazára.
  </Card>
  <Card title="Funkcióeszközök" icon="screwdriver-wrench" href="/hu/tools/overview">
    A `telephony.tool` / `web.tool` események létrehozásának módja.
  </Card>
</CardGroup>
