ਵੈੱਬਹੁੱਕਸ ਸੰਖੇਪ ਜਾਣਕਾਰੀ
ThunderPhone ਤੁਹਾਡੇ ਸਰਵਰ ਨੂੰ HTTP POST ਬੇਨਤੀਆਂ ਭੇਜਦਾ ਹੈ ਜਦੋਂ ਕਾਲ ਦੌਰਾਨ ਘਟਨਾਵਾਂ ਹੁੰਦੀਆਂ ਹਨ — ਇਨਬਾਊਂਡ ਕਾਲ ਸ਼ੁਰੂ ਹੁੰਦੀ ਹੈ, ਕਾਲ ਖਤਮ ਹੁੰਦੀ ਹੈ, ਗ੍ਰੇਡਿੰਗ ਰਨ ਪੂਰਾ ਹੁੰਦਾ ਹੈ, ਅਲਰਟ ਟ੍ਰਿਗਰ ਹੁੰਦਾ ਹੈ, ਆਦਿ। ਇੱਥੇ ਦੋ ਡਿਲਿਵਰੀ ਮਾਡਲ ਹਨ:
ਕਈ URLs, ਹਰ ਐਂਡਪੌਇੰਟ ਲਈ ਵੱਖਰੇ ਸੀਕ੍ਰੇਟ, ਹਰ ਐਂਡਪੌਇੰਟ ਲਈ ਵੱਖਰੇ ਇਵੈਂਟ ਫਿਲਟਰ,
ਅਤੇ ਆਟੋਮੈਟਿਕ ਰੀਟ੍ਰਾਈਆਂ।
GET/POST/PATCH/DELETE /v1/developer/webhook-endpoints ਰਾਹੀਂ ਪ੍ਰਬੰਧਿਤ ਕਰੋ।
ਹਰ org ਲਈ ਇੱਕ URL। ਇਸ ਵਿੱਚ ਕਾਲ-ਲਾਈਫਸਾਈਕਲ ਇਵੈਂਟ ਸ਼ਾਮਲ ਹੁੰਦੇ ਹਨ, ਜਿਸ ਵਿੱਚ
ਬਲਾਕਿੰਗ ਕਨਫਿਗਰੇਸ਼ਨ ਐਕਸਚੇਂਜ ਵੀ ਸ਼ਾਮਲ ਹਨ। GET/PUT /v1/webhook 'ਤੇ ਪ੍ਰਬੰਧਿਤ ਕੀਤਾ ਜਾਂਦਾ ਹੈ।
ਇਵੈਂਟ ਕੈਟਾਲਾਗ ਦੇ ਸਾਰੇ ਦਸ ਇਵੈਂਟ ਕਿਸਮਾਂ ਵੈੱਬਹੁੱਕ ਐਂਡਪੌਇੰਟਾਂ ਰਾਹੀਂ
ਡਿਲੀਵਰ ਕੀਤੀਆਂ ਜਾਂਦੀਆਂ ਹਨ। ਛੇ ਕਾਲ-ਲਾਈਫਸਾਈਕਲ ਇਵੈਂਟ
(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)।
ਕਦਮ
- ਕਿਸੇ ਵੀ ਪਾਰਸਿੰਗ ਤੋਂ ਪਹਿਲਾਂ ਕੱਚੀ ਬੇਨਤੀ ਬਾਡੀ ਪੜ੍ਹੋ।
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 / ਆਬਜੈਕਟ id ਅਨੁਸਾਰ ਡੀਡੁਪ ਅਤੇ ਮੇਲ-ਮਿਲਾਪ ਕਰੋ।
ਡੁਪਲੀਕੇਟ
ਡਿਲਿਵਰੀ ਘੱਟੋ-ਘੱਟ-ਇੱਕ-ਵਾਰ ਹੈ: ਅਜਿਹੇ ਜਵਾਬ ਤੋਂ ਬਾਅਦ ਕੀਤੀ ਮੁੜ-ਕੋਸ਼ਿਸ਼ ਜੋ ਸਾਨੂੰ ਕਦੇ
ਨਹੀਂ ਮਿਲਿਆ, ਇਵੈਂਟ ਨੂੰ ਡੁਪਲੀਕੇਟ ਕਰ ਸਕਦੀ ਹੈ। ਹਰ ਮੁੜ-ਕੋਸ਼ਿਸ਼ ਵਿੱਚ ਉਹੀ
event_id ਹੁੰਦਾ ਹੈ, ਇਸ ਲਈ ਪ੍ਰਕਿਰਿਆ ਕੀਤੀਆਂ 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 ਸਿਰਫ਼ ਤਦ ਹੀ ਰੱਖੋ (ਜਾਂ ਜੋੜੋ) ਜੇ ਤੁਸੀਂ ਕਾਲਾਂ ਨੂੰ ਪਿਕਅੱਪ ਸਮੇਂ ਡਾਇਨਾਮਿਕ ਤੌਰ 'ਤੇ ਕੌਂਫਿਗਰ ਕਰਦੇ ਹੋ ਜਾਂ ਵੈੱਬਹੁੱਕ-ਮੋਡ ਟੂਲ ਡਿਸਪੈਚ ਵਰਤਦੇ ਹੋ — ਉਹ ਬੇਨਤੀ/ਜਵਾਬ ਐਕਸਚੇਂਜ ਸਿਰਫ਼ ਪੁਰਾਣੇ ਪਾਥ 'ਤੇ ਚੱਲਦੇ ਹਨ।
ਸੰਬੰਧਿਤ
ਸਾਰੀਆਂ ਇਵੈਂਟ ਕਿਸਮਾਂ ਅਤੇ ਉਹਨਾਂ ਦੇ ਪੇਲੋਡ।
ਕਈ ਐਂਡਪੌਇੰਟਾਂ, ਇਵੈਂਟ ਫਿਲਟਰਾਂ ਅਤੇ ਸੀਕ੍ਰੇਟਾਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰੋ।
ਕਾਲਾਂ ਕੌਂਫਿਗਰ ਕਰਨ ਲਈ ਉਹ ਬਲਾਕਿੰਗ ਬੇਨਤੀ ਜਿਸ ਦਾ ਜਵਾਬ ਤੁਹਾਡੇ ਸਰਵਰ ਨੂੰ ਦੇਣਾ ਲਾਜ਼ਮੀ ਹੈ।
ਟ੍ਰਾਂਸਕ੍ਰਿਪਟ, ਰਿਕਾਰਡਿੰਗ ਅਤੇ ਮੈਟ੍ਰਿਕਸ ਸਮੇਤ ਕਾਲ-ਬਾਅਦ ਪੇਲੋਡ।