v2 Webhooks API
概要
機能サマリー
ティア | 料金 | webhook 数 |
---|---|---|
Self-Serve Pro | $5,000/月 | 1 |
Enterprise | 営業担当にお問い合わせ | 5以上 |
Webhook をサポートする製品
Webhook を管理する
1. Webhook コンシューマー App を開発する
- 公開アクセス可能な HTTPS URL を持つ Web アプリを作成し、イベントを受信する webhook の endpoint として機能させます。
- URI のパスは完全に任意です。次の例は有効です: https://mydomain.com/service/listen
- 複数のソースからの webhook を受信する場合の一般的なパターンの例: https://mydomain.com/webhook/twitter
- 指定する URL にポート番号を含めることはできません(https://mydomain.com:5000/NoWorkie)。
- まず、X Challenge Response Check(CRC)の GET リクエストを受信し、適切に整形された JSON レスポンスで応答するコードを実装します。
- webhook の URL を登録します。JSON ボディに URL を含めて /2/webhooks endpoint に POST リクエストを送信します。このリクエストを行うと、X はあなたの Web アプリに CRC リクエストを送信します。
- webhook が正常に登録されると、レスポンスには webhook の id が含まれます。この webhook id は、webhook をサポートするプロダクトにリクエストを行う際に後で必要になります。
- X は、登録した URL にイベントを含む POST リクエストを送信します。これらのイベントは JSON でエンコードされます。webhook の JSON ペイロード例はこちらをご覧ください。
任意: テストに xurl を使用する
xurl
Projectをインストールし、認可設定を行ったうえで、次を実行してください:
- webhook の URL を登録する際は、CRC チェックの暗号化に App の consumer secret を使用する必要があります。
- 受信したダイレクトメッセージはすべて webhook 経由で配信されます。 POST /2/dm_conversations/with/:participant_id/messages で送信されたダイレクトメッセージもすべて webhook 経由で配信されます。これは、別のクライアントから送信されたダイレクトメッセージも Web アプリが把握できるようにするためです。
- 同じ webhook URL を共有する複数の Web アプリがあり、同じユーザーが各 App にマッピングされている場合、同じイベントが複数回(Web アプリごとに 1 回)webhook に送信されます。
- 場合によっては、webhook が重複イベントを受信することがあります。webhook アプリはこれに耐性を持ち、イベント ID によって重複排除を行う必要があります。
-
サンプルコード:
- Account Activity API のセットアップ — Account Activity API の Enterprise ティアを使用し、webhook イベントを表示する Node ベースの Web アプリ。
2. Webhook のセキュリティ保護
- チャレンジレスポンス検証により、webhook イベントを受信する Web アプリの所有権を X が確認できます。
- 各 POST リクエストの署名ヘッダーにより、受信した webhook の送信元が X であることを確認できます。
3. Webhooks API
https
コールバック URL を JSON ボディで渡す必要があります。まず、指定された application context に対して新しい webhook の URL を登録します。 認証: OAuth2 App only Bearer Token
- Bearer token
<BEARER_TOKEN>
例:AAAAAAAAAAAA0%2EUifi76ZC9Ub0wn...
- URL
<URL>
例:https://yourdomain.com/webhooks/twitter/
理由 | 説明 |
---|---|
CrcValidationFailed | コールバックURLがCRCチェックに正しく応答しませんでした(例: タイムアウト、不正な応答)。 |
UrlValidationFailed | 提供されたコールバックURLが要件を満たしていません(例: https ではない、形式が無効)。 |
DuplicateUrlFailed | 提供されたコールバックURLには、既にアプリケーションによってwebhookが登録されています。 |
WebhookLimitExceeded | アプリケーションが許可されているwebhook設定数の上限に達しました。 |
-
Bearer token
<BEARER_TOKEN>
例:AAAAAAAAAAAA0%2EUifi76ZC9Ub0wn...
-
URL
<URL>
例:https://yourdomain.com/webhooks/twitter/
webhook_id
を使用して webhook の構成を削除します。ID は POST /2/webhooks
の作成レスポンス、または GET /2/webhooks
の一覧レスポンスから取得できます。
認証:
OAuth2 App only Bearer Token
- Bearer token
<BEARER_TOKEN>
例:AAAAAAAAAAAA0%2EUifi76ZC9Ub0wn...
Parameter | Description |
---|---|
webhook_id | 削除する webhook の ID。 |
理由 | 説明 |
---|---|
WebhookIdInvalid | 指定された webhook_id が見つからない、またはお客様の App に関連付けられていません。 |
valid
に設定して webhook を再有効化し、200 を返します。
認証:
OAuth2 App only Bearer Token
- Bearer token
<BEARER_TOKEN>
例:AAAAAAAAAAAA0%2EUifi76ZC9Ub0wn...
パラメータ | 説明 |
---|---|
webhook_id | 検証対象の webhook の ID。 |
valid
フィールドは、チェック試行の後のステータスを反映します。CRC チェックが成功すると、webhook のステータスは valid に更新されます。現在のステータスは GET /2/webhooks
で確認できます。
理由 | 説明 |
---|---|
WebhookIdInvalid | 指定された webhook_id が見つからないか、あなたの App に関連付けられていません。 |
CrcValidationFailed | コールバックURLがCRCチェックリクエストに正しく応答しませんでした。 |
4. CRC チェック
- 初回の webhook 登録時(
POST /2/webhooks
) - 検証のため X により毎時実行
- 手動実行(
PUT /2/webhooks/:id
)
- メッセージに crc_token を使用する
- キーに App のコンシューマーシークレットを使用する
- HMAC-SHA-256 の hash を生成する
- 結果を Base64 でエンコードする
サンプル App
- Simple webhook server
- CRC チェックに応答し、POST イベントを受け付ける方法を示す単一の Python スクリプト。
- Account Activity API sample dashboard
- bun.sh で作成された Web アプリで、webhook とサブスクリプションを管理し、App 内でライブイベントを直接受信できます。