Händelsereferens
Varje webhook-händelsetyp och den exakta payload som TicketWave skickar.
Händelsereferens
Sex händelsetyper kan prenumereras på per endpoint. Varje begäran använder samma kuvert — event, timestamp, guild_id och data — och endast data-objektet skiljer sig åt.
| Event | Utlöses när |
|---|---|
ticket.created | Ett ärende öppnas |
ticket.closed | Ett ärende stängs |
ticket.updated | Något annat ändras i ett öppet ärende |
message.sent | En medlem eller personal skriver i ett ärende |
blacklist.added | En medlem svartlistas |
blacklist.removed | En svartlistpost tas bort |
Fält som inte kan lösas skickas som null i stället för att utelämnas — så du kan lita på att nycklarna finns. Ett username är null när Discord inte returnerade användaren.
Delade fält
Varje ärendehändelse innehåller dessa:
| Field | Type | Description |
|---|---|---|
ticket_id | string | Det läsbara ärende-ID:t från ditt mönster, t.ex. ticket-1042 |
ticket_num_id | number | Det löpande ärendenumret, t.ex. 1042 |
channel_id | string | Discord-kanalen för ärendet |
category | string | null | Kategorinamn, null om ärendet saknar kategori |
user | object | null | Ärendets ägare som { id, username } |
ticket.created
Skickas direkt efter att ärendekanalen finns.
{
"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"
}
}Detta utlöses när ärendet öppnas, alltså innan medlemmen har skrivit något. Om du behöver det första meddelandet, lyssna även på 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"
}
}| Field | Type | Description |
|---|---|---|
closed_by | object | Vem som stängde det. Automatiska stängningar rapporterar boten |
reason | string | null | Orsaken till stängningen, null om ingen angavs |
ticket.updated
Samlingshändelsen för ändringar i ett öppet ärende. action talar om vad som ändrades, changes innehåller detaljerna för just den åtgärden.
{
"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" }
}
}Möjliga action-värden
action | Betydelse | changes innehåller |
|---|---|---|
ticket_claim:add | En personalmedlem tog över ärendet | (tomt) |
ticket_unclaim:add | Övertagandet släpptes | (tomt) |
ticket_priority:add | Prioriteten ändrades | priority |
ticket_rename:add | Kanalen döptes om | new_name |
ticket_remind:add | En påminnelse skickades | (tomt) |
ticket_feedback:add | Medlemmen betygsatte ärendet | star_count, feedback |
ticket_schedule_close:add | En stängning schemalades | duration, schedule_time |
ticket_request_close:add | Personalen bad medlemmen att stänga | duration, request_duration_time |
ticket_request_close_accept:add | Medlemmen accepterade | (tomt) |
ticket_request_close_deny:add | Medlemmen avböjde | (tomt) |
ticket_close_cancel:add | En pågående stängning avbröts | (tomt) |
ticket_additional_access:add | En användare eller roll lades till i ärendet | entity_type, entity_id, reason |
ticket_additional_access:remove | En användare eller roll togs bort | entity_type, entity_id, reason |
Se den här listan som öppen. Nya åtgärder läggs till i takt med att TicketWave växer, och de kommer som ticket.updated. Växla på de actions du bryr dig om och ignorera resten i stället för att kasta fel på okända värden.
Att svara på ett ärendesteg genererar inte någon händelse. Ett ärende med många steg skulle annars översvämma din endpoint medan medlemmen fortfarande fyller i formuläret.
message.sent
Skickas för varje mänskligt meddelande i ett öppet ärende. Meddelanden från bottar — inklusive TicketWave själv — hoppas över.
{
"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"
}
}| Field | Type | Description |
|---|---|---|
content | string | Den råa meddelandetexten. Tom för meddelanden som bara innehåller bilagor |
author | object | { id, username } för avsändaren |
is_staff | boolean | true om avsändaren har en konfigurerad supportroll |
Detta är med stor marginal händelsen med högst volym — en upptagen server genererar en begäran per meddelande. Prenumerera bara på den om du verkligen behöver data på meddelandenivå, och se till att din mottagare svarar snabbt.
blacklist.added
Inte kopplad till ett ärende, så den här payloaden har inget 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" }
}
}Testhändelser
Knappen Send test event levererar en riktig, signerad begäran vars data bara är:
{
"event": "ticket.created",
"timestamp": "2026-08-26T12:00:00.000Z",
"guild_id": "123456789012345678",
"data": { "test": true }
}event är den första typen som endpointen prenumererar på. Kontrollera data.test om du vill hoppa över testleveranser i produktionslogik.
Nästa steg
- Example Server (Hantera dessa payloads i Express)
- Webhooks (Signering, retries och leveranshistorik)
How is this guide?
