V2 Webhooks API
概要
機能概要
| ティア | 料金 | Webhook 数 |
|---|---|---|
| セルフサービス プロ | $5,000/月 | 1 |
| エンタープライズ | 営業にお問い合わせ | 5件以上 |
Webhook をサポートする製品
Webhook を管理する
1. Webhook コンシューマーアプリを開発する
- イベントを受け取る webhook エンドポイントとして機能する、外部からアクセス可能な HTTPS URL を持つ Web アプリを作成します。
- 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 エンドポイントに POST リクエストを送信します。このリクエストを行うと、X は CRC リクエストをあなたの Web アプリに送信します。
- webhook が正常に登録されると、レスポンスに webhook の id が含まれます。この webhook id は、webhook をサポートするプロダクトに対してリクエストを行う際に後で必要になります。
- X は、登録した URL にイベントを含む POST リクエストを送信します。これらのイベントは JSON でエンコードされています。webhook の JSON ペイロード例はこちらをご覧ください。
任意: テストには xurl を使用
xurl プロジェクト の最新バージョンをインストールし、認可設定を行ったうえで、次を実行してください:
- Webhook URL を登録する際は、CRC チェックの暗号化にアプリの consumer secret を使用する必要があります。
- すべての受信ダイレクトメッセージは webhook 経由で配信されます。 POST /2/dm_conversations/with/:participant_id/messages で送信されたダイレクトメッセージも webhook 経由で配信されます。これは、別クライアントから送信されたダイレクトメッセージもウェブアプリで把握できるようにするためです。
- 同じ webhook URL を共有する複数のウェブアプリがあり、同一ユーザーが各アプリに対応付けられている場合、同じイベントが(ウェブアプリごとに1回ずつ)複数回あなたの webhook に送信されます。
- 場合によっては、webhook が重複イベントを受信することがあります。webhook アプリはこれに耐性を持ち、event ID で重複排除を行ってください。
-
サンプルコード:
- Account Activity API Setup — Account Activity API のエンタープライズ層を使用し、webhook イベントを表示する Node ウェブアプリ。
2. Webhook のセキュリティ確保
- チャレンジレスポンス検証により、Webhook イベントを受信する Web アプリの所有権を X が確認します。
- 各 POST リクエストの署名ヘッダーにより、受信した Webhook が X から送信されたものであることを検証できます。
3. Webhooks API
https コールバック URL を JSON ボディで指定する必要があります。まずは、指定されたアプリケーションコンテキストに対して新しい 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...
| パラメータ | 説明 |
|---|---|
webhook_id | 削除する webhook の ID。 |
| 理由 | 説明 |
|---|---|
WebhookIdInvalid | 指定された webhook_id が見つからないか、アプリに関連付けられていません。 |
valid に設定して webhook を再有効化し、HTTP 200 を返します。
認証:
OAuth2 アプリ専用 Bearer トークン
- Bearer トークン
<BEARER_TOKEN>例:AAAAAAAAAAAA0%2EUifi76ZC9Ub0wn...
| パラメータ | 説明 |
|---|---|
webhook_id | 検証する webhook の id。 |
valid フィールドは、チェック実行の「後」のステータスを反映します。CRC チェックが成功すると、Webhook のステータスは valid に更新されます。現在のステータスは GET /2/webhooks で確認できます。
| 理由 | 説明 |
|---|---|
WebhookIdInvalid | 指定された webhook_id が見つからないか、アプリに関連付けられていません。 |
CrcValidationFailed | コールバック URL が CRC チェック要求に正しく応答しませんでした。 |
4. CRC チェック
- 初回の webhook 登録時(
POST /2/webhooks) - X による毎時の検証
PUT /2/webhooks/:idを使った手動実行
- メッセージに crc_token を使用する
- キーにアプリのconsumer secretを使用する
- HMAC-SHA256 のハッシュを作成する
- 結果を Base64 でエンコードする
サンプルアプリ
- Simple webhook server
- CRC チェックに応答し、POST イベントを受け付ける方法を示す、単一の Python スクリプト。
- Account Activity API sample dashboard
- bun.sh で実装された Web アプリで、Webhook やサブスクリプションの管理に加え、アプリ内でライブイベントを直接受信できます。