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

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

ಈವೆಂಟ್ ಕ್ಯಾಟಲಾಗ್ನಲ್ಲಿರುವ ಎಲ್ಲಾ 10 ಈವೆಂಟ್ ಪ್ರಕಾರಗಳು ವೆಬ್‌ಹುಕ್ ಎಂಡ್‌ಪಾಯಿಂಟ್‌ಗಳ ಮೂಲಕ ವಿತರಿಸಲಾಗುತ್ತವೆ. ಆರು ಕರೆ-ಜೀವನಚಕ್ರದ ಈವೆಂಟ್‌ಗಳು (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 ಆಗಿರುತ್ತದೆ (ಅಥವಾ ಹಳೆಯ ಡೆಲಿವರಿಗಳಿಗಾಗಿ ನಿಮ್ಮ ಸಂಸ್ಥೆ-ಮಟ್ಟದ webhook secret).

ಹಂತಗಳು

  1. ಯಾವುದೇ ಪಾರ್ಸಿಂಗ್‌ಗಿಂತ ಮೊದಲು ಕಚ್ಚಾ ವಿನಂತಿ ದೇಹವನ್ನು ಓದಿ.
  2. hmac_sha256(secret, body).hexdigest() ಅನ್ನು ಲೆಕ್ಕಹಾಕಿ.
  3. 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 ವೆಬ್‌ಹುಕ್ ಮರುಪ್ರಯತ್ನಗಳಿಲ್ಲದ ಏಕ ಸಿಂಕ್ರೊನಸ್ ಪ್ರಯತ್ನವಾಗಿದೆ.

ಮರುಪ್ರಯತ್ನಗಳು

ಪ್ರತಿ ಈವೆಂಟ್‌ಗೆ ತಕ್ಷಣವೇ ಒಮ್ಮೆ ಪ್ರಯತ್ನಿಸಲಾಗುತ್ತದೆ. ಯಾವುದೇ 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 ಸೆಕೆಂಡ್‌ಗಳನ್ನು ಅನುಮತಿಸುತ್ತದೆ.

ಮೂಲ IPಗಳು

ಹೊರಹೋಗುವ ವೆಬ್‌ಹುಕ್‌ಗಳು ThunderPhone ನ ಕ್ಲೌಡ್ IP ಶ್ರೇಣಿಯಿಂದ ಉಗಮಿಸುತ್ತವೆ. ನಿಮ್ಮ ಫೈರ್‌ವಾಲ್‌ಗೆ ಅನುಮತಿ ಪಟ್ಟಿ ಅಗತ್ಯವಿದ್ದರೆ, ಬೆಂಬಲ ತಂಡವನ್ನು ಸಂಪರ್ಕಿಸಿ; ನಾವು ಪ್ರಸ್ತುತ ಶ್ರೇಣಿಗಳನ್ನು ಹಂಚಿಕೊಳ್ಳುತ್ತೇವೆ.

ಲೆಗಸಿ ಮತ್ತು ಎಂಡ್‌ಪಾಯಿಂಟ್-ಆಧಾರಿತ ವೆಬ್‌ಹುಕ್‌ಗಳ ನಡುವೆ ಆಯ್ಕೆ

ವೈಶಿಷ್ಟ್ಯಲೆಗಸಿ (/v1/webhook)ಎಂಡ್‌ಪಾಯಿಂಟ್‌ಗಳು (/v1/developer/webhook-endpoints)
URLಗಳ ಸಂಖ್ಯೆಪ್ರತಿ ಸಂಸ್ಥೆಗೆ 1ಪ್ರತಿ ಸಂಸ್ಥೆಗೆ ಹಲವು
ಈವೆಂಟ್ ವ್ಯಾಪ್ತಿtelephony.* / web.* ಮಾತ್ರಎಲ್ಲಾ 10 ಈವೆಂಟ್ ಪ್ರಕಾರಗಳು
ಈವೆಂಟ್ ಫಿಲ್ಟರ್ಪ್ರತಿ ಎಂಡ್‌ಪಾಯಿಂಟ್‌ಗೆ
ಮರುಪ್ರಯತ್ನಗಳುಯಾವುದೂ ಇಲ್ಲ24 ಗಂಟೆಗಳಲ್ಲಿ 8 ಪ್ರಯತ್ನಗಳು
ಎನ್ವಲಪ್type + datatype + data + event_id
ಸೀಕ್ರೆಟ್ ಬದಲಾವಣೆಏಕ ಸೀಕ್ರೆಟ್ ಅನ್ನು ಬದಲಿಸುತ್ತದೆಪ್ರತಿ ಎಂಡ್‌ಪಾಯಿಂಟ್‌ಗೆ ಸೀಕ್ರೆಟ್
ಅಳಿಸದೆ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸುವಿಕೆstatus=disabled
ಸ್ಥಿತಿ ಗೋಚರತೆactive / disabled / failing
ತಡೆಯುವ ಸಂರಚನಾ ವಿನಿಮಯಹೌದು (telephony.incoming / web.incoming)ಎಂದಿಗೂ ಇಲ್ಲ — ಅಧಿಸೂಚನೆಗಳು ಮಾತ್ರ
ಅತ್ಯುತ್ತಮ ಬಳಕೆಡೈನಾಮಿಕ್ ಕರೆ ಸಂರಚನೆಉತ್ಪಾದನೆಯಲ್ಲಿ ಈವೆಂಟ್ ಬಳಕೆ

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


ಸಂಬಂಧಿತ