TicketWave Logo
Webhooks

Áttekintés

Fogadj TicketWave eseményeket aláírt HTTP-kérésekként a saját alkalmazásodban.

Webhookok

A webhook egy HTTP-kérés, amelyet a TicketWave küld neked. Amikor valami történik a szervereden — megnyílik egy jegy, egy tag feketelistára kerül — a TicketWave egy JSON törzset POST-ol egy általad birtokolt URL-re.

Ez a különbség a Naplócsatornák és ez között: a naplócsatornák egy embedet írnak a Discordba, hogy az emberek elolvassák, a webhookok pedig a nyers eseményt adják át a kódodnak.

A webhookok prémium funkciók. Prémium nélkül nem hozhatók létre végpontok, és nem kézbesülnek események.

Végpont létrehozása

Nyisd meg a végpontok oldalát

Szerver irányítópult → WebhooksVégpontok.

Adj hozzá egy végpontot

Kattints az Add Endpoint gombra, és töltsd ki a két mezőt:

FieldDescription
Endpoint URLAz a https:// URL, amely fogadja a kéréseket
Event TypesMely eseményeket kapja meg ez a végpont

Egy végpont csak azokat a típusokat kapja meg, amelyeket bejelölsz. Üresen hagyni nem lehet — legalább egyet válassz.

Másold ki az aláírási titkot

A TicketWave az endpoint létrehozásának pillanatában generál egy aláírási titkot (whsec_…). Nyisd meg a végpontok listáját, a szem ikonra kattintva jelenítsd meg, majd másold be az alkalmazásod konfigurációjába.

A titkot kezeld úgy, mint egy jelszót. Aki birtokolja, hamis kéréseket tud küldeni, amelyek átmennek az aláírás-ellenőrzésen. Tartsd környezeti változóban, soha ne a repódban.

Küldj teszteseményt

Használd a végpont sorában a Send test event gombot (a papírrepülőt). Egy valódi, teljesen aláírt kérést küld, a payloadban "test": true értékkel, így még azelőtt ellenőrizheted, hogy a fogadó működik, mielőtt egy éles jegy erre támaszkodna.

Az eredmény a Webhooks előzmények között jelenik meg, ugyanúgy, mint bármely más kézbesítés.

Végpontkövetelmények

RequirementDetail
SchemeCsak https:// — a http:// elutasításra kerül
HostNyilvánosan feloldhatónak kell lennie. Privát, loopback, link-local és CGNAT címek nem engedélyezettek
ResponseBármely 2xx státusz sikernek számít
Timeout10 másodperced van válaszolni
RedirectsNem követi őket. A 3xx hibának számít
LimitSzerverenként legfeljebb 5 végpont

A hostellenőrzés akkor is lefut, amikor elmented a végpontot, és minden egyes kézbesítés előtt, így ha egy domain később belső címre kezd feloldódni, többé nem kap kézbesítést.

A kérés

Minden kézbesítés egy POST JSON törzzsel.

Fejlécek

HeaderExampleMeaning
Content-Typeapplication/jsonMindig JSON
User-AgentTicketWave-Webhooks/1.0.5A bot verziója, amely elküldte
X-TicketWave-Eventticket.createdAz esemény típusa
X-TicketWave-Deliverywh_3f2a…A kézbesítés egyedi azonosítója
X-TicketWave-Timestamp1786224191Unix másodpercekben, az aláírás része
X-TicketWave-Signaturesha256=9f86d0…A kérés HMAC-je

Törzs

Minden payload ugyanazt a burkolót használja. Csak a data különbözik eseménytípusonként:

{
  "event": "ticket.created",
  "timestamp": "2026-08-26T08:23:11.000Z",
  "guild_id": "123456789012345678",
  "data": {
    "ticket_id": "ticket-1042",
    "ticket_num_id": 1042,
    "channel_id": "998877665544332211",
    "category": "🤖 Support",
    "user": { "id": "987654321098765432", "username": "Luna" },
    "created_at": "2026-08-26T08:23:11.000Z"
  }
}

A Event Reference oldalon megtalálod minden típus data objektumát.

Az aláírás ellenőrzése

