વેબહુક
એન્વાયર્નમેન્ટમાં જે થાય તે થતાંની સાથે જ 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 ના પોતાના ડોમેન પરનું સરનામું નહીં.