ThunderPhone 2.0 अब लाइव है।सेल्फ़-सर्व, 2¢ प्रति मिनट से शुरू।घोषणा पढ़ें

Webhooks

इवेंट्स कैटलॉग

ThunderPhone द्वारा भेजे जाने वाले सभी वेबहुक इवेंट प्रकार।

हर webhook बॉडी में एक type फ़ील्ड होता है जिसका मान इस पेज पर दिए गए इवेंट टाइप में से एक होता है। जब आप किसी एंडपॉइंट को सब्सक्राइब करते हैं, तो events ऐरे में वे इवेंट टाइप होने चाहिए जो आप चाहते हैं (या सब कुछ सब्सक्राइब करने के लिए इसे खाली छोड़ें — प्रति-टर्न इवेंट telephony.turn / web.turn को छोड़कर, जो केवल उन एंडपॉइंट पर डिलीवर किए जाते हैं जो उन्हें स्पष्ट रूप से नामित करते हैं)।

ये इवेंट दो डिलीवरी स्टाइल में भेजे जाते हैं:

  • एंडपॉइंट डिलीवरी हमेशा रीट्राई के साथ नॉन-ब्लॉकिंग नोटिफिकेशन होती हैं: किसी भी 2xx के साथ रिस्पॉन्ड करें; डीडुप्लिकेशन के लिए एनवेलप में एक event_id होता है।
  • ब्लॉकिंग एक्सचेंज केवल लेगसी सिंगल-URL webhook पर चलते हैं: telephony.incoming / web.incoming कॉन्फ़िगरेशन रिक्वेस्ट (webhook-मोड नंबर और विजेट की, 10 s टाइमआउट) और webhook-मोड टूल डिस्पैच। आपका रिस्पॉन्स लाइव कॉल को आकार देता है।

नीचे दिए गए उदाहरण पेलोड अपने वायर ऑर्डर में एंडपॉइंट एनवेलप दिखाते हैं (की को वर्णानुक्रम में सॉर्ट किया गया है: 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"
}

telephony.complete

जब कोई इनबाउंड या आउटबाउंड टेलीफोनी कॉल समाप्त होती है, तब भेजा जाता है। नॉन-ब्लॉकिंग। इसमें ट्रांसक्रिप्ट, उपलब्ध होने पर रिकॉर्डिंग URL और बिलिंग सारांश शामिल होता है। पेलोड स्कीमा के लिए telephony.complete / web.complete देखें।

telephony.tool

