---
title: "इवेंट्स कैटलॉग"
description: "ThunderPhone द्वारा भेजे जाने वाले सभी वेबहुक इवेंट प्रकार।"
---

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

इन इवेंट्स को डिलीवर करने की दो स्टाइल हैं:

* **एंडपॉइंट डिलीवरी** हमेशा [रीट्राई](/hi/webhooks/overview) के साथ **नॉन-ब्लॉकिंग** नोटिफिकेशन होती हैं: किसी भी 2xx के साथ रिस्पॉन्ड करें; एनवेलप में डीडुप्लिकेशन के लिए `event_id` होता है।
* **ब्लॉकिंग** एक्सचेंज केवल [लेगेसी सिंगल-URL वेबहुक](/hi/webhooks/overview) पर चलते हैं: [`telephony.incoming` / `web.incoming`](/hi/webhooks/call-incoming) कॉन्फ़िगरेशन रिक्वेस्ट (वेबहुक-मोड नंबर: एक रीट्राई सहित 13 s; वेबहुक-मोड विजेट की: 10 s) और वेबहुक-मोड [टूल डिस्पैच](/hi/tools/overview)। आपका रिस्पॉन्स लाइव कॉल को आकार देता है।

नीचे दिए गए उदाहरण पेलोड्स वायर ऑर्डर में एंडपॉइंट एनवेलप दिखाते हैं
(कीज़ वर्णमाला क्रम में सॉर्ट की गई हैं: `data`, `event_id`, `type`); लेगेसी
डिलीवरी में `event_id` के बिना वही `data` होता है।

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

### `telephony.incoming`

जब कोई इनबाउंड कॉल आपके किसी
[फोन नंबर](/api-reference/phone-numbers) पर पहुंचती है, तब भेजा जाता है। एंडपॉइंट डिलीवरी
हर इनबाउंड कॉल के लिए भेजी जाने वाली फायर-एंड-फॉरगेट नोटिफिकेशन हैं, चाहे
नंबर एजेंट-कॉन्फ़िगर किया गया हो या वेबहुक-कॉन्फ़िगर किया गया हो। जिन नंबरों को
कोई एजेंट असाइन नहीं किया गया है, उन्हें लेगेसी वेबहुक पर अतिरिक्त रूप से
**ब्लॉकिंग** कॉन्फ़िगरेशन रिक्वेस्ट मिलती है — पूर्ण रिक्वेस्ट / रिस्पॉन्स स्कीमा के लिए
[`telephony.incoming` / `web.incoming`](/hi/webhooks/call-incoming) देखें।

```json
{
  "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`](/hi/webhooks/call-complete) देखें।

| फ़ील्ड | प्रकार | विवरण |
|-------|------|-------------|
| `agent_id` | integer \| null | कॉल संभालने वाला एजेंट, यदि कोई असाइन किया गया था |
| `agent_name` | string \| null | कॉल संभालने वाला एजेंट, यदि कोई असाइन किया गया था |

### `telephony.tool`

टेलीफोनी कॉल द्वारा
[फंक्शन टूल](/hi/tools/overview) इनवोक किए जाने के बाद भेजा जाता है। नॉन-ब्लॉकिंग ऑडिट नोटिफिकेशन —
यह इवेंट डिलीवर होने तक टूल पहले ही एक्ज़ीक्यूट हो चुका होता है; इसमें
आपके अपने फंक्शन टूल और बिल्ट-इन `send_sms` टूल शामिल होते हैं (अन्य बिल्ट-इन,
नॉलेज-बेस, ऐप-कनेक्शन या MCP टूल नहीं)। `send_sms` के लिए,
`arguments.to` और `arguments.body` दोनों `[REDACTED]` होते हैं। कंप्लीशन
ट्रांसक्रिप्ट भी इन्हें रिडैक्ट करते हैं; रिस्पॉन्स के `message_id` का उपयोग करके
संगठन-स्कोप्ड SMS रिसोर्स से कंटेंट और प्राप्तकर्ता प्राप्त करें।

