TicketWave Logo
Webhooks

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.

EventTerpicu saat
ticket.createdTiket dibuka
ticket.closedTiket ditutup
ticket.updatedAda perubahan lain pada tiket yang sedang dibuka
message.sentMember atau staf menulis di tiket
blacklist.addedSeorang member masuk blacklist
blacklist.removedEntri 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:

FieldTypeDescription
ticket_idstringID tiket yang mudah dibaca dari pola Anda, mis. ticket-1042
ticket_num_idnumberNomor tiket berurutan, mis. 1042
channel_idstringChannel Discord untuk tiket tersebut
categorystring | nullNama kategori, null jika tiket tidak punya kategori
userobject | nullPemilik 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"
  }
}
FieldTypeDescription
closed_byobjectSiapa yang menutupnya. Penutupan otomatis melaporkan bot
reasonstring | nullAlasan 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

actionArtichanges berisi
ticket_claim:addSeorang staf mengklaim tiket(kosong)
ticket_unclaim:addKlaim dilepas(kosong)
ticket_priority:addPrioritas berubahpriority
ticket_rename:addChannel diganti namanew_name
ticket_remind:addPengingat dikirim(kosong)
ticket_feedback:addMember memberi rating pada tiketstar_count, feedback
ticket_schedule_close:addPenutupan dijadwalkanduration, schedule_time
ticket_request_close:addStaf meminta member untuk menutupduration, request_duration_time
ticket_request_close_accept:addMember menerima(kosong)
ticket_request_close_deny:addMember menolak(kosong)
ticket_close_cancel:addPenutupan yang sedang berjalan dibatalkan(kosong)
ticket_additional_access:addSeorang user atau role ditambahkan ke tiketentity_type, entity_id, reason
ticket_additional_access:removeSeorang user atau role dihapusentity_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"
  }
}
FieldTypeDescription
contentstringTeks pesan mentah. Kosong untuk pesan yang hanya berisi lampiran
authorobject{ id, username } dari pengirim
is_staffbooleantrue 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

How is this guide?