Bárki, aki megtudja a végpontod URL-jét, küldhet rá egy POST kérést. Az aláírás mutatja meg, hogy valódi TicketWave kézbesítésről van-e szó, vagy hamisítványról.

Mindig ellenőrizd. Egy ellenőrizetlen végpont, amely dolgokat hoz létre vagy zár le a rendszeredben, nyitott kapu.

Hogyan készül az aláírás

A TicketWave összefűzi az időbélyeget és a nyers kérés törzsét egy ponttal, majd HMAC-SHA256-ot futtat rajta a végpont titkoddal:

signed_payload = X-TicketWave-Timestamp + "." + raw_request_body
signature      = HMAC_SHA256(signed_payload, your_endpoint_secret)

A fejléc ezt a kivonatot hexadecimálisan kódolva és előtaggal ellátva tartalmazza: sha256=<digest>.

Mit kell tennie a fogadónak

Olvasd be a nyers törzset. Az ellenőrzést pontosan az ellenőrzésre kapott bájtokkal végezd. Ha a keretrendszered előbb JSON-ná alakítja, majd újraszerializálod, a kulcsok sorrendje vagy a szóközök megváltozhatnak, és a kivonat nem fog egyezni.

Számold újra az HMAC-et a timestamp + "." + rawBody alapján a titkoddal.

Hasonlítsd össze konstans időben (crypto.timingSafeEqual Node-ban). Egy sima === időzítési információt szivárogtat.

Ellenőrizd, hogy az időbélyeg friss-e — az öt perc tolerancia jó alapértelmezés. Az időbélyeg az aláírt payload része, így egy támadó nem tud egy régi kérést friss időbélyeggel újrajátszani.

Egy teljes megvalósítás az Example Server oldalon található.

Újrapróbálkozások

A sikertelen kézbesítést a rendszer automatikusan újrapróbálja.

Attempts3 (az első próbálkozás plusz 2 újrapróbálkozás)
Backoff1 másodperc, majd 5 másodperc
Retried onHálózati hibák, időtúllépések, 408, 429 és minden 5xx
Not retried onMinden más 4xx — ezek azt jelentik, hogy a végpontod szándékosan elutasította a kérést

Az újrapróbálkozások miatt a végpontod ugyanazt az eseményt kétszer is megkaphatja. Használd az X-TicketWave-Delivery értékét idempotencia kulcsként: jegyezd meg a feldolgozott azonosítókat, és hagyd figyelmen kívül az ismétléseket.

A kézbesítések nincsenek sorrendben. Ha két jegy ugyanabban a pillanatban jön létre, a kérések bármilyen sorrendben megérkezhetnek — ha a sorrend fontos, használd a törzs timestamp mezőjét.

Kézbesítési előzmények

Az irányítópult Webhooks oldala felsorolja az összes kézbesítést az állapotával, válaszkódjával, időtartamával és a próbálkozások számával együtt. Nyiss meg egy sort, hogy lásd a pontosan elküldött kérés payloadját és a szervered válaszát.

A sikertelen kézbesítéseket a részletező oldalról újra lehet küldeni a Retry Webhook gombbal. Újra elküldi az eredeti payloadot ugyanarra a végpontra, és új kézbesítésként rögzíti.

Az előzmények 30 napig maradnak meg, utána automatikusan törlődnek.

Hibaelhárítás

ProblemFix
A végpont nem menthetőAz URL-nek https:// kell lennie, és nyilvános címre kell feloldódnia
Minden sikertelenként jelenik meg válaszkód nélkülA kérés soha nem jutott el hozzád — időtúllépés, DNS-hiba vagy a kapcsolat elutasítva
Az aláírás soha nem egyezikA feldolgozott törzset hash-eled a nyers bájtok helyett, vagy elfelejtetted a timestamp + "." előtagot
A kézbesítések egy idő után leállnakEllenőrizd, hogy a hostod nem kezdett-e 4xx választ adni — azokat nem próbálja újra
Egy esemény soha nem érkezik megA végpont nincs feliratkozva arra a típusra, vagy a szerver elvesztette a prémiumot
Duplikált eseményekÚjrapróbálkozásoknál várható — deduplikálj az X-TicketWave-Delivery alapján

Következő lépések

How is this guide?