```json
{
  "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`](/api-reference/calls#get-transcript)।
नॉन-ब्लॉकिंग।

<Note>
  **स्पष्ट सब्सक्रिप्शन आवश्यक है।** हर अन्य इवेंट प्रकार के विपरीत,
  टर्न इवेंट कभी भी खाली `events` ऐरे (सब्सक्राइब-टू-ऑल) के माध्यम से डिलीवर नहीं होते।
  किसी एंडपॉइंट को ये केवल तब मिलते हैं जब उसकी `events`
  सूची में स्पष्ट रूप से `telephony.turn` / `web.turn` शामिल हों।
</Note>

```json
{
  "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 में ऑडियो ऑफ़सेट; केवल तब मौजूद होते हैं जब इमिशन के समय प्लेआउट टाइमिंग पहले से ज्ञात हो |

<Note>
  डिलीवरी कम-से-कम-एक-बार होती है और टर्न **क्रम से बाहर** आ सकते हैं:
  एनवेलप के `event_id` पर डीडुप करें और `position` के अनुसार क्रम दें। कॉलर
  ट्रांसक्रिप्ट इमिशन के बाद भी रिफाइन हो सकते हैं; कॉल के बाद का
  [`telephony.complete`](/hi/webhooks/call-complete) ट्रांसक्रिप्ट
  आधिकारिक होता है। केवल बोले गए टर्न इमिट होते हैं — टूल कॉल, व्हिस्पर और
  अन्य इंटरनल एंट्री इस स्ट्रीम में कभी दिखाई नहीं देतीं।
</Note>

### `web.incoming`

`telephony.incoming` का वेब-चैनल समकक्ष, जो
[वेब विजेट](/hi/widget/overview) सेशन या बिल्डर माइक टेस्ट कॉल शुरू होने पर भेजा जाता है।
एंडपॉइंट डिलीवरी हर वेब सेशन के लिए फायर-एंड-फॉरगेट होती हैं।
`mode="webhook"` में पब्लिशेबल की को लेगेसी वेबहुक पर अतिरिक्त रूप से
**ब्लॉकिंग** कॉन्फ़िगरेशन रिक्वेस्ट मिलती है — उस ब्लॉकिंग रिक्वेस्ट का स्वरूप अलग होता है
(`origin_domain`, `publishable_key_prefix`; कोई फोन नंबर नहीं)। देखें
[`telephony.incoming` / `web.incoming`](/hi/webhooks/call-incoming)।

```json
{
  "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`](/hi/webhooks/call-complete) जैसा ही है, साथ में `origin_domain`,
और `from_number` को `"web"` पर सेट किया जाता है।

| फ़ील्ड | प्रकार | विवरण |
|-------|------|-------------|
| `agent_id` | integer \| null | कॉल संभालने वाला एजेंट, यदि कोई असाइन किया गया था |
| `agent_name` | string \| null | कॉल संभालने वाला एजेंट, यदि कोई असाइन किया गया था |

<Note>
  लेगेसी सिंगल-URL वेबहुक पर, बिल्डर माइक टेस्ट कॉल ऐतिहासिक रूप से
  `telephony.complete` के रूप में रिपोर्ट होती हैं — वहां केवल `direction:
  "web"` कॉल `web.complete` प्रकार का उपयोग करती हैं। एंडपॉइंट सिस्टम
  वेब और टेस्ट दोनों कॉल को `web.*` पर मैप करता है। ऐतिहासिक पेलोड में
  लेगेसी `direction` वैल्यू `widget` या `mic` हो सकती हैं।
</Note>

### `web.tool`

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

| फ़ील्ड | प्रकार | विवरण |
|-------|------|-------------|
| `agent_id` | integer \| null | कॉल संभालने वाला एजेंट, यदि कोई असाइन किया गया था |
| `agent_name` | string \| null | कॉल संभालने वाला एजेंट, यदि कोई असाइन किया गया था |

### `web.turn`

[`telephony.turn`](#telephony-turn) का वेब-चैनल समकक्ष,
जिसमें वेब विजेट कॉल और बिल्डर माइक टेस्ट कॉल शामिल हैं। समान पेलोड
स्वरूप, जिसमें `from_number` / `to_number` के बजाय `origin_domain` होता है।
`telephony.turn` की तरह, इसके लिए **स्पष्ट सब्सक्रिप्शन** आवश्यक है —
यह कभी भी खाली `events` ऐरे के माध्यम से डिलीवर नहीं होता।

| फ़ील्ड | प्रकार | विवरण |
|-------|------|-------------|
| `agent_id` | integer \| null | कॉल संभालने वाला एजेंट, यदि कोई असाइन किया गया था |
| `agent_name` | string \| null | कॉल संभालने वाला एजेंट, यदि कोई असाइन किया गया था |

### `call.transfer_completed`

हर कॉल के लिए अंतिम परिणाम के साथ एक बार भेजा जाता है
[कॉल ट्रांसफर](/hi/guides/call-transfers) का: एक कोल्ड ट्रांसफर, या वह मानव
ब्रिज जो एजेंट के हटने के बाद वॉर्म ट्रांसफर में रह जाता है।
यह नॉन-ब्लॉकिंग है और केवल एंडपॉइंट्स पर डिलीवर किया जाता है (लेगसी
सिंगल-URL वेबहुक पर कभी नहीं)। यह कॉल के `telephony.complete` के बाद आता है:
जब कैरियर कॉल ले लेता है या ट्रांसफर विफल हो जाता है, या जब
ThunderPhone ने कॉल को ब्रिज किया हो, तब ब्रिज समाप्त होने पर।

```json
{
  "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` से अलग बिल की जाती है |

यही वैल्यू [कॉल ऑब्जेक्ट](/api-reference/calls#call-object) पर भी
`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}`](/api-reference/sms#retrieve-a-message) से प्राप्त करें।

### `sms.sent`

जब ग्राहक का कैरियर आउटबाउंड SMS अनुरोध स्वीकार करता है, तब भेजा जाता है। यह
हैंडसेट डिलीवरी रसीद नहीं है।

```json
{
  "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 कॉन्फ़िगरेशन और सिग्नेचर वेरिफिकेशन अलग से जारी किए जाएंगे।

---

## वॉइस इवेंट्स

कस्टम वॉइस निर्माण असिंक्रोनस है। ये नॉन-ब्लॉकिंग इवेंट्स आपको
[क्लोन विवरण एंडपॉइंट](/api-reference/custom-voices#list-and-retrieve-clones) को पोल करने के बजाय
किसी अंतिम परिणाम पर प्रतिक्रिया देने देते हैं।

`voice.ready` और `voice.failed` केवल `events: []` वाले संगठन-व्यापी
एंडपॉइंट पर डिलीवर किए जाते हैं। इन्हें स्पष्ट इवेंट फ़िल्टर के रूप में नहीं चुना जा सकता।

### `voice.ready`

जब कस्टम वॉइस की प्रोसेसिंग पूरी हो जाती है और उसे किसी
एजेंट को असाइन किया जा सकता है, तब भेजा जाता है।

```json
{
  "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`

जब कस्टम वॉइस प्रोसेसिंग स्थायी विफलता तक पहुंचती है, तब भेजा जाता है।

```json
{
  "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 ग्रेडिंग रन](/api-reference/calls#ai-call-grading)
पूरा होने पर भेजा जाता है। नॉन-ब्लॉकिंग।

```json
{
  "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 | ग्राहक के लिए [कॉल रिपोर्ट](/api-reference/calls#call-report): परिणाम लेबल, ध्यान-आवश्यक फ़्लैग और कारण, कॉलर, एक-पंक्ति सारांश, कॉलर अनुभव। शुरुआती ह्यूरिस्टिक ग्रेड में यह `null` या `pending` रिपोर्ट होती है, जिसके फ़ील्ड प्लेसहोल्डर होते हैं; पूर्ण ग्रेड का इवेंट पूर्ण रिपोर्ट प्रदान करता है |

<Note>
  एक कॉल को एक से अधिक बार ग्रेड किया जा सकता है — रिकॉर्डिंग उपलब्ध होने पर
  तेज़ हीयूरिस्टिक ग्रेड के बाद अक्सर पूर्ण मॉडल ग्रेड आता है, और मैन्युअल
  रीग्रेड भी संभव हैं। हर पूरा रन अपना `call.graded` इवेंट भेजता है; नवीनतम
  `graded_at` को आधिकारिक मानें।
</Note>

### `call.data_extracted`

संरचित डेटा एक्सट्रैक्शन सफलतापूर्वक पूरा होने पर भेजा जाता है, जिसमें
`telephony.complete` / `web.complete` के बाद का देर से किया गया रीट्राई या
[`POST /v1/calls/{call_id}/extract`](/api-reference/calls#run-data-extraction) के माध्यम से मैन्युअल री-रन शामिल है।
नॉन-ब्लॉकिंग।

ब्लॉकिंग एक्सट्रैक्शन मोड में, पूर्णता इवेंट सामान्यतः 75-सेकंड के
एक्सट्रैक्शन बजट से अधिक प्रतीक्षा नहीं करता। यदि एक्सट्रैक्शन वर्कर प्रोसेस
खो जाता है, तो प्रोडक्शन फाइनलाइज़ेशन ड्रेन (हर पाँच मिनट में) दूसरा
एक्सट्रैक्शन प्रयास शुरू करने से पहले उस पूर्णता को रिलीज़ करता है जिसका
`blocking_deadline_at` बीत चुका है। बाद की सफलता इस इवेंट के रूप में अलग से
डिलीवर की जाती है।

<Warning>
  एक्सट्रैक्ट किए गए मान बातचीत की मॉडल-व्याख्या होते हैं। हर नॉन-नल मान में
  वह कोट, स्पीकर रोल और टर्न इंडेक्स शामिल होता है जिस पर वह आधारित था, साथ
  ही रन-लेवल वेरिफिकेशन फ्लैग भी होता है। पैसे, पहचान या एक्सेस से जुड़े
  निर्णयों से पहले परिणाम की पुष्टि करें।
</Warning>

```json
{
  "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 | जब एजेंट में **कॉल सारांश जनरेट करें** चालू हो, तो पूरा हुआ [कॉल सारांश](/hi/webhooks/call-complete), ताकि देर से आने वाला एक्सट्रैक्शन इवेंट उस सारांश को भी डिलीवर करे जो पूर्णता विंडो से छूट गया था; अन्यथा `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` में जाने पर एक बार भेजा जाता है, चाहे
उसका शेड्यूल समाप्त हुआ हो या सभी कॉन्टैक्ट टर्मिनल स्टेट तक पहुँच गए हों।
रनर रीट्राई कोई दूसरा इवेंट नहीं भेजते। यह संगठन-स्तरीय लाइफ़साइकल इवेंट केवल
संगठन-स्कोप्ड एंडपॉइंट को डिलीवर किया जाता है, एजेंट-स्कोप्ड एंडपॉइंट को नहीं।
नॉन-ब्लॉकिंग।

```json
{
  "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`

जब कोई [समस्या रिपोर्ट](/api-reference/issue-reports) बनाई जाती है तब भेजा
जाता है — या तो डैशबोर्ड से उपयोगकर्ता द्वारा दर्ज की गई (`source: "user"`)
या कॉल ग्रेडिंग द्वारा स्वचालित रूप से बनाई गई (`source: "system"`)।
नॉन-ब्लॉकिंग।

```json
{
  "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` (ग्रेडिंग द्वारा बनाया गया) |

<Note>
  किसी कॉल को रीग्रेड करने पर उसकी सिस्टम-जनरेटेड समस्या रिपोर्ट फिर से बनती
  हैं, जिससे दोबारा बनाई गई रिपोर्ट के लिए `issue.reported` फिर से भेजा जाता
  है। यदि आपको हर मूल समस्या के लिए केवल एक नोटिफ़िकेशन चाहिए, तो
  `call_id` + `title` पर डीडुप करें।
</Note>

### `issue.escalated`

जब कोई समस्या पैटर्न स्टाफ रिव्यू के लिए ThunderPhone को भेजा जाता है तब भेजा
जाता है: **ThunderPhone को रिपोर्ट करें** के बाद, या जब Fix with AI
कस्टमर-साइड फ़िक्स की पुष्टि नहीं कर पाता और समस्या को स्वचालित रूप से रूट
करता है। केवल संगठन-व्यापी एंडपॉइंट को यह इवेंट मिलता है।

```json
{
  "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 को रिपोर्ट करें](/hi/guides/issues) देखें।

---

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

### `test-call.completed`

जब कोई
[टेस्ट-कॉल रन](/api-reference/test-calls#test-call-run-object)
टर्मिनल स्टेटस — `completed` या `failed` — तक पहुंचता है, तब भेजा जाता है, जिसमें वे रन भी शामिल हैं जो लॉन्च के समय विफल हुए और कभी कॉल नहीं बना। नॉन-ब्लॉकिंग। बैच CI रन को अपने चैट/नोटिफिकेशन सिस्टम से जोड़ने के लिए उपयोगी।

```json
{
  "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`

जब **डेवलपर वेबहुक पर डिलीवर करें** चैनल सक्षम वाला कोई [अलर्ट नियम](/hi/guides/alerts) अपनी थ्रेशहोल्ड पार करता है, तब भेजा जाता है।
नॉन-ब्लॉकिंग। कोई नियम एक बार फायर होता है और फिर अपने कूलडाउन का पालन करता है, इसलिए लगातार उल्लंघन से हर कूलडाउन विंडो में एक इवेंट बनता है।

```json
{
  "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 चैनल बनाने के लिए [अलर्ट्स गाइड](/hi/guides/alerts) देखें।

---

## माइग्रेशन इवेंट

### `migration.call.complete`

जब
[`POST /v1/migrations/{id}/calls`](/api-reference/migration-calls) के माध्यम से किया गया कॉल समाप्त होता है, तब भेजा जाता है, चाहे उसे किसी भी प्लेटफ़ॉर्म ने लिया हो। नॉन-ब्लॉकिंग। यह कॉल समाप्त होने के लगभग 5 मिनट तक बाद आता है। `data` में
[`telephony.complete`](/hi/webhooks/call-complete) के सभी फ़ील्ड और एक `migration` ब्लॉक होता है। ThunderPhone द्वारा किया गया कॉल भी सामान्य रूप से उसी `call_id` के साथ `telephony.complete` भेजता है। दूसरे प्लेटफ़ॉर्म पर किया गया ऐसा कॉल जो 2 घंटे बाद भी समाप्त नहीं हुआ है, या जिसकी माइग्रेशन पहले पूरी हो गई या जिसकी key पहले खो गई, उसे `status: "unknown"` और बिना ट्रांसक्रिप्ट के भेजा जाता है।

```json
{
  "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% होती है और माइग्रेशन तब तक पॉज़ रहता है जब
तक कोई एजेंट के माइग्रेशन टैब पर इसे फिर से शुरू नहीं करता। पेलोड में कोई फ़ोन
नंबर, ट्रांसक्रिप्ट या कॉल आईडी नहीं होती।

```json
{
  "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` | टाइमस्टैम्प | |

---

## संबंधित

<CardGroup cols={2}>
  <Card title="telephony.incoming / web.incoming" icon="phone" href="/hi/webhooks/call-incoming">
    ब्लॉकिंग इनबाउंड-कॉल पेलोड, जिसका आपको जवाब देना आवश्यक है।
  </Card>
  <Card title="telephony.complete / web.complete" icon="phone-slash" href="/hi/webhooks/call-complete">
    कॉल के बाद का ट्रांसक्रिप्ट और मीट्रिक।
  </Card>
  <Card title="वेबहुक एंडपॉइंट्स" icon="bolt" href="/hi/webhooks/endpoints">
    इन इवेंट्स के किसी सबसेट के लिए एक URL सब्सक्राइब करें।
  </Card>
  <Card title="फ़ंक्शन टूल्स" icon="screwdriver-wrench" href="/hi/tools/overview">
    `telephony.tool` / `web.tool` इवेंट्स कैसे जनरेट होते हैं।
  </Card>
</CardGroup>
