ਵੈੱਬਹੁੱਕ
Usher ਤੁਹਾਡੇ ਸਰਵਰਾਂ ਨੂੰ ਦੱਸ ਸਕਦਾ ਹੈ ਕਿ ਕਿਸੇ ਐਨਵਾਇਰਨਮੈਂਟ ਵਿੱਚ ਕੀ ਹੋ ਰਿਹਾ ਹੈ, ਜਿਵੇਂ ਹੀ ਇਹ ਹੁੰਦਾ ਹੈ: ਕੋਈ ਜੁੜਦਾ ਹੈ, ਸਾਈਨ ਇਨ ਕਰਦਾ ਹੈ, ਆਪਣੇ ਵੇਰਵੇ ਬਦਲਦਾ ਹੈ ਜਾਂ ਛੱਡ ਕੇ ਜਾਂਦਾ ਹੈ। ਹਰ ਇਵੈਂਟ ਤੁਹਾਡੇ ਚੁਣੇ ਪਤੇ ’ਤੇ ਇੱਕ ਸਾਈਨ ਕੀਤਾ POST ਹੈ, ਜਿਸਦੀ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ ਜੇ ਤੁਹਾਡਾ ਸਰਵਰ ਜਵਾਬ ਨਾ ਦੇਵੇ।
ਐਂਡਪੁਆਇੰਟ ਜੋੜੋ
Usher Console ਵਿੱਚ ਐਨਵਾਇਰਨਮੈਂਟ ਖੋਲ੍ਹੋ, ਫਿਰ ਵੈੱਬਹੁੱਕ → ਨਵਾਂ ਐਂਡਪੁਆਇੰਟ। ਆਪਣਾ ਇੱਕ https:// ਪਤਾ ਦਿਓ ਅਤੇ ਉਹ ਇਵੈਂਟ ਚੁਣੋ ਜਿਨ੍ਹਾਂ ਬਾਰੇ ਇਸਨੂੰ ਸੁਣਨਾ ਚਾਹੀਦਾ ਹੈ। Console ਐਂਡਪੁਆਇੰਟ ਦਾ ਸਾਈਨਿੰਗ ਸੀਕ੍ਰੇਟ (whsec_…) ਇੱਕ ਵਾਰ ਦਿਖਾਉਂਦਾ ਹੈ: ਇਸਨੂੰ ਆਪਣੇ ਸਰਵਰ ਦੇ ਹੋਰ ਸੀਕ੍ਰੇਟਾਂ ਨਾਲ ਰੱਖੋ।
| ਇਵੈਂਟ | ਕਦੋਂ |
|---|---|
user.created | ਕਿਸੇ ਨੇ ਖਾਤਾ ਬਣਾਇਆ |
user.updated | ਖਾਤਾ ਬਦਲਿਆ: ਈਮੇਲ, ਨਾਮ, ਪ੍ਰਮਾਣਿਕਤਾ ਜਾਂ ਪਾਬੰਦੀ (SCIM ਰਾਹੀਂ ਤੁਹਾਡੀ ਸੰਸਥਾ ਦੀ ਡਾਇਰੈਕਟਰੀ ਵੱਲੋਂ ਲਾਈ ਪਾਬੰਦੀ ਸਮੇਤ) |
user.deleted | ਖਾਤਾ ਮਿਟਾਇਆ ਗਿਆ |
session.created | ਕਿਸੇ ਨੇ ਸਾਈਨ ਇਨ ਕੀਤਾ |
session.ended | ਸੈਸ਼ਨ ਖ਼ਤਮ ਹੋਇਆ: ਸਾਈਨ ਆਊਟ, ਰੱਦ ਜਾਂ ਸਮੇਂ ਤੋਂ ਪਹਿਲਾਂ ਮਿਆਦ ਪੁੱਗੀ |
ਟੈਸਟ ਭੇਜੋ ਸਿਰਫ਼ ਉਸ ਐਂਡਪੁਆਇੰਟ ਨੂੰ ਇੱਕ webhook.test ਇਵੈਂਟ ਭੇਜਦਾ ਹੈ, ਭਾਵੇਂ ਉਹ ਕਿਸੇ ਵੀ ਚੀਜ਼ ਲਈ ਸਬਸਕ੍ਰਾਈਬ ਹੋਵੇ।
ਕੀ ਪਹੁੰਚਦਾ ਹੈ
POST /usher/webhooks HTTP/1.1
content-type: application/json
user-agent: Usher-Webhooks/1
webhook-id: msg_2fk7x…
webhook-timestamp: 1793643116
webhook-signature: v1,g0hM9SsE+OTPJTGt/tmIKtSyZlE3uFJELVlNIOLJ1OE={
"type": "user.created",
"timestamp": "2026-11-02T18:11:56.412Z",
"data": {
"user": {
"id": "Qz3m…",
"email": "lena@acme.com",
"emailVerified": false,
"name": "Lena Live",
"image": null,
"banned": false,
"createdAt": "2026-11-02T18:11:56.380Z",
"updatedAt": "2026-11-02T18:11:56.380Z"
}
}
}ਇਵੈਂਟ ਲੋਕਾਂ ਅਤੇ ਸੈਸ਼ਨਾਂ ਬਾਰੇ ਦੱਸਦੇ ਹਨ, ਕਦੇ ਵੀ ਸੀਕ੍ਰੇਟਾਂ ਬਾਰੇ ਨਹੀਂ: ਨਾ ਟੋਕਨ, ਨਾ ਪਾਸਵਰਡ ਹੈਸ਼, ਨਾ ਭੂਮਿਕਾਵਾਂ, ਅਤੇ ਨਾ ਇਹ ਕਿ ਕਿਸੇ ’ਤੇ ਪਾਬੰਦੀ ਕਿਉਂ ਲੱਗੀ।
ਹਰ ਡਿਲੀਵਰੀ ਦੀ ਜਾਂਚ ਕਰੋ
Usher Standard Webhooks ਨਿਰਧਾਰਨ ਮੁਤਾਬਕ ਸਾਈਨ ਕਰਦਾ ਹੈ, ਇਸ ਲਈ ਇਸਦੀ ਕੋਈ ਵੀ ਲਾਇਬ੍ਰੇਰੀ ਤੁਹਾਡੇ ਲਈ ਸਿਗਨੇਚਰ ਜਾਂਚਦੀ ਹੈ। ਜੋ ਵੀ ਪ੍ਰਮਾਣਿਤ ਨਾ ਹੋਵੇ, ਉਸਨੂੰ ਨਾਮਨਜ਼ੂਰ ਕਰੋ। ਲਾਇਬ੍ਰੇਰੀਆਂ ਪੰਜ ਮਿੰਟ ਤੋਂ ਵੱਧ ਫ਼ਰਕ ਵਾਲਾ ਟਾਈਮਸਟੈਂਪ ਵੀ ਨਾਮਨਜ਼ੂਰ ਕਰਦੀਆਂ ਹਨ, ਤਾਂ ਜੋ ਕੋਈ ਪੁਰਾਣੀ ਡਿਲੀਵਰੀ ਦੁਬਾਰਾ ਨਾ ਚਲਾਈ ਜਾ ਸਕੇ।
// a route that receives Usher's webhooks (Node, the standardwebhooks package)
import { Webhook } from 'standardwebhooks'
const wh = new Webhook(process.env.USHER_WEBHOOK_SECRET!) // whsec_…, from Usher Console
export async function POST(request: Request) {
const body = await request.text() // the raw body: the signature covers it byte for byte
let event: { type: string; timestamp: string; data: Record<string, unknown> }
try {
event = wh.verify(body, Object.fromEntries(request.headers)) as typeof event
} catch {
return new Response('bad signature', { status: 400 })
}
// webhook-id is the same on every attempt: skip one you have handled already
if (await alreadyHandled(request.headers.get('webhook-id')!)) return new Response(null, { status: 204 })
await queue(event) // answer quickly; do the work afterwards
return new Response(null, { status: 204 })
}- 15 ਸਕਿੰਟਾਂ ਦੇ ਅੰਦਰ ਜਵਾਬ ਦਿਓ, ਕਿਸੇ ਵੀ
2xxਨਾਲ। ਹੋਰ ਕੁਝ ਵੀ, ਰੀਡਾਇਰੈਕਟ ਸਮੇਤ, ਅਸਫਲਤਾ ਗਿਣਿਆ ਜਾਂਦਾ ਹੈ। - ਦੁਹਰਾਓ ਦੀ ਉਮੀਦ ਰੱਖੋ। ਹਰ ਕੋਸ਼ਿਸ਼ ’ਤੇ ਸੁਨੇਹੇ ਦਾ
webhook-idਉਹੀ ਰਹਿੰਦਾ ਹੈ; ਜੋ ਤੁਸੀਂ ਪਹਿਲਾਂ ਸੰਭਾਲ ਚੁੱਕੇ ਹੋ, ਉਸਨੂੰ ਛੱਡ ਦਿਓ। - ਕ੍ਰਮ ’ਤੇ ਭਰੋਸਾ ਨਾ ਕਰੋ। ਦੁਬਾਰਾ ਕੀਤੀਆਂ ਕੋਸ਼ਿਸ਼ਾਂ ਨਵੇਂ ਇਵੈਂਟਾਂ ਤੋਂ ਬਾਅਦ ਪਹੁੰਚ ਸਕਦੀਆਂ ਹਨ।
ਜਦੋਂ ਤੁਹਾਡਾ ਸਰਵਰ ਜਵਾਬ ਨਹੀਂ ਦਿੰਦਾ
Usher 5 ਸਕਿੰਟ, 5 ਮਿੰਟ, 30 ਮਿੰਟ, 2 ਘੰਟੇ, 5 ਘੰਟੇ, 10 ਘੰਟੇ ਅਤੇ 10 ਘੰਟੇ ਬਾਅਦ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰਦਾ ਹੈ (ਕੁੱਲ ਮਿਲਾ ਕੇ ਲਗਭਗ ਡੇਢ ਦਿਨ), ਫਿਰ ਛੱਡ ਦਿੰਦਾ ਹੈ। Console ਦਾ ਡਿਲੀਵਰੀ ਲੌਗ ਹਰ ਸੁਨੇਹੇ ਦੀਆਂ ਕੋਸ਼ਿਸ਼ਾਂ ਅਤੇ ਤੁਹਾਡੇ ਸਰਵਰ ਦਾ ਆਖਰੀ ਜਵਾਬ ਦਿਖਾਉਂਦਾ ਹੈ, ਅਤੇ ਦੁਬਾਰਾ ਭੇਜੋ ਡਿਲੀਵਰੀ ਨੂੰ ਨਵੇਂ ਸਿਰਿਓਂ ਸ਼ੁਰੂ ਕਰਦਾ ਹੈ।
ਨਵਾਂ ਸੀਕ੍ਰੇਟ
Console ਵਿੱਚ ਨਵਾਂ ਸੀਕ੍ਰੇਟ ਇੱਕ ਹੋਰ ਸੀਕ੍ਰੇਟ ਬਣਾਉਂਦਾ ਹੈ ਅਤੇ ਉਸਨੂੰ ਇੱਕ ਵਾਰ ਦਿਖਾਉਂਦਾ ਹੈ। ਅਗਲੇ 24 ਘੰਟਿਆਂ ਲਈ ਹਰ ਡਿਲੀਵਰੀ ਵਿੱਚ ਦੋ ਸਿਗਨੇਚਰ ਹੁੰਦੇ ਹਨ, ਹਰ ਸੀਕ੍ਰੇਟ ਦਾ ਇੱਕ, ਤਾਂ ਜੋ ਤੁਸੀਂ ਕੁਝ ਵੀ ਗੁਆਏ ਬਿਨਾਂ ਨਵਾਂ ਸੀਕ੍ਰੇਟ ਲਾਗੂ ਕਰ ਸਕੋ। ਉਸ ਤੋਂ ਬਾਅਦ ਸਿਰਫ਼ ਨਵਾਂ ਸੀਕ੍ਰੇਟ ਸਾਈਨ ਕਰਦਾ ਹੈ।
ਡਿਲੀਵਰੀਆਂ ਕਿੱਥੋਂ ਆਉਂਦੀਆਂ ਹਨ
ਵੈੱਬਹੁੱਕ Usher ਤੋਂ ਉਸਦੀ ਈਗ੍ਰੈਸ ਪ੍ਰੌਕਸੀ ਰਾਹੀਂ ਬਾਹਰ ਜਾਂਦੇ ਹਨ, ਜੋ ਨਿੱਜੀ ਜਾਂ ਅੰਦਰੂਨੀ ਪਤਿਆਂ ਨਾਲ ਕਨੈਕਟ ਨਹੀਂ ਕਰਦੀ। ਐਂਡਪੁਆਇੰਟ ਕਿਸੇ ਜਨਤਕ ਨਾਮ ’ਤੇ ਇੱਕ https:// ਪਤਾ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ: IP ਪਤਾ, ਨਿੱਜੀ ਨਾਮ, ਜਾਂ Usher ਦੇ ਆਪਣੇ ਡੋਮੇਨਾਂ ’ਤੇ ਕੋਈ ਪਤਾ ਨਹੀਂ।