Webhook-களின் மேலோட்டம்
ThunderPhone, அழைப்பின் போது நிகழ்வுகள் ஏற்படும் சமயங்களில் உங்கள் சர்வருக்கு HTTP POST கோரிக்கைகளை அனுப்புகிறது — உள்வரும் அழைப்பு தொடங்குதல், அழைப்பு முடிவடைதல், தரப்படுத்தல் இயக்கம் நிறைவடைதல், எச்சரிக்கை செயல்படுதல் போன்றவை. இதில் இரண்டு விநியோக மாதிரிகள் உள்ளன:
பல URL-கள், ஒவ்வொரு எண்ட்பாயிண்ட்டுக்குமான ரகசியங்கள், ஒவ்வொரு எண்ட்பாயிண்ட்டுக்குமான நிகழ்வு வடிப்பான்கள்,
மற்றும் தானியங்கி மறுமுயற்சிகள்.
GET/POST/PATCH/DELETE /v1/developer/webhook-endpoints மூலம் நிர்வகிக்கவும்.
ஒவ்வொரு நிறுவனத்திற்கும் ஒரு URL. தடுக்கும் உள்ளமைவு பரிமாற்றங்கள் உட்பட,
அழைப்பு-வாழ்க்கைச்சுழற்சி நிகழ்வுகளை வழங்குகிறது. GET/PUT /v1/webhook இல் நிர்வகிக்கப்படுகிறது.
நிகழ்வுகள் பட்டியலில் உள்ள அனைத்து பத்து நிகழ்வு வகைகளும்
webhook எண்ட்பாயிண்ட்கள் மூலம் வழங்கப்படுகின்றன. ஆறு அழைப்பு-வாழ்க்கைச்சுழற்சி நிகழ்வுகள்
(telephony.incoming, telephony.complete, telephony.tool,
web.incoming, web.complete, web.tool) பழைய ஒற்றை-URL webhook-க்கும்
கூடுதலாக அனுப்பப்படுகின்றன — உங்களிடம் பழைய URL-உம் பொருந்தும் எண்ட்பாயிண்ட்டும் இருந்தால்,
இரண்டு பாதைகளிலும் நிகழ்வைப் பெறுவீர்கள். தடுக்கும் செயல்பாடு
(telephony.incoming / web.incoming உள்ளமைவு
பரிமாற்றம் மற்றும் webhook-முறை
கருவி அனுப்புகை) பழைய பாதையில் மட்டுமே உள்ளது;
ஒவ்வொரு எண்ட்பாயிண்ட் விநியோகமும் அனுப்பிவிட்டு-தொடரவும் அறிவிப்பாகும்.
பேலோட் வடிவம்
எண்ட்பாயிண்ட் விநியோகங்கள் data, event_id, மற்றும்
type கொண்ட ஒரு 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 இல்லாமல்:
{
"type": "telephony.incoming",
"data": { "call_id": 987654321, "from_number": "+14155550199", "to_number": "+15551234567" }
}
நெட்வொர்க்கில், ஒவ்வொரு உடலும் நியமமாக வரிசைப்படுத்தப்படுகிறது — விசைகள் அகரவரிசையில் வரிசைப்படுத்தப்படும், இடைவெளியின்றி, UTF-8-இல். இந்த ஆவணங்களில் உள்ள அழகாக வடிவமைக்கப்பட்ட எடுத்துக்காட்டுகள் வாசிப்பதற்கான எளிமைக்காக மட்டுமே.
நிகழ்வு வகைகள் மற்றும் பேலோட் புலங்களின் முழுப் பட்டியலுக்கு நிகழ்வுகள் பட்டியலை பார்க்கவும்.
கையொப்பச் சரிபார்ப்பு
ஒவ்வொரு கோரிக்கையும் X-ThunderPhone-Signature ஹெடரில் மூல கோரிக்கை
உடலின் மீது உருவாக்கப்பட்ட HMAC-SHA256 கையொப்பத்தைக் கொண்டிருக்கும். கையொப்பமிடும் விசை
எண்ட்பாயிண்டின் secret ஆகும் (அல்லது பழைய
டெலிவரிகளுக்கான உங்கள் நிறுவன-நிலை webhook secret).
படிகள்
- எந்தப் பார்சிங்கிற்கும் முன் மூல கோரிக்கை உடலைப் படியுங்கள்.
hmac_sha256(secret, body).hexdigest()-ஐக் கணக்கிடுங்கள்.X-ThunderPhone-Signatureஹெடருடன் நிலையான நேரத்தில் ஒப்பிடுங்கள்.
நாங்கள் அனுப்பும் பைட்களையே துல்லியமாக கையொப்பமிடுகிறோம்; அந்த பைட்கள் நியமன JSON வரிசைப்படுத்தல் (வரிசைப்படுத்தப்பட்ட விசைகள், சுருக்கமான பிரிப்பான்கள்) ஆகும். எனவே மூல உடலைப் பயன்படுத்திச் சரிபார்ப்பது எப்போதும் செயல்படும் — உங்கள் ஃப்ரேம்வொர்க் பார்ஸ் செய்யப்பட்ட JSON-ஐ மட்டும் வழங்கினாலும், அதை வரிசைப்படுத்தப்பட்ட விசைகள் மற்றும் சுருக்கமான பிரிப்பான்களுடன் மீண்டும் வரிசைப்படுத்தினால் ஒரே மாதிரியான பைட்கள் உருவாகும். இரண்டு முறைகளும் சரிபார்ப்பு வழிகாட்டியில் உள்ளன.
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
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);
},
);
விநியோக விதிமுறைகள்
இந்த விதிமுறைகள் எண்ட்பாயிண்ட் விநியோகங்களுக்குப் பொருந்தும். மரபு ஒற்றை-URL webhook என்பது மீண்டும் முயற்சிகள் இல்லாத ஒற்றை ஒத்திசைவு முயற்சியாகும்.
மீண்டும் முயற்சிகள்
ஒவ்வொரு நிகழ்வும் உடனடியாக ஒருமுறை முயற்சிக்கப்படும். எந்த 2xx பதிலும்
விநியோகத்தை உறுதிப்படுத்தும். வேறு எந்த முடிவிலும் (2xx அல்லாதது,
இணைப்புப் பிழை, நேரம் முடிவு) முதல் முயற்சிக்குப் பிறகு 1 நிமி, 5 நிமி, 30 நிமி, 2 மணி, 6 மணி,
12 மணி, மற்றும் 24 மணி நேரங்களில் மீண்டும் முயற்சிப்போம் — 24 மணிநேரத்தில்
8 முயற்சிகள். ஒவ்வொரு முயற்சியும் தோல்வியடைந்தால், விநியோகம் நிறுத்தப்படும் மற்றும் எண்ட்பாயிண்ட்
webhook எண்ட்பாயிண்ட்களில்
status="failing" எனக் குறிக்கப்படும். payload நீடித்த வகையில் ஏற்கப்பட்டவுடன் 2xx ஐ
திருப்பி அனுப்புங்கள்; ஒத்திசைவற்ற முறையில் செயலாக்குங்கள்.
வரிசைப்படுத்தல்
விநியோக வரிசைப்படுத்தல் சிறந்த முயற்சி அடிப்படையிலானது. நடைமுறையில் நிகழ்வுகள் வெளியிடப்படும்
வரிசையிலேயே நாங்கள் விநியோகிக்கிறோம், ஆனால் தோல்வியின்போது மீண்டும் முயற்சிகள் வரிசையை மாற்றலாம்.
எப்போதும் call_id / பொருள் id மூலம் நகல்களை நீக்கி ஒத்திசைக்கவும்.
நகல்கள்
விநியோகம் குறைந்தபட்சம் ஒருமுறை நிகழும்: நாங்கள் பெறாத பதிலுக்குப் பிறகு செய்யப்படும்
மீண்டும் முயற்சி ஒரு நிகழ்வை நகலாக்கலாம். ஒவ்வொரு மீண்டும் முயற்சியும் அதே
event_id ஐக் கொண்டிருக்கும்; எனவே செயலாக்கப்பட்ட id-களைச் சேமித்து, மீள்நிகழ்வுகளைத் தவிர்க்கவும். event_id
எண்ட்பாயிண்ட்கள் முழுவதும் பகிரப்படுகிறது — ஒரே நிகழ்வுக்கு சந்தா செய்துள்ள இரண்டு எண்ட்பாயிண்ட்களும்
அதே event_id ஐப் பெறும்.
நேரம் முடிவுகள்
எண்ட்பாயிண்ட் விநியோகங்களுக்கு ஒவ்வொரு முயற்சிக்கும் 30 வி நேரம் முடிவு உள்ளது. மரபு பாதையில்,
நேரடி அழைப்பு செயல்பாட்டை இயக்கும் தடுக்கப்படும் கோரிக்கைகள் —
telephony.incoming / web.incoming
உள்ளமைவு பரிமாற்றம் — 10 வி கழித்து நேரம் முடிவடையும்; ஆனால் மெதுவான பதில் அழைப்பு எடுப்பதைத் தாமதப்படுத்தும்,
எனவே சில விநாடிகளுக்குள் பதிலளிப்பதை இலக்காகக் கொள்ளுங்கள். Webhook-முறை கருவி அனுப்புதல்
20 வி அனுமதிக்கிறது.
மூல IP-கள்
வெளிச்செல்லும் webhook-கள் ThunderPhone-இன் கிளவுட் IP வரம்பிலிருந்து தோன்றுகின்றன. உங்கள் ஃபயர்வாலுக்கு அனுமதிப்பட்டியல் தேவைப்பட்டால், ஆதரவு அணியைத் தொடர்புகொள்ளுங்கள்; தற்போதைய வரம்புகளைப் பகிர்வோம்.
மரபு மற்றும் எண்ட்பாயிண்ட் அடிப்படையிலான webhook-களுக்கிடையில் தேர்வு செய்தல்
| அம்சம் | மரபு (/v1/webhook) | எண்ட்பாயிண்ட்கள் (/v1/developer/webhook-endpoints) |
|---|---|---|
| URL-களின் எண்ணிக்கை | ஒவ்வொரு நிறுவனத்திற்கும் 1 | ஒவ்வொரு நிறுவனத்திற்கும் பல |
| நிகழ்வு கவரேஜ் | telephony.* / web.* மட்டும் | அனைத்து 10 நிகழ்வு வகைகளும் |
| நிகழ்வு வடிகட்டி | — | ஒவ்வொரு எண்ட்பாயிண்டுக்கும் |
| மீண்டும் முயற்சிகள் | இல்லை | 24 மணிநேரத்தில் 8 முயற்சிகள் |
| உறை | type + data | type + data + event_id |
| ரகசிய மாற்றம் | ஒற்றை ரகசியத்தை மாற்றும் | ஒவ்வொரு எண்ட்பாயிண்டிற்குமான ரகசியம் |
| நீக்காமல் முடக்குதல் | — | status=disabled |
| நிலை காட்சிப்படுத்தல் | — | active / disabled / failing |
| தடுக்கப்படும் உள்ளமைவு பரிமாற்றம் | ஆம் (telephony.incoming / web.incoming) | ஒருபோதும் இல்லை — அறிவிப்புகள் மட்டும் |
| ஏற்றது | மாறும் அழைப்பு உள்ளமைவு | தயாரிப்பு சூழலில் நிகழ்வுகளைப் பயன்படுத்துதல் |
புதிய ஒருங்கிணைப்புகள் எண்ட்பாயிண்ட் அடிப்படையிலான webhook-கள் மூலம் நிகழ்வுகளைப் பயன்படுத்த வேண்டும். அழைப்பு எடுக்கும் நேரத்தில் அழைப்புகளை மாறும் வகையில் உள்ளமைத்தால் அல்லது webhook-முறை கருவி அனுப்புதலைப் பயன்படுத்தினால் மட்டுமே மரபு URL-ஐ வைத்திருக்கவும் (அல்லது சேர்க்கவும்) — அந்த கோரிக்கை/பதில் பரிமாற்றங்கள் மரபு பாதையில் மட்டுமே இயங்கும்.
தொடர்புடையவை
அனைத்து நிகழ்வு வகைகளும் அவற்றின் payload-களும்.
பல எண்ட்பாயிண்ட்கள், நிகழ்வு வடிகட்டிகள் மற்றும் ரகசியங்களை நிர்வகிக்கவும்.
அழைப்புகளை உள்ளமைக்க உங்கள் சர்வர் பதிலளிக்க வேண்டிய தடுக்கப்படும் கோரிக்கை.
உரையாடல் பதிவு, பதிவுசெய்தல் மற்றும் அளவீடுகளுடன் கூடிய அழைப்புக்குப் பிந்தைய payload.