---
title: "Κατάλογος συμβάντων"
description: "Όλοι οι τύποι συμβάντων webhook που εκπέμπει το ThunderPhone."
---

Κάθε σώμα webhook έχει ένα πεδίο `type` του οποίου η τιμή είναι ένας από τους τύπους
συμβάντων αυτής της σελίδας. Όταν εγγράφεστε σε ένα
[τελικό σημείο](/el/webhooks/endpoints), ο πίνακας `events` πρέπει να περιέχει τους
τύπους συμβάντων που θέλετε (ή να είναι κενός για εγγραφή σε όλα —
εκτός από τα συμβάντα ανά σειρά [`telephony.turn`](#telephony-turn) /
[`web.turn`](#web-turn), τα οποία παραδίδονται μόνο σε τελικά σημεία που
τα ονομάζουν ρητά).

Δύο τρόποι παράδοσης μεταφέρουν αυτά τα συμβάντα:

* Οι **παραδόσεις σε τελικά σημεία** είναι πάντα **μη αποκλειστικές** ειδοποιήσεις
  με [επαναλήψεις](/el/webhooks/overview): απαντήστε με
  οποιονδήποτε κωδικό 2xx· το περιτύλιγμα περιέχει ένα `event_id` για αποδιπλοποίηση.
* Οι **αποκλειστικές** ανταλλαγές εκτελούνται μόνο στο
  [παλαιού τύπου webhook ενός URL](/el/webhooks/overview): το αίτημα
  διαμόρφωσης [`telephony.incoming` / `web.incoming`](/el/webhooks/call-incoming)
  (αριθμοί σε λειτουργία webhook και κλειδιά widget, χρονικό όριο 10 δευτ.)
  και η [δρομολόγηση εργαλείων](/el/tools/overview) σε λειτουργία webhook.
  Η απάντησή σας διαμορφώνει τη ζωντανή κλήση.

Τα παρακάτω παραδείγματα payload δείχνουν το περιτύλιγμα τελικού σημείου στη σειρά
μετάδοσης (κλειδιά ταξινομημένα αλφαβητικά: `data`, `event_id`, `type`)· οι
παλαιού τύπου παραδόσεις μεταφέρουν τα ίδια `data` χωρίς `event_id`.

## Συμβάντα κλήσεων

### `telephony.incoming`

Αποστέλλεται όταν μια εισερχόμενη κλήση φτάνει σε έναν από τους
[αριθμούς τηλεφώνου σας](/api-reference/phone-numbers). Οι παραδόσεις σε endpoint είναι
ειδοποιήσεις fire-and-forget που αποστέλλονται για **κάθε** εισερχόμενη κλήση, ανεξάρτητα
από το αν ο αριθμός έχει ρυθμιστεί για πράκτορα ή webhook. Οι αριθμοί χωρίς
εκχωρημένο πράκτορα λαμβάνουν επιπλέον το αίτημα διαμόρφωσης **blocking**
στο παλαιότερο webhook — ανατρέξτε στο
[`telephony.incoming` / `web.incoming`](/el/webhooks/call-incoming) για
το πλήρες σχήμα αιτήματος / απόκρισης.

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

| Πεδίο | Τύπος | Περιγραφή |
|-------|------|-------------|
| `agent_id` | integer \| null | Πράκτορας που χειρίστηκε την κλήση, όταν είχε εκχωρηθεί |
| `agent_name` | string \| null | Πράκτορας που χειρίστηκε την κλήση, όταν είχε εκχωρηθεί |

### `telephony.complete`

Αποστέλλεται όταν ολοκληρώνεται μια εισερχόμενη ή εξερχόμενη τηλεφωνική κλήση. Μη αποκλειστικό.
Περιλαμβάνει την απομαγνητοφώνηση, το URL εγγραφής όταν είναι διαθέσιμο και τη σύνοψη χρέωσης. Ανατρέξτε στο
[`telephony.complete` / `web.complete`](/el/webhooks/call-complete) για
το σχήμα ωφέλιμου φορτίου.

| Πεδίο | Τύπος | Περιγραφή |
|-------|------|-------------|
| `agent_id` | integer \| null | Πράκτορας που χειρίστηκε την κλήση, όταν είχε εκχωρηθεί |
| `agent_name` | string \| null | Πράκτορας που χειρίστηκε την κλήση, όταν είχε εκχωρηθεί |

### `telephony.tool`

Αποστέλλεται αφού μια τηλεφωνική κλήση καλέσει ένα
[εργαλείο συνάρτησης](/el/tools/overview). Μη αποκλειστική ειδοποίηση ελέγχου —
το εργαλείο έχει ήδη εκτελεστεί όταν παραδίδεται αυτό το συμβάν· καλύπτει
τα δικά σας εργαλεία συνάρτησης (όχι ενσωματωμένα εργαλεία, εργαλεία βάσης γνώσεων,
σύνδεσης εφαρμογών ή MCP).

```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` είναι το αποτέλεσμα που εκτελέστηκε: `{"status": <http status>,
"response": <your endpoint's JSON>}` σε περίπτωση επιτυχίας ή
`{"status": <status>, "error": "<message>"}` σε περίπτωση αποτυχίας.

| Πεδίο | Τύπος | Περιγραφή |
|-------|------|-------------|
| `agent_id` | integer \| null | Πράκτορας που χειρίστηκε την κλήση, όταν είχε εκχωρηθεί |
| `agent_name` | string \| null | Πράκτορας που χειρίστηκε την κλήση, όταν είχε εκχωρηθεί |

### `telephony.turn`

Αποστέλλεται ενώ μια τηλεφωνική κλήση βρίσκεται **σε εξέλιξη**, μία φορά για κάθε
σειρά ομιλίας καθώς συμβαίνει — τις προφορικές ολοκληρώσεις του πράκτορα και
τις απομαγνητοφωνημένες σειρές του καλούντος. Σας επιτρέπει να παρακολουθείτε τη ζωντανή συνομιλία
μέσω απλών webhooks αντί να κάνετε polling στο
[`GET /v1/calls/{call_id}/transcript`](/api-reference/calls#get-transcript).
Μη αποκλειστικό.

<Note>
  **Απαιτείται ρητή εγγραφή.** Σε αντίθεση με κάθε άλλο τύπο συμβάντος,
  τα συμβάντα σειράς δεν παραδίδονται ποτέ μέσω ενός κενού πίνακα `events`
  (εγγραφή σε όλα). Ένα endpoint τα λαμβάνει μόνο όταν η λίστα `events`
  περιέχει ρητά το `telephony.turn` / `web.turn`.
</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"
}
```

| Πεδίο | Τύπος | Περιγραφή |
|-------|------|-------------|
| `agent_id` | integer \| null | Πράκτορας που χειρίστηκε την κλήση, όταν είχε εκχωρηθεί |
| `agent_name` | string \| null | Πράκτορας που χειρίστηκε την κλήση, όταν είχε εκχωρηθεί |
| `position` | integer | Ο δείκτης της σειράς στο ιστορικό κλήσης — σταθερό αναγνωριστικό για ταξινόμηση |
| `role` | string | `assistant` (ομιλία πράκτορα) ή `user` (ομιλία καλούντος) |
| `text` | string | Το κείμενο απομαγνητοφώνησης της σειράς όπως είναι γνωστό τη στιγμή της εκπομπής |
| `entry_type` | string | Ο υποκείμενος τύπος καταχώρισης ιστορικού: `completion` (πράκτορας) ή `user_turn` / `span` (καλών) |
| `start_ms`, `end_ms` | integer | Μετατοπίσεις ήχου σε ms από την έναρξη της κλήσης· υπάρχουν μόνο όταν ο χρονισμός αναπαραγωγής ήταν ήδη γνωστός τη στιγμή της εκπομπής |

<Note>
  Η παράδοση γίνεται τουλάχιστον μία φορά και οι σειρές μπορεί να φτάσουν **εκτός σειράς**:
  καταργήστε τα διπλότυπα βάσει του `event_id` του περιβλήματος και ταξινομήστε βάσει `position`. Οι
  απομαγνητοφωνήσεις του καλούντος μπορεί ακόμη να βελτιωθούν μετά την εκπομπή· η απομαγνητοφώνηση
  [`telephony.complete`](/el/webhooks/call-complete) μετά την κλήση είναι
  η έγκυρη. Εκπέμπονται μόνο προφορικές σειρές — κλήσεις εργαλείων, ψίθυροι και
  άλλες εσωτερικές καταχωρίσεις δεν εμφανίζονται ποτέ σε αυτή τη ροή.
</Note>

### `web.incoming`

Το ισοδύναμο του `telephony.incoming` για το κανάλι web, αποστέλλεται όταν ξεκινά
μια συνεδρία [widget web](/el/widget/overview) ή μια δοκιμαστική κλήση μικροφώνου του builder.
Οι παραδόσεις σε endpoint είναι fire-and-forget για κάθε συνεδρία web.
Τα δημοσιεύσιμα κλειδιά σε `mode="webhook"` λαμβάνουν επιπλέον το αίτημα διαμόρφωσης
**blocking** στο παλαιότερο webhook — αυτό το αίτημα blocking έχει διαφορετική
μορφή (`origin_domain`, `publishable_key_prefix`· χωρίς αριθμούς τηλεφώνου). Ανατρέξτε στο
[`telephony.incoming` / `web.incoming`](/el/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"
}
```

Το `from_number` είναι πάντα η κυριολεκτική τιμή `"web"`. Για συνεδρίες widget
σε λειτουργία webhook, το `to_number` είναι κενό (ο αριθμός πράκτορα της συνεδρίας εκχωρείται
μετά τη διαμόρφωση)· για δοκιμαστικές κλήσεις μικροφώνου του builder, τα `origin_domain` και
`publishable_key_prefix` είναι κενά.

| Πεδίο | Τύπος | Περιγραφή |
|-------|------|-------------|
| `agent_id` | integer \| null | Πράκτορας που χειρίστηκε την κλήση, όταν είχε εκχωρηθεί |
| `agent_name` | string \| null | Πράκτορας που χειρίστηκε την κλήση, όταν είχε εκχωρηθεί |

### `web.complete`

Το ισοδύναμο του `telephony.complete` για το κανάλι web, που καλύπτει κλήσεις
widget web (`direction: "web"`) και δοκιμαστικές κλήσεις μικροφώνου του builder
(`direction: "test"`). Μη αποκλειστικό. Έχει την ίδια μορφή ωφέλιμου φορτίου με το
[`telephony.complete`](/el/webhooks/call-complete), καθώς και το `origin_domain`,
με το `from_number` ορισμένο σε `"web"`.

| Πεδίο | Τύπος | Περιγραφή |
|-------|------|-------------|
| `agent_id` | integer \| null | Πράκτορας που χειρίστηκε την κλήση, όταν είχε εκχωρηθεί |
| `agent_name` | string \| null | Πράκτορας που χειρίστηκε την κλήση, όταν είχε εκχωρηθεί |

<Note>
  Στο παλαιότερο webhook με ένα μόνο URL, οι δοκιμαστικές κλήσεις μικροφώνου του builder
  ιστορικά αναφέρονται ως `telephony.complete` — μόνο οι κλήσεις με `direction:
  "web"` χρησιμοποιούν εκεί τον τύπο `web.complete`. Το σύστημα endpoint
  αντιστοιχίζει τόσο τις κλήσεις web όσο και τις δοκιμαστικές κλήσεις σε `web.*`. Τα
  ιστορικά ωφέλιμα φορτία ενδέχεται να περιέχουν τις παλαιότερες τιμές `direction`
  `widget` ή `mic`.
</Note>

### `web.tool`

Το ισοδύναμο του `telephony.tool` για το κανάλι web. Το `data` περιέχει το
`origin_domain` αντί για `from_number` / `to_number`.

| Πεδίο | Τύπος | Περιγραφή |
|-------|------|-------------|
| `agent_id` | integer \| null | Πράκτορας που χειρίστηκε την κλήση, όταν είχε εκχωρηθεί |
| `agent_name` | string \| null | Πράκτορας που χειρίστηκε την κλήση, όταν είχε εκχωρηθεί |

### `web.turn`

Το ισοδύναμο για το κανάλι web του [`telephony.turn`](#telephony-turn),
που καλύπτει κλήσεις widget web και δοκιμαστικές κλήσεις μικροφώνου του builder. Ίδια μορφή
ωφέλιμου φορτίου, με `origin_domain` αντί για `from_number` / `to_number`.
Όπως το `telephony.turn`, απαιτεί **ρητή εγγραφή** — δεν
παραδίδεται ποτέ μέσω ενός κενού πίνακα `events`.

| Πεδίο | Τύπος | Περιγραφή |
|-------|------|-------------|
| `agent_id` | integer \| null | Πράκτορας που χειρίστηκε την κλήση, όταν είχε εκχωρηθεί |
| `agent_name` | string \| null | Πράκτορας που χειρίστηκε την κλήση, όταν είχε εκχωρηθεί |

---

## Συμβάντα φωνής

Η δημιουργία προσαρμοσμένης φωνής είναι ασύγχρονη. Αυτά τα μη αποκλειστικά συμβάντα σάς επιτρέπουν να
αντιδράτε σε ένα τελικό αποτέλεσμα αντί να υποβάλλετε επαναλαμβανόμενα αιτήματα στο
[τελικό σημείο λεπτομερειών κλώνου](/api-reference/custom-voices#list-and-retrieve-clones).

Τα `voice.ready` και `voice.failed` παραδίδονται μόνο σε ένα τελικό σημείο για ολόκληρο τον οργανισμό με
`events: []`. Δεν μπορούν να επιλεγούν ως ρητά φίλτρα συμβάντων.

### `voice.ready`

Αποστέλλεται όταν μια προσαρμοσμένη φωνή ολοκληρώνει την επεξεργασία και μπορεί να εκχωρηθεί σε έναν
πράκτορα.

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

Αποστέλλεται όταν η επεξεργασία προσαρμοσμένης φωνής καταλήγει σε μόνιμη αποτυχία.

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

| Πεδίο | Τύπος | Περιγραφή |
|-------|------|-------------|
| `voice.id` | string | Δημόσιο αναγνωριστικό προσαρμοσμένης φωνής |
| `voice.name` | string | Τιμή φωνής πράκτορα στη μορφή `custom:<public_id>` |
| `voice.display_name` | string | Όνομα φωνής για τον οργανισμό |
| `voice.language` | string | Κωδικός μίας γλώσσας του κλώνου |
| `voice.gender` | string | `male`, `female` ή κενή συμβολοσειρά |
| `voice.status` | string | `ready` για `voice.ready`· `failed` για `voice.failed` |
| `voice.failure_reason` | string | Κενό σε περίπτωση επιτυχίας· λεπτομέρεια αποτυχίας επεξεργασίας σε περίπτωση αποτυχίας |
| `voice.created_at`, `voice.updated_at` | timestamp | Χρονοσημάνσεις ISO 8601 |
| `reason` | string | Λεπτομέρεια αποτυχίας· υπάρχει μόνο στο `voice.failed` |

---

## Συμβάντα ποιότητας

### `call.graded`

Αποστέλλεται κάθε φορά που ολοκληρώνεται μια [εκτέλεση αξιολόγησης AI](/api-reference/calls#ai-call-grading)
για μια κλήση. Δεν προκαλεί αποκλεισμό.

```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…"
    }
  },
  "event_id": "7c1d2e3f-4a5b-4c6d-8e9f-0a1b2c3d4e5f",
  "type": "call.graded"
}
```

| Πεδίο | Τύπος | Περιγραφή |
|-------|------|-------------|
| `agent_id` | integer \| null | Πράκτορας που χειρίστηκε την κλήση, όταν είχε ανατεθεί κάποιος |
| `agent_name` | string \| null | Πράκτορας που χειρίστηκε την κλήση, όταν είχε ανατεθεί κάποιος |
| `grade.id` | integer | Αναγνωριστικό αξιολόγησης |
| `grade.score` | integer \| null | 0–100 |
| `grade.call_outcome` | string | `success`, `failure`, `unknown` ή `no_conversation` |
| `grade.summary` | string | Σύνοψη μίας παραγράφου |
| `grade.detected_issues` | array | Συμβολοσειρές ζητημάτων που εντόπισε ο αξιολογητής |
| `grade.status` | string | Πάντα `completed` — εκπέμπονται μόνο ολοκληρωμένες εκτελέσεις |
| `grade.grader_model` | string | Αξιολογητής που παρήγαγε το αποτέλεσμα, π.χ. `heuristic-v1` |
| `grade.graded_at`, `grade.created_at` | timestamp | |

<Note>
  Μια κλήση μπορεί να αξιολογηθεί περισσότερες από μία φορές — μια γρήγορη ευρετική αξιολόγηση
  ακολουθείται συχνά από μια πλήρη αξιολόγηση μοντέλου μόλις η εγγραφή γίνει
  διαθέσιμη, ενώ είναι δυνατές και μη αυτόματες επαναξιολογήσεις. Κάθε ολοκληρωμένη εκτέλεση
  εκπέμπει το δικό της συμβάν `call.graded`; θεωρήστε το πιο πρόσφατο `graded_at`
  ως έγκυρο.
</Note>

### `call.data_extracted`

Αποστέλλεται κάθε φορά που ολοκληρώνεται επιτυχώς η εξαγωγή δομημένων δεδομένων, συμπεριλαμβανομένης μιας
καθυστερημένης επανάληψης μετά από `telephony.complete` / `web.complete` ή μιας μη αυτόματης επανεκτέλεσης μέσω
[`POST /v1/calls/{call_id}/extract`](/api-reference/calls#run-data-extraction).
Δεν προκαλεί αποκλεισμό.

Σε λειτουργία εξαγωγής με αποκλεισμό, το συμβάν ολοκλήρωσης συνήθως δεν αναμένει περισσότερο
από τον προϋπολογισμό εξαγωγής των 75 δευτερολέπτων. Αν χαθεί η διεργασία worker εξαγωγής,
η εκκαθάριση οριστικοποίησης παραγωγής, κάθε πέντε λεπτά, απελευθερώνει μια
ολοκλήρωση της οποίας το `blocking_deadline_at` έχει παρέλθει πριν ξεκινήσει άλλη
προσπάθεια εξαγωγής. Μια μεταγενέστερη επιτυχία παραδίδεται ξεχωριστά ως αυτό το συμβάν.

<Warning>
  Οι εξαγόμενες τιμές αποτελούν ερμηνεία της συνομιλίας από ένα μοντέλο. Κάθε
  τιμή που δεν είναι null περιλαμβάνει το απόσπασμα, τον ρόλο ομιλητή και τον δείκτη σειράς
  στα οποία βασίστηκε, καθώς και μια σημαία επαλήθευσης σε επίπεδο εκτέλεσης. Επαληθεύστε το αποτέλεσμα πριν από αποφάσεις
  που αφορούν χρήματα, ταυτότητα ή πρόσβαση.
</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": "gemini-2.5-flash"
  },
  "event_id": "4d79ef1d-c2b1-4ed6-85b8-8326bd2895ef",
  "type": "call.data_extracted"
}
```

| Πεδίο | Τύπος | Περιγραφή |
|-------|------|-------------|
| `agent_id` | integer \| null | Πράκτορας που χειρίστηκε την κλήση, όταν είχε ανατεθεί κάποιος |
| `agent_name` | string \| null | Πράκτορας που χειρίστηκε την κλήση, όταν είχε ανατεθεί κάποιος |
| `extracted_data.status` | string | Πάντα `completed` για αυτό το συμβάν |
| `extracted_data.fields` | object | Τιμές με κλειδιά τα διαμορφωμένα κλειδιά πεδίων εξαγωγής· οι μη διαθέσιμες τιμές είναι `null` |
| `extracted_data.evidence` | object | Αποδεικτικά στοιχεία με κλειδιά τα πεδία εξαγωγής. Μια τιμή που δεν είναι null περιέχει το ακριβές δομικά ελεγμένο απόσπασμα, έως 1.000 χαρακτήρες, το `speaker_role` (`caller` ή `agent`) και το `turn_index`· μεγαλύτερα αποσπάσματα που επιστρέφονται από το μοντέλο απορρίπτονται αντί να περικόπτονται, ενώ τα αποδεικτικά στοιχεία είναι `null` όποτε το πεδίο τους είναι `null` |
| `extracted_data.verification` | string | `verified` μόνο όταν ο ανεξάρτητος έλεγχος αποδεικτικών στοιχείων επέστρεψε ακριβώς μία έγκυρη ετυμηγορία για κάθε υποψήφιο πεδίο. Το `unavailable` σημαίνει ότι ο έλεγχος απέτυχε, έληξε χρονικά, δεν διέθετε επαρκή προϋπολογισμό ή επέστρεψε κακοσχηματισμένη ή μερική έξοδο. Ένας πλήρως μη διαθέσιμος έλεγχος διατηρεί τις δομικά τεκμηριωμένες τιμές για έλεγχο από τον πελάτη. Για μερική έξοδο, εφαρμόζονται οι έγκυρες ετυμηγορίες και κάθε υποψήφιο χωρίς ακριβώς μία έγκυρη ετυμηγορία μηδενίζεται |
| `extracted_data.field_reasons` | object | Αιτίες με κλειδιά τα πεδία που μηδενίστηκαν από τη δομική τεκμηρίωση ή τον ανεξάρτητο επαληθευτή |
| `extracted_data.schema_version` | string | Hash του ακριβούς σχήματος πεδίων που χρησιμοποιήθηκε για αυτή την εξαγωγή |
| `extracted_at` | timestamp | Ώρα ολοκλήρωσης ISO 8601 |
| `model` | string | Μοντέλο που χρησιμοποιήθηκε για την εξαγωγή |

### `campaign.completed`

Αποστέλλεται μία φορά όταν μια καμπάνια μεταβαίνει από `running` σε `completed`, είτε
έληξε το πρόγραμμά της είτε όλες οι επαφές έφτασαν σε τελικές καταστάσεις. Οι επαναλήψεις του runner δεν
εκπέμπουν άλλο συμβάν. Αυτό το συμβάν κύκλου ζωής σε επίπεδο οργανισμού παραδίδεται μόνο
σε τερματικά σημεία με εμβέλεια οργανισμού, όχι σε τερματικά σημεία με εμβέλεια πράκτορα. Δεν προκαλεί αποκλεισμό.

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

Οι τέσσερις μετρήσεις αποτελέσματος δεν αλληλεπικαλύπτονται και αθροίζονται σε `contacts_total`:
το `completed` περιέχει επιτυχημένες επαφές· το `no_answer` περιέχει τελικές
αποτυχημένες/εξαντλημένες επαφές των οποίων το τελικό αποτέλεσμα ήταν μη απάντηση· το `failed` περιέχει
όλες τις άλλες τελικές αποτυχημένες/εξαντλημένες επαφές· και το `remaining` περιέχει εκκρεμείς,
προγραμματισμένες ή κλήσεις που βρίσκονται σε εξέλιξη. Μια επαφή που αναμένει επανάληψη είναι
`remaining`, ακόμη και όταν η πιο πρόσφατη προσπάθειά της ήταν μη απάντηση. Οι κλήσεις σε εξέλιξη
συμφωνούνται πριν από το στιγμιότυπο ολοκλήρωσης που εκπέμπεται μία φορά. Το `started_at` είναι η
διαμορφωμένη έναρξη της καμπάνιας ή η ώρα δημιουργίας της καμπάνιας όταν δεν είχε
διαμορφωθεί έναρξη.

### `issue.reported`

Αποστέλλεται όταν δημιουργείται μια [αναφορά ζητήματος](/api-reference/issue-reports) —
είτε υποβάλλεται από έναν χρήστη από τον πίνακα ελέγχου (`source: "user"`) είτε
αυτόματα από την αξιολόγηση κλήσης (`source: "system"`). Δεν προκαλεί αποκλεισμό.

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

| Πεδίο | Τύπος | Περιγραφή |
|-------|------|-------------|
| `agent_id` | integer \| null | Πράκτορας που χειρίστηκε την κλήση, όταν είχε ανατεθεί κάποιος |
| `agent_name` | string \| null | Πράκτορας που χειρίστηκε την κλήση, όταν είχε ανατεθεί κάποιος |
| `issue_report.severity` | string | `critical`, `warning` ή `info` |
| `issue_report.status` | string | `open` ή `resolved` |
| `issue_report.source` | string | `user` (υποβλήθηκε από τον πίνακα ελέγχου) ή `system` (δημιουργήθηκε από αξιολόγηση) |

<Note>
  Η επαναξιολόγηση μιας κλήσης δημιουργεί εκ νέου τις αναφορές ζητημάτων που παράγονται από το σύστημα, γεγονός που
  εκπέμπει ξανά το `issue.reported` για τις αναδημιουργημένες αναφορές. Καταργήστε τα διπλότυπα με βάση
  `call_id` + `title` αν θέλετε μόνο μία ειδοποίηση για κάθε υποκείμενο
  πρόβλημα.
</Note>

### `issue.escalated`

Αποστέλλεται όταν ένα μοτίβο ζητημάτων αποστέλλεται στο ThunderPhone για έλεγχο από το προσωπικό: μετά την
επιλογή **Αναφορά στο ThunderPhone**, ή όταν το Fix with AI δεν μπορεί να επιβεβαιώσει μια
διόρθωση από την πλευρά του πελάτη και δρομολογεί το ζήτημα αυτόματα. Μόνο τερματικά σημεία σε επίπεδο οργανισμού
λαμβάνουν αυτό το συμβάν.

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

| Πεδίο | Τύπος | Περιγραφή |
|-------|------|-------------|
| `automatic` | boolean | `true` για αυτόματη κλιμάκωση· `false` για μη αυτόματη κλιμάκωση |
| `cluster_id` | UUID | Κλιμακωμένο μοτίβο ζητημάτων |
| `escalation_id` | UUID | Εγγραφή κλιμάκωσης |
| `status` | string | `open` όταν εκπέμπεται το συμβάν |

Αυτή είναι μια ειδοποίηση, όχι το πακέτο αποδεικτικών στοιχείων. Χρησιμοποιήστε το `cluster_id` για να το συσχετίσετε
με το μοτίβο ζητημάτων. Δείτε [Αναφορά στο ThunderPhone](/el/guides/issues).

---

## Συμβάντα δοκιμαστικών κλήσεων

### `test-call.completed`

Αποστέλλεται όταν μια
[εκτέλεση δοκιμαστικής κλήσης](/api-reference/test-calls#test-call-run-object)
φτάνει σε τελική κατάσταση — `completed` ή `failed`, συμπεριλαμβανομένων εκτελέσεων
που απέτυχαν κατά την εκκίνηση και δεν πραγματοποίησαν ποτέ κλήση. Δεν αποκλείει άλλες διεργασίες. Χρήσιμο
για τη σύνδεση μαζικών εκτελέσεων CI με τα συστήματα συνομιλιών/ειδοποιήσεών σας.

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

| Πεδίο | Τύπος | Περιγραφή |
|-------|------|-------------|
| `agent_id` | integer \| null | Ο πράκτορας που χειρίστηκε την κλήση, όταν είχε εκχωρηθεί |
| `agent_name` | string \| null | Ο πράκτορας που χειρίστηκε την κλήση, όταν είχε εκχωρηθεί |
| `test_call_run.target_type` | string | `agent` ή `phone_number` |
| `test_call_run.target_id` | integer | Το αναγνωριστικό πράκτορα ή αναγνωριστικό αριθμού τηλεφώνου που στόχευε η εκτέλεση, σύμφωνα με το `target_type` |
| `test_call_run.status` | string | `completed` ή `failed` |
| `test_call_run.call_id` | integer \| null | `null` όταν η εκτέλεση απέτυχε πριν πραγματοποιηθεί κλήση |
| `test_call_run.error_message` | string | Κενό σε επιτυχή εκτέλεση |

---

## Συμβάντα ειδοποιήσεων

### `alert.triggered`

Αποστέλλεται όταν ένας [κανόνας ειδοποίησης](/el/guides/alerts) με ενεργοποιημένο
το κανάλι **Παράδοση σε webhooks προγραμματιστή** υπερβαίνει το όριό του.
Δεν αποκλείει άλλες διεργασίες. Ένας κανόνας ενεργοποιείται μία φορά και έπειτα τηρεί
την περίοδο αναμονής του, επομένως μια συνεχής υπέρβαση παράγει ένα συμβάν ανά παράθυρο περιόδου αναμονής.

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

| Πεδίο | Τύπος | Περιγραφή |
|-------|------|-------------|
| `event_id` (στο `data`) | UUID | Το αναγνωριστικό **ενεργοποίησης** της ειδοποίησης — διαφέρει από το `event_id` παράδοσης του περιβλήματος |
| `rule_id`, `rule_name` | UUID, string | Ο κανόνας που ενεργοποιήθηκε |
| `metric` | string | `success_rate`, `failure_rate`, `avg_score`, `call_volume` ή `suite_regression` |
| `comparator` | string | `lt`, `lte`, `gt` ή `gte` |
| `metric_value` | number | Η τιμή της μέτρησης στο παράθυρο όταν ενεργοποιήθηκε ο κανόνας |
| `threshold` | number | Το διαμορφωμένο όριο |
| `window_hours` | integer | Κυλιόμενο παράθυρο αξιολόγησης |
| `fired_at` | timestamp | |

Δείτε τον [οδηγό ειδοποιήσεων](/el/guides/alerts) για τη δημιουργία κανόνων, μετρήσεων,
περιόδων αναμονής και καναλιών email / Slack.

---

## Σχετικά

<CardGroup cols={2}>
  <Card title="telephony.incoming / web.incoming" icon="phone" href="/el/webhooks/call-incoming">
    Το αποκλειστικό ωφέλιμο φορτίο εισερχόμενης κλήσης στο οποίο πρέπει να απαντήσετε.
  </Card>
  <Card title="telephony.complete / web.complete" icon="phone-slash" href="/el/webhooks/call-complete">
    Απομαγνητοφώνηση και μετρήσεις μετά την κλήση.
  </Card>
  <Card title="Τελικά σημεία webhook" icon="bolt" href="/el/webhooks/endpoints">
    Εγγράψτε ένα URL σε ένα υποσύνολο αυτών των συμβάντων.
  </Card>
  <Card title="Εργαλεία συναρτήσεων" icon="screwdriver-wrench" href="/el/tools/overview">
    Πώς δημιουργούνται τα συμβάντα `telephony.tool` / `web.tool`.
  </Card>
</CardGroup>
