Open in
வெப்ஹுக்குகள் கண்ணோட்டம்
ThunderPhone நிகழ்நேர நிகழ்வுகளை எவ்வாறு வழங்குகிறது, கையொப்பங்களை எவ்வாறு சரிபார்ப்பது, மற்றும் மரபு மற்றும் எண்ட்பாயிண்ட் அடிப்படையிலான விநியோக மாதிரிகள் எவ்வாறு ஒப்பிடப்படுகின்றன.
ThunderPhone, அழைப்பின் போது நிகழ்வுகள் நடந்தால் உங்கள் சர்வருக்கு HTTP POST கோரிக்கைகளை அனுப்புகிறது — உள்வரும் அழைப்பு தொடங்கும்போது, அழைப்பு முடிவடையும்போது, தரப்படுத்தல் இயக்கம் நிறைவடையும்போது, எச்சரிக்கை செயல்படும்போது மற்றும் பல. இரண்டு வழங்கல் மாதிரிகள் உள்ளன:
பல URL-கள், ஒவ்வொரு எண்ட்பாயிண்ட்டிற்குமான ரகசியங்கள், ஒவ்வொரு எண்ட்பாயிண்ட்டிற்குமான நிகழ்வு வடிப்பான்கள் மற்றும் தானியங்கி மறுமுயற்சிகள்.
GET/POST/PATCH/DELETE /v1/developer/webhook-endpoints மூலம் நிர்வகிக்கவும்.
ஒவ்வொரு நிறுவனத்திற்கும் ஒரு URL. தடுக்கும் உள்ளமைவு பரிமாற்றங்கள் உட்பட, அழைப்பு வாழ்க்கைச்சுழற்சி நிகழ்வுகளைக் கொண்டுள்ளது. GET/PUT /v1/webhook இல் நிர்வகிக்கப்படுகிறது.
event பட்டியலில் உள்ள அனைத்து பத்து நிகழ்வு வகைகளும் 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" }
}நெட்வொர்க்கில், ஒவ்வொரு body-யும் முறையான வடிவில் வரிசைப்படுத்தப்படுகிறது — கீக்கள் அகரவரிசையில் வரிசைப்படுத்தப்படும், இடைவெளிகள் இல்லை, UTF-8. இந்த ஆவணங்களில் உள்ள அழகாக வடிவமைக்கப்பட்ட எடுத்துக்காட்டுகள் வாசிப்பதற்கான வசதிக்காக மட்டுமே.
நிகழ்வு வகைகள் மற்றும் பேலோட் புலங்களின் முழுப் பட்டியலுக்கு நிகழ்வுகள் பட்டியலை பார்க்கவும்.
கையொப்பச் சரிபார்ப்பு
ஒவ்வொரு கோரிக்கையிலும் X-ThunderPhone-Signature ஹெடரில் மூல கோரிக்கை
உடல் மீது HMAC-SHA256 கையொப்பம் இருக்கும். கையொப்ப விசை என்பது
எண்ட்பாயிண்டின் secret ஆகும் (அல்லது பழைய டெலிவரிகளுக்கு உங்கள்
நிறுவன-நிலை வெப்ஹுக் 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 "", 204import 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 வெப்ஹுக் என்பது மீண்டும் முயற்சிகளற்ற ஒற்றை ஒத்திசைவு முயற்சியாகும்.
மீண்டும் முயற்சிகள்
ஒவ்வொரு நிகழ்வும் உடனடியாக ஒருமுறை முயற்சிக்கப்படும். எந்த 2xx பதிலும்
விநியோகத்தை ஒப்புக்கொள்கிறது. வேறு எந்த விளைவிலும் (2xx அல்லாதது,
இணைப்பு பிழை, நேரம் முடிதல்), முதல் முயற்சிக்குப் பிறகு 1 நிமிடம், 5 நிமிடம், 30 நிமிடம், 2 மணி, 6 மணி,
12 மணி மற்றும் 24 மணி நேரங்களில் மீண்டும் முயற்சிப்போம் — 24 மணிநேரத்தில்
8 முயற்சிகள். ஒவ்வொரு முயற்சியும் தோல்வியடைந்தால், விநியோகம் நிறுத்தப்படும்; எண்ட்பாயிண்ட்
வெப்ஹுக் எண்ட்பாயிண்ட்களில்
status="failing" எனக் குறிக்கப்படும். பேலோட் நிலையான முறையில் ஏற்கப்பட்டவுடன் 2xx ஐ
திருப்பியனுப்பவும்; ஒத்திசைவற்ற முறையில் செயலாக்கவும்.
வரிசைப்படுத்தல்
விநியோக வரிசைப்படுத்தல் சிறந்த முயற்சி அடிப்படையிலானது. நடைமுறையில், நிகழ்வுகள்
வெளியிடப்படும் வரிசையிலேயே விநியோகிக்கிறோம்; ஆனால் தோல்வியின்போது மீண்டும் முயற்சிகள்
வரிசையை மாற்றலாம். எப்போதும் call_id / பொருள் id அடிப்படையில் நகல்களை நீக்கி
ஒத்திசைக்கவும்.
நகல்கள்
விநியோகம் குறைந்தது ஒருமுறை என்பதாகும்: நாங்கள் காணாத பதிலுக்குப் பிறகான
மீண்டும் முயற்சி ஒரு நிகழ்வை நகலாக்கலாம். ஒவ்வொரு மீண்டும் முயற்சியும் அதே
event_id ஐக் கொண்டிருக்கும்; எனவே செயலாக்கப்பட்ட idகளைச் சேமித்து, மீள்நிகழ்வுகளைத் தவிர்க்கவும். event_id
எண்ட்பாயிண்ட்களுக்கிடையிலும் பகிரப்படுகிறது — ஒரே நிகழ்வுக்கு சந்தா பெற்றுள்ள இரண்டு எண்ட்பாயிண்ட்களும்
அதே event_id ஐப் பெறும்.
நேரம் முடிதல்கள்
எண்ட்பாயிண்ட் விநியோகங்களுக்கு ஒவ்வொரு முயற்சிக்கும் 30 வினாடி நேரம் முடிதல் உள்ளது. பழைய
பாதையில், நேரடி அழைப்பு நடத்தையை இயக்கும் தடைசெய்யும் கோரிக்கைகள் —
telephony.incoming / web.incoming
உள்ளமைவு பரிமாற்றம் — 10 வினாடி கழித்து நேரம் முடியும்; ஆனால் மெதுவான
பதில் அழைப்பு எடுப்பதைத் தாமதப்படுத்தும் என்பதால், சில வினாடிகளுக்குள் பதிலளிப்பதை நோக்கமாகக் கொள்ளவும்.
வெப்ஹுக்-முறை கருவி அனுப்புதல் இயல்பாக 20 வினாடிகளை அனுமதிக்கிறது,
மேலும் கருவி அறிவிப்புகள் மேல்-நிலை timeout ஐ அமைக்கலாம்.
மூல IPகள்
வெளியேறும் வெப்ஹுக்குகள் ThunderPhone இன் கிளவுட் IP வரம்பிலிருந்து தோன்றுகின்றன. உங்கள் ஃபயர்வாலுக்கு அனுமதிப்பட்டியல் தேவைப்பட்டால், ஆதரவைத் தொடர்புகொள்ளவும்; தற்போதைய வரம்புகளைப் பகிர்வோம்.
பழைய மற்றும் எண்ட்பாயிண்ட் அடிப்படையிலான வெப்ஹுக்குகளுக்கு இடையே தேர்வு செய்தல்
| அம்சம் | பழையது (/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) | ஒருபோதும் இல்லை — அறிவிப்புகள் மட்டும் |
| சிறந்த பயன்பாடு | டைனமிக் அழைப்பு உள்ளமைவு | தயாரிப்பில் நிகழ்வு நுகர்வு |
புதிய ஒருங்கிணைப்புகள் எண்ட்பாயிண்ட் அடிப்படையிலான வெப்ஹுக்குகள் மூலம் நிகழ்வுகளை நுகர வேண்டும். அழைப்பு எடுக்கப்படும் நேரத்தில் அழைப்புகளை டைனமிக்காக உள்ளமைத்தால் அல்லது வெப்ஹுக்-முறை கருவி அனுப்புதலைப் பயன்படுத்தினால் மட்டுமே பழைய URL ஐ வைத்திருக்கவும் (அல்லது சேர்க்கவும்) — அந்த கோரிக்கை/பதில் பரிமாற்றங்கள் பழைய பாதையில் மட்டுமே இயங்கும்.
தொடர்புடையவை
அனைத்து நிகழ்வு வகைகளும் அவற்றின் பேலோடுகளும்.
பல எண்ட்பாயிண்ட்கள், நிகழ்வு வடிகட்டிகள் மற்றும் ரகசியங்களை நிர்வகிக்கவும்.
அழைப்புகளை உள்ளமைக்க உங்கள் சர்வர் பதிலளிக்க வேண்டிய தடைசெய்யும் கோரிக்கை.
டிரான்ஸ்கிரிப்ட், பதிவு மற்றும் அளவீடுகளைக் கொண்ட அழைப்புக்குப் பிந்தைய பேலோட்.