---
title: "వెబ్‌హుక్స్ అవలోకనం"
description: "ThunderPhone రియల్-టైమ్ ఈవెంట్‌లను ఎలా అందిస్తుందో, సంతకాలను ఎలా ధృవీకరించాలో, అలాగే లెగసీ మరియు ఎండ్‌పాయింట్-ఆధారిత డెలివరీ మోడల్‌లను ఎలా పోల్చాలో తెలుసుకోండి."
---

ThunderPhone కాల్ సమయంలో సంఘటనలు జరిగినప్పుడు మీ సర్వర్‌కు HTTP `POST` అభ్యర్థనలను పంపుతుంది — ఇన్‌బౌండ్ కాల్ ప్రారంభమైనప్పుడు, కాల్ ముగిసినప్పుడు, గ్రేడింగ్ రన్ పూర్తైనప్పుడు, అలర్ట్ ట్రిగర్ అయినప్పుడు మొదలైనవి. **రెండు డెలివరీ మోడళ్లు** ఉన్నాయి:

<CardGroup cols={2}>
  <Card title="వెబ్‌హుక్ ఎండ్‌పాయింట్లు (సిఫార్సు చేయబడినవి)" icon="bolt" href="/te/webhooks/endpoints">
    బహుళ URLలు, ప్రతి ఎండ్‌పాయింట్‌కు ప్రత్యేక సీక్రెట్‌లు, ప్రతి ఎండ్‌పాయింట్‌కు ప్రత్యేక ఈవెంట్ ఫిల్టర్‌లు,
    మరియు ఆటోమేటిక్ రీట్రైలు.
    `GET/POST/PATCH/DELETE /v1/developer/webhook-endpoints` ద్వారా నిర్వహించండి.
  </Card>
  <Card title="ఒకే-URL లెగసీ వెబ్‌హుక్" icon="link" href="/api-reference/organizations#legacy-single-url-webhook">
    ప్రతి ఆర్గ్‌కు ఒక URL. **బ్లాకింగ్** కాన్ఫిగరేషన్ ఎక్స్ఛేంజ్‌లతో సహా
    కాల్-లైఫ్‌సైకిల్ ఈవెంట్‌లను కలిగి ఉంటుంది. `GET/PUT /v1/webhook` వద్ద నిర్వహించబడుతుంది.
  </Card>
</CardGroup>

[ఈవెంట్‌ల కేటలాగ్](/te/webhooks/events)లోని మొత్తం పది ఈవెంట్ రకాలు
వెబ్‌హుక్ ఎండ్‌పాయింట్ల ద్వారా డెలివర్ చేయబడతాయి. ఆరు కాల్-లైఫ్‌సైకిల్ ఈవెంట్‌లు
(`telephony.incoming`, `telephony.complete`, `telephony.tool`,
`web.incoming`, `web.complete`, `web.tool`) లెగసీ ఒకే-URL వెబ్‌హుక్‌కు **కూడా** పంపబడతాయి — మీకు లెగసీ URL మరియు సరిపోలే ఎండ్‌పాయింట్ రెండూ ఉంటే, మీరు ఈవెంట్‌ను **రెండు** మార్గాల్లో స్వీకరిస్తారు. బ్లాకింగ్ ప్రవర్తన ([`telephony.incoming` / `web.incoming` కాన్ఫిగరేషన్
ఎక్స్ఛేంజ్](/te/webhooks/call-incoming) మరియు వెబ్‌హుక్-మోడ్
[టూల్ డిస్పాచ్](/te/tools/overview)) ప్రత్యేకంగా లెగసీ మార్గంలోనే ఉంటుంది; ప్రతి ఎండ్‌పాయింట్ డెలివరీ ప్రతిస్పందన కోసం వేచి ఉండని నోటిఫికేషన్.

## పేలోడ్ ఫార్మాట్

ఎండ్‌పాయింట్ డెలివరీలు `data`, `event_id`, మరియు
`type`తో కూడిన JSON ఆబ్జెక్ట్:

```json
{
  "data": {
    "call_id": 987654321,
    "from_number": "+14155550199",
    "to_number": "+15551234567"
  },
  "event_id": "3f6b2ad0-1c9e-4a57-9f2b-8f6f0f9d2f11",
  "type": "telephony.incoming"
}
```

`event_id` విడుదల చేయబడిన ప్రతి ఈవెంట్‌కు ప్రత్యేకమైనది. ఇది రీట్రైల అంతటా
**మరియు** ఈవెంట్‌ను స్వీకరించే ప్రతి ఎండ్‌పాయింట్‌లో ఒకేలా ఉంటుంది — దీని ఆధారంగా డూప్లికేట్‌లను తొలగించండి.

