TicketWave Logo
Webhooks

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.

EventFires when
ticket.createdUn tichet este deschis
ticket.closedUn tichet este închis
ticket.updatedSe schimbă orice altceva la un tichet deschis
message.sentUn membru sau un staff scrie într-un tichet
blacklist.addedUn membru este pus pe blacklist
blacklist.removedO 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:

FieldTypeDescription
ticket_idstringID-ul lizibil al tichetului din modelul tău, de exemplu ticket-1042
ticket_num_idnumberNumărul curent al tichetului, de exemplu 1042
channel_idstringCanalul Discord al tichetului
categorystring | nullNumele categoriei, null dacă tichetul nu are una
userobject | nullProprietarul 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"
  }
}
FieldTypeDescription
closed_byobjectCine l-a închis. Închiderile automate raportează botul
reasonstring | nullMotivul î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

actionMeaningchanges contains
ticket_claim:addUn membru din staff a revendicat tichetul(gol)
ticket_unclaim:addRevendicarea a fost retrasă(gol)
ticket_priority:addPrioritatea s-a schimbatpriority
ticket_rename:addCanalul a fost redenumitnew_name
ticket_remind:addA fost trimis un reminder(gol)
ticket_feedback:addMembrul a evaluat tichetulstar_count, feedback
ticket_schedule_close:addA fost programată o închidereduration, schedule_time
ticket_request_close:addStaff-ul i-a cerut membrului să închidăduration, request_duration_time
ticket_request_close_accept:addMembrul a acceptat(gol)
ticket_request_close_deny:addMembrul a refuzat(gol)
ticket_close_cancel:addO închidere în curs a fost anulată(gol)
ticket_additional_access:addUn utilizator sau un rol a fost adăugat la tichetentity_type, entity_id, reason
ticket_additional_access:removeUn utilizator sau un rol a fost eliminatentity_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"
  }
}
FieldTypeDescription
contentstringTextul brut al mesajului. Gol pentru mesajele care conțin doar atașamente
authorobject{ id, username } al expeditorului
is_staffbooleantrue 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?