Open in
इवेंट्स कैटलॉग
ThunderPhone द्वारा भेजे जाने वाले सभी वेबहुक इवेंट प्रकार।
हर वेबहुक बॉडी में एक type फ़ील्ड होता है, जिसका मान इस पेज पर दिए गए इवेंट
टाइप में से एक होता है। जब आप किसी
एंडपॉइंट को सब्सक्राइब करते हैं, तो events ऐरे में वे
इवेंट टाइप होने चाहिए जिन्हें आप चाहते हैं (या सभी को सब्सक्राइब करने के लिए इसे खाली छोड़ें —
प्रति-टर्न इवेंट्स telephony.turn /
web.turn को छोड़कर, जो केवल उन एंडपॉइंट्स पर डिलीवर होते हैं
जो उन्हें स्पष्ट रूप से नामित करते हैं)।
इन इवेंट्स को डिलीवर करने की दो स्टाइल हैं:
- एंडपॉइंट डिलीवरी हमेशा रीट्राई के साथ नॉन-ब्लॉकिंग नोटिफिकेशन होती हैं: किसी भी 2xx के साथ रिस्पॉन्ड करें; एनवेलप में डीडुप्लिकेशन के लिए
event_idहोता है। - ब्लॉकिंग एक्सचेंज केवल लेगेसी सिंगल-URL वेबहुक पर चलते हैं:
telephony.incoming/web.incomingकॉन्फ़िगरेशन रिक्वेस्ट (वेबहुक-मोड नंबर: एक रीट्राई सहित 13 s; वेबहुक-मोड विजेट की: 10 s) और वेबहुक-मोड टूल डिस्पैच। आपका रिस्पॉन्स लाइव कॉल को आकार देता है।
नीचे दिए गए उदाहरण पेलोड्स वायर ऑर्डर में एंडपॉइंट एनवेलप दिखाते हैं
(कीज़ वर्णमाला क्रम में सॉर्ट की गई हैं: data, event_id, type); लेगेसी
डिलीवरी में event_id के बिना वही data होता है।
कॉल इवेंट्स
telephony.incoming
जब कोई इनबाउंड कॉल आपके किसी
फोन नंबर पर पहुंचती है, तब भेजा जाता है। एंडपॉइंट डिलीवरी
हर इनबाउंड कॉल के लिए भेजी जाने वाली फायर-एंड-फॉरगेट नोटिफिकेशन हैं, चाहे
नंबर एजेंट-कॉन्फ़िगर किया गया हो या वेबहुक-कॉन्फ़िगर किया गया हो। जिन नंबरों को
कोई एजेंट असाइन नहीं किया गया है, उन्हें लेगेसी वेबहुक पर अतिरिक्त रूप से
ब्लॉकिंग कॉन्फ़िगरेशन रिक्वेस्ट मिलती है — पूर्ण रिक्वेस्ट / रिस्पॉन्स स्कीमा के लिए
telephony.incoming / web.incoming देखें।
{
"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 देखें।
| फ़ील्ड | प्रकार | विवरण |
|---|---|---|
agent_id | integer | null | कॉल संभालने वाला एजेंट, यदि कोई असाइन किया गया था |
agent_name | string | null | कॉल संभालने वाला एजेंट, यदि कोई असाइन किया गया था |
telephony.tool
टेलीफोनी कॉल द्वारा
फंक्शन टूल इनवोक किए जाने के बाद भेजा जाता है। नॉन-ब्लॉकिंग ऑडिट नोटिफिकेशन —
यह इवेंट डिलीवर होने तक टूल पहले ही एक्ज़ीक्यूट हो चुका होता है; इसमें
आपके अपने फंक्शन टूल और बिल्ट-इन send_sms टूल शामिल होते हैं (अन्य बिल्ट-इन,
नॉलेज-बेस, ऐप-कनेक्शन या MCP टूल नहीं)। send_sms के लिए,
arguments.to और arguments.body दोनों [REDACTED] होते हैं। कंप्लीशन
ट्रांसक्रिप्ट भी इन्हें रिडैक्ट करते हैं; रिस्पॉन्स के message_id का उपयोग करके
संगठन-स्कोप्ड SMS रिसोर्स से कंटेंट और प्राप्तकर्ता प्राप्त करें।
{
"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
टेलीफोनी कॉल चल रही हो तब, प्रत्येक स्पीच-युक्त टर्न के लिए उसके होते ही भेजा जाता है —
एजेंट की बोली गई कंप्लीशन और कॉलर के ट्रांसक्राइब किए गए टर्न। यह आपको
पोलिंग करने के बजाय सामान्य वेबहुक के माध्यम से लाइव बातचीत फॉलो करने देता है
GET /v1/calls/{call_id}/transcript।
नॉन-ब्लॉकिंग।
{
"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 में ऑडियो ऑफ़सेट; केवल तब मौजूद होते हैं जब इमिशन के समय प्लेआउट टाइमिंग पहले से ज्ञात हो |
web.incoming
telephony.incoming का वेब-चैनल समकक्ष, जो
वेब विजेट सेशन या बिल्डर माइक टेस्ट कॉल शुरू होने पर भेजा जाता है।
एंडपॉइंट डिलीवरी हर वेब सेशन के लिए फायर-एंड-फॉरगेट होती हैं।
mode="webhook" में पब्लिशेबल की को लेगेसी वेबहुक पर अतिरिक्त रूप से
ब्लॉकिंग कॉन्फ़िगरेशन रिक्वेस्ट मिलती है — उस ब्लॉकिंग रिक्वेस्ट का स्वरूप अलग होता है
(origin_domain, publishable_key_prefix; कोई फोन नंबर नहीं)। देखें
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 हमेशा लिटरल "web" होता है। वेबहुक-मोड विजेट
सेशन के लिए to_number खाली होता है (सेशन का एजेंट नंबर कॉन्फ़िगरेशन के
बाद असाइन किया जाता है); बिल्डर माइक टेस्ट कॉल के लिए origin_domain और
publishable_key_prefix खाली होते हैं।
| फ़ील्ड | प्रकार | विवरण |
|---|---|---|
agent_id | integer | null | कॉल संभालने वाला एजेंट, यदि कोई असाइन किया गया था |
agent_name | string | null | कॉल संभालने वाला एजेंट, यदि कोई असाइन किया गया था |
web.complete
telephony.complete का वेब-चैनल समकक्ष, जिसमें वेब
विजेट कॉल (direction: "web") और बिल्डर माइक टेस्ट कॉल
(direction: "test") शामिल हैं। नॉन-ब्लॉकिंग। इसका पेलोड स्वरूप
telephony.complete जैसा ही है, साथ में origin_domain,
और from_number को "web" पर सेट किया जाता है।
| फ़ील्ड | प्रकार | विवरण |
|---|---|---|
agent_id | integer | null | कॉल संभालने वाला एजेंट, यदि कोई असाइन किया गया था |
agent_name | string | null | कॉल संभालने वाला एजेंट, यदि कोई असाइन किया गया था |
web.tool
telephony.tool का वेब-चैनल समकक्ष। data में
from_number / to_number के बजाय origin_domain होता है।
| फ़ील्ड | प्रकार | विवरण |
|---|---|---|
agent_id | integer | null | कॉल संभालने वाला एजेंट, यदि कोई असाइन किया गया था |
agent_name | string | null | कॉल संभालने वाला एजेंट, यदि कोई असाइन किया गया था |
web.turn
telephony.turn का वेब-चैनल समकक्ष,
जिसमें वेब विजेट कॉल और बिल्डर माइक टेस्ट कॉल शामिल हैं। समान पेलोड
स्वरूप, जिसमें from_number / to_number के बजाय origin_domain होता है।
telephony.turn की तरह, इसके लिए स्पष्ट सब्सक्रिप्शन आवश्यक है —
यह कभी भी खाली events ऐरे के माध्यम से डिलीवर नहीं होता।
| फ़ील्ड | प्रकार | विवरण |
|---|---|---|
agent_id | integer | null | कॉल संभालने वाला एजेंट, यदि कोई असाइन किया गया था |
agent_name | string | null | कॉल संभालने वाला एजेंट, यदि कोई असाइन किया गया था |
call.transfer_completed
हर कॉल के लिए अंतिम परिणाम के साथ एक बार भेजा जाता है
कॉल ट्रांसफर का: एक कोल्ड ट्रांसफर, या वह मानव
ब्रिज जो एजेंट के हटने के बाद वॉर्म ट्रांसफर में रह जाता है।
यह नॉन-ब्लॉकिंग है और केवल एंडपॉइंट्स पर डिलीवर किया जाता है (लेगसी
सिंगल-URL वेबहुक पर कभी नहीं)। यह कॉल के telephony.complete के बाद आता है:
जब कैरियर कॉल ले लेता है या ट्रांसफर विफल हो जाता है, या जब
ThunderPhone ने कॉल को ब्रिज किया हो, तब ब्रिज समाप्त होने पर।
{
"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"
}| फ़ील्ड | टाइप | विवरण |
|---|---|---|
call_id | integer | वह कॉल जिसे ट्रांसफर किया गया था |
agent_id | integer | null | कॉल संभालने वाला एजेंट, यदि कोई असाइन किया गया था |
agent_name | string | null | कॉल संभालने वाले एजेंट का नाम, यदि कोई असाइन किया गया था |
transfer_outcome | string | refer_accepted: कैरियर ने कॉल संभाल लिया। bridged: ThunderPhone ने कॉलर और डेस्टिनेशन को स्वयं कनेक्टेड रखा, क्योंकि कैरियर ने कोल्ड ट्रांसफर अस्वीकार कर दिया था या वॉर्म ट्रांसफर का एजेंट हट गया था। bridge_unanswered: कैरियर ने कोल्ड ट्रांसफर अस्वीकार कर दिया और डेस्टिनेशन ने ThunderPhone की अपनी कॉल का जवाब नहीं दिया। failed: ट्रांसफर पूरा नहीं हुआ और कॉल समाप्त हो गई |
destination | string | null | वह नंबर जिस पर कॉल ट्रांसफर की गई थी |
sip_status | integer | null | कोल्ड ट्रांसफर अस्वीकार करने पर कैरियर का SIP स्टेटस: 403 (उदाहरण के लिए कॉल ट्रांसफर के बिना Twilio ट्रंक), 405 या 501। जब कैरियर ने इसे अस्वीकार नहीं किया हो, तब null |
bridge_kind | string | null | केवल bridged: cold_fallback (एक अस्वीकार किया गया कोल्ड ट्रांसफर जिसे ThunderPhone ने कनेक्ट किया) या warm (एजेंट के जाने के बाद वॉर्म ट्रांसफर के दो लोग) |
bridge_seconds | integer | null | केवल bridged: ThunderPhone द्वारा बिल किया गया ब्रिज किया गया समय, सेकंड में |
bridge_total_cents | integer | null | केवल bridged: किसी भी फ्री कॉल क्रेडिट के बाद USD सेंट में ब्रिज की लागत, जो कॉल के billing_total_cents से अलग बिल की जाती है |
यही वैल्यू कॉल ऑब्जेक्ट पर भी
transfer_outcome, transfer_destination, transfer_sip_status,
transfer_bridge_kind, transfer_bridge_seconds और
transfer_bridge_total_cents के रूप में उपलब्ध हैं। event_id हर डिलीवरी में
एक ही कॉल के लिए समान होता है, इसलिए दोहराई गई रिपोर्ट कभी दूसरा इवेंट नहीं बनाती।
SMS इवेंट्स
SMS इवेंट्स संगठन के कनेक्टेड Twilio या Telnyx अकाउंट के माध्यम से भेजे गए संदेशों का वर्णन करते हैं। संदेश का मुख्य भाग शामिल नहीं किया जाता और to रिडैक्ट किया जाता है।
जब सामग्री या प्राप्तकर्ता की आवश्यकता हो, तब संगठन-स्कोप्ड संदेश को
GET /v1/sms/{message_id} से प्राप्त करें।
sms.sent
जब ग्राहक का कैरियर आउटबाउंड SMS अनुरोध स्वीकार करता है, तब भेजा जाता है। यह हैंडसेट डिलीवरी रसीद नहीं है।
{
"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
स्थायी कैरियर अस्वीकृति के बाद, अस्थायी रीट्राई समाप्त होने के बाद, या परिणाम
स्थायी रूप से अज्ञात होने पर भेजा जाता है। error_code एक स्थिर
ThunderPhone कोड है और उपलब्ध होने पर error_message ग्राहक की आवश्यक कार्रवाई बताता है।
status: "unknown" का अर्थ है कि कैरियर ने SMS स्वीकार किया हो सकता है;
इसे कैरियर लॉग में रिकंसाइल करें, क्योंकि ThunderPhone इसे स्वचालित रूप से दोबारा नहीं भेजेगा।
sms.received
इनबाउंड SMS समर्थन के लिए आरक्षित है। वर्तमान रिलीज़ में कोई sms.received इवेंट जारी नहीं किए जाते।
इनबाउंड कैरियर webhook कॉन्फ़िगरेशन और सिग्नेचर वेरिफिकेशन अलग से जारी किए जाएंगे।
वॉइस इवेंट्स
कस्टम वॉइस निर्माण असिंक्रोनस है। ये नॉन-ब्लॉकिंग इवेंट्स आपको क्लोन विवरण एंडपॉइंट को पोल करने के बजाय किसी अंतिम परिणाम पर प्रतिक्रिया देने देते हैं।
voice.ready और voice.failed केवल events: [] वाले संगठन-व्यापी
एंडपॉइंट पर डिलीवर किए जाते हैं। इन्हें स्पष्ट इवेंट फ़िल्टर के रूप में नहीं चुना जा सकता।
voice.ready
जब कस्टम वॉइस की प्रोसेसिंग पूरी हो जाती है और उसे किसी एजेंट को असाइन किया जा सकता है, तब भेजा जाता है।
{
"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
जब कस्टम वॉइस प्रोसेसिंग स्थायी विफलता तक पहुंचती है, तब भेजा जाता है।
{
"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 | कस्टम वॉइस का सार्वजनिक id |
voice.name | string | custom:<public_id> फ़ॉर्म में एजेंट वॉइस वैल्यू |
voice.display_name | string | संगठन के लिए प्रदर्शित वॉइस नाम |
voice.language | string | क्लोन का एकल भाषा कोड |
voice.gender | string | male, female, या खाली स्ट्रिंग |
voice.status | string | voice.ready के लिए ready; voice.failed के लिए failed |
voice.failure_reason | string | सफलता पर खाली; विफलता पर प्रोसेसिंग विफलता का विवरण |
voice.created_at, voice.updated_at | timestamp | ISO 8601 टाइमस्टैम्प |
reason | string | विफलता का विवरण; केवल voice.failed पर मौजूद |
गुणवत्ता इवेंट
call.graded
किसी कॉल के लिए AI ग्रेडिंग रन पूरा होने पर भेजा जाता है। नॉन-ब्लॉकिंग।
{
"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"
}| फ़ील्ड | टाइप | विवरण |
|---|---|---|
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 | |
report | object | null | ग्राहक के लिए कॉल रिपोर्ट: परिणाम लेबल, ध्यान-आवश्यक फ़्लैग और कारण, कॉलर, एक-पंक्ति सारांश, कॉलर अनुभव। शुरुआती ह्यूरिस्टिक ग्रेड में यह null या pending रिपोर्ट होती है, जिसके फ़ील्ड प्लेसहोल्डर होते हैं; पूर्ण ग्रेड का इवेंट पूर्ण रिपोर्ट प्रदान करता है |
call.data_extracted
संरचित डेटा एक्सट्रैक्शन सफलतापूर्वक पूरा होने पर भेजा जाता है, जिसमें
telephony.complete / web.complete के बाद का देर से किया गया रीट्राई या
POST /v1/calls/{call_id}/extract के माध्यम से मैन्युअल री-रन शामिल है।
नॉन-ब्लॉकिंग।
ब्लॉकिंग एक्सट्रैक्शन मोड में, पूर्णता इवेंट सामान्यतः 75-सेकंड के
एक्सट्रैक्शन बजट से अधिक प्रतीक्षा नहीं करता। यदि एक्सट्रैक्शन वर्कर प्रोसेस
खो जाता है, तो प्रोडक्शन फाइनलाइज़ेशन ड्रेन (हर पाँच मिनट में) दूसरा
एक्सट्रैक्शन प्रयास शुरू करने से पहले उस पूर्णता को रिलीज़ करता है जिसका
blocking_deadline_at बीत चुका है। बाद की सफलता इस इवेंट के रूप में अलग से
डिलीवर की जाती है।
{
"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"
}| फ़ील्ड | प्रकार | विवरण |
|---|---|---|
agent_id | integer | null | कॉल हैंडल करने वाला एजेंट, जब कोई असाइन किया गया हो |
agent_name | string | null | कॉल हैंडल करने वाला एजेंट, जब कोई असाइन किया गया हो |
summary | string | null | जब एजेंट में कॉल सारांश जनरेट करें चालू हो, तो पूरा हुआ कॉल सारांश, ताकि देर से आने वाला एक्सट्रैक्शन इवेंट उस सारांश को भी डिलीवर करे जो पूर्णता विंडो से छूट गया था; अन्यथा null। जिन एजेंटों में सारांश है लेकिन एक्सट्रैक्शन फ़ील्ड नहीं हैं, वे यह इवेंट कभी नहीं भेजते: देर से आया सारांश GET /v1/calls/{call_id} से पढ़ें |
extracted_data.status | string | इस इवेंट के लिए हमेशा completed |
extracted_data.fields | object | कॉन्फ़िगर किए गए एक्सट्रैक्शन फ़ील्ड कीज़ के अनुसार मान; अनुपलब्ध मान null होते हैं |
extracted_data.evidence | object | एक्सट्रैक्शन फ़ील्ड के अनुसार एविडेंस। किसी नॉन-नल मान में सटीक स्ट्रक्चरल रूप से जाँचा गया कोट (अधिकतम 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 | इस एक्सट्रैक्शन के लिए उपयोग किए गए सटीक फ़ील्ड स्कीमा का हैश |
extracted_at | timestamp | ISO 8601 पूर्णता समय |
model | string | एक्सट्रैक्शन के लिए उपयोग किया गया मॉडल |
campaign.completed
किसी कैंपेन के running से completed में जाने पर एक बार भेजा जाता है, चाहे
उसका शेड्यूल समाप्त हुआ हो या सभी कॉन्टैक्ट टर्मिनल स्टेट तक पहुँच गए हों।
रनर रीट्राई कोई दूसरा इवेंट नहीं भेजते। यह संगठन-स्तरीय लाइफ़साइकल इवेंट केवल
संगठन-स्कोप्ड एंडपॉइंट को डिलीवर किया जाता है, एजेंट-स्कोप्ड एंडपॉइंट को नहीं।
नॉन-ब्लॉकिंग।
{
"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
जब कोई समस्या रिपोर्ट बनाई जाती है तब भेजा
जाता है — या तो डैशबोर्ड से उपयोगकर्ता द्वारा दर्ज की गई (source: "user")
या कॉल ग्रेडिंग द्वारा स्वचालित रूप से बनाई गई (source: "system")।
नॉन-ब्लॉकिंग।
{
"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 (ग्रेडिंग द्वारा बनाया गया) |
issue.escalated
जब कोई समस्या पैटर्न स्टाफ रिव्यू के लिए ThunderPhone को भेजा जाता है तब भेजा जाता है: ThunderPhone को रिपोर्ट करें के बाद, या जब Fix with AI कस्टमर-साइड फ़िक्स की पुष्टि नहीं कर पाता और समस्या को स्वचालित रूप से रूट करता है। केवल संगठन-व्यापी एंडपॉइंट को यह इवेंट मिलता है।
{
"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 को रिपोर्ट करें देखें।
टेस्ट कॉल इवेंट्स
test-call.completed
जब कोई
टेस्ट-कॉल रन
टर्मिनल स्टेटस — completed या failed — तक पहुंचता है, तब भेजा जाता है, जिसमें वे रन भी शामिल हैं जो लॉन्च के समय विफल हुए और कभी कॉल नहीं बना। नॉन-ब्लॉकिंग। बैच CI रन को अपने चैट/नोटिफिकेशन सिस्टम से जोड़ने के लिए उपयोगी।
{
"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 | रन द्वारा टार्गेट किया गया एजेंट id या फोन-नंबर id, जो 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
जब डेवलपर वेबहुक पर डिलीवर करें चैनल सक्षम वाला कोई अलर्ट नियम अपनी थ्रेशहोल्ड पार करता है, तब भेजा जाता है। नॉन-ब्लॉकिंग। कोई नियम एक बार फायर होता है और फिर अपने कूलडाउन का पालन करता है, इसलिए लगातार उल्लंघन से हर कूलडाउन विंडो में एक इवेंट बनता है।
{
"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 | अलर्ट फायर होने का id — एनवेलप के डिलीवरी 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 |
नियम, मीट्रिक, कूलडाउन और ईमेल / Slack चैनल बनाने के लिए अलर्ट्स गाइड देखें।
माइग्रेशन इवेंट
migration.call.complete
जब
POST /v1/migrations/{id}/calls के माध्यम से किया गया कॉल समाप्त होता है, तब भेजा जाता है, चाहे उसे किसी भी प्लेटफ़ॉर्म ने लिया हो। नॉन-ब्लॉकिंग। यह कॉल समाप्त होने के लगभग 5 मिनट तक बाद आता है। data में
telephony.complete के सभी फ़ील्ड और एक migration ब्लॉक होता है। ThunderPhone द्वारा किया गया कॉल भी सामान्य रूप से उसी call_id के साथ telephony.complete भेजता है। दूसरे प्लेटफ़ॉर्म पर किया गया ऐसा कॉल जो 2 घंटे बाद भी समाप्त नहीं हुआ है, या जिसकी माइग्रेशन पहले पूरी हो गई या जिसकी key पहले खो गई, उसे status: "unknown" और बिना ट्रांसक्रिप्ट के भेजा जाता है।
{
"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"
}| फ़ील्ड | टाइप | विवरण |
|---|---|---|
migration.id | UUID | माइग्रेशन |
migration.routing_id | UUID | रूट किया गया कॉल, जैसा कि कॉल करते समय लौटाया गया था |
migration.arm | string | ours (ThunderPhone ने कॉल किया) या vendor (दूसरे प्लेटफ़ॉर्म ने किया) |
migration.vendor | string | retell, vapi, elevenlabs, या bland |
migration.vendor_call_id | string | null | दूसरे प्लेटफ़ॉर्म का कॉल id; ours के लिए null |
migration.metadata | object | कॉल करते समय भेजा गया metadata |
migration.vendor_cost_usd | string | null | दूसरे प्लेटफ़ॉर्म द्वारा रिपोर्ट की गई कॉल लागत, यदि उसने रिपोर्ट की हो |
call_id | integer | null | ThunderPhone कॉल id; vendor के लिए null |
status | string | vendor के लिए: जब कॉल प्राप्तकर्ता ने बात की हो तो completed, जब उसने बात न की हो तो failed, और ऊपर बताए अनुसार unknown। ours के लिए: telephony.complete के समान |
vendor कॉल के लिए, ThunderPhone के पास कोई बिलिंग या एक्सट्रैक्शन डेटा नहीं होता:
billable_minutes, billing_total_cents और extracted_data null होते हैं,
product और voice खाली होते हैं, recording_mode vendor होता है, और
यदि दूसरे प्लेटफ़ॉर्म ने दिया हो तो recording_url उसका लिंक होता है।
migration.rollback
तब भेजा जाता है जब किसी माइग्रेशन का क्रमिक स्विच अपने आप हर कॉल को दूसरे प्लेटफ़ॉर्म पर वापस भेज देता है: 15 मिनट के भीतर 3 कॉल ThunderPhone से कनेक्ट नहीं हो सकीं, ThunderPhone को भेजी गई 2 कॉल एजेंट के जवाब देने से पहले समाप्त हो गईं, या ThunderPhone की टास्क आउटकम रेट दूसरे प्लेटफ़ॉर्म की रेट से कॉन्फ़िगर किए गए अंतर से अधिक नीचे गिर गई। नॉन-ब्लॉकिंग, प्रत्येक रोलबैक के लिए एक बार। इसके बाद ThunderPhone की कॉल हिस्सेदारी 0% होती है और माइग्रेशन तब तक पॉज़ रहता है जब तक कोई एजेंट के माइग्रेशन टैब पर इसे फिर से शुरू नहीं करता। पेलोड में कोई फ़ोन नंबर, ट्रांसक्रिप्ट या कॉल आईडी नहीं होती।
{
"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"
}| फ़ील्ड | टाइप | विवरण |
|---|---|---|
migration_id | UUID | माइग्रेशन |
vendor | स्ट्रिंग | retell, vapi, elevenlabs, या bland |
reason | स्ट्रिंग | ours_failed_burst (15 मिनट में 3 असफल कनेक्शन), dropped_calls (30 मिनट के भीतर एजेंट के जवाब देने से पहले समाप्त हुई 2 कॉल), या rate_gap (हर पक्ष के लिए कम से कम rollback_min_calls ग्रेड की गई कॉल पर टास्क आउटकम रेट का अंतर) |
previous_percent | इंटीजर | रोलबैक से पहले ThunderPhone की कॉल हिस्सेदारी |
ours_percent | इंटीजर | हमेशा 0 |
step | इंटीजर | null | वह शेड्यूल स्टेप जिस पर यह था (0-आधारित) |
ours / theirs | ऑब्जेक्ट | null | मौजूदा स्टेप में ग्रेड की गई कॉल और उनकी सफलता रेट; जब स्टेप में बहुत कम कॉल हों, तो theirs पिछले 30 दिनों का हो सकता है। कोई कॉल न होने पर null |
ours_failed | इंटीजर | पिछले 15 मिनट में गिने गए असफल कनेक्शन |
dropped | इंटीजर | पिछले 30 मिनट में ड्रॉप के रूप में गिनी गई कॉल |
rolled_back_at | टाइमस्टैम्प |
संबंधित
ब्लॉकिंग इनबाउंड-कॉल पेलोड, जिसका आपको जवाब देना आवश्यक है।
कॉल के बाद का ट्रांसक्रिप्ट और मीट्रिक।
इन इवेंट्स के किसी सबसेट के लिए एक URL सब्सक्राइब करें।
telephony.tool / web.tool इवेंट्स कैसे जनरेट होते हैं।