Open in
వెబ్హుక్ల అవలోకనం
ThunderPhone రియల్-టైమ్ ఈవెంట్లను ఎలా అందిస్తుందో, సంతకాలను ఎలా ధృవీకరించాలో, అలాగే లెగసీ మరియు ఎండ్పాయింట్-ఆధారిత డెలివరీ మోడల్లు ఎలా పోల్చబడతాయో తెలుసుకోండి.
కాల్ సమయంలో సంఘటనలు జరిగినప్పుడు 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 ఉపయోగించబడుతుంది. ఈ డాక్యుమెంటేషన్లోని అందంగా ఫార్మాట్ చేసిన ఉదాహరణలు చదవడానికి సులభంగా ఉండటానికే.
ఈవెంట్ రకాలు మరియు పేలోడ్ ఫీల్డ్ల పూర్తి జాబితా కోసం ఈవెంట్ల కేటలాగ్ చూడండి.
సంతకం ధృవీకరణ
ప్రతి అభ్యర్థనలో రెండు సంతకాలు ఉంటాయి. రెండూ endpoint యొక్క secretతో (లేదా లెగసీ డెలివరీల కోసం మీ సంస్థ-స్థాయి webhook secretతో) కీ చేయబడిన HMAC-SHA256ను ఉపయోగిస్తాయి:
X-ThunderPhone-Signature-V2: t=<unix seconds>,v1=<hex>టైమ్స్టాంప్, మెథడ్, పాత్ మరియు క్వెరీ, అలాగే రా బాడీపై సంతకం చేస్తుంది. దీన్ని ధృవీకరించండి మరియు క్యాప్చర్ చేసిన అభ్యర్థనను తర్వాత మళ్లీ ప్లే చేయకుండా నిరోధించడానికి, మీ గడియారంతో పోలిస్తేt5 నిమిషాల కంటే ఎక్కువ తేడా ఉన్న అభ్యర్థనలను తిరస్కరించండి. రీట్రైలు పంపినప్పుడు వాటికి మళ్లీ సంతకం చేయబడుతుంది.X-ThunderPhone-Signatureరా బాడీపై మాత్రమే సంతకం చేస్తుంది. ఇప్పటికే ఉన్న వెరిఫైయర్లు పని చేస్తూనే ఉండేందుకు, ఇది మార్పు లేకుండా ఇప్పటికీ పంపబడుతుంది.
దశలు
- ఏదైనా పార్సింగ్కు ముందు హెడర్, మెథడ్, రా పాత్ మరియు క్వెరీ, అలాగే రా బాడీని చదవండి.
- మీ సీక్రెట్తో
<t>\n<METHOD>\n<path and query>\n<body>యొక్క హెక్స్ HMAC-SHA256ను గణించండి. t300 సెకన్ల కంటే ఎక్కువ తేడాతో ఉంటే, లేదా ఫలితం స్థిర-సమయ పోలికలోv1తో సరిపోలకపోతే అభ్యర్థనను తిరస్కరించండి.
బాడీలు కానానికల్ JSON సీరియలైజేషన్గా ఉంటాయి (క్రమబద్ధీకరించిన కీలు, కాంపాక్ట్ సెపరేటర్లు), మరియు మేము ప్రసారం చేసే ఖచ్చితమైన బైట్లకే సంతకం చేస్తాము. ధృవీకరణ గైడ్లో ఖచ్చితమైన సంతకం చేసిన స్ట్రింగ్, ఒక ఉదాహరణ, SDK లేకుండా కోడ్, మరియు లెగసీ హెడర్ ఉన్నాయి.
from flask import Flask, abort, request
from thunderphone import verify_signature
app = Flask(__name__)
@app.post("/thunderphone-webhook")
def handle():
query = request.query_string.decode()
if not verify_signature(
request.headers.get("X-ThunderPhone-Signature-V2"),
secret=WEBHOOK_SECRET,
method=request.method,
path=request.path + (f"?{query}" if query else ""),
body=request.get_data(), # raw bytes
):
abort(401)
event = request.get_json()
# dispatch on event["type"] …
return "", 204import express from "express";
import { verifySignature } from "@thunderphone/sdk";
const app = express();
app.post(
"/thunderphone-webhook",
express.raw({ type: "application/json" }),
(req, res) => {
const ok = verifySignature({
header: req.header("X-ThunderPhone-Signature-V2"),
secret: process.env.WEBHOOK_SECRET,
method: req.method,
path: req.originalUrl,
body: req.body,
});
if (!ok) return res.sendStatus(401);
const event = JSON.parse(req.body.toString("utf8"));
// dispatch on event.type …
res.sendStatus(204);
},
);డెలివరీ సెమాంటిక్స్
ఈ సెమాంటిక్స్ ఎండ్పాయింట్ డెలివరీలకు వర్తిస్తాయి. లెగసీ సింగిల్-URL
వెబ్హుక్ అనేది రీట్రైలు లేని ఒకే సమకాలిక ప్రయత్నం, అయితే ఫోన్ కాల్కు సంబంధించిన
telephony.incoming
కాన్ఫిగరేషన్ మార్పిడి మాత్రమే ఒకసారి రీట్రై చేయబడుతుంది.
రీట్రైలు
ప్రతి ఈవెంట్కు వెంటనే ఒకసారి ప్రయత్నం జరుగుతుంది. ఏదైనా 2xx ప్రతిస్పందన
డెలివరీని ఆమోదిస్తుంది. ఇతర ఏ ఫలితం వచ్చినా (non-2xx,
కనెక్షన్ లోపం, టైమ్అవుట్), మొదటి ప్రయత్నం తర్వాత 1 నిమి, 5 నిమి, 30 నిమి, 2 గం, 6 గం,
12 గం, మరియు 24 గం వద్ద మేము రీట్రై చేస్తాము — 24 గంటల్లో
మొత్తం 8 ప్రయత్నాలు. ప్రతి ప్రయత్నం విఫలమైతే, డెలివరీ ఆగిపోతుంది మరియు ఎండ్పాయింట్కు
వెబ్హుక్ ఎండ్పాయింట్లలో status="failing"గా
గుర్తు వేయబడుతుంది; మీ సంస్థ ఓనర్లు మరియు అడ్మిన్లకు మేము ఇమెయిల్ పంపి,
దానిని డ్యాష్బోర్డ్లో చూపుతాము. పేలోడ్ స్థిరంగా ఆమోదించబడిన వెంటనే 2xxను
తిరిగి పంపండి; అసమకాలికంగా ప్రాసెస్ చేయండి.
ఎండ్పాయింట్ టెస్ట్ API నుండి పంపే పరీక్షా అభ్యర్థనలకు, మొదటి ప్రయత్నం తర్వాత సుమారు ఒక నిమిషానికి
ఒక రీట్రై ఉంటుంది మరియు అవి ఎండ్పాయింట్ స్థితిని ఎప్పుడూ మార్చవు.
క్రమం
డెలివరీ క్రమం ఉత్తమ-ప్రయత్న ప్రాతిపదికన ఉంటుంది. ఆచరణలో, ఈవెంట్లు విడుదలైన
క్రమంలోనే డెలివర్ చేస్తాము, కానీ విఫలమైనప్పుడు రీట్రైలు క్రమాన్ని మార్చవచ్చు.
ఎల్లప్పుడూ call_id / ఆబ్జెక్ట్ id ఆధారంగా డూప్లికేట్లను తొలగించి సమన్వయం చేయండి.
డూప్లికేట్లు
డెలివరీ కనీసం-ఒకసారి జరుగుతుంది: మేము చూడని ప్రతిస్పందన తర్వాత జరిగే రీట్రై
ఒక ఈవెంట్ను డూప్లికేట్ చేయవచ్చు. ప్రతి రీట్రై అదే
event_idను కలిగి ఉంటుంది, కాబట్టి ప్రాసెస్ చేసిన idలను నిల్వ చేసి పునరావృతాలను దాటవేయండి. event_id
ఎండ్పాయింట్ల మధ్య కూడా భాగస్వామ్యం చేయబడుతుంది — ఒకే ఈవెంట్కు సబ్స్క్రైబ్ అయిన రెండు
ఎండ్పాయింట్లు ఒకే event_idను స్వీకరిస్తాయి.
టైమ్అవుట్లు
ఎండ్పాయింట్ డెలివరీలకు ప్రతి ప్రయత్నానికి 30 సె టైమ్అవుట్ ఉంటుంది. లెగసీ
మార్గంలో, ప్రత్యక్ష కాల్ ప్రవర్తనను నియంత్రించే బ్లాకింగ్ అభ్యర్థనలు — అంటే
telephony.incoming / web.incoming
కాన్ఫిగరేషన్ మార్పిడి — ఫోన్ కాల్ మొదటి ప్రయత్నానికి 10 సెకు,
దాని ఒక రీట్రైతో సహా మొత్తం మార్పిడికి 13 సెకు, మరియు ఒక విడ్జెట్ సెషన్కు
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ను ఉంచండి (లేదా జోడించండి) — ఆ రిక్వెస్ట్/ప్రతిస్పందన మార్పిడులు లెగసీ పాత్లో మాత్రమే నడుస్తాయి.
సంబంధితవి
అన్ని ఈవెంట్ రకాలు మరియు వాటి పేలోడ్లు.
బహుళ ఎండ్పాయింట్లు, ఈవెంట్ ఫిల్టర్లు మరియు సీక్రెట్లను నిర్వహించండి.
కాల్లను కాన్ఫిగర్ చేయడానికి మీ సర్వర్ తప్పనిసరిగా స్పందించాల్సిన బ్లాకింగ్ అభ్యర్థన.
ట్రాన్స్క్రిప్ట్, రికార్డింగ్ మరియు మెట్రిక్లతో కూడిన కాల్ అనంతర పేలోడ్.