లెగసీ ఒకే-URL వెబ్‌హుక్ అదే `type` మరియు `data`ను పంపుతుంది, కానీ
`event_id` **లేకుండా**:

```json
{
  "type": "telephony.incoming",
  "data": { "call_id": 987654321, "from_number": "+14155550199", "to_number": "+15551234567" }
}
```

ప్రసారంలో, ప్రతి బాడీ ప్రామాణికంగా సీరియలైజ్ చేయబడుతుంది — కీలు అక్షర క్రమంలో
సార్ట్ చేయబడతాయి, వైట్‌స్పేస్ ఉండదు, UTF-8 ఉపయోగించబడుతుంది. ఈ డాక్యుమెంటేషన్‌లోని
చదవడానికి సులభమైన ఉదాహరణలు స్పష్టత కోసం మాత్రమే.

ఈవెంట్ రకాలు మరియు పేలోడ్ ఫీల్డ్‌ల పూర్తి జాబితా కోసం [ఈవెంట్‌ల కేటలాగ్](/te/webhooks/events) చూడండి.

## సిగ్నేచర్ ధృవీకరణ

ప్రతి రిక్వెస్ట్‌లో `X-ThunderPhone-Signature` హెడర్‌లో **రా రిక్వెస్ట్
బాడీ**పై HMAC-SHA256 సిగ్నేచర్ ఉంటుంది. సైనింగ్ కీ అనేది ఎండ్‌పాయింట్‌కు చెందిన
`secret` (లేదా లెగసీ డెలివరీల కోసం మీ సంస్థ-స్థాయి వెబ్‌హుక్ `secret`).

### దశలు

1. ఏదైనా పార్సింగ్‌కు **ముందు** రా రిక్వెస్ట్ బాడీని చదవండి.
2. `hmac_sha256(secret, body).hexdigest()`ను గణించండి.
3. `X-ThunderPhone-Signature` హెడర్‌తో స్థిర సమయ పద్ధతిలో పోల్చండి.

మేము పంపే బైట్‌లనే సరిగ్గా సైన్ చేస్తాము, ఆ బైట్‌లు కానానికల్ JSON
సీరియలైజేషన్‌ (క్రమబద్ధమైన కీలు, కాంపాక్ట్ సెపరేటర్‌లు). కాబట్టి రా బాడీతో
ధృవీకరించడం ఎల్లప్పుడూ పనిచేస్తుంది — మీ ఫ్రేమ్‌వర్క్ మీకు పార్స్ చేసిన JSONను
మాత్రమే ఇస్తే, దానిని క్రమబద్ధమైన కీలు మరియు కాంపాక్ట్ సెపరేటర్‌లతో మళ్లీ
సీరియలైజ్ చేయడం ఒకే విధమైన బైట్‌లను ఉత్పత్తి చేస్తుంది. రెండు పద్ధతులూ
[ధృవీకరణ గైడ్](/te/guides/verify-webhook-signatures)లో ఉన్నాయి.

<CodeGroup>
```python Python
import hmac
import hashlib

def verify_signature(body: bytes, signature: str, secret: str) -> bool:
    expected = hmac.new(
        secret.encode("utf-8"),
        body,
        hashlib.sha256,
    ).hexdigest()
    return hmac.compare_digest(expected, signature or "")

# Example Flask handler
from flask import Flask, request, abort
app = Flask(__name__)

@app.post("/thunderphone-webhook")
def handle():
    body = request.get_data()
    sig = request.headers.get("X-ThunderPhone-Signature", "")
    if not verify_signature(body, sig, WEBHOOK_SECRET):
        abort(401)
    event = request.get_json()
    # dispatch on event["type"] …
    return "", 204
```

```javascript Node.js (Express)
import crypto from "node:crypto";
import express from "express";

function verifySignature(body, signature, secret) {
  const expected = crypto
    .createHmac("sha256", secret)
    .update(body)
    .digest("hex");
  if (!signature || expected.length !== signature.length) return false;
  return crypto.timingSafeEqual(
    Buffer.from(expected),
    Buffer.from(signature),
  );
}

const app = express();
app.post(
  "/thunderphone-webhook",
  express.raw({ type: "application/json" }),
  (req, res) => {
    const sig = req.header("X-ThunderPhone-Signature") || "";
    if (!verifySignature(req.body, sig, process.env.WEBHOOK_SECRET)) {
      return res.sendStatus(401);
    }
    const event = JSON.parse(req.body.toString("utf8"));
    // dispatch on event.type …
    res.sendStatus(204);
  },
);
```
</CodeGroup>

