---
title: "Крајње тачке вебхукова"
description: "Управљајте са више URL адреса вебхукова уз тајне вредности и филтере догађаја за сваку крајњу тачку."
---

Систем вебхукова заснован на крајњим тачкама омогућава Вам да региструјете **више**
одредишта по организацији, свако са сопственом тајном, сопственим
статусом и сопственом претплатом на подскуп типова догађаја. Ово је
препоручени модел за све нове интеграције.

Упоредите са [застарелим вебхуком са једним 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` | ниска | Приказано име, 1–120 знакова |
| `url` | ниска | HTTPS URL; `http://localhost` је дозвољен за развој |
| `events` | низ ниски | Типови догађаја на које сте претплаћени (погледајте [важеће вредности](#valid-event-types)). Празан низ вас претплаћује на све догађаје осим догађаја по потезу који се бирају изричито (`telephony.turn` / `web.turn`) |
| `status` | ниска | `active`, `disabled` (ручно паузирано) или `failing` (аутоматски постављено када испорука исцрпи распоред поновних покушаја од 24 ч без иједног 2xx одговора) |
| `agent_id` | целобројна вредност \| null | Агент на кога је ова крајња тачка ограничена; `null` значи за целу организацију |
| `agent_name` | ниска \| null | Име ограниченог агента или `null` за крајњу тачку за целу организацију |
| `secret_hint` | ниска | Прва 4 и последња 4 знака тајне вредности за потписивање са тротачком (`a1b2…9f0e`) — довољно за упоређивање са тајном вредношћу коју сте сачували локално, без откривања целе вредности |
| `created_at`, `updated_at` | временска ознака | |

<Note>
  Цела вредност `secret` крајње тачке враћа се **једном** приликом креирања и
  никада више. Безбедно је сачувајте — ако је изгубите, избришите крајњу тачку
  и поново је креирајте.
</Note>

### Важећи типови догађаја

`events` се проверава у односу на овај тачан скуп — вредности ван листе
враћају `400`. Погледајте [Каталог догађаја](/sr/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. Крајња тачка у неуспешном стању не прима даљи саобраћај.
  Када исправите крајњу тачку, путем `PATCH` вратите њен статус на `active`;
  испоруке чији распоред поновних покушаја још није истекао настављају тамо
  где су стале.

---

## Листа крајњих тачака

<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` | ниска | да | HTTPS URL (`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 се одмах зауставља;
поновни покушаји у току се напуштају.

---

## Отклањање грешака у испорукама

Пре него што закључите да веб-хук није послат, проверите
[`GET /v1/developer/webhook-deliveries`](/api-reference/webhook-deliveries).
Приказује недавне покушаје из оба система веб-хукова, укључујући идентификатор позива,
порекло URL-а, HTTP статус, број покушаја, категорију неуспеха са листе дозвољених и време следећег
поновног покушаја. Никада не враћа садржај догађаја, транскрипт, сачувани текст грешке,
тело одговора или путању URL-а.

Исто тако можете видети историју недавних покушаја у **Агенти → изаберите агента → Веб-хукови →
Недавне испоруке**. Редови приказују ознаку крајње тачке и порекло URL-а коришћено у последњем
покушају. Ово је оперативно стање, а не непроменљиви дневник ревизије: брисањем крајње тачке
бришу се и њени редови испорука.

За n8n `404`, најпре потврдите да је ток рада активан, да прихвата `POST` и да користи
продукциони URL веб-хука уместо тестног URL-а. `401` или `403` указује на
аутентификацију или валидацију потписа; истеци времена указују на кашњење
или доступност одредишта; TLS грешке указују на ланац сертификата, име хоста или истек.

---

## Повезано

<CardGroup cols={2}>
  <Card title="Каталог догађаја" icon="list" href="/sr/webhooks/events">
    Потпуна листа вредности `events` на које можете да се претплатите.
  </Card>
  <Card title="Преглед веб-хукова" icon="bolt" href="/sr/webhooks/overview">
    Верификација потписа и семантика испоруке.
  </Card>
</CardGroup>
