Αναφορά Συμβάντων
Κάθε τύπος συμβάντος webhook και το ακριβές payload που στέλνει το TicketWave.
Αναφορά Συμβάντων
Μπορείτε να εγγραφείτε σε έξι τύπους συμβάντων ανά endpoint. Κάθε αίτημα χρησιμοποιεί το ίδιο envelope — event, timestamp, guild_id και data — και μόνο το αντικείμενο data διαφέρει.
| Event | Fires when |
|---|---|
ticket.created | Ένα ticket ανοίγει |
ticket.closed | Ένα ticket κλείνει |
ticket.updated | Οτιδήποτε άλλο αλλάζει σε ένα ανοιχτό ticket |
message.sent | Ένα μέλος ή το προσωπικό γράφει σε ένα ticket |
blacklist.added | Ένα μέλος μπαίνει στη blacklist |
blacklist.removed | Μια καταχώριση στη blacklist αφαιρείται |
Τα πεδία που δεν μπορούν να επιλυθούν αποστέλλονται ως null αντί να παραλείπονται — έτσι μπορείτε να βασίζεστε στο ότι τα κλειδιά υπάρχουν. Ένα username είναι null όταν το Discord δεν επέστρεψε τον χρήστη.
Shared fields
Κάθε συμβάν ticket περιλαμβάνει τα εξής:
| Field | Type | Description |
|---|---|---|
ticket_id | string | Το αναγνώσιμο ticket id από το pattern σας, π.χ. ticket-1042 |
ticket_num_id | number | Ο αύξων αριθμός του ticket, π.χ. 1042 |
channel_id | string | Το Discord κανάλι του ticket |
category | string | null | Όνομα κατηγορίας, null αν το ticket δεν έχει |
user | object | null | Ο κάτοχος του ticket ως { id, username } |
ticket.created
Αποστέλλεται αμέσως μόλις υπάρχει το κανάλι του 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"
}
}Αυτό ενεργοποιείται όταν το ticket ανοίγει, δηλαδή πριν το μέλος γράψει οτιδήποτε. Αν χρειάζεστε το πρώτο μήνυμα, ακούστε και το 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 | Ποιος το έκλεισε. Τα αυτόματα κλεισίματα αναφέρουν το bot |
reason | string | null | Ο λόγος κλεισίματος, null αν δεν δόθηκε κανένας |
ticket.updated
Το γενικό συμβάν για αλλαγές σε ένα ανοιχτό ticket. Το action σας λέει τι άλλαξε, ενώ το changes περιέχει τις λεπτομέρειες αυτής της συγκεκριμένης ενέργειας.
{
"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" }
}
}Πιθανές τιμές action
action | Meaning | changes contains |
|---|---|---|
ticket_claim:add | Ένα μέλος του προσωπικού ανέλαβε το ticket | (empty) |
ticket_unclaim:add | Η ανάληψη ακυρώθηκε | (empty) |
ticket_priority:add | Η προτεραιότητα άλλαξε | priority |
ticket_rename:add | Το κανάλι μετονομάστηκε | new_name |
ticket_remind:add | Στάλθηκε υπενθύμιση | (empty) |
ticket_feedback:add | Το μέλος αξιολόγησε το ticket | star_count, feedback |
ticket_schedule_close:add | Προγραμματίστηκε κλείσιμο | duration, schedule_time |
ticket_request_close:add | Το προσωπικό ζήτησε από το μέλος να κλείσει | duration, request_duration_time |
ticket_request_close_accept:add | Το μέλος αποδέχτηκε | (empty) |
ticket_request_close_deny:add | Το μέλος αρνήθηκε | (empty) |
ticket_close_cancel:add | Ένα κλείσιμο που εκτελούνταν ακυρώθηκε | (empty) |
ticket_additional_access:add | Προστέθηκε χρήστης ή ρόλος στο ticket | entity_type, entity_id, reason |
ticket_additional_access:remove | Αφαιρέθηκε χρήστης ή ρόλος | entity_type, entity_id, reason |
Να αντιμετωπίζετε αυτή τη λίστα ως ανοιχτού τέλους. Νέες ενέργειες προστίθενται καθώς το TicketWave μεγαλώνει και φτάνουν ως ticket.updated. Κάντε switch μόνο στις ενέργειες που σας ενδιαφέρουν και αγνοήστε τις υπόλοιπες αντί να πετάτε σφάλμα σε άγνωστες τιμές.
Η απάντηση σε ένα βήμα ticket δεν παράγει κανένα συμβάν. Διαφορετικά, ένα ticket με πολλά βήματα θα πλημμύριζε το endpoint σας ενώ το μέλος συμπληρώνει ακόμη τη φόρμα.
message.sent
Αποστέλλεται για κάθε ανθρώπινο μήνυμα μέσα σε ένα ανοιχτό ticket. Τα μηνύματα από bots — συμπεριλαμβανομένου του ίδιου του TicketWave — παραλείπονται.
{
"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 | Το ακατέργαστο κείμενο του μηνύματος. Κενό για μηνύματα μόνο με συνημμένα |
author | object | { id, username } του αποστολέα |
is_staff | boolean | true αν ο αποστολέας έχει ρυθμισμένο υποστηρικτικό ρόλο |
Αυτό είναι το συμβάν με τον μεγαλύτερο όγκο κατά πολύ — ένας πολυσύχναστος server παράγει ένα αίτημα ανά μήνυμα. Εγγραφείτε σε αυτό μόνο αν πραγματικά χρειάζεστε δεδομένα σε επίπεδο μηνύματος και βεβαιωθείτε ότι ο receiver σας απαντά γρήγορα.
blacklist.added
Δεν συνδέεται με ticket, οπότε αυτό το payload δεν έχει 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" }
}
}Test events
Το κουμπί Send test event στέλνει ένα πραγματικό, υπογεγραμμένο αίτημα του οποίου το data είναι απλώς:
{
"event": "ticket.created",
"timestamp": "2026-08-26T12:00:00.000Z",
"guild_id": "123456789012345678",
"data": { "test": true }
}Το event είναι ο πρώτος τύπος στον οποίο είναι εγγεγραμμένο το endpoint. Ελέγξτε για data.test αν θέλετε να παραλείπετε τα test deliveries στη λογική παραγωγής.
Next Steps
- Example Server (Χειριστείτε αυτά τα payloads στο Express)
- Webhooks (Υπογραφή, επαναλήψεις και ιστορικό παράδοσης)
How is this guide?
