Referensi Event
Setiap jenis event webhook dan payload persis yang dikirim TicketWave.
Referensi Event
Enam jenis event dapat disubscribe per endpoint. Setiap request menggunakan envelope yang sama — event, timestamp, guild_id dan data — dan hanya objek data yang berbeda.
| Event | Terpicu saat |
|---|---|
ticket.created | Tiket dibuka |
ticket.closed | Tiket ditutup |
ticket.updated | Ada perubahan lain pada tiket yang sedang dibuka |
message.sent | Member atau staf menulis di tiket |
blacklist.added | Seorang member masuk blacklist |
blacklist.removed | Entri blacklist dihapus |
Field yang tidak bisa di-resolve akan dikirim sebagai null alih-alih dihilangkan — jadi Anda bisa mengandalkan key-nya tetap ada. username bernilai null ketika Discord tidak mengembalikan user.
Shared fields
Setiap event tiket membawa field berikut:
| Field | Type | Description |
|---|---|---|
ticket_id | string | ID tiket yang mudah dibaca dari pola Anda, mis. ticket-1042 |
ticket_num_id | number | Nomor tiket berurutan, mis. 1042 |
channel_id | string | Channel Discord untuk tiket tersebut |
category | string | null | Nama kategori, null jika tiket tidak punya kategori |
user | object | null | Pemilik tiket sebagai { id, username } |
ticket.created
Dikirim tepat setelah channel tiket ada.
{
"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"
}
}Ini terpicu saat tiket dibuka, yaitu sebelum member menulis apa pun. Jika Anda membutuhkan pesan pertama, dengarkan juga 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": "Masalah terselesaikan",
"closed_at": "2026-08-26T07:45:02.000Z"
}
}| Field | Type | Description |
|---|---|---|
closed_by | object | Siapa yang menutupnya. Penutupan otomatis melaporkan bot |
reason | string | null | Alasan penutupan, null jika tidak ada |
ticket.updated
Penampung umum untuk perubahan pada tiket yang sedang dibuka. action memberi tahu Anda apa yang berubah, changes membawa detail dari aksi spesifik tersebut.
{
"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" }
}
}Nilai action yang mungkin
action | Arti | changes berisi |
|---|---|---|
ticket_claim:add | Seorang staf mengklaim tiket | (kosong) |
ticket_unclaim:add | Klaim dilepas | (kosong) |
ticket_priority:add | Prioritas berubah | priority |
ticket_rename:add | Channel diganti nama | new_name |
ticket_remind:add | Pengingat dikirim | (kosong) |
ticket_feedback:add | Member memberi rating pada tiket | star_count, feedback |
ticket_schedule_close:add | Penutupan dijadwalkan | duration, schedule_time |
ticket_request_close:add | Staf meminta member untuk menutup | duration, request_duration_time |
ticket_request_close_accept:add | Member menerima | (kosong) |
ticket_request_close_deny:add | Member menolak | (kosong) |
ticket_close_cancel:add | Penutupan yang sedang berjalan dibatalkan | (kosong) |
ticket_additional_access:add | Seorang user atau role ditambahkan ke tiket | entity_type, entity_id, reason |
ticket_additional_access:remove | Seorang user atau role dihapus | entity_type, entity_id, reason |
Anggap daftar ini sebagai terbuka. Aksi baru akan ditambahkan seiring TicketWave berkembang, dan semuanya masuk sebagai ticket.updated. Gunakan switch untuk aksi yang Anda pedulikan dan abaikan sisanya, alih-alih melempar error pada nilai yang tidak dikenal.
Menjawab langkah tiket tidak menghasilkan event. Jika tidak, tiket dengan banyak langkah akan membanjiri endpoint Anda saat member masih mengisi formulir.
message.sent
Dikirim untuk setiap pesan manusia di dalam tiket yang sedang dibuka. Pesan dari bot — termasuk TicketWave sendiri — dilewati.
{
"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 | Teks pesan mentah. Kosong untuk pesan yang hanya berisi lampiran |
author | object | { id, username } dari pengirim |
is_staff | boolean | true jika pengirim memiliki role support yang dikonfigurasi |
Ini adalah event dengan volume tertinggi jauh di atas yang lain — server yang sibuk menghasilkan satu request per pesan. Subscribe hanya jika Anda benar-benar membutuhkan data level pesan, dan pastikan penerima Anda merespons dengan cepat.
blacklist.added
Tidak terkait dengan tiket, jadi payload ini tidak memiliki 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
Tombol Send test event mengirim request nyata yang ditandatangani, dengan data yang isinya hanya:
{
"event": "ticket.created",
"timestamp": "2026-08-26T12:00:00.000Z",
"guild_id": "123456789012345678",
"data": { "test": true }
}event adalah jenis pertama yang disubscribe oleh endpoint. Periksa data.test jika Anda ingin melewati pengiriman test dalam logika produksi.
Next Steps
- Example Server (Menangani payload ini di Express)
- Webhooks (Signing, retries dan riwayat pengiriman)
How is this guide?
