Hendelsesreferanse
Hver webhook-hendelsestype og den nøyaktige payloaden TicketWave sender.
Hendelsesreferanse
Seks hendelsestyper kan abonneres på per endepunkt. Hver forespørsel bruker samme innpakning — event, timestamp, guild_id og data — og bare data-objektet er forskjellig.
| Event | Utløses når |
|---|---|
ticket.created | En ticket åpnes |
ticket.closed | En ticket lukkes |
ticket.updated | Noe annet endres på en åpen ticket |
message.sent | Et medlem eller en ansatt skriver i en ticket |
blacklist.added | Et medlem blir svartelistet |
blacklist.removed | En svartelisteoppføring fjernes |
Felter som ikke kan løses opp sendes som null i stedet for å utelates — så du kan stole på at nøklene finnes. Et username er null når Discord ikke returnerte brukeren.
Delte felter
Hver ticket-hendelse inneholder disse:
| Felt | Type | Beskrivelse |
|---|---|---|
ticket_id | string | Den lesbare ticket-ID-en fra mønsteret ditt, f.eks. ticket-1042 |
ticket_num_id | number | Det løpende ticket-nummeret, f.eks. 1042 |
channel_id | string | Discord-kanalen for ticketen |
category | string | null | Kategorinavn, null hvis ticketen ikke har noen |
user | object | null | Eieren av ticketen som { id, username } |
ticket.created
Sendes rett etter at ticket-kanalen finnes.
{
"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"
}
}Dette utløses når ticketen er åpnet, altså før medlemmet har skrevet noe som helst. Hvis du trenger den første meldingen, lytt også etter message.sent.
ticket.closed
{
"event": "ticket.closed",
"timestamp": "2026-08-26T07:45:02.000Z",
"guild_id": "123456789012345678",
"data": {
"ticket_id": "ticket-1041",
"ticket_num_id": 1041,
"channel_id": "998877665544332211",
"category": "💸 Payment",
"user": { "id": "987654321098765432", "username": "Luna" },
"closed_by": { "id": "112233445566778899", "username": "Staff_01" },
"reason": "Issue resolved",
"closed_at": "2026-08-26T07:45:02.000Z"
}
}| Felt | Type | Beskrivelse |
|---|---|---|
closed_by | object | Hvem som lukket den. Automatiske lukkinger rapporterer boten |
reason | string | null | Årsaken til lukking, null hvis ingen ble oppgitt |
ticket.updated
Samlepunktet for endringer på en åpen ticket. action forteller deg hva som endret seg, changes inneholder detaljene for akkurat den handlingen.
{
"event": "ticket.updated",
"timestamp": "2026-08-26T14:02:19.000Z",
"guild_id": "123456789012345678",
"data": {
"ticket_id": "ticket-1038",
"ticket_num_id": 1038,
"channel_id": "998877665544332211",
"category": "🤖 Support",
"user": { "id": "987654321098765432", "username": "Luna" },
"action": "ticket_priority:add",
"changes": { "priority": "high" },
"reason": null,
"updated_by": { "id": "112233445566778899", "username": "Staff_01" }
}
}Mulige action-verdier
action | Betydning | changes inneholder |
|---|---|---|
ticket_claim:add | Et ansattmedlem gjorde krav på ticketen | (tomt) |
ticket_unclaim:add | Kravet ble frigitt | (tomt) |
ticket_priority:add | Prioriteten ble endret | priority |
ticket_rename:add | Kanalen ble gitt nytt navn | new_name |
ticket_remind:add | En påminnelse ble sendt | (tomt) |
ticket_feedback:add | Medlemmet vurderte ticketen | star_count, feedback |
ticket_schedule_close:add | En lukking ble planlagt | duration, schedule_time |
ticket_request_close:add | Ansatte ba medlemmet om å lukke | duration, request_duration_time |
ticket_request_close_accept:add | Medlemmet godtok | (tomt) |
ticket_request_close_deny:add | Medlemmet avslo | (tomt) |
ticket_close_cancel:add | En pågående lukking ble avbrutt | (tomt) |
ticket_additional_access:add | En bruker eller rolle ble lagt til i ticketen | entity_type, entity_id, reason |
ticket_additional_access:remove | En bruker eller rolle ble fjernet | entity_type, entity_id, reason |
Se på denne listen som åpen. Nye handlinger legges til etter hvert som TicketWave vokser, og de kommer inn som ticket.updated. Håndter bare handlingene du bryr deg om, og ignorer resten i stedet for å kaste feil på ukjente verdier.
Å svare på et ticket-steg produserer ikke en hendelse. En ticket med mange steg ville ellers oversvømme endepunktet ditt mens medlemmet fortsatt fyller ut skjemaet.
message.sent
Sendes for hver menneskelige melding inne i en åpen ticket. Meldinger fra boter — inkludert TicketWave selv — hoppes over.
{
"event": "message.sent",
"timestamp": "2026-08-26T22:10:55.000Z",
"guild_id": "123456789012345678",
"data": {
"ticket_id": "ticket-1040",
"ticket_num_id": 1040,
"channel_id": "998877665544332211",
"message_id": "1234567890123456789",
"content": "Hello, how can I help you?",
"author": { "id": "112233445566778899", "username": "Staff_01" },
"is_staff": true,
"sent_at": "2026-08-26T22:10:55.000Z"
}
}| Felt | Type | Beskrivelse |
|---|---|---|
content | string | Den rå meldingsteksten. Tom for meldinger kun med vedlegg |
author | object | { id, username } til avsenderen |
is_staff | boolean | true hvis avsenderen har en konfigurert supportrolle |
Dette er hendelsen med klart høyest volum — en travel server produserer én forespørsel per melding. Abonner bare på den hvis du faktisk trenger meldingsnivådata, og sørg for at mottakeren svarer raskt.
blacklist.added
Ikke knyttet til en ticket, så denne payloaden har ingen ticket_id.
{
"event": "blacklist.added",
"timestamp": "2026-08-26T18:33:47.000Z",
"guild_id": "123456789012345678",
"data": {
"user": { "id": "111223344556677889", "username": "BadActor" },
"reason": "Spam",
"added_by": { "id": "112233445566778899", "username": "Staff_01" }
}
}blacklist.removed
{
"event": "blacklist.removed",
"timestamp": "2026-08-26T18:40:12.000Z",
"guild_id": "123456789012345678",
"data": {
"user": { "id": "111223344556677889", "username": "BadActor" },
"removed_by": { "id": "112233445566778899", "username": "Staff_01" }
}
}Testhendelser
Knappen Send test event leverer en ekte, signert forespørsel, der data bare er:
{
"event": "ticket.created",
"timestamp": "2026-08-26T12:00:00.000Z",
"guild_id": "123456789012345678",
"data": { "test": true }
}event er den første typen endepunktet er abonnert på. Sjekk data.test hvis du vil hoppe over testleveranser i produksjonslogikken.
Neste steg
- Eksempelserver (Håndter disse payloadene i Express)
- Webhooks (Signering, retries og leveringshistorikk)
How is this guide?
