ThunderPhone 2.0 ಈಗ ಬಿಡುಗಡೆಯಾಗಿದೆ.ನೀವೇ ನೇರವಾಗಿ ಆರಂಭಿಸಿ — 2¢/ನಿಮಿಷದಿಂದ.ಘೋಷಣೆ ಓದಿ

Webhooks

ವೆಬ್‌ಹುಕ್‌ಗಳ ಅವಲೋಕನ

ThunderPhone ನೈಜ-ಸಮಯದ ಈವೆಂಟ್‌ಗಳನ್ನು ಹೇಗೆ ತಲುಪಿಸುತ್ತದೆ, ಸಹಿಗಳನ್ನು ಹೇಗೆ ಪರಿಶೀಲಿಸುವುದು ಮತ್ತು ಹಳೆಯ ಹಾಗೂ ಎಂಡ್‌ಪಾಯಿಂಟ್-ಆಧಾರಿತ ವಿತರಣಾ ಮಾದರಿಗಳು ಹೇಗೆ ಹೋಲುತ್ತವೆ ಎಂಬುದನ್ನು ತಿಳಿಯಿರಿ.

ThunderPhone ಕರೆ ನಡೆಯುವಾಗ ಘಟನೆಗಳು ಸಂಭವಿಸಿದಾಗ ನಿಮ್ಮ ಸರ್ವರ್‌ಗೆ HTTP POST ವಿನಂತಿಗಳನ್ನು ಕಳುಹಿಸುತ್ತದೆ — ಒಳಬರುವ ಕರೆ ಆರಂಭವಾಗುವುದು, ಕರೆ ಕೊನೆಗೊಳ್ಳುವುದು, ಗ್ರೇಡಿಂಗ್ ಚಾಲನೆ ಪೂರ್ಣಗೊಳ್ಳುವುದು, ಎಚ್ಚರಿಕೆ ಸಕ್ರಿಯಗೊಳ್ಳುವುದು, ಇತ್ಯಾದಿ. ಎರಡು ವಿತರಣಾ ಮಾದರಿಗಳಿವೆ:

ಘಟನೆಗಳ ಕ್ಯಾಟಲಾಗ್ ನಲ್ಲಿರುವ ಎಲ್ಲಾ ಹತ್ತು ಘಟನೆ ಪ್ರಕಾರಗಳು ವೆಬ್‌ಹುಕ್ ಎಂಡ್‌ಪಾಯಿಂಟ್‌ಗಳ ಮೂಲಕ ವಿತರಿಸಲ್ಪಡುತ್ತವೆ. ಆರು ಕರೆ-ಜೀವನಚಕ್ರದ ಘಟನೆಗಳು (telephony.incoming, telephony.complete, telephony.tool, web.incoming, web.complete, web.tool) ಪರಂಪರಾಗತ ಏಕ-URL ವೆಬ್‌ಹುಕ್‌ಗೆ ಸಹ ಕಳುಹಿಸಲಾಗುತ್ತವೆ — ನೀವು ಪರಂಪರಾಗತ URL ಮತ್ತು ಹೊಂದಾಣಿಕೆಯಾಗುವ ಎಂಡ್‌ಪಾಯಿಂಟ್ ಎರಡನ್ನೂ ಹೊಂದಿದ್ದರೆ, ನೀವು ಘಟನೆಯನ್ನು ಎರಡೂ ಮಾರ್ಗಗಳಲ್ಲಿ ಸ್ವೀಕರಿಸುತ್ತೀರಿ. ತಡೆಯುವ ನಡವಳಿಕೆ (telephony.incoming / web.incoming ಸಂರಚನಾ ವಿನಿಮಯ ಮತ್ತು ವೆಬ್‌ಹುಕ್-ಮೋಡ್‌ನ ಉಪಕರಣ ರವಾನೆ) ಪ್ರತ್ಯೇಕವಾಗಿ ಪರಂಪರಾಗತ ಮಾರ್ಗದಲ್ಲೇ ಇರುತ್ತದೆ; ಪ್ರತಿಯೊಂದು ಎಂಡ್‌ಪಾಯಿಂಟ್ ವಿತರಣೆಯು ಪ್ರತಿಕ್ರಿಯೆಗಾಗಿ ಕಾಯದ ಅಧಿಸೂಚನೆಯಾಗಿದೆ.

