TicketWave Logo
Webhooks

Event Reference

Ogni tipo di evento webhook e il payload esatto inviato da TicketWave.

Riferimento eventi

È possibile iscriversi a sei tipi di evento per endpoint. Ogni richiesta usa lo stesso envelope — event, timestamp, guild_id e data — e cambia solo l'oggetto data.

EventFires when
ticket.createdUn ticket viene aperto
ticket.closedUn ticket viene chiuso
ticket.updatedQualsiasi altra cosa cambia su un ticket aperto
message.sentUn membro o lo staff scrive in un ticket
blacklist.addedUn membro viene inserito in blacklist
blacklist.removedUna voce della blacklist viene rimossa

I campi che non possono essere risolti vengono inviati come null invece di essere omessi — così puoi fare affidamento sul fatto che le chiavi esistano. Un username è null quando Discord non ha restituito l'utente.

Campi condivisi

Ogni evento ticket include questi campi:

FieldTypeDescription
ticket_idstringL'id leggibile del ticket dal tuo pattern, ad esempio ticket-1042
ticket_num_idnumberIl numero progressivo del ticket, ad esempio 1042
channel_idstringIl canale Discord del ticket
categorystring | nullNome della categoria, null se il ticket non ne ha una
userobject | nullIl proprietario del ticket come { id, username }

ticket.created

Inviato subito dopo la creazione del canale del ticket.

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

Questo evento viene inviato quando il ticket viene aperto, quindi prima che il membro abbia scritto qualsiasi cosa. Se ti serve il primo messaggio, ascolta anche 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_byobjectChi lo ha chiuso. Le chiusure automatiche riportano il bot
reasonstring | nullIl motivo della chiusura, null se non ne è stato fornito uno

ticket.updated

Il contenitore generale per le modifiche a un ticket aperto. action ti dice cosa è cambiato, changes contiene i dettagli di quella specifica azione.

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

Possibili valori di action

actionMeaningchanges contains
ticket_claim:addUn membro dello staff ha preso in carico il ticket(empty)
ticket_unclaim:addLa presa in carico è stata rilasciata(empty)
ticket_priority:addLa priorità è cambiatapriority
ticket_rename:addIl canale è stato rinominatonew_name
ticket_remind:addÈ stato inviato un promemoria(empty)
ticket_feedback:addIl membro ha valutato il ticketstar_count, feedback
ticket_schedule_close:addÈ stata programmata una chiusuraduration, schedule_time
ticket_request_close:addLo staff ha chiesto al membro di chiudereduration, request_duration_time
ticket_request_close_accept:addIl membro ha accettato(empty)
ticket_request_close_deny:addIl membro ha rifiutato(empty)
ticket_close_cancel:addUna chiusura in corso è stata annullata(empty)
ticket_additional_access:addUn utente o un ruolo è stato aggiunto al ticketentity_type, entity_id, reason
ticket_additional_access:removeUn utente o un ruolo è stato rimossoentity_type, entity_id, reason

Considera questo elenco come aperto. Nuove azioni vengono aggiunte man mano che TicketWave cresce, e arrivano come ticket.updated. Gestisci solo le azioni che ti interessano e ignora le altre invece di generare un errore sui valori sconosciuti.

Rispondere a un passo del ticket non produce nessun evento. Un ticket con molti passaggi altrimenti inonderebbe il tuo endpoint mentre il membro sta ancora compilando il modulo.


message.sent

Inviato per ogni messaggio umano all'interno di un ticket aperto. I messaggi dei bot — incluso TicketWave stesso — vengono ignorati.

{
  "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
contentstringIl testo grezzo del messaggio. Vuoto per i messaggi con solo allegati
authorobject{ id, username } del mittente
is_staffbooleantrue se il mittente ha un ruolo di supporto configurato

Questo è l'evento con il volume più alto di gran lunga — un server molto attivo produce una richiesta per ogni messaggio. Iscriviti solo se hai davvero bisogno dei dati a livello di messaggio e assicurati che il tuo ricevitore risponda rapidamente.


blacklist.added

Non è legato a un ticket, quindi questo payload non ha 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" }
  }
}

Eventi di test

Il pulsante Send test event invia una richiesta reale e firmata il cui data è semplicemente:

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

L'event è il primo tipo a cui l'endpoint è iscritto. Controlla data.test se vuoi saltare le consegne di test nella logica di produzione.

Prossimi passi

How is this guide?