---
title: "வெப்ஹுக்குகள் கண்ணோட்டம்"
description: "ThunderPhone நிகழ்நேர நிகழ்வுகளை எவ்வாறு வழங்குகிறது, கையொப்பங்களை எவ்வாறு சரிபார்ப்பது, மற்றும் மரபு மற்றும் எண்ட்பாயிண்ட் அடிப்படையிலான விநியோக மாதிரிகள் எவ்வாறு ஒப்பிடப்படுகின்றன."
---

ThunderPhone, அழைப்பின் போது நிகழ்வுகள் நடந்தால் உங்கள் சர்வருக்கு HTTP `POST` கோரிக்கைகளை அனுப்புகிறது — உள்வரும் அழைப்பு தொடங்கும்போது, அழைப்பு முடிவடையும்போது, தரப்படுத்தல் இயக்கம் நிறைவடையும்போது, எச்சரிக்கை செயல்படும்போது மற்றும் பல. **இரண்டு வழங்கல் மாதிரிகள்** உள்ளன:

<CardGroup cols={2}>
  <Card title="Webhook எண்ட்பாயிண்ட்கள் (பரிந்துரைக்கப்படுகிறது)" icon="bolt" href="/ta/webhooks/endpoints">
    பல URL-கள், ஒவ்வொரு எண்ட்பாயிண்ட்டிற்குமான ரகசியங்கள், ஒவ்வொரு எண்ட்பாயிண்ட்டிற்குமான நிகழ்வு வடிப்பான்கள் மற்றும் தானியங்கி மறுமுயற்சிகள்.
    `GET/POST/PATCH/DELETE /v1/developer/webhook-endpoints` மூலம் நிர்வகிக்கவும்.
  </Card>
  <Card title="ஒற்றை-URL பழைய webhook" icon="link" href="/api-reference/organizations#legacy-single-url-webhook">
    ஒவ்வொரு நிறுவனத்திற்கும் ஒரு URL. **தடுக்கும்** உள்ளமைவு பரிமாற்றங்கள் உட்பட, அழைப்பு வாழ்க்கைச்சுழற்சி நிகழ்வுகளைக் கொண்டுள்ளது. `GET/PUT /v1/webhook` இல் நிர்வகிக்கப்படுகிறது.
  </Card>
</CardGroup>