## డెలివరీ సెమాంటిక్స్

ఈ సెమాంటిక్స్ **ఎండ్‌పాయింట్** డెలివరీలకు వర్తిస్తాయి. లెగసీ సింగిల్-URL
వెబ్‌హుక్‌లో రీట్రైలు లేకుండా ఒకే సింక్రోనస్ ప్రయత్నం ఉంటుంది.

<AccordionGroup>
  <Accordion title="రీట్రైలు">
    ప్రతి ఈవెంట్‌ను వెంటనే ఒకసారి ప్రయత్నిస్తాము. ఏదైనా `2xx` ప్రతిస్పందన
    డెలివరీని అంగీకరిస్తుంది. ఇతర ఏ ఫలితం వచ్చినా (2xx కానిది,
    కనెక్షన్ లోపం, టైమ్‌అవుట్), **మొదటి ప్రయత్నం తర్వాత 1 నిమిషం, 5 నిమిషాలు, 30 నిమిషాలు, 2 గంటలు, 6 గంటలు,
    12 గంటలు, మరియు 24 గంటలకు** మేము మళ్లీ ప్రయత్నిస్తాము — 24 గంటల వ్యవధిలో
    8 ప్రయత్నాలు. ప్రతి ప్రయత్నం విఫలమైతే, డెలివరీ ఆగిపోతుంది మరియు ఎండ్‌పాయింట్‌కు
    [వెబ్‌హుక్ ఎండ్‌పాయింట్లు](/te/webhooks/endpoints)లో
    `status="failing"` గుర్తు పెట్టబడుతుంది. పేలోడ్‌ను శాశ్వతంగా అంగీకరించిన వెంటనే
    `2xx`ని తిరిగి పంపండి; అసింక్రోనస్‌గా ప్రాసెస్ చేయండి.
  </Accordion>

  <Accordion title="క్రమబద్ధత">
    డెలివరీ క్రమబద్ధత అత్యుత్తమ ప్రయత్న ప్రాతిపదికన ఉంటుంది. ఆచరణలో, ఈవెంట్‌లు
    వెలువడిన క్రమంలోనే మేము డెలివర్ చేస్తాము, కానీ వైఫల్యాల సందర్భంలో రీట్రైలు
    క్రమాన్ని మార్చవచ్చు. ఎల్లప్పుడూ `call_id` / ఆబ్జెక్ట్ ఐడి ఆధారంగా డీడూప్లికేట్ చేసి
    సరిచూసుకోండి.
  </Accordion>

  <Accordion title="నకిలీలు">
    డెలివరీ **కనీసం-ఒక్కసారి** జరుగుతుంది: మాకు కనిపించని ప్రతిస్పందన తర్వాత చేసిన రీట్రై
    ఒక ఈవెంట్‌ను నకిలీ చేయవచ్చు. ప్రతి రీట్రైలో ఒకే `event_id` ఉంటుంది, కాబట్టి ప్రాసెస్ చేసిన
    ఐడీలను నిల్వ చేసి పునరావృతాలను దాటవేయండి. `event_id` ఎండ్‌పాయింట్ల మధ్య కూడా
    భాగస్వామ్యం చేయబడుతుంది — ఒకే ఈవెంట్‌కు సబ్‌స్క్రైబ్ అయిన రెండు ఎండ్‌పాయింట్లు
    ఒకే `event_id`ను పొందుతాయి.
  </Accordion>

  <Accordion title="టైమ్‌అవుట్‌లు">
    ఎండ్‌పాయింట్ డెలివరీలకు ప్రతి ప్రయత్నానికి **30 సెకన్ల** టైమ్‌అవుట్ ఉంటుంది. లెగసీ
    మార్గంలో, లైవ్ కాల్ ప్రవర్తనను నియంత్రించే బ్లాకింగ్ అభ్యర్థనలు — 
    [`telephony.incoming` / `web.incoming`](/te/webhooks/call-incoming)
    కాన్ఫిగరేషన్ మార్పిడి — **10 సెకన్ల** తర్వాత టైమ్‌అవుట్ అవుతుంది, కానీ నెమ్మదైన
    ప్రతిస్పందన కాల్ పికప్‌ను ఆలస్యం చేస్తుంది, కాబట్టి కొన్ని సెకన్లలో సమాధానం ఇవ్వాలని
    లక్ష్యంగా పెట్టుకోండి. వెబ్‌హుక్-మోడ్ [టూల్ డిస్పాచ్](/te/tools/overview)కు డిఫాల్ట్‌గా 20 సెకన్లు
    అనుమతించబడతాయి, మరియు టూల్ డిక్లరేషన్‌లు టాప్-లెవల్ `timeout`ను సెట్ చేయవచ్చు.
  </Accordion>

  <Accordion title="మూల IPలు">
    అవుట్‌బౌండ్ వెబ్‌హుక్‌లు ThunderPhone క్లౌడ్ IP శ్రేణి నుంచి ఉద్భవిస్తాయి.
    మీ ఫైర్‌వాల్‌కు అలౌలిస్ట్ అవసరమైతే, సపోర్ట్‌ను సంప్రదించండి; ప్రస్తుత
    శ్రేణులను మేము పంచుకుంటాము.
  </Accordion>
