Skip to main content
このガイドでは、Webhook コンシューマーアプリのセットアップ、Challenge-Response Check (CRC) の実装、受信イベントの保護、X への Webhook の登録手順を説明します。

1. Webhook コンシューマーアプリを開発する

X アプリに Webhook を登録するには、X の Webhook イベントを受信し CRC セキュリティリクエストに応答する Web アプリを開発、デプロイ、ホストする必要があります。

URL の要件

イベントを受信する Webhook エンドポイントとして機能する公開アクセス可能な HTTPS URL を持つ Web アプリを作成します:
  • URI パスは自由に決められます。次の例はすべて有効です:
    • https://mydomain.com/service/listen
    • https://mydomain.com/webhook/twitter
  • URL にポート指定を含めることはできません (例: https://mydomain.com:5000/webhook機能しません)

アプリが処理する必要があること

Webhook エンドポイントは 2 種類の HTTP リクエストを処理する必要があります:

2. CRC チェック

Challenge-Response Check (CRC) は、提供されたコールバック URL が有効であり、あなたがそれを制御していることを X が検証する方法です。Web アプリは Webhook の登録と維持のために CRC リクエストに正しく応答する必要があります。

CRC がトリガーされるタイミング

Webhook が CRC チェックに失敗すると、invalid としてマークされ、再度合格するまでイベントの受信が停止します。

CRC の仕組み

X が CRC を送信するとき、crc_token クエリパラメーター付きで Webhook URL に GET リクエストを行います:
アプリケーションは、response_token を含む JSON ボディで応答する必要があります:

CRC レスポンスの作り方

  1. クエリパラメーターの crc_token 値をメッセージとして使用
  2. アプリの consumer secret (API secret key) をキーとして使用
  3. HMAC SHA-256 ハッシュを作成
  4. 結果を Base64 エンコード
  5. エンコードされた文字列の先頭に sha256= を付ける
重要: Web アプリは CRC 暗号化にアプリの consumer secret (API secret key) を使用する必要があります — bearer token やアクセストークンではありません。

例: Python

例: Node.js

例: Flask (完全なエンドポイント)

この例は、CRC 検証 (GET) とイベント配信 (POST) の両方を処理する完全な Webhook エンドポイントを示しています:

3. Webhook のセキュリティ

X の Webhook ベース API は、Webhook サーバーのセキュリティを確認するための 2 つの方法を提供します:

Challenge-Response Check (CRC)

CRC により、X は Webhook イベントを受信する Web アプリの所有権を確認できます。完全な実装の詳細については、上記のステップ 2 を参照してください。

署名検証

X からの各 POST リクエストには x-twitter-webhooks-signature ヘッダーが含まれ、着信 Webhook の送信元が X であることを確認できます。 署名を検証するには:
  1. 着信リクエストから x-twitter-webhooks-signature ヘッダー値を取得
  2. consumer secret をキー、生のリクエストボディをメッセージとして HMAC SHA-256 ハッシュを作成
  3. ハッシュを Base64 エンコードし、sha256= を先頭に付ける
  4. 計算した値をヘッダー値と比較 — 一致するはずです

4. Webhook を登録する

アプリが CRC チェックを処理できるようになったら、POST /2/webhooks リクエストで Webhook URL を登録します。このリクエストを行うと、X は所有権を確認するために Web アプリに即座に CRC リクエストを送信します。 すべての Webhook 管理エンドポイントには OAuth2 App Only Bearer Token 認証が必要です。

Webhook を作成する

POST /2/webhooksAPI リファレンス
成功レスポンス (200 OK): 成功レスポンスは、Webhook が作成され、初回の CRC チェックに合格したことを示します。
Webhook が正常に登録されると、レスポンスに webhook ID が含まれます。この ID は、Webhook をサポートする製品にリクエストを行う際に必要です (例: Filtered Stream へのリンク、Account Activity のサブスクリプション作成)。 よくある失敗理由:

Webhook を表示する

GET /2/webhooksAPI リファレンス アプリケーションに関連付けられたすべての Webhook 設定を取得します。
レスポンス (Webhook が 1 つある場合):
レスポンス例
レスポンス (Webhook がない場合):

Webhook を削除する

DELETE /2/webhooks/:webhook_idAPI リファレンス webhook_id (作成またはリストレスポンスから取得) を使用して Webhook を削除します。
レスポンス:

Webhook を検証して再有効化する

PUT /2/webhooks/:webhook_idAPI リファレンス 指定された Webhook の CRC チェックをトリガーします。チェックが成功すると、Webhook は valid: true で再有効化されます。
レスポンス: 200 OK レスポンスは、CRC チェックが開始されたことを示します。valid フィールドは、チェック試行後のステータスを反映します。現在のステータスは GET /2/webhooks を使用して確認できます。

xurl でのテスト

テスト目的で、xurl ツールは一時的な Webhook をサポートします。GitHub から xurl プロジェクトの最新バージョンをインストールし、認証情報を設定してから次を実行します:
これにより、一時的な公開 Webhook URL が生成され、すべての CRC チェックを自動的に処理し、受信したサブスクリプションイベントをログに記録します。デプロイ前にセットアップを確認するのに最適な方法です。出力例:

重要な注意事項

  • すべての受信 Direct Message は Webhook 経由で配信されます。POST /2/dm_conversations/with/:participant_id/messages 経由で送信された DM も配信されるため、アプリは他のクライアントから送信された DM を追跡できます。
  • 同じ Webhook URL を共有し、同じユーザーが各アプリにマッピングされている 複数の Web アプリ がある場合、同じイベントが Webhook に複数回 (Web アプリごとに 1 回) 送信されます。
  • 一部のケースでは、Webhook が重複イベントを受信する可能性があります。Webhook アプリはこれを許容し、イベント ID で重複排除する必要があります。
  • X は POST リクエストとして JSON ペイロードでイベントを送信します。ペイロードの例については、Account Activity データオブジェクト構造を参照してください。

サンプルアプリ


次のステップ

Filtered Stream Webhooks

Webhook 経由でフィルタリングされた Post を受信

Account Activity API

Webhook 経由でアカウントイベントを受信