ವೆಬ್ಹುಕ್ಗಳ ಅವಲೋಕನ
ThunderPhone ಕರೆಯ ಸಮಯದಲ್ಲಿ ಘಟನೆಗಳು ಸಂಭವಿಸಿದಾಗ ನಿಮ್ಮ ಸರ್ವರ್ಗೆ HTTP POST ವಿನಂತಿಗಳನ್ನು ಕಳುಹಿಸುತ್ತದೆ — ಒಳಬರುವ ಕರೆ ಆರಂಭವಾದಾಗ, ಕರೆ ಮುಗಿದಾಗ, ಗ್ರೇಡಿಂಗ್ ರನ್ ಪೂರ್ಣಗೊಂಡಾಗ, ಎಚ್ಚರಿಕೆ ಸಕ್ರಿಯಗೊಂಡಾಗ ಇತ್ಯಾದಿ. ಎರಡು ವಿತರಣಾ ಮಾದರಿಗಳಿವೆ:
ಬಹು URLಗಳು, ಪ್ರತಿ ಎಂಡ್ಪಾಯಿಂಟ್ಗೆ ರಹಸ್ಯಗಳು, ಪ್ರತಿ ಎಂಡ್ಪಾಯಿಂಟ್ಗೆ ಈವೆಂಟ್ ಫಿಲ್ಟರ್ಗಳು,
ಮತ್ತು ಸ್ವಯಂಚಾಲಿತ ಮರುಪ್ರಯತ್ನಗಳು.
GET/POST/PATCH/DELETE /v1/developer/webhook-endpoints ಮೂಲಕ ನಿರ್ವಹಿಸಿ.
ಪ್ರತಿ ಸಂಸ್ಥೆಗೆ ಒಂದು URL. ನಿರ್ಬಂಧಿಸುವ ಕಾನ್ಫಿಗರೇಶನ್ ವಿನಿಮಯಗಳನ್ನು ಒಳಗೊಂಡಂತೆ
ಕರೆ-ಜೀವನಚಕ್ರದ ಈವೆಂಟ್ಗಳನ್ನು ಹೊಂದಿರುತ್ತದೆ. GET/PUT /v1/webhook ನಲ್ಲಿ ನಿರ್ವಹಿಸಲಾಗುತ್ತದೆ.
ಈವೆಂಟ್ ಕ್ಯಾಟಲಾಗ್ನಲ್ಲಿರುವ ಎಲ್ಲಾ 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).
ಹಂತಗಳು
- ಯಾವುದೇ ಪಾರ್ಸಿಂಗ್ಗಿಂತ ಮೊದಲು ಕಚ್ಚಾ ವಿನಂತಿ ದೇಹವನ್ನು ಓದಿ.
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 "", 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 + data | type + data + event_id |
| ಸೀಕ್ರೆಟ್ ಬದಲಾವಣೆ | ಏಕ ಸೀಕ್ರೆಟ್ ಅನ್ನು ಬದಲಿಸುತ್ತದೆ | ಪ್ರತಿ ಎಂಡ್ಪಾಯಿಂಟ್ಗೆ ಸೀಕ್ರೆಟ್ |
| ಅಳಿಸದೆ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸುವಿಕೆ | — | status=disabled |
| ಸ್ಥಿತಿ ಗೋಚರತೆ | — | active / disabled / failing |
| ತಡೆಯುವ ಸಂರಚನಾ ವಿನಿಮಯ | ಹೌದು (telephony.incoming / web.incoming) | ಎಂದಿಗೂ ಇಲ್ಲ — ಅಧಿಸೂಚನೆಗಳು ಮಾತ್ರ |
| ಅತ್ಯುತ್ತಮ ಬಳಕೆ | ಡೈನಾಮಿಕ್ ಕರೆ ಸಂರಚನೆ | ಉತ್ಪಾದನೆಯಲ್ಲಿ ಈವೆಂಟ್ ಬಳಕೆ |
ಹೊಸ ಏಕೀಕರಣಗಳು ಎಂಡ್ಪಾಯಿಂಟ್-ಆಧಾರಿತ ವೆಬ್ಹುಕ್ಗಳ ಮೂಲಕ ಈವೆಂಟ್ಗಳನ್ನು ಬಳಸಬೇಕು. ಕರೆ ಸ್ವೀಕರಿಸುವ ಸಮಯದಲ್ಲಿ ನೀವು ಕರೆಗಳನ್ನು ಡೈನಾಮಿಕ್ ಆಗಿ ಸಂರಚಿಸಿದರೆ ಅಥವಾ ವೆಬ್ಹುಕ್-ಮೋಡ್ ಟೂಲ್ ರವಾನೆಯನ್ನು ಬಳಸಿದರೆ ಮಾತ್ರ ಲೆಗಸಿ URL ಅನ್ನು ಉಳಿಸಿಕೊಳ್ಳಿ (ಅಥವಾ ಸೇರಿಸಿ) — ಆ ವಿನಂತಿ/ಪ್ರತಿಕ್ರಿಯೆ ವಿನಿಮಯಗಳು ಲೆಗಸಿ ಮಾರ್ಗದಲ್ಲಷ್ಟೇ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತವೆ.
ಸಂಬಂಧಿತ
ಎಲ್ಲಾ ಈವೆಂಟ್ ಪ್ರಕಾರಗಳು ಮತ್ತು ಅವುಗಳ ಪೇಲೋಡ್ಗಳು.
ಬಹು ಎಂಡ್ಪಾಯಿಂಟ್ಗಳು, ಈವೆಂಟ್ ಫಿಲ್ಟರ್ಗಳು ಮತ್ತು ಸೀಕ್ರೆಟ್ಗಳನ್ನು ನಿರ್ವಹಿಸಿ.
ಕರೆಗಳನ್ನು ಸಂರಚಿಸಲು ನಿಮ್ಮ ಸರ್ವರ್ ಉತ್ತರಿಸಬೇಕಾದ ತಡೆಯುವ ವಿನಂತಿ.
ಟ್ರಾನ್ಸ್ಕ್ರಿಪ್ಟ್, ರೆಕಾರ್ಡಿಂಗ್ ಮತ್ತು ಮೆಟ್ರಿಕ್ಗಳನ್ನು ಹೊಂದಿರುವ ಕರೆ-ನಂತರದ ಪೇಲೋಡ್.