ಪೇಲೋಡ್ ಸ್ವರೂಪ

ಎಂಡ್‌ಪಾಯಿಂಟ್ ವಿತರಣೆಗಳು 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 ವೆಬ್‌ಹುಕ್ ಅದೇ 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 ಆಗಿರುತ್ತದೆ (ಅಥವಾ ಹಳೆಯ ಡೆಲಿವರಿಗಳಿಗಾಗಿ ನಿಮ್ಮ ಸಂಸ್ಥೆ-ಮಟ್ಟದ ವೆಬ್‌ಹುಕ್ 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 / ಆಬ್ಜೆಕ್ಟ್ ಐಡಿ ಮೂಲಕ ನಕಲುಗಳನ್ನು ತೆಗೆದುಹಾಕಿ ಮತ್ತು ಹೊಂದಾಣಿಕೆ ಮಾಡಿ.

ನಕಲುಗಳು

ವಿತರಣೆಯು ಕನಿಷ್ಠ-ಒಮ್ಮೆ ಆಗಿರುತ್ತದೆ: ನಾವು ನೋಡದ ಪ್ರತಿಕ್ರಿಯೆಯ ನಂತರದ ಮರುಪ್ರಯತ್ನವು ಈವೆಂಟ್‌ನ ನಕಲನ್ನು ರಚಿಸಬಹುದು. ಪ್ರತಿ ಮರುಪ್ರಯತ್ನವೂ ಅದೇ event_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
ಸೀಕ್ರೆಟ್ ರೊಟೇಶನ್ಏಕೈಕ ಸೀಕ್ರೆಟ್ ಅನ್ನು ಬದಲಿಸುತ್ತದೆಪ್ರತಿ ಎಂಡ್‌ಪಾಯಿಂಟ್‌ಗೆ ಸೀಕ್ರೆಟ್
ಅಳಿಸದೆ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ{"url": ""} ಜೊತೆಗೆ PUT /v1/webhookstatus=disabled
ಸ್ಥಿತಿ ಗೋಚರತೆactive / disabled / failing
ತಡೆಹಿಡಿಯುವ ಕಾನ್ಫಿಗರೇಶನ್ ವಿನಿಮಯಹೌದು (telephony.incoming / web.incoming)ಎಂದಿಗೂ ಅಲ್ಲ — ಅಧಿಸೂಚನೆಗಳು ಮಾತ್ರ
ಇದಕ್ಕೆ ಉತ್ತಮಡೈನಾಮಿಕ್ ಕರೆ ಕಾನ್ಫಿಗರೇಶನ್ಉತ್ಪಾದನೆಯಲ್ಲಿ ಈವೆಂಟ್ ಬಳಕೆ

ಹೊಸ ಇಂಟಿಗ್ರೇಶನ್‌ಗಳು ಎಂಡ್‌ಪಾಯಿಂಟ್-ಆಧಾರಿತ ವೆಬ್‌ಹುಕ್‌ಗಳ ಮೂಲಕ ಈವೆಂಟ್‌ಗಳನ್ನು ಬಳಸಬೇಕು. ಕರೆ ಸ್ವೀಕರಿಸುವ ಸಮಯದಲ್ಲಿ ಕರೆಗಳನ್ನು ಡೈನಾಮಿಕ್ ಆಗಿ ಕಾನ್ಫಿಗರ್ ಮಾಡಿದರೆ ಅಥವಾ ವೆಬ್‌ಹುಕ್-ಮೋಡ್ ಟೂಲ್ ಡಿಸ್ಪ್ಯಾಚ್ ಬಳಸಿದರೆ ಮಾತ್ರ ಲೆಗಸಿ URL ಅನ್ನು ಉಳಿಸಿಕೊಳ್ಳಿ (ಅಥವಾ ಸೇರಿಸಿ) — ಆ ವಿನಂತಿ/ಪ್ರತಿಕ್ರಿಯೆ ವಿನಿಮಯಗಳು ಲೆಗಸಿ ಮಾರ್ಗದಲ್ಲಷ್ಟೇ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತವೆ.


ಸಂಬಂಧಿತ