Katalog zdarzeń
Wszystkie typy zdarzeń webhook wysyłane przez ThunderPhone.
Każda treść webhooka ma pole type, którego wartością jest jeden z typów
zdarzeń na tej stronie. Gdy subskrybujesz
punkt końcowy, tablica events musi zawierać
wybrane typy zdarzeń (lub być pusta, aby subskrybować wszystkie —
z wyjątkiem zdarzeń dla każdej tury telephony.turn /
web.turn, które są dostarczane tylko do punktów końcowych,
które wyraźnie je wskazują).
Te zdarzenia są przekazywane w dwóch stylach:
- Dostarczenia do punktu końcowego są zawsze nieblokującymi
powiadomieniami z ponownymi próbami: odpowiedz
dowolnym kodem 2xx; koperta zawiera
event_id, według którego można przeprowadzić deduplikację. - Wymiany blokujące działają tylko w
starszym webhooku z jednym adresem URL: żądanie
konfiguracji
telephony.incoming/web.incoming(numery w trybie webhooka i klucze widżetu, limit czasu 10 s) oraz dyspozycje narzędzi w trybie webhooka. Twoja odpowiedź kształtuje rozmowę na żywo.
Poniższe przykładowe ładunki pokazują kopertę punktu końcowego w kolejności przesyłania
(klucze posortowane alfabetycznie: data, event_id, type); starsze
dostarczenia zawierają te same data bez event_id.
Zdarzenia połączeń
telephony.incoming
Wysyłane, gdy połączenie przychodzące dociera na jeden z Twoich
numerów telefonów. Dostawy do endpointu to
powiadomienia typu fire-and-forget wysyłane dla każdego połączenia
przychodzącego, niezależnie od tego, czy numer jest skonfigurowany dla agenta,
czy webhooka. Numery bez przypisanego agenta otrzymują dodatkowo blokujące
żądanie konfiguracji w starszym webhooku — pełny schemat żądania i odpowiedzi
znajdziesz w
telephony.incoming / web.incoming.
{
"data": {
"call_id": 987654321,
"from_number": "+14155550199",
"to_number": "+15551234567"
},
"event_id": "3f6b2ad0-1c9e-4a57-9f2b-8f6f0f9d2f11",
"type": "telephony.incoming"
}telephony.complete
Wysyłane po zakończeniu przychodzącego lub wychodzącego połączenia telefonicznego. Nie blokuje.
Obejmuje transkrypcję, adres URL nagrania, gdy jest dostępny, oraz podsumowanie rozliczeń. Schemat
ładunku znajdziesz w
telephony.complete / web.complete.
telephony.tool
Wysyłane po wywołaniu przez połączenie telefoniczne narzędzia funkcji. Nieblokujące powiadomienie audytowe — narzędzie zostało już wykonane w momencie dostarczenia tego zdarzenia; dotyczy własnych narzędzi funkcji, a nie wbudowanych narzędzi, narzędzi bazy wiedzy, połączeń aplikacji ani narzędzi MCP.
{
"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 to wynik wykonania: {"status": <http status>, "response": <your endpoint's JSON>} w przypadku powodzenia lub
{"status": <status>, "error": "<message>"} w przypadku błędu.
telephony.turn
Wysyłane w trakcie trwającego połączenia telefonicznego, raz dla każdej
tury zawierającej mowę, w momencie jej wystąpienia — wypowiedzianych odpowiedzi
agenta oraz transkrybowanych tur rozmówcy. Umożliwia śledzenie rozmowy na żywo
za pomocą zwykłych webhooków zamiast odpytywania
GET /v1/calls/{call_id}/transcript.
Nie blokuje.
{
"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"
}| Pole | Typ | Opis |
|---|---|---|
position | integer | Indeks tury w historii połączenia — stabilny identyfikator do sortowania |
role | string | assistant (mowa agenta) lub user (mowa rozmówcy) |
text | string | Tekst transkrypcji tury znany w momencie emisji |
entry_type | string | Typ bazowego wpisu historii: completion (agent) lub user_turn / span (rozmówca) |
start_ms, end_ms | integer | Przesunięcia audio w ms od rozpoczęcia połączenia; obecne tylko, gdy czas odtwarzania był już znany w momencie emisji |
web.incoming
Odpowiednik telephony.incoming dla kanału internetowego, wysyłany po rozpoczęciu
sesji widżetu internetowego lub testowego połączenia mikrofonowego w kreatorze.
Dostawy do endpointu to powiadomienia typu fire-and-forget dla każdej sesji internetowej.
Klucze publikowalne w mode="webhook" otrzymują dodatkowo
blokujące żądanie konfiguracji w starszym webhooku — to blokujące żądanie
ma inną strukturę (origin_domain,
publishable_key_prefix; bez numerów telefonów). Zobacz
telephony.incoming / web.incoming.
{
"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 zawsze ma dosłowną wartość "web". W przypadku sesji widżetu
w trybie webhook to_number jest puste (numer agenta dla sesji jest przypisywany
po konfiguracji); w przypadku testowych połączeń mikrofonowych w kreatorze
origin_domain i publishable_key_prefix są puste.
web.complete
Odpowiednik telephony.complete dla kanału internetowego, obejmujący połączenia
widżetu internetowego (direction: "web") i testowe połączenia mikrofonowe
w kreatorze (direction: "test"). Nie blokuje. Ma taką samą strukturę ładunku jak
telephony.complete, dodatkowo z origin_domain
oraz z from_number ustawionym na "web".
web.tool
Odpowiednik telephony.tool dla kanału internetowego. Element data zawiera
origin_domain zamiast from_number / to_number.
web.turn
Odpowiednik telephony.turn dla kanału internetowego,
obejmujący połączenia widżetu internetowego i testowe połączenia mikrofonowe w kreatorze.
Ma taką samą strukturę ładunku, z origin_domain zamiast from_number / to_number.
Podobnie jak telephony.turn, wymaga jawnej subskrypcji —
nigdy nie jest dostarczany przez pustą tablicę events.
Zdarzenia głosowe
Tworzenie niestandardowego głosu odbywa się asynchronicznie. Te nieblokujące zdarzenia umożliwiają reagowanie na wynik końcowy zamiast odpytywania punktu końcowego szczegółów klonu.
voice.ready
Wysyłane, gdy niestandardowy głos zakończy przetwarzanie i może zostać przypisany do agenta.
{
"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
Wysyłane, gdy przetwarzanie niestandardowego głosu zakończy się trwałym błędem.
{
"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"
}| Pole | Typ | Opis |
|---|---|---|
voice.id | string | Publiczny identyfikator niestandardowego głosu |
voice.name | string | Wartość głosu agenta w formie custom:<public_id> |
voice.display_name | string | Nazwa głosu widoczna dla organizacji |
voice.language | string | Kod jedynego języka klonu |
voice.gender | string | male, female lub pusty ciąg znaków |
voice.status | string | ready dla voice.ready; failed dla voice.failed |
voice.failure_reason | string | Puste w przypadku powodzenia; szczegóły błędu przetwarzania w przypadku niepowodzenia |
voice.created_at, voice.updated_at | timestamp | Znaczniki czasu ISO 8601 |
reason | string | Szczegóły błędu; obecne tylko dla voice.failed |
Zdarzenia jakości
call.graded
Wysyłane po zakończeniu uruchomienia oceniania przez AI dla połączenia. Nieblokujące.
{
"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"
}| Pole | Typ | Opis |
|---|---|---|
grade.id | integer | Identyfikator oceny |
grade.score | integer | null | 0–100 |
grade.call_outcome | string | success, failure, unknown lub no_conversation |
grade.summary | string | Jednoakapitowe podsumowanie |
grade.detected_issues | array | Ciągi opisujące problemy wykryte przez oceniający moduł |
grade.status | string | Zawsze completed — emitowane są tylko zakończone uruchomienia |
grade.grader_model | string | Moduł oceniający, który wygenerował wynik (np. heuristic-v1) |
grade.graded_at, grade.created_at | timestamp |
issue.reported
Wysyłane po utworzeniu raportu problemu —
zgłoszonego przez użytkownika z poziomu panelu (source: "user") albo
utworzonego automatycznie przez ocenianie połączenia (source: "system"). Nieblokujące.
{
"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"
}| Pole | Typ | Opis |
|---|---|---|
issue_report.severity | string | critical, warning lub info |
issue_report.status | string | open lub resolved |
issue_report.source | string | user (zgłoszone z poziomu panelu) lub system (utworzone przez ocenianie) |
Zdarzenia połączeń testowych
test-call.completed
Wysyłane, gdy
uruchomienie połączenia testowego
osiągnie status końcowy — completed lub failed, w tym uruchomienia,
które nie powiodły się podczas uruchamiania i nigdy nie utworzyły połączenia. Nieblokujące. Przydatne
do podłączania wsadowych uruchomień CI do systemów czatu i powiadomień.
{
"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"
}| Pole | Typ | Opis |
|---|---|---|
test_call_run.target_type | string | agent lub phone_number |
test_call_run.target_id | integer | Identyfikator agenta lub numeru telefonu, do którego było skierowane uruchomienie, zgodny z target_type |
test_call_run.status | string | completed lub failed |
test_call_run.call_id | integer | null | null, gdy uruchomienie nie powiodło się przed wykonaniem połączenia |
test_call_run.error_message | string | Puste w przypadku powodzenia |
Zdarzenia alertów
alert.triggered
Wysyłane, gdy reguła alertu z włączonym kanałem Dostarczaj do webhooków deweloperskich przekroczy próg. Nie blokuje. Reguła uruchamia się raz, a następnie uwzględnia okres karencji, więc utrzymujące się naruszenie powoduje jedno zdarzenie na każde okno okresu karencji.
{
"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"
}| Pole | Typ | Opis |
|---|---|---|
event_id (w data) | UUID | Identyfikator uruchomienia alertu — odrębny od identyfikatora event_id dostarczenia w kopercie |
rule_id, rule_name | UUID, ciąg znaków | Reguła, która się uruchomiła |
metric | ciąg znaków | success_rate, failure_rate, avg_score, call_volume lub suite_regression |
comparator | ciąg znaków | lt, lte, gt lub gte |
metric_value | liczba | Wartość metryki w oknie, gdy reguła się uruchomiła |
threshold | liczba | Skonfigurowany próg |
window_hours | liczba całkowita | Kroczące okno oceny |
fired_at | znacznik czasu |
Zapoznaj się z przewodnikiem po alertach, aby tworzyć reguły, metryki, okresy karencji oraz kanały e-mail / Slack.
Powiązane
Blokujący ładunek przychodzącego połączenia, na który musisz odpowiedzieć.
Transkrypcja i metryki po połączeniu.
Zasubskrybuj adres URL dla podzbioru tych zdarzeń.
Jak są generowane zdarzenia telephony.tool / web.tool.