Referință evenimente
Fiecare tip de eveniment webhook și payload-ul exact pe care îl trimite TicketWave.
Referință evenimente
La fiecare endpoint pot fi abonate șase tipuri de evenimente. Fiecare cerere folosește aceeași structură — event, timestamp, guild_id și data — iar singurul lucru care diferă este obiectul data.
| Event | Fires when |
|---|---|
ticket.created | Un tichet este deschis |
ticket.closed | Un tichet este închis |
ticket.updated | Se schimbă orice altceva la un tichet deschis |
message.sent | Un membru sau un staff scrie într-un tichet |
blacklist.added | Un membru este pus pe blacklist |
blacklist.removed | O intrare din blacklist este eliminată |
Câmpurile care nu pot fi rezolvate sunt trimise ca null, în loc să fie omise — așa că te poți baza pe existența cheilor. Un username este null atunci când Discord nu a returnat utilizatorul.
Câmpuri comune
Fiecare eveniment de tichet conține acestea:
| Field | Type | Description |
|---|---|---|
ticket_id | string | ID-ul lizibil al tichetului din modelul tău, de exemplu ticket-1042 |
ticket_num_id | number | Numărul curent al tichetului, de exemplu 1042 |
channel_id | string | Canalul Discord al tichetului |
category | string | null | Numele categoriei, null dacă tichetul nu are una |
user | object | null | Proprietarul tichetului ca { id, username } |
ticket.created
Trimis imediat după ce există canalul tichetului.
{
"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"
}
}Acesta se declanșează când tichetul este deschis, adică înainte ca membrul să fi scris ceva. Dacă ai nevoie de primul mesaj, ascultă și 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 | Cine l-a închis. Închiderile automate raportează botul |
reason | string | null | Motivul închiderii, null dacă nu a fost oferit niciunul |
ticket.updated
Evenimentul general pentru modificările unui tichet deschis. action îți spune ce s-a schimbat, iar changes conține detaliile acelei acțiuni specifice.
{
"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" }
}
}Valori posibile pentru action
action | Meaning | changes contains |
|---|---|---|
ticket_claim:add | Un membru din staff a revendicat tichetul | (gol) |
ticket_unclaim:add | Revendicarea a fost retrasă | (gol) |
ticket_priority:add | Prioritatea s-a schimbat | priority |
ticket_rename:add | Canalul a fost redenumit | new_name |
ticket_remind:add | A fost trimis un reminder | (gol) |
ticket_feedback:add | Membrul a evaluat tichetul | star_count, feedback |
ticket_schedule_close:add | A fost programată o închidere | duration, schedule_time |
ticket_request_close:add | Staff-ul i-a cerut membrului să închidă | duration, request_duration_time |
ticket_request_close_accept:add | Membrul a acceptat | (gol) |
ticket_request_close_deny:add | Membrul a refuzat | (gol) |
ticket_close_cancel:add | O închidere în curs a fost anulată | (gol) |
ticket_additional_access:add | Un utilizator sau un rol a fost adăugat la tichet | entity_type, entity_id, reason |
ticket_additional_access:remove | Un utilizator sau un rol a fost eliminat | entity_type, entity_id, reason |
Tratează această listă ca fiind deschisă. Pe măsură ce TicketWave crește, apar acțiuni noi, iar ele ajung prin ticket.updated. Folosește un switch doar pentru acțiunile care te interesează și ignoră restul, în loc să arunci erori pentru valori necunoscute.
Răspunsul la un pas din tichet nu produce niciun eveniment. Altfel, un tichet cu multe pași ți-ar inunda endpointul cât timp membrul încă completează formularul.
message.sent
Trimis pentru fiecare mesaj uman dintr-un tichet deschis. Mesajele de la boți — inclusiv TicketWave însuși — sunt omise.
{
"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 | Textul brut al mesajului. Gol pentru mesajele care conțin doar atașamente |
author | object | { id, username } al expeditorului |
is_staff | boolean | true dacă expeditorul are un rol de suport configurat |
Acesta este evenimentul cu cel mai mare volum, de departe — un server aglomerat produce o cerere pentru fiecare mesaj. Abonează-te la el doar dacă ai cu adevărat nevoie de date la nivel de mesaj și asigură-te că receptorul răspunde rapid.
blacklist.added
Nu este legat de un tichet, așa că acest payload nu are 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" }
}
}Evenimente de test
Butonul Send test event livrează o cerere reală, semnată, al cărei data este doar:
{
"event": "ticket.created",
"timestamp": "2026-08-26T12:00:00.000Z",
"guild_id": "123456789012345678",
"data": { "test": true }
}event este primul tip la care endpointul este abonat. Verifică data.test dacă vrei să sari peste livrările de test în logica de producție.
Pașii următori
- Example Server (Gestionează aceste payload-uri în Express)
- Webhooks (Semnare, retry-uri și istoricul livrărilor)
How is this guide?
