TicketWave Logo
​Webhooks

Eventreferentie

Elk webhook-gebeurtenistype en de exacte payload die TicketWave verstuurt.

Eventreferentie

Per endpoint kunnen zes gebeurtenistypen worden geabonneerd. Elke request gebruikt dezelfde envelop — event, timestamp, guild_id en data — en alleen het data-object verschilt.

EventWordt geactiveerd wanneer
ticket.createdEen ticket wordt geopend
ticket.closedEen ticket wordt gesloten
ticket.updatedEr iets anders verandert aan een open ticket
message.sentEen lid of medewerker schrijft in een ticket
blacklist.addedEen lid wordt op de blacklist gezet
blacklist.removedEen blacklistvermelding wordt verwijderd

Velden die niet kunnen worden opgelost, worden verzonden als null in plaats van weggelaten — je kunt er dus op vertrouwen dat de sleutels bestaan. Een username is null wanneer Discord de gebruiker niet heeft teruggegeven.

Gedeelde velden

Elk ticket-event bevat deze:

VeldTypeBeschrijving
ticket_idstringDe leesbare ticket-id uit je patroon, bijvoorbeeld ticket-1042
ticket_num_idnumberHet oplopende ticketnummer, bijvoorbeeld 1042
channel_idstringHet Discord-kanaal van het ticket
categorystring | nullCategorienaam, null als het ticket er geen heeft
userobject | nullDe eigenaar van het ticket als { id, username }

ticket.created

Wordt direct verzonden nadat het ticketkanaal bestaat.

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

Dit wordt geactiveerd wanneer het ticket wordt geopend, dus voordat het lid iets heeft geschreven. Als je het eerste bericht nodig hebt, luister dan ook naar 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"
  }
}
VeldTypeBeschrijving
closed_byobjectWie het heeft gesloten. Automatische sluitingen rapporteren de bot
reasonstring | nullDe sluitingsreden, null als er geen is opgegeven

ticket.updated

De verzamelcategorie voor wijzigingen aan een open ticket. action vertelt je wat er is veranderd, changes bevat de details van die specifieke actie.

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

Mogelijke action-waarden

actionBetekenischanges bevat
ticket_claim:addEen medewerker heeft het ticket geclaimd(leeg)
ticket_unclaim:addDe claim is vrijgegeven(leeg)
ticket_priority:addPrioriteit gewijzigdpriority
ticket_rename:addHet kanaal is hernoemdnew_name
ticket_remind:addEr is een herinnering verzonden(leeg)
ticket_feedback:addHet lid heeft het ticket beoordeeldstar_count, feedback
ticket_schedule_close:addEen sluiting is ingeplandduration, schedule_time
ticket_request_close:addMedewerker heeft het lid gevraagd om te sluitenduration, request_duration_time
ticket_request_close_accept:addHet lid heeft geaccepteerd(leeg)
ticket_request_close_deny:addHet lid heeft geweigerd(leeg)
ticket_close_cancel:addEen lopende sluiting is geannuleerd(leeg)
ticket_additional_access:addEen gebruiker of rol is aan het ticket toegevoegdentity_type, entity_id, reason
ticket_additional_access:removeEen gebruiker of rol is verwijderdentity_type, entity_id, reason

Beschouw deze lijst als open-ended. Naarmate TicketWave groeit, worden er nieuwe acties toegevoegd, en die komen binnen als ticket.updated. Schakel in op de acties die je nodig hebt en negeer de rest in plaats van te falen op onbekende waarden.

Het beantwoorden van een ticketstap produceert geen event. Anders zou een ticket met veel stappen je endpoint overspoelen terwijl het lid het formulier nog aan het invullen is.


message.sent

Wordt verzonden voor elk menselijk bericht binnen een open ticket. Berichten van bots — inclusief TicketWave zelf — worden overgeslagen.

{
  "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"
  }
}
VeldTypeBeschrijving
contentstringDe ruwe berichttekst. Leeg bij berichten met alleen bijlagen
authorobject{ id, username } van de afzender
is_staffbooleantrue als de afzender een geconfigureerde supportrol heeft

Dit is veruit het event met het hoogste volume — een drukke server genereert ÊÊn request per bericht. Abonneer je hier alleen op als je echt berichtniveau-data nodig hebt, en zorg ervoor dat je ontvanger snel antwoordt.


blacklist.added

Niet gekoppeld aan een ticket, dus deze payload heeft geen 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" }
  }
}

Testevents

De knop Send test event levert een echte, ondertekende request waarvan data gewoon dit is:

{
  "event": "ticket.created",
  "timestamp": "2026-08-26T12:00:00.000Z",
  "guild_id": "123456789012345678",
  "data": { "test": true }
}

Het event is het eerste type waarop het endpoint is geabonneerd. Controleer op data.test als je testleveringen in productie-logica wilt overslaan.

Volgende stappen

  • Example Server (Verwerk deze payloads in Express)
  • Webhooks (Ondertekening, retries en leveringsgeschiedenis)

How is this guide?