[event பட்டியலில்](/ta/webhooks/events) உள்ள அனைத்து பத்து நிகழ்வு வகைகளும் webhook எண்ட்பாயிண்ட்கள் வழியாக வழங்கப்படுகின்றன. ஆறு அழைப்பு வாழ்க்கைச்சுழற்சி நிகழ்வுகள்
(`telephony.incoming`, `telephony.complete`, `telephony.tool`,
`web.incoming`, `web.complete`, `web.tool`) பழைய ஒற்றை-URL webhook-க்கும் **கூட** அனுப்பப்படுகின்றன — உங்களிடம் பழைய URL-உம் பொருந்தும் எண்ட்பாயிண்ட்டும் இருந்தால், நிகழ்வை **இரண்டு** பாதைகளிலும் பெறுவீர்கள். தடுக்கும் செயல்பாடு ([`telephony.incoming` / `web.incoming` உள்ளமைவு
பரிமாற்றம்](/ta/webhooks/call-incoming) மற்றும் webhook-முறை
[கருவி அனுப்பல்](/ta/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 webhook அதே `type` மற்றும் `data`-வை அனுப்புகிறது, ஆனால்
`event_id` **இல்லாமல்**:

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

நெட்வொர்க்கில், ஒவ்வொரு body-யும் முறையான வடிவில் வரிசைப்படுத்தப்படுகிறது — கீக்கள் அகரவரிசையில் வரிசைப்படுத்தப்படும், இடைவெளிகள் இல்லை, UTF-8. இந்த ஆவணங்களில் உள்ள அழகாக வடிவமைக்கப்பட்ட எடுத்துக்காட்டுகள் வாசிப்பதற்கான வசதிக்காக மட்டுமே.

நிகழ்வு வகைகள் மற்றும் பேலோட் புலங்களின் முழுப் பட்டியலுக்கு [நிகழ்வுகள் பட்டியலை](/ta/webhooks/events) பார்க்கவும்.

## கையொப்பச் சரிபார்ப்பு

ஒவ்வொரு கோரிக்கையிலும் `X-ThunderPhone-Signature` ஹெடரில் **மூல கோரிக்கை
உடல்** மீது HMAC-SHA256 கையொப்பம் இருக்கும். கையொப்ப விசை என்பது
எண்ட்பாயிண்டின் `secret` ஆகும் (அல்லது பழைய டெலிவரிகளுக்கு உங்கள்
நிறுவன-நிலை வெப்ஹுக் `secret`).

### படிகள்

1. எந்தப் பார்சிங்கிற்கும் **முன்** மூல கோரிக்கை உடலைப் படியுங்கள்.
2. `hmac_sha256(secret, body).hexdigest()` ஐக் கணக்கிடுங்கள்.
3. `X-ThunderPhone-Signature` ஹெடருடன் நிலையான நேரத்தில் ஒப்பிடுங்கள்.

நாங்கள் அனுப்பும் பைட்டுகளுக்கே துல்லியமாக கையொப்பமிடுகிறோம்; அந்தப் பைட்டுகள்
நியமமான JSON சீரியலைசேஷன் ஆகும் (வரிசைப்படுத்தப்பட்ட கீக்கள், சுருக்கமான
பிரிப்பான்கள்). எனவே மூல உடலுக்கு எதிராகச் சரிபார்ப்பது எப்போதும் செயல்படும் —
உங்கள் ஃப்ரேம்வொர்க் பார்ஸ் செய்யப்பட்ட JSON ஐ மட்டும் வழங்கினாலும்,
வரிசைப்படுத்தப்பட்ட கீக்கள் மற்றும் சுருக்கமான பிரிப்பான்களுடன் அதை மீண்டும்
சீரியலைஸ் செய்தால் ஒரே மாதிரியான பைட்டுகள் உருவாகும். இரண்டு முறைகளும்
[சரிபார்ப்பு வழிகாட்டியில்](/ta/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 முயற்சிகள். ஒவ்வொரு முயற்சியும் தோல்வியடைந்தால், விநியோகம் நிறுத்தப்படும்; எண்ட்பாயிண்ட்
    [வெப்ஹுக் எண்ட்பாயிண்ட்களில்](/ta/webhooks/endpoints)
    `status="failing"` எனக் குறிக்கப்படும். பேலோட் நிலையான முறையில் ஏற்கப்பட்டவுடன் `2xx` ஐ
    திருப்பியனுப்பவும்; ஒத்திசைவற்ற முறையில் செயலாக்கவும்.
  </Accordion>

  <Accordion title="வரிசைப்படுத்தல்">
    விநியோக வரிசைப்படுத்தல் சிறந்த முயற்சி அடிப்படையிலானது. நடைமுறையில், நிகழ்வுகள்
    வெளியிடப்படும் வரிசையிலேயே விநியோகிக்கிறோம்; ஆனால் தோல்வியின்போது மீண்டும் முயற்சிகள்
    வரிசையை மாற்றலாம். எப்போதும் `call_id` / பொருள் id அடிப்படையில் நகல்களை நீக்கி
    ஒத்திசைக்கவும்.
  </Accordion>

  <Accordion title="நகல்கள்">
    விநியோகம் **குறைந்தது ஒருமுறை** என்பதாகும்: நாங்கள் காணாத பதிலுக்குப் பிறகான
    மீண்டும் முயற்சி ஒரு நிகழ்வை நகலாக்கலாம். ஒவ்வொரு மீண்டும் முயற்சியும் அதே
    `event_id` ஐக் கொண்டிருக்கும்; எனவே செயலாக்கப்பட்ட idகளைச் சேமித்து, மீள்நிகழ்வுகளைத் தவிர்க்கவும். `event_id`
    எண்ட்பாயிண்ட்களுக்கிடையிலும் பகிரப்படுகிறது — ஒரே நிகழ்வுக்கு சந்தா பெற்றுள்ள இரண்டு எண்ட்பாயிண்ட்களும்
    அதே `event_id` ஐப் பெறும்.
  </Accordion>

  <Accordion title="நேரம் முடிதல்கள்">
    எண்ட்பாயிண்ட் விநியோகங்களுக்கு ஒவ்வொரு முயற்சிக்கும் **30 வினாடி** நேரம் முடிதல் உள்ளது. பழைய
    பாதையில், நேரடி அழைப்பு நடத்தையை இயக்கும் தடைசெய்யும் கோரிக்கைகள் —
    [`telephony.incoming` / `web.incoming`](/ta/webhooks/call-incoming)
    உள்ளமைவு பரிமாற்றம் — **10 வினாடி** கழித்து நேரம் முடியும்; ஆனால் மெதுவான
    பதில் அழைப்பு எடுப்பதைத் தாமதப்படுத்தும் என்பதால், சில வினாடிகளுக்குள் பதிலளிப்பதை நோக்கமாகக் கொள்ளவும்.
    வெப்ஹுக்-முறை [கருவி அனுப்புதல்](/ta/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` |
| ரகசிய மாற்றம் | ஒற்றை ரகசியத்தை மாற்றும் | ஒவ்வொரு எண்ட்பாயிண்டிற்குமான ரகசியம் |
| நீக்காமல் முடக்குதல் | `PUT /v1/webhook` உடன் `{"url": ""}` | `status=disabled` |
| நிலை தெரிவுநிலை | — | `active` / `disabled` / `failing` |
| தடைசெய்யும் உள்ளமைவு பரிமாற்றம் | ஆம் ([`telephony.incoming` / `web.incoming`](/ta/webhooks/call-incoming)) | ஒருபோதும் இல்லை — அறிவிப்புகள் மட்டும் |
| சிறந்த பயன்பாடு | டைனமிக் அழைப்பு உள்ளமைவு | தயாரிப்பில் நிகழ்வு நுகர்வு |

புதிய ஒருங்கிணைப்புகள் எண்ட்பாயிண்ட் அடிப்படையிலான
வெப்ஹுக்குகள் மூலம் நிகழ்வுகளை நுகர வேண்டும். அழைப்பு எடுக்கப்படும் நேரத்தில் அழைப்புகளை
டைனமிக்காக உள்ளமைத்தால் அல்லது வெப்ஹுக்-முறை கருவி அனுப்புதலைப் பயன்படுத்தினால் மட்டுமே
பழைய URL ஐ வைத்திருக்கவும் (அல்லது சேர்க்கவும்) — அந்த
கோரிக்கை/பதில் பரிமாற்றங்கள் பழைய பாதையில் மட்டுமே இயங்கும்.

---

## தொடர்புடையவை

<CardGroup cols={2}>
  <Card title="நிகழ்வுகள் பட்டியல்" icon="list" href="/ta/webhooks/events">
    அனைத்து நிகழ்வு வகைகளும் அவற்றின் பேலோடுகளும்.
  </Card>
  <Card title="வெப்ஹுக் எண்ட்பாயிண்ட்கள்" icon="bolt" href="/ta/webhooks/endpoints">
    பல எண்ட்பாயிண்ட்கள், நிகழ்வு வடிகட்டிகள் மற்றும் ரகசியங்களை நிர்வகிக்கவும்.
  </Card>
  <Card title="telephony.incoming / web.incoming" icon="phone" href="/ta/webhooks/call-incoming">
    அழைப்புகளை உள்ளமைக்க உங்கள் சர்வர் பதிலளிக்க வேண்டிய தடைசெய்யும் கோரிக்கை.
  </Card>
  <Card title="telephony.complete / web.complete" icon="phone" href="/ta/webhooks/call-complete">
    டிரான்ஸ்கிரிப்ட், பதிவு மற்றும் அளவீடுகளைக் கொண்ட அழைப்புக்குப் பிந்தைய பேலோட்.
  </Card>
</CardGroup>
