---
title: "Webhook एंडपॉइंट्स"
description: "प्रत्येक एंडपॉइंटसाठी स्वतंत्र सीक्रेट्स आणि इव्हेंट फिल्टर्ससह अनेक webhook URL व्यवस्थापित करा."
---

एंडपॉइंट-आधारित वेबहुक प्रणाली तुम्हाला प्रत्येक संस्थेसाठी **अनेक**
गंतव्ये नोंदवू देते, प्रत्येकाचे स्वतःचे गुपित, स्वतःची
स्थिती आणि इव्हेंट प्रकारांच्या उपसंचासाठी स्वतःची सदस्यता असते. सर्व नवीन एकत्रीकरणांसाठी हे
शिफारस केलेले मॉडेल आहे.

मागील सुसंगततेसाठी ठेवलेल्या, परंतु प्रत्येक संस्थेसाठी फक्त एक URL समर्थित असलेल्या
[लेगसी सिंगल-URL वेबहुकशी](/api-reference/organizations#legacy-single-url-webhook) तुलना करा.

## एंडपॉइंट्स

| पद्धत | पथ | आवश्यक भूमिका | वर्णन |
|--------|------|---------------|-------------|
| `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 | एंडपॉइंट id |
| `label` | string | प्रदर्शन नाव, 1–120 वर्ण |
| `url` | string | HTTPS URL; डेव्हलपमेंटसाठी `http://localhost` अनुमत आहे |
| `events` | string ची array | सदस्यत्व घेतलेले इव्हेंट प्रकार ([वैध मूल्ये](#valid-event-types) पहा). रिकामी array स्पष्टपणे निवडाव्या लागणाऱ्या प्रति-टर्न इव्हेंट्स (`telephony.turn` / `web.turn`) वगळता सर्व इव्हेंट्सचे सदस्यत्व घेते |
| `status` | string | `active`, `disabled` (हाताने थांबवलेले), किंवा `failing` (एकाही 2xx शिवाय डिलिव्हरीने तिचे 24 तासांचे retry वेळापत्रक संपवल्यावर आपोआप सेट होते) |
| `agent_id` | integer \| null | हा एंडपॉइंट ज्या एजंटपुरता मर्यादित आहे तो एजंट; `null` म्हणजे संपूर्ण संस्थेसाठी |
| `agent_name` | string \| null | मर्यादित एजंटचे नाव किंवा संपूर्ण संस्थेच्या एंडपॉइंटसाठी `null` |
| `secret_hint` | string | स्वाक्षरी secret मधील पहिले 4 आणि शेवटचे 4 वर्ण, मधे ellipsis सह (`a1b2…9f0e`) — पूर्ण मूल्य उघड न करता तुम्ही स्थानिकरित्या जतन केलेल्या secret शी संदर्भ जुळवण्यासाठी पुरेसे |
| `created_at`, `updated_at` | timestamp | |

<Note>
  एंडपॉइंटचा संपूर्ण `secret` तयार करताना **फक्त एकदाच** परत केला जातो आणि
  त्यानंतर कधीही नाही. तो सुरक्षितपणे साठवा — तो हरवल्यास, एंडपॉइंट हटवा
  आणि पुन्हा तयार करा.
</Note>

### वैध इव्हेंट प्रकार

`events` हे नेमक्या या संचाविरुद्ध पडताळले जाते — सूचीबाहेरील मूल्ये
`400` परत करतात. प्रत्येक प्रकाराच्या payload संरचनेसाठी [इव्हेंट्स कॅटलॉग](/mr/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` — एंडपॉइंटकडे जाणारी डिलिव्हरी एकाही 2xx शिवाय तिचे संपूर्ण retry
  वेळापत्रक (24 तासांत 8 प्रयत्न) संपवते तेव्हा आपोआप सेट होते.
  failing एंडपॉइंटला पुढील कोणताही ट्रॅफिक मिळत नाही.
  एंडपॉइंट दुरुस्त झाल्यावर, `PATCH` वापरून त्याची स्थिती पुन्हा `active` करा;
  ज्या डिलिव्हरींचे retry वेळापत्रक अद्याप संपलेले नाही, त्या जिथे थांबल्या होत्या तिथून पुन्हा सुरू होतात.

---

## एंडपॉइंट्सची सूची

<CodeGroup>
```bash cURL
curl https://api.thunderphone.com/v1/developer/webhook-endpoints \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY"
```
</CodeGroup>

[एंडपॉइंट ऑब्जेक्ट्सची](#endpoint-object) array परत करते.
फक्त त्या एजंटपुरते मर्यादित एंडपॉइंट्स परत करण्यासाठी `?agent_id=42` पास करा.

### एजंट-पुरते मर्यादित एंडपॉइंट्स

संपूर्ण संस्थेचे एंडपॉइंट्स प्रत्येक जुळणारा इव्हेंट प्राप्त करतात. `agent_id` असलेला
एंडपॉइंट फक्त त्या एजंटने हाताळलेल्या कॉल्ससाठीचे जुळणारे इव्हेंट प्राप्त करतो;
`alert.triggered` सारखे एजंट संदर्भ नसलेले इव्हेंट त्याच्यापर्यंत कधीही पोहोचत नाहीत. तुम्ही
एजंट बिल्डरच्या
**Webhooks** विभागातूनही हे एंडपॉइंट्स तयार आणि व्यवस्थापित करू शकता.

---

## एंडपॉइंट तयार करा

<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` वापरा |

[एंडपॉइंट ऑब्जेक्ट](#endpoint-object) सोबत `201 Created` परत करते, तसेच
मूळ स्वाक्षरी की असलेले अतिरिक्त शीर्ष-स्तरीय `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`. सर्व्हरने `failing` म्हणून चिन्हांकित केलेला एंडपॉइंट पुन्हा सक्षम करण्यासाठी `active` सेट करा |
| `agent_id` | पूर्णांक \| null | एंडपॉइंट मर्यादित करण्यासाठी एजंट आयडी सेट करा किंवा तो संस्थाभराचा करण्यासाठी `null` सेट करा |

अपडेट केलेल्या [एंडपॉइंट ऑब्जेक्ट](#endpoint-object) सोबत `200 OK` परत करते.

---

## चाचणी डिलिव्हरी पाठवा

कॅनॉनिकल JSON सिरिअलायझेशन,
`X-ThunderPhone-Signature`, डिलिव्हरी रेकॉर्डिंग आणि रीट्राय नोंदींसह, सामान्य
डिलिव्हरी पाइपलाइन वापरून एका एंडपॉइंटला कृत्रिम `webhook.test` इव्हेंट पाठवा.
चाचणी एंडपॉइंटच्या `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="/mr/webhooks/events">
    तुम्ही सबस्क्राइब करू शकता अशा `events` मूल्यांची संपूर्ण यादी.
  </Card>
  <Card title="वेबहुक्स विहंगावलोकन" icon="bolt" href="/mr/webhooks/overview">
    सिग्नेचर पडताळणी आणि डिलिव्हरीचे अर्थविज्ञान.
  </Card>
</CardGroup>
