TicketWave Logo
Webhooks

Αναφορά Συμβάντων

Κάθε τύπος συμβάντος webhook και το ακριβές payload που στέλνει το TicketWave.

Αναφορά Συμβάντων

Μπορείτε να εγγραφείτε σε έξι τύπους συμβάντων ανά endpoint. Κάθε αίτημα χρησιμοποιεί το ίδιο envelope — event, timestamp, guild_id και data — και μόνο το αντικείμενο data διαφέρει.

EventFires 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 περιλαμβάνει τα εξής:

FieldTypeDescription
ticket_idstringΤο αναγνώσιμο ticket id από το pattern σας, π.χ. ticket-1042
ticket_num_idnumberΟ αύξων αριθμός του ticket, π.χ. 1042
channel_idstringΤο Discord κανάλι του ticket
categorystring | nullΌνομα κατηγορίας, null αν το ticket δεν έχει
userobject | 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"
  }
}
FieldTypeDescription
closed_byobjectΠοιος το έκλεισε. Τα αυτόματα κλεισίματα αναφέρουν το bot
reasonstring | 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

actionMeaningchanges 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Το μέλος αξιολόγησε το ticketstar_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Προστέθηκε χρήστης ή ρόλος στο ticketentity_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"
  }
}
FieldTypeDescription
contentstringΤο ακατέργαστο κείμενο του μηνύματος. Κενό για μηνύματα μόνο με συνημμένα
authorobject{ id, username } του αποστολέα
is_staffbooleantrue αν ο αποστολέας έχει ρυθμισμένο υποστηρικτικό ρόλο

Αυτό είναι το συμβάν με τον μεγαλύτερο όγκο κατά πολύ — ένας πολυσύχναστος 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?