TicketWave Logo
Webhooks

Yleiskatsaus

Vastaanota TicketWave-tapahtumat allekirjoitettuina HTTP-pyyntöinä omassa sovelluksessasi.

Webhookit

Webhook on HTTP-pyyntö, jonka TicketWave lähettää sinulle. Aina kun palvelimellasi tapahtuu jotain — tiketti avataan, jäsen joutuu mustalle listalle — TicketWave tekee POST-pyynnön JSON-rungolla sinun omistamaasi URL-osoitteeseen.

Tämä on ero Lokikanaviin: lokikanavat kirjoittavat Discordiin embedin ihmisten luettavaksi, webhookit välittävät raakatapahtuman suoraan koodillesi.

Webhookit ovat premium-ominaisuus. Ilman premiumia päätepisteitä ei voi luoda eikä tapahtumia toimiteta.

Luo päätepiste

Avaa päätepistesivu

Palvelimen hallintapaneeli → WebhooksEndpoints.

Lisää päätepiste

Klikkaa Add Endpoint ja täytä kaksi kenttää:

FieldDescription
Endpoint URLhttps://-osoite, joka vastaanottaa pyynnöt
Event TypesMitkä tapahtumat tämän päätepisteen pitäisi vastaanottaa

Päätepiste vastaanottaa vain ne tyypit, jotka valitset. Mitään ei saa jättää valitsematta — valitse vähintään yksi.

Kopioi allekirjoitussalaisuus

TicketWave luo allekirjoitussalaisuuden (whsec_…) heti, kun päätepiste luodaan. Avaa päätepisteiden lista, paljasta se silmäkuvakkeella ja kopioi se sovelluksesi asetuksiin.

Käsittele salaisuutta kuin salasanaa. Kuka tahansa, jolla se on, voi väärentää pyyntöjä, jotka läpäisevät allekirjoitustarkistuksesi. Säilytä se ympäristömuuttujassa, älä koskaan repositoriossasi.

Lähetä testitapahtuma

Käytä päätepisterivillä olevaa Send test event -painiketta (paperilentokone). Se toimittaa oikean, täysin allekirjoitetun pyynnön, jonka hyötykuormassa on "test": true, joten voit varmistaa vastaanottimesi toimivuuden ennen kuin oikea tiketti riippuu siitä.

Tulos näkyy Webhooks-historiassa kuten mikä tahansa muu toimitus.

Päätepisteen vaatimukset

RequirementDetail
SchemeVain https://http:// hylätään
HostTäytyy olla julkisesti ratkaistavissa. Yksityiset, loopback-, link-local- ja CGNAT-osoitteet hylätään
ResponseMikä tahansa 2xx-tila lasketaan onnistumiseksi
TimeoutSinulla on 10 sekuntia aikaa vastata
RedirectsEi seurata. 3xx lasketaan epäonnistumiseksi
LimitEnintään 5 päätepistettä per palvelin

Host-tarkistus tehdään sekä silloin, kun tallennat päätepisteen että ennen jokaista yksittäistä toimitusta, joten domain, joka myöhemmin alkaa ratkaistua sisäiseen osoitteeseen, lakkaa saamasta toimituksia.

Pyyntö

Jokainen toimitus on POST-pyyntö JSON-rungolla.

Otsikot

HeaderExampleMeaning
Content-Typeapplication/jsonAina JSON
User-AgentTicketWave-Webhooks/1.0.5Sen lähettäneen botin versio
X-TicketWave-Eventticket.createdTapahtuman tyyppi
X-TicketWave-Deliverywh_3f2a…Tämän toimituksen yksilöllinen tunniste
X-TicketWave-Timestamp1786224191Unix-sekunteina, osa allekirjoitusta
X-TicketWave-Signaturesha256=9f86d0…Pyynnön HMAC

Runko

Jokainen hyötykuorma käyttää samaa kehystä. Vain data vaihtelee tapahtumatyypin mukaan:

{
  "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"
  }
}

Katso Event Reference saadaksesi jokaisen tyypin data-objektin.

Allekirjoituksen varmistaminen

Kuka tahansa, joka saa selville päätepisteesi URL-osoitteen, voi lähettää siihen POST-pyynnön. Allekirjoitus kertoo, onko kyseessä oikea TicketWave-toimitus vai väärennetty pyyntö.

