イベントリファレンス
すべての webhook イベントタイプと、TicketWave が送信する正確なペイロード。
イベントリファレンス
各エンドポイントごとに、6種類のイベントを購読できます。すべてのリクエストは同じエンベロープ — event、timestamp、guild_id、data — を使用し、異なるのは data オブジェクトだけです。
| Event | Fires when |
|---|---|
ticket.created | チケットが開かれたとき |
ticket.closed | チケットが閉じられたとき |
ticket.updated | 開いているチケットで何かが変更されたとき |
message.sent | メンバーまたはスタッフがチケット内で書き込んだとき |
blacklist.added | メンバーがブラックリストに追加されたとき |
blacklist.removed | ブラックリストの登録が解除されたとき |
解決できないフィールドは省略されずに null として送信されます。そのため、キーが存在することを前提にできます。Discord がユーザーを返さなかった場合、username は null になります。
共通フィールド
すべてのチケットイベントには次のフィールドが含まれます:
| Field | Type | Description |
|---|---|---|
ticket_id | string | パターンから生成される読みやすいチケット ID。例: ticket-1042 |
ticket_num_id | number | 連番のチケット番号。例: 1042 |
channel_id | string | チケットの Discord チャンネル |
category | string | null | カテゴリ名。チケットにカテゴリがない場合は null |
user | object | null | チケット所有者。{ id, username } の形式 |
ticket.created
チケットチャンネルが作成された直後に送信されます。
{
"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"
}
}これはチケットが 開かれた ときに発火します。つまり、メンバーがまだ何も書き込む前です。最初のメッセージが必要な場合は、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 | 誰が閉じたか。自動クローズの場合はボットが報告されます |
reason | string | null | クローズ理由。指定がない場合は null |
ticket.updated
開いているチケットへの変更をまとめて受け取るイベントです。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 | スタッフがチケットを引き受けた | (empty) |
ticket_unclaim:add | 引き受けが解除された | (empty) |
ticket_priority:add | 優先度が変更された | priority |
ticket_rename:add | チャンネル名が変更された | new_name |
ticket_remind:add | リマインダーが送信された | (empty) |
ticket_feedback:add | メンバーがチケットを評価した | 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 | ユーザーまたはロールがチケットに追加された | entity_type, entity_id, reason |
ticket_additional_access:remove | ユーザーまたはロールが削除された | entity_type, entity_id, reason |
この一覧は 拡張可能 と考えてください。TicketWave の成長に伴って新しいアクションが追加され、それらは ticket.updated として届きます。未知の値でエラーにするのではなく、必要なアクションだけを分岐して、それ以外は無視してください。
チケットのステップに回答してもイベントは 発生しません。そうしないと、メンバーがフォームを入力している間に、ステップ数の多いチケットがエンドポイントを大量に圧迫してしまうためです。
message.sent
開いているチケット内で送信された、すべての人間のメッセージに対して送信されます。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 |
これは圧倒的に 最も件数の多い イベントです。忙しいサーバーではメッセージごとに 1 件のリクエストが発生します。本当にメッセージ単位のデータが必要な場合にのみ購読し、受信側はすばやく応答するようにしてください。
blacklist.added
チケットに紐づかないため、このペイロードには 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" }
}
}テストイベント
Send test event ボタンは、data が次の内容だけの、実際の署名付きリクエストを送信します:
{
"event": "ticket.created",
"timestamp": "2026-08-26T12:00:00.000Z",
"guild_id": "123456789012345678",
"data": { "test": true }
}event は、そのエンドポイントが最初に購読しているイベントタイプです。本番ロジックでテスト配信を除外したい場合は、data.test を確認してください。
次のステップ
- Example Server (Express でこれらのペイロードを処理する)
- Webhooks (署名、再試行、配信履歴)
How is this guide?
