ThunderPhone 2.0 அறிமுகமாகிவிட்டது.நீங்களே தொடங்கலாம்; நிமிடத்திற்கு 2¢ முதல்.அறிவிப்பைப் படிக்கவும்

Webhooks

வெப்ஹுக்குகள் கண்ணோட்டம்

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

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

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).

படிகள்

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

நாங்கள் அனுப்பும் பைட்டுகளுக்கே துல்லியமாக கையொப்பமிடுகிறோம்; அந்தப் பைட்டுகள் நியமமான JSON சீரியலைசேஷன் ஆகும் (வரிசைப்படுத்தப்பட்ட கீக்கள், சுருக்கமான பிரிப்பான்கள்). எனவே மூல உடலுக்கு எதிராகச் சரிபார்ப்பது எப்போதும் செயல்படும் — உங்கள் ஃப்ரேம்வொர்க் பார்ஸ் செய்யப்பட்ட JSON ஐ மட்டும் வழங்கினாலும், வரிசைப்படுத்தப்பட்ட கீக்கள் மற்றும் சுருக்கமான பிரிப்பான்களுடன் அதை மீண்டும் சீரியலைஸ் செய்தால் ஒரே மாதிரியான பைட்டுகள் உருவாகும். இரண்டு முறைகளும் சரிபார்ப்பு வழிகாட்டியில் உள்ளன.

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
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);
  },
);

விநியோக அர்த்தவியல்

இந்த அர்த்தவியல்கள் எண்ட்பாயிண்ட் விநியோகங்களுக்குப் பொருந்தும். பழைய ஒற்றை-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 + datatype + data + event_id
ரகசிய மாற்றம்ஒற்றை ரகசியத்தை மாற்றும்ஒவ்வொரு எண்ட்பாயிண்டிற்குமான ரகசியம்
நீக்காமல் முடக்குதல்PUT /v1/webhook உடன் {"url": ""}status=disabled
நிலை தெரிவுநிலைactive / disabled / failing
தடைசெய்யும் உள்ளமைவு பரிமாற்றம்ஆம் (telephony.incoming / web.incoming)ஒருபோதும் இல்லை — அறிவிப்புகள் மட்டும்
சிறந்த பயன்பாடுடைனமிக் அழைப்பு உள்ளமைவுதயாரிப்பில் நிகழ்வு நுகர்வு

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


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