Varmista aina. Varmistamaton päätepiste, joka luo tai sulkee asioita järjestelmässäsi, on avoin ovi.

Miten allekirjoitus muodostetaan

TicketWave yhdistää aikaleiman ja raakan pyynnön rungon pisteellä, ja ajaa tulokselle HMAC-SHA256:n käyttäen päätepisteesi salaisuutta:

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

Otsikko sisältää tämän tiivisteen heksakoodattuna ja etuliitteellä: sha256=<digest>.

Mitä vastaanottimesi täytyy tehdä

Lue raaka runko. Varmista vastaanotettuja täsmällisiä bittejä vasten. Jos frameworkisi parsii JSONin ensin ja serialisoit sen uudelleen, avainten järjestys tai välilyönnit voivat muuttua eikä tiiviste enää täsmää.

Laske HMAC uudelleen käyttäen timestamp + "." + rawBody ja salaisuuttasi.

Vertaa vakioajassa (crypto.timingSafeEqual Nodessa). Tavallinen === vuotaa ajoitustietoa.

Tarkista, että aikaleima on tuore — viiden minuutin toleranssi on hyvä oletus. Aikaleima on allekirjoitetussa hyötykuormassa, joten hyökkääjä ei voi toistaa vanhaa pyyntöä uudella aikaleimalla.

Täydellinen toteutus löytyy Example Server -sivulta.

Uusintayritykset

Epäonnistunut toimitus yritetään automaattisesti uudelleen.

Attempts3 (ensimmäinen yritys + 2 uusintayritystä)
Backoff1 sekunti, sitten 5 sekuntia
Retried onVerkko-ongelmat, aikakatkaisut, 408, 429 ja kaikki 5xx
Not retried onKaikki muut 4xx — ne tarkoittavat, että päätepisteesi hylkäsi pyynnön tarkoituksella

Uusintayritysten vuoksi päätepisteesi voi vastaanottaa saman tapahtuman kahdesti. Käytä X-TicketWave-Delivery-arvoa idempotenssiavaimena: muista käsitellyt tunnisteet ja ohita toistot.

Toimitukset eivät ole järjestyksessä. Jos kaksi tikettiä luodaan samalla hetkellä, pyynnöt voivat saapua kummassa tahansa järjestyksessä — käytä rungon timestamp-kenttää, jos järjestyksellä on sinulle väliä.

Toimitushistoria

Hallintapaneelin Webhooks-sivu listaa jokaisen toimituksen sen tilan, vastauskoodin, keston ja yritysten määrän kanssa. Avaa rivi nähdäksesi täsmällisen lähetetyn pyynnön hyötykuorman ja vastauksen, jonka palvelimesi palautti.

Epäonnistuneet toimitukset voidaan lähettää uudelleen yksityiskohtasivulta painikkeella Retry Webhook. Se lähettää alkuperäisen hyötykuorman uudelleen samaan päätepisteeseen ja kirjaa uuden toimituksen.

Historia säilytetään 30 päivää, minkä jälkeen se siivotaan automaattisesti.

Vianmääritys

ProblemFix
Päätepistettä ei voi tallentaaURL-osoitteen täytyy olla https:// ja ratkaistua julkiseen osoitteeseen
Kaikki näkyy epäonnistuneena ilman vastauskoodiaPyyntö ei koskaan saavuttanut sinua — aikakatkaisu, DNS-virhe tai yhteys evättiin
Allekirjoitus ei koskaan täsmääLasket hajautuksen parsitusta rungosta raakojen bittien sijaan, tai unohdit timestamp + "." -etuliitteen
Toimitukset loppuvat jonkin ajan kuluttuaTarkista, alkoiko hostisi palauttaa 4xx-vastauksia — niitä ei yritetä uudelleen
Tapahtuma ei koskaan saavuPäätepiste ei ole tilannut kyseistä tyyppiä, tai palvelimelta katosi premium
KaksoistapahtumatOdotettavissa uusintayrityksissä — poista duplikaatit X-TicketWave-Delivery-arvon perusteella

Seuraavat askeleet

How is this guide?