टेलीफोनी कॉल द्वारा फ़ंक्शन टूल इनवोक किए जाने के बाद भेजा जाता है। नॉन-ब्लॉकिंग ऑडिट नोटिफ़िकेशन — यह इवेंट डिलीवर होने तक टूल पहले ही एक्जीक्यूट हो चुका होता है; यह आपके अपने फ़ंक्शन टूल्स को कवर करता है (बिल्ट-इन, नॉलेज-बेस, ऐप-कनेक्शन, या 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 एक्जीक्यूट किया गया परिणाम है: सफलता पर {"status": <http status>, "response": <your endpoint's JSON>}, या विफलता पर {"status": <status>, "error": "<message>"}

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"
}
फ़ील्डटाइपविवरण
positionइंटीजरकॉल हिस्ट्री में टर्न का इंडेक्स — क्रम निर्धारण के लिए एक स्थिर पहचान
roleस्ट्रिंगassistant (एजेंट स्पीच) या user (कॉलर स्पीच)
textस्ट्रिंगइमिशन के समय उपलब्ध टर्न का ट्रांसक्रिप्ट टेक्स्ट
entry_typeस्ट्रिंगअंतर्निहित हिस्ट्री एंट्री टाइप: completion (एजेंट), या user_turn / span (कॉलर)
start_ms, end_msइंटीजरकॉल शुरू होने के बाद से 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 खाली होते हैं।

web.complete

telephony.complete का वेब-चैनल समकक्ष, जिसमें वेब विजेट कॉल्स (direction: "web") और बिल्डर माइक टेस्ट कॉल्स (direction: "test") शामिल हैं। नॉन-ब्लॉकिंग। पेलोड संरचना telephony.complete जैसी ही है, साथ में origin_domain, और from_number को "web" पर सेट किया जाता है।

web.tool

telephony.tool का वेब-चैनल समकक्ष। data में from_number / to_number के बजाय origin_domain होता है।

web.turn

telephony.turn का वेब-चैनल समकक्ष, जिसमें वेब विजेट कॉल्स और बिल्डर माइक टेस्ट कॉल्स शामिल हैं। पेलोड संरचना समान है, जिसमें from_number / to_number के बजाय origin_domain होता है। telephony.turn की तरह, इसके लिए स्पष्ट सब्सक्रिप्शन आवश्यक है — यह कभी भी खाली 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स्ट्रिंगकस्टम वॉइस का पब्लिक आईडी
voice.nameस्ट्रिंगcustom:<public_id> फ़ॉर्म में एजेंट वॉइस वैल्यू
voice.display_nameस्ट्रिंगसंगठन के लिए प्रदर्शित वॉइस नाम
voice.languageस्ट्रिंगक्लोन का एकल भाषा कोड
voice.genderस्ट्रिंगmale, female, या खाली स्ट्रिंग
voice.statusस्ट्रिंगvoice.ready के लिए ready; voice.failed के लिए failed
voice.failure_reasonस्ट्रिंगसफलता पर खाली; विफलता पर प्रोसेसिंग विफलता का विवरण
voice.created_at, voice.updated_atटाइमस्टैम्पISO 8601 टाइमस्टैम्प
reasonस्ट्रिंगविफलता का विवरण; केवल 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…"
    }
  },
  "event_id": "7c1d2e3f-4a5b-4c6d-8e9f-0a1b2c3d4e5f",
  "type": "call.graded"
}
फ़ील्डटाइपविवरण
grade.idपूर्णांकग्रेड आईडी
grade.scoreपूर्णांक | null0–100
grade.call_outcomeस्ट्रिंगsuccess, failure, unknown, या no_conversation
grade.summaryस्ट्रिंगएक-पैराग्राफ सारांश
grade.detected_issuesऐरेग्रेडर द्वारा पाए गए समस्या स्ट्रिंग्स
grade.statusस्ट्रिंगहमेशा completed — केवल पूरे हुए रन ही भेजते हैं
grade.grader_modelस्ट्रिंगपरिणाम देने वाला ग्रेडर, जैसे heuristic-v1
grade.graded_at, grade.created_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"
}
फ़ील्डटाइपविवरण
issue_report.severityस्ट्रिंगcritical, warning, या info
issue_report.statusस्ट्रिंगopen या resolved
issue_report.sourceस्ट्रिंगuser (डैशबोर्ड से दर्ज) या system (ग्रेडिंग द्वारा बनाई गई)

टेस्ट कॉल इवेंट्स

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"
}
फ़ील्डटाइपविवरण
test_call_run.target_typeस्ट्रिंगagent या phone_number
test_call_run.target_idपूर्णांकरन द्वारा लक्षित एजेंट आईडी या फोन-नंबर आईडी, जो target_type से मेल खाती है
test_call_run.statusस्ट्रिंगcompleted या failed
test_call_run.call_idपूर्णांक | nullजब कॉल किए जाने से पहले रन विफल हो जाए, तब null
test_call_run.error_messageस्ट्रिंगसफलता पर खाली

अलर्ट इवेंट्स

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अलर्ट फायरिंग आईडी — एनवेलप की डिलीवरी event_id से अलग
rule_id, rule_nameUUID, स्ट्रिंगवह नियम जो फायर हुआ
metricस्ट्रिंगsuccess_rate, failure_rate, avg_score, call_volume, या suite_regression
comparatorस्ट्रिंगlt, lte, gt, या gte
metric_valueनंबरनियम फायर होने के समय विंडो में मेट्रिक का मान
thresholdनंबरकॉन्फ़िगर की गई थ्रेशहोल्ड
window_hoursइंटीजरट्रेलिंग मूल्यांकन विंडो
fired_atटाइमस्टैम्प

नियम, मेट्रिक, कूलडाउन, और ईमेल / Slack चैनल बनाने के लिए अलर्ट्स गाइड देखें।


संबंधित