</AccordionGroup>

## లెగసీ మరియు ఎండ్‌పాయింట్ ఆధారిత వెబ్‌హుక్‌ల మధ్య ఎంచుకోవడం

| ఫీచర్ | లెగసీ (`/v1/webhook`) | ఎండ్‌పాయింట్లు (`/v1/developer/webhook-endpoints`) |
|---------|------------------------|----------------------------------------------|
| URLల సంఖ్య | ప్రతి సంస్థకు 1 | ప్రతి సంస్థకు అనేకం |
| ఈవెంట్ కవరేజ్ | `telephony.*` / `web.*` మాత్రమే | అన్ని 10 ఈవెంట్ రకాలు |
| ఈవెంట్ ఫిల్టర్ | — | ప్రతి ఎండ్‌పాయింట్‌కు |
| రీట్రైలు | ఏవీ లేవు | 24 గంటల్లో 8 ప్రయత్నాలు |
| ఎన్వలప్ | `type` + `data` | `type` + `data` + `event_id` |
| సీక్రెట్ రొటేషన్ | ఒకే సీక్రెట్‌ను భర్తీ చేస్తుంది | ప్రతి ఎండ్‌పాయింట్‌కు సీక్రెట్ |
| తొలగించకుండా డిసేబుల్ చేయడం | `{"url": ""}`తో `PUT /v1/webhook` | `status=disabled` |
| స్థితి దృశ్యమానత | — | `active` / `disabled` / `failing` |
| బ్లాకింగ్ కాన్ఫిగరేషన్ మార్పిడి | అవును ([`telephony.incoming` / `web.incoming`](/te/webhooks/call-incoming)) | ఎప్పుడూ కాదు — నోటిఫికేషన్‌లు మాత్రమే |
| ఉత్తమ ఉపయోగం | డైనమిక్ కాల్ కాన్ఫిగరేషన్ | ప్రొడక్షన్‌లో ఈవెంట్ వినియోగం |

కొత్త ఇంటిగ్రేషన్‌లు ఎండ్‌పాయింట్ ఆధారిత వెబ్‌హుక్‌ల ద్వారా ఈవెంట్‌లను
వినియోగించాలి. మీరు పికప్ సమయంలో కాల్‌లను డైనమిక్‌గా కాన్ఫిగర్ చేస్తే లేదా
వెబ్‌హుక్-మోడ్ టూల్ డిస్పాచ్‌ను ఉపయోగిస్తే మాత్రమే లెగసీ URLను ఉంచండి
(లేదా జోడించండి) — ఆ అభ్యర్థన/ప్రతిస్పందన మార్పిడులు లెగసీ మార్గంలో మాత్రమే నడుస్తాయి.

---

## సంబంధిత

<CardGroup cols={2}>
  <Card title="ఈవెంట్‌ల కేటలాగ్" icon="list" href="/te/webhooks/events">
    అన్ని ఈవెంట్ రకాలు మరియు వాటి పేలోడ్‌లు.
  </Card>
  <Card title="వెబ్‌హుక్ ఎండ్‌పాయింట్లు" icon="bolt" href="/te/webhooks/endpoints">
    బహుళ ఎండ్‌పాయింట్లు, ఈవెంట్ ఫిల్టర్లు మరియు సీక్రెట్‌లను నిర్వహించండి.
  </Card>
  <Card title="telephony.incoming / web.incoming" icon="phone" href="/te/webhooks/call-incoming">
    కాల్‌లను కాన్ఫిగర్ చేయడానికి మీ సర్వర్ తప్పనిసరిగా సమాధానం ఇవ్వాల్సిన బ్లాకింగ్ అభ్యర్థన.
  </Card>
  <Card title="telephony.complete / web.complete" icon="phone" href="/te/webhooks/call-complete">
    ట్రాన్స్‌క్రిప్ట్, రికార్డింగ్ మరియు మెట్రిక్‌లతో కూడిన కాల్ తర్వాతి పేలోడ్.
  </Card>
</CardGroup>
