వెబ్హుక్లు
ఒక ఎన్విరాన్మెంట్లో జరిగేవాటిని Usher అవి జరుగుతున్నప్పుడే మీ సర్వర్లకు చెప్పగలదు: ఎవరైనా చేరినప్పుడు, సైన్ ఇన్ చేసినప్పుడు, తమ వివరాలను మార్చినప్పుడు లేదా వెళ్లిపోయినప్పుడు. ప్రతి ఈవెంట్ మీరు ఎంచుకున్న చిరునామాకు సైన్ చేసిన ఒక POST, మీ సర్వర్ స్పందించకపోతే మళ్లీ ప్రయత్నించబడుతుంది.
ఎండ్పాయింట్ను జోడించండి
Usher Consoleలో, ఎన్విరాన్మెంట్ను తెరిచి, ఆపై Webhooks → New endpoint ఎంచుకోండి. మీ https:// చిరునామాను ఇచ్చి, అది వినాల్సిన ఈవెంట్లను ఎంచుకోండి. Console ఎండ్పాయింట్ సైనింగ్ సీక్రెట్ను (whsec_…) ఒక్కసారే చూపిస్తుంది: దాన్ని మీ సర్వర్ ఇతర సీక్రెట్లతో పాటు ఉంచండి.
| ఈవెంట్ | ఎప్పుడు |
|---|---|
user.created | ఎవరో ఒక ఖాతాను సృష్టించారు |
user.updated | ఒక ఖాతా మారింది: ఇమెయిల్, పేరు, ధృవీకరణ లేదా నిషేధం (SCIM ద్వారా మీ సంస్థ డైరెక్టరీ విధించిన నిషేధంతో సహా) |
user.deleted | ఒక ఖాతా తొలగించబడింది |
session.created | ఎవరో సైన్ ఇన్ చేశారు |
session.ended | ఒక సెషన్ ముగిసింది: సైన్ అవుట్, రద్దు లేదా ముందుగానే గడువు ముగియడం |
Send a test ఆ ఎండ్పాయింట్కు మాత్రమే ఒక 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 డెలివరీ లాగ్ ప్రతి సందేశం ప్రయత్నాలను, మీ సర్వర్ చివరి జవాబును చూపిస్తుంది, Send again ఒక డెలివరీని మళ్లీ మొదటి నుండి ప్రారంభిస్తుంది.
కొత్త సీక్రెట్
Consoleలోని New secret మరొక సీక్రెట్ను తయారుచేసి ఒక్కసారే చూపిస్తుంది. తర్వాతి 24 గంటల పాటు ప్రతి డెలివరీ రెండు సంతకాలను, ఒక్కో సీక్రెట్కు ఒకటి చొప్పున, తీసుకువెళ్తుంది, కాబట్టి ఏదీ కోల్పోకుండా మీరు కొత్త సీక్రెట్ను డిప్లాయ్ చేయవచ్చు. ఆ తర్వాత కొత్తది మాత్రమే సైన్ చేస్తుంది.
డెలివరీలు ఎక్కడి నుండి వస్తాయి
వెబ్హుక్లు Usher ఎగ్రెస్ ప్రాక్సీ ద్వారా బయటకు వెళ్తాయి, అది ప్రైవేట్ లేదా అంతర్గత చిరునామాలకు కనెక్ట్ కాదు. ఎండ్పాయింట్ పబ్లిక్ పేరుపై ఉన్న https:// చిరునామా అయి ఉండాలి: IP చిరునామా, ప్రైవేట్ పేరు లేదా Usher సొంత డొమైన్లలోని చిరునామా కాకూడదు.