---
title: "Τελικά σημεία webhook"
description: "Διαχειριστείτε πολλαπλά URL webhook με μυστικά ανά τελικό σημείο και φίλτρα συμβάντων."
---

Το σύστημα webhook βάσει τελικών σημείων σάς επιτρέπει να καταχωρίζετε **πολλαπλούς**
προορισμούς ανά οργανισμό, καθέναν με το δικό του μυστικό, τη δική του
κατάσταση και τη δική του συνδρομή σε ένα υποσύνολο τύπων συμβάντων. Αυτό είναι
το προτεινόμενο μοντέλο για όλες τις νέες ενσωματώσεις.

Συγκρίνετέ το με το [παλαιότερο webhook με ένα URL](/api-reference/organizations#legacy-single-url-webhook),
το οποίο διατηρείται για συμβατότητα με προηγούμενες εκδόσεις, αλλά υποστηρίζει μόνο ένα URL ανά
οργανισμό.

## Τελικά σημεία

| Μέθοδος | Διαδρομή | Απαιτούμενος ρόλος | Περιγραφή |
|--------|------|---------------|-------------|
| `GET` | `/v1/developer/webhook-endpoints` | `admin+` | Εμφάνιση λίστας τελικών σημείων |
| `POST` | `/v1/developer/webhook-endpoints` | `admin+` | Δημιουργία τελικού σημείου |
| `PATCH` | `/v1/developer/webhook-endpoints/{endpoint_id}` | `admin+` | Ενημέρωση ετικέτας / URL / συμβάντων / κατάστασης |
| `DELETE` | `/v1/developer/webhook-endpoints/{endpoint_id}` | `admin+` | Διαγραφή τελικού σημείου |
| `POST` | `/v1/developer/webhook-endpoints/{endpoint_id}/test` | `admin+` | Αποστολή υπογεγραμμένης δοκιμαστικής παράδοσης |
| `GET` | `/v1/developer/webhook-deliveries` | `admin+` | Επιθεώρηση πρόσφατων αποτελεσμάτων παραδόσεων τελικών σημείων και παλαιότερων παραδόσεων |

## Αντικείμενο τελικού σημείου

```json
{
  "id": "c4d5e6f7-...",
  "label": "Production — Call events",
  "url": "https://example.com/thunderphone/hook",
  "events": ["telephony.incoming", "telephony.complete"],
  "status": "active",
  "agent_id": 42,
  "agent_name": "Support Agent",
  "secret_hint": "a1b2…9f0e",
  "created_at": "2026-04-20T18:24:10.113Z",
  "updated_at": "2026-04-20T18:24:10.113Z"
}
```

| Πεδίο | Τύπος | Περιγραφή |
|-------|------|-------------|
| `id` | UUID | Αναγνωριστικό τελικού σημείου |
| `label` | string | Εμφανιζόμενο όνομα, 1–120 χαρακτήρες |
| `url` | string | URL HTTPS· επιτρέπεται το `http://localhost` για ανάπτυξη |
| `events` | array of string | Τύποι συμβάντων στους οποίους έχετε εγγραφεί (δείτε τις [έγκυρες τιμές](#valid-event-types)). Ο κενός πίνακας εγγράφεται σε όλα τα συμβάντα, εκτός από τα συμβάντα ανά γύρο που επιλέγονται μόνο ρητά (`telephony.turn` / `web.turn`) |
| `status` | string | `active`, `disabled` (μη αυτόματα σε παύση) ή `failing` (ορίζεται αυτόματα όταν μια παράδοση εξαντλήσει το πρόγραμμα επαναλήψεων των 24 ωρών χωρίς ούτε μία απάντηση 2xx) |
| `agent_id` | integer \| null | Πράκτορας στον οποίο περιορίζεται αυτό το τελικό σημείο· το `null` σημαίνει σε επίπεδο οργανισμού |
| `agent_name` | string \| null | Όνομα του πράκτορα στον οποίο περιορίζεται το τελικό σημείο ή `null` για τελικό σημείο σε επίπεδο οργανισμού |
| `secret_hint` | string | Οι πρώτοι 4 και οι τελευταίοι 4 χαρακτήρες του μυστικού υπογραφής με αποσιωπητικά (`a1b2…9f0e`) — αρκετοί για να αντιστοιχίσετε το μυστικό που αποθηκεύσατε τοπικά χωρίς να εκθέσετε την πλήρη τιμή |
| `created_at`, `updated_at` | timestamp | |

<Note>
  Το πλήρες `secret` του τελικού σημείου επιστρέφεται **μία φορά** κατά τη δημιουργία και
  ποτέ ξανά. Αποθηκεύστε το με ασφάλεια — αν το χάσετε, διαγράψτε το τελικό σημείο
  και δημιουργήστε το ξανά.
</Note>

### Έγκυροι τύποι συμβάντων

Το `events` επικυρώνεται ως προς αυτό το ακριβές σύνολο — τιμές εκτός της λίστας
επιστρέφουν `400`. Δείτε τον [Κατάλογο συμβάντων](/el/webhooks/events) για τη
δομή του φορτίου κάθε τύπου.

- `telephony.incoming`, `telephony.complete`, `telephony.tool`, `telephony.turn`
- `web.incoming`, `web.complete`, `web.tool`, `web.turn`
- `call.graded`, `call.data_extracted`
- `campaign.completed`
- `issue.reported`, `issue.escalated`
- `test-call.completed`
- `alert.triggered`

Το `issue.escalated` δεν έχει περιβάλλον πράκτορα και παραδίδεται μόνο σε
τελικά σημεία σε επίπεδο οργανισμού.

Τα `voice.ready` και `voice.failed` δεν μπορούν να επιλεγούν ρητά. Για να τα
λαμβάνετε, δημιουργήστε ένα τελικό σημείο σε επίπεδο οργανισμού με `events: []`. Μια κενή λίστα συμβάντων
λαμβάνει κάθε υποστηριζόμενο συμβάν εκτός από τα `telephony.turn` και `web.turn`,
τα οποία πρέπει να επιλεγούν ρητά.

### Καταστάσεις τελικών σημείων

- `active` — οι παραδόσεις πραγματοποιούνται κανονικά.
- `disabled` — τίθεται μη αυτόματα σε παύση μέσω `PATCH`. Δεν αποστέλλονται αιτήματα. Δεν
  αλλάζουμε ποτέ την κατάσταση ενός τελικού σημείου `disabled`· η επαναφορά του σε
  `active` είναι πάντα δική σας επιλογή.
- `failing` — ορίζεται αυτόματα όταν μια παράδοση στο τελικό σημείο εξαντλήσει
  ολόκληρο το πρόγραμμα επαναλήψεων της (8 προσπάθειες σε 24 ώρες) χωρίς να
  λάβει ποτέ 2xx. Ένα τελικό σημείο που αποτυγχάνει δεν λαμβάνει περαιτέρω κίνηση.
  Αφού διορθωθεί το τελικό σημείο, επαναφέρετε την κατάστασή του σε `active` με `PATCH`·
  οι παραδόσεις των οποίων το πρόγραμμα επαναλήψεων δεν έχει ακόμη εξαντληθεί συνεχίζουν από εκεί
  που σταμάτησαν.

---

## Λίστα τελικών σημείων

<CodeGroup>
```bash cURL
curl https://api.thunderphone.com/v1/developer/webhook-endpoints \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY"
```
</CodeGroup>

Επιστρέφει έναν πίνακα από [αντικείμενα τελικού σημείου](#endpoint-object).
Περάστε `?agent_id=42` για να επιστρέψετε μόνο τελικά σημεία που περιορίζονται σε εκείνον τον πράκτορα.

### Τελικά σημεία περιορισμένα σε πράκτορα

Τα τελικά σημεία σε επίπεδο οργανισμού λαμβάνουν κάθε συμβάν που αντιστοιχεί. Ένα τελικό σημείο με
`agent_id` λαμβάνει μόνο συμβάντα που αντιστοιχούν σε κλήσεις τις οποίες χειρίζεται εκείνος ο πράκτορας·
συμβάντα χωρίς περιβάλλον πράκτορα, όπως το `alert.triggered`, δεν το φτάνουν ποτέ. Μπορείτε
επίσης να δημιουργείτε και να διαχειρίζεστε αυτά τα τελικά σημεία από την ενότητα
**Διαδικτυακά άγκιστρα** του δημιουργού πρακτόρων.

---

## Δημιουργία τελικού σημείου

<CodeGroup>
```bash cURL
curl -X POST https://api.thunderphone.com/v1/developer/webhook-endpoints \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "label":  "Production — Call events",
    "url":    "https://example.com/thunderphone/hook",
    "events": ["telephony.incoming", "telephony.complete"]
  }'
```

```python Python
result = requests.post(
    "https://api.thunderphone.com/v1/developer/webhook-endpoints",
    headers={"Authorization": "Bearer sk_live_YOUR_API_KEY"},
    json={
        "label":  "Production — Call events",
        "url":    "https://example.com/thunderphone/hook",
        "events": ["telephony.incoming", "telephony.complete"],
    },
).json()
secret = result["secret"]
endpoint_id = result["id"]
```
</CodeGroup>

### Πεδία αιτήματος

| Πεδίο | Τύπος | Υποχρεωτικό | Περιγραφή |
|-------|------|----------|-------------|
| `label` | συμβολοσειρά | ναι | 1–120 χαρακτήρες |
| `url` | συμβολοσειρά | ναι | URL HTTPS (το `http` επιτρέπεται μόνο για `localhost` / `127.0.0.1`) |
| `events` | πίνακας | όχι | Κενό ή παραλειπόμενο εγγράφει σε όλα τα συμβάντα εκτός από τα `telephony.turn` / `web.turn`, που απαιτούν ρητή εγγραφή. Πρέπει να χρησιμοποιούνται οι τιμές που αναφέρονται στους [Έγκυρους τύπους συμβάντων](#valid-event-types)· τα διπλότυπα αφαιρούνται |
| `agent_id` | ακέραιος \| null | όχι | Περιορίστε την παράδοση σε έναν πράκτορα αυτού του οργανισμού· παραλείψτε το ή χρησιμοποιήστε `null` για τελικό σημείο σε επίπεδο οργανισμού |

Επιστρέφει `201 Created` με το ενημερωμένο [αντικείμενο τελικού σημείου](#endpoint-object) και
ένα πρόσθετο πεδίο `secret` ανώτατου επιπέδου που περιέχει το ακατέργαστο κλειδί υπογραφής — μια
δεκαεξαδική συμβολοσειρά 48 χαρακτήρων:

```json
{
  "id": "c4d5e6f7-…",
  "label": "Production — Call events",
  "url": "https://example.com/thunderphone/hook",
  "events": ["telephony.incoming", "telephony.complete"],
  "status": "active",
  "secret_hint": "a1b2…9f0e",
  "created_at": "2026-04-20T18:24:10.113Z",
  "updated_at": "2026-04-20T18:24:10.113Z",
  "secret": "a1b2c37e08d94f5b16a2c8d90e7f3a4b5c6d7e8f90a19f0e"
}
```

<Warning>
  Το `secret` επιστρέφεται **μόνο κατά τη δημιουργία**. Οι επόμενες αποκρίσεις `GET`
  περιλαμβάνουν μόνο το `secret_hint`. Αντιγράψτε την πλήρη τιμή στον διαχειριστή
  μυστικών σας πριν απορρίψετε την απόκριση.
</Warning>

---

## Ενημέρωση τελικού σημείου

<CodeGroup>
```bash cURL
curl -X PATCH https://api.thunderphone.com/v1/developer/webhook-endpoints/c4d5e6f7-... \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "label":  "Production — Call + Grade events",
    "events": ["telephony.incoming", "telephony.complete", "call.graded"]
  }'
```
</CodeGroup>

| Πεδίο | Τύπος | Περιγραφή |
|-------|------|-------------|
| `label` | συμβολοσειρά | |
| `url` | συμβολοσειρά | |
| `events` | πίνακας | |
| `status` | συμβολοσειρά | `active` ή `disabled`. Ορίστε `active` για να επανενεργοποιήσετε ένα τελικό σημείο που ο διακομιστής έχει επισημάνει ως `failing` |
| `agent_id` | ακέραιος \| null | Ορίστε αναγνωριστικό πράκτορα για να περιορίσετε το τελικό σημείο ή `null` για να το ορίσετε σε επίπεδο οργανισμού |

Επιστρέφει `200 OK` με το ενημερωμένο [αντικείμενο τελικού σημείου](#endpoint-object).

---

## Αποστολή δοκιμαστικής παράδοσης

Στείλτε ένα συνθετικό συμβάν `webhook.test` σε ένα τελικό σημείο μέσω της κανονικής
ροής παράδοσης, συμπεριλαμβανομένης της κανονικής σειριοποίησης JSON,
του `X-ThunderPhone-Signature`, της καταγραφής παράδοσης και της παρακολούθησης
επαναλήψεων. Η δοκιμή στοχεύει το επιλεγμένο τελικό σημείο ανεξάρτητα από το φίλτρο
`events` του.

<CodeGroup>
```bash cURL
curl -X POST https://api.thunderphone.com/v1/developer/webhook-endpoints/c4d5e6f7-.../test \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY"
```
</CodeGroup>

Το τελικό σημείο λαμβάνει έναν φάκελο όπως ο παρακάτω:

```json
{
  "data": {
    "message": "ThunderPhone webhook test",
    "sent_at": "2026-07-17T20:12:34.567890+00:00"
  },
  "event_id": "2ad6507c-7d19-4498-9b2d-7e8f944ab5a1",
  "type": "webhook.test"
}
```

Το API επιστρέφει `200 OK` μετά την πρώτη προσπάθεια, ακόμη και αν ο προορισμός
επιστρέψει σφάλμα. Ελέγξτε τα `success`, `status`, `response_code` και `error`
για το αποτέλεσμα της παράδοσης:

```json
{
  "success": true,
  "event_id": "2ad6507c-7d19-4498-9b2d-7e8f944ab5a1",
  "event_type": "webhook.test",
  "status": "delivered",
  "response_code": 204,
  "error": ""
}
```

Το `webhook.test` είναι συνθετικό και δεν μπορεί να προστεθεί στη συνδρομή
`events` ενός τελικού σημείου. Εάν η πρώτη προσπάθεια αποτύχει, η παράδοση ακολουθεί
το ίδιο χρονοδιάγραμμα επαναλήψεων με τις κανονικές παραδόσεις συμβάντων.

Για να διαμορφώσετε έναν ενεργοποιητή για πραγματικό σχήμα συμβάντος, περάστε ένα προαιρετικό
`event_type`. Η παράδοση παραμένει συνθετική και περιέχει `"sample": true`;
τα δείγματα που σχετίζονται με κλήσεις χρησιμοποιούν `call_id: 0` και `agent_id: 0`.

```bash
curl -X POST https://api.thunderphone.com/v1/developer/webhook-endpoints/c4d5e6f7-.../test \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"event_type":"call.graded"}'
```

Το `event_type` δέχεται οποιαδήποτε τιμή από τους [Έγκυρους τύπους συμβάντων](#valid-event-types).
Η παράλειψή του διατηρεί τη γενική συμπεριφορά του `webhook.test`.

---

## Διαγραφή τελικού σημείου

<CodeGroup>
```bash cURL
curl -X DELETE https://api.thunderphone.com/v1/developer/webhook-endpoints/c4d5e6f7-... \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY"
```
</CodeGroup>

Επιστρέφει `204 No Content`. Η παράδοση στη διεύθυνση URL σταματά αμέσως·
οι επαναλήψεις που βρίσκονται σε εξέλιξη εγκαταλείπονται.

---

## Αποσφαλμάτωση παραδόσεων

Πριν συμπεράνετε ότι ένα webhook δεν στάλθηκε, ελέγξτε το
[`GET /v1/developer/webhook-deliveries`](/api-reference/webhook-deliveries).
Εμφανίζει πρόσφατες προσπάθειες και από τα δύο συστήματα webhook, συμπεριλαμβανομένων του αναγνωριστικού
κλήσης, της προέλευσης URL, της κατάστασης HTTP, του αριθμού προσπαθειών, της επιτρεπόμενης
κατηγορίας αποτυχίας και της ώρας της επόμενης επανάληψης. Δεν επιστρέφει ποτέ το ωφέλιμο φορτίο
συμβάντος, την απομαγνητοφώνηση, το αποθηκευμένο κείμενο σφάλματος, το σώμα απόκρισης ή τη διαδρομή URL.

Μπορείτε επίσης να δείτε το ίδιο πρόσφατο ιστορικό στις **Πράκτορες → επιλέξτε έναν πράκτορα → Webhooks →
Πρόσφατες παραδόσεις**. Οι γραμμές εμφανίζουν την ετικέτα του τελικού σημείου και την προέλευση URL που χρησιμοποιήθηκε από την πιο πρόσφατη
προσπάθεια. Αυτή είναι λειτουργική κατάσταση και όχι αμετάβλητο αρχείο ελέγχου: η διαγραφή ενός τελικού σημείου
διαγράφει επίσης τις γραμμές παραδόσεών του.

Για ένα `404` του n8n, επιβεβαιώστε πρώτα ότι η ροή εργασίας είναι ενεργή, δέχεται `POST` και χρησιμοποιεί
τη διεύθυνση URL webhook παραγωγής αντί για τη διεύθυνση URL δοκιμής. Ένα `401` ή `403` υποδεικνύει
έλεγχο ταυτότητας ή επικύρωση υπογραφής· τα χρονικά όρια υποδεικνύουν καθυστέρηση
ή διαθεσιμότητα προορισμού· τα σφάλματα TLS υποδεικνύουν την αλυσίδα πιστοποιητικών, το όνομα κεντρικού υπολογιστή ή τη λήξη.

---

## Σχετικά

<CardGroup cols={2}>
  <Card title="Κατάλογος συμβάντων" icon="list" href="/el/webhooks/events">
    Η πλήρης λίστα τιμών `events` στις οποίες μπορείτε να εγγραφείτε.
  </Card>
  <Card title="Επισκόπηση Webhooks" icon="bolt" href="/el/webhooks/overview">
    Επαλήθευση υπογραφής και σημασιολογία παράδοσης.
  </Card>
</CardGroup>
