このendpointは、Postの編集metadataを含むように更新されました。これらのmetadataの詳細は”Edit Posts” の基礎ページをご覧ください。 このendpointはダイレクトメッセージのendpointと併用されることがよくあります。新しいv2 ダイレクトメッセージのendpointを公開しました。なお、EnterpriseおよびPremiumのAccount Activity APIはv2の1対1メッセージをサポートしていますが、グループ会話はまだサポートしていません。
Enterprise
Account Activity APIは、webhookを通じてユーザーアカウントに関連するリアルタイムアクティビティを購読できる機能を提供します。これにより、単一の接続で、所有または購読している1つ以上のアカウントから、リアルタイムのPosts、ダイレクトメッセージ、その他のアカウントイベントを受信できます。
webhook登録の各ユーザー購読について、以下の関連アクティビティをすべて受信します:
アクティビティの種類 | |
---|---|
* Posts(ユーザーによる) * Postの削除(ユーザーによる) * @メンション(ユーザー宛) * 返信(ユーザーへの/ユーザーからの) * リツイート(ユーザーによる/ユーザーの投稿の) * 引用Tweet(ユーザーによる/ユーザーの投稿の) * 引用Tweetのリツイート(ユーザーによる/ユーザーの投稿の) * like(ユーザーによる/ユーザーの投稿への) * フォロー(ユーザーによる/ユーザーの) * フォロー解除(ユーザーによる) | * ブロック(ユーザーによる) * ブロック解除(ユーザーによる) * ミュート(ユーザーによる) * ミュート解除(ユーザーによる) * ダイレクトメッセージ送信(ユーザーによる) * ダイレクトメッセージ受信(ユーザーによる) * 入力中インジケーター(ユーザー宛) * 既読通知(ユーザー宛) * 購読の取り消し(ユーザーによる) |
動画シリーズ
機能概要
ティア | 価格 | 一意のサブスクリプション数 | webhook 数 | 信頼性とアクティビティ復旧 |
---|---|---|---|---|
Enterprise | 営業にお問い合わせ | 最大500+ | 3+ | 再試行 と リプレイ |
-
ご不明点がありますか?エラーが発生していますか?
- よくある質問 または エラーのトラブルシューティングガイド をご覧ください。
-
サンプルコードを見る:
- Enterprise Account Activity API ダッシュボード:Account Activity API の Enterprise ティアで webhook イベントを表示し、リプレイ 機能を備えた Node 製の Web アプリ。
- SnowBot チャットボット:Enterprise の Account Activity API と Direct Message API を基盤とした Ruby 製の Web アプリ。
webhook と購読ユーザーを管理する
- 登録済みの X App - こちらで登録
- Bearer Token - 詳細はこちら
- Challenge-Response Check (CRC) を通過する webhook - 詳細はこちら
- Enterprise アカウント - こちらから申請
webhook の管理:
- webhook を追加する
- webhook を表示する
- webhook を削除する
指定されたアプリケーションのコンテキストに対して、新しい webhook URL を登録することから始めます。URL は保存前に CRC リクエストで検証されます。webhook を登録したら、後で必要になるため webhook の ID を必ず控えておいてください。以下の値を置き換えたうえで、次の cURL リクエストをコマンドラインにコピーして実行してください:
-
URL
<URL>
例:https://yourdomain.com/webhooks/twitter/
-
Consumer key
<CONSUMER_KEY>
例:xvz1evFS4wEEPTGEFPHBog
-
Access token
<ACCESS_TOKEN>
例:370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb
サブスクライブ済みユーザーの管理:
- サブスクリプションを追加する
- サブスクリプションの表示
- サブスクリプションを削除する
まず、ユーザーをサブスクライブして、すべてのイベントタイプを受信できるようにします。以下の値を適切に置き換えたうえで、次の cURL リクエストをコマンドラインにコピーしてください。
-
Webhook ID
<:WEBHOOK_ID>
例:1234567890
-
Consumer key name
<CONSUMER_KEY>
例:xvz1evFS4wEEPTGEFPHBog
-
サブスクライブ対象ユーザーの access token
<SUBSCRIBING_USER'S_ACCESS_TOKEN>
例:370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb
参照記事
Account Activity API の動画ウォークスルー
- webhook の登録
- ユーザーサブスクリプションの追加
- ユーザーサブスクリプションの削除
- アカウントアクティビティの受信
- アカウントアクティビティのリプレイ
-
ご不明点やエラーはありませんか?
- よくある質問 または エラーのトラブルシューティングガイドをご覧ください。
-
サンプルコードを見る:
- Enterprise Account Activity API dashboard:Account Activity API の Enterprise ティアを用いて webhook イベントを表示し、Replay 機能も備えた Node ベースの Web アプリです。
- SnowBot chatbot:Enterprise の Account Activity API と Direct Message API の上に構築された Ruby 製の Web アプリです。
webhook のはじめに
1. X App を作成します。
- developer portalで承認済みのデベロッパーアカウントを使用して、X Appを作成します。会社を代表して作成する場合は、企業の X アカウントでの作成を推奨します。デベロッパーアカウントに申請するには、こちらから行ってください。
- アプリページのpermissionsタブで「Read, Write and Access direct messages」を有効にします。
- “Keys and Access Tokens” タブで、アプリの Consumer Key (API Key) と Consumer Token (API Secret) を控えておきます。
- 同じタブで、アプリのAccess Token and Access Token Secretを生成します。これらの Access Tokens は、X がアカウントイベントを送信する先となる webhook URL を登録する際に必要です。
- X Sign-inや X API におけるユーザーコンテキストの仕組みに不慣れな場合は、Obtaining Access Tokensを確認してください。イベントを受信するアカウントを追加する際は、そのアカウントの access tokens を使用してサブスクライブします。
- developer portalの”Apps”ページに表示されるアプリの数値 id を控えておきます。Account Activity API アクセスを申請する際に、この App の id が必要になります。
2. Account Activity API へのアクセスを取得する
3. webhook コンシューマー App を開発する
-
イベントを受信する webhook 用の URL を持つ Web アプリを作成します。これは、X の webhook イベントを受け取るためにサーバー上にデプロイする endpoint です。
- URI の path は自由に設定できます。次の例は有効です: https://mydomain.com_/service/listen_
- 複数のソースからの webhook を受信する場合の一般的なパターン例: https://mydomain.com/webhook/twitter
- 指定する URL にポート番号は含められません (https://mydomain.com:5000/NoWorkie)。
- Securing Webhooks ガイドで説明しているとおり、最初のステップは、X の Challenge Response Check (CRC) の GET リクエストを受け取り、正しく整形した JSON レスポンスを返すコードを書くことです。
- webhook の URL を登録します。/webhooks.json?url= endpoint に POST リクエストを送信します。このリクエストを行うと、X はあなたの Web アプリに CRC リクエストを送ります。webhook が正常に登録されると、レスポンスに webhook の id が含まれます。この webhook の id は、後で一部の Account Activity API リクエストで必要になります。
- X は、登録した URL にアカウントの webhook イベントを送信します。受信イベントに対して Web アプリが POST リクエストを受け付けるようにしておいてください。イベントは JSON でエンコードされます。webhook の JSON ペイロード例はこちらを参照してください。
- Web アプリの準備ができたら、次はアクティビティを受信するアカウントを追加します。アカウントを追加(または削除)する際は、アカウントの id を参照する POST リクエストを送信します。詳細はサブスクリプションの追加に関するガイドを参照してください。
4. セットアップの検証
- App と webhook が正しく構成されているかを検証するには、App が購読している X アカウントのいずれかが投稿した Post を「いいね」してください。購読者が受け取った各「いいね」について、webhook の URL 宛てに POST リクエストで
favorite_events
が届くはずです。 - 購読を追加してからイベントの配信が開始されるまで、最大 10 秒程度かかる場合があります。
- webhook の URL を登録する際、Web アプリは consumer token と secret「に加えて」、App オーナーのユーザー access token と secret で認証する必要があります。
- 受信したすべてのダイレクトメッセージは webhook 経由で配信されます。さらに、POST direct_messages/events/new (message_create) 経由で送信されたダイレクトメッセージもすべて webhook 経由で配信されます。これは、別のクライアントから送信されたダイレクトメッセージも Web アプリが把握できるようにするためです。
- すべての webhook イベントには、そのイベントがどの購読向けに配信されたかを示す for_user_id のユーザー ID が含まれます。
- 同じ会話で 2 人のユーザーがあなたの Web アプリを使ってダイレクトメッセージをやり取りしている場合、webhook には同一内容のイベントが 2 件(各ユーザー分)届きます。Web アプリ側で考慮してください。
- 複数の Web アプリが同じ webhook URL を共有し、各 App に同一のユーザーをマッピングしている場合、同じイベントが(Web アプリごとに 1 回)複数回送信されます。
- 場合によっては、webhook に重複イベントが届くことがあります。webhook アプリはこれを許容し、event ID で重複排除してください。
- Quick Reply の応答がリクエスト直後に必ず返るとは限りません。ユーザーは Quick Reply のリクエストを無視して従来のダイレクトメッセージで応答することもできます。また、ユーザーがメッセージスレッド内で以前に返信していないリクエストに対して Quick Reply で応答する場合もあります。
-
コード例:
- Enterprise Account Activity API dashboard: Account Activity API の Enterprise ティアを用いて webhook イベントを表示する Node 製の Web アプリで、Replay 機能を備えています。
- SnowBot chatbot: Account Activity とダイレクトメッセージ API 上に構築された Ruby 製の Web アプリです。このコードベースには、Account Activity API の webhook 設定を支援するための script が含まれています。
webhook の保護
- チャレンジレスポンス方式の検証により、webhook イベントを受信する Web アプリの所有権を X が確認します。
- 各 POST リクエストの署名ヘッダーにより、受信した webhook の送信元が X であることを確認できます。
チャレンジ・レスポンスチェック
crc_token
パラメータ付きで GET リクエストを行います。そのリクエストを受信したら、あなたのWebアプリは crc_token
パラメータとあなたのAppのConsumer Secret(詳細は下記)に基づいて暗号化された response_token
を生成する必要があります。response_token
は JSON でエンコード(下の例を参照)し、3秒以内に返却しなければなりません。成功すると、webhook の id
が返されます。
webhook URL を登録するときにCRCが送信されるため、CRCレスポンスコードの実装は最初の基本ステップです。webhook が確立された後は、Xは最後に成功したレスポンスを受信してから概ね24時間ごとにCRCをトリガーします。必要に応じて、あなたのAppは webhook の id
を用いて PUT リクエストを行うことでCRCをトリガーすることもできます。新しいコードをデプロイしてサービスを再起動した後など、webhookアプリケーションを開発する際にCRCをトリガーするのは有用です。
crc_token
は受信する各CRCリクエストごとに変更されることを想定し、計算においてメッセージとして使用し、Consumer Secret を鍵として使用してください。
レスポンスが3秒以内に返されない、または無効になった場合、イベントは登録済みwebhookへの送信が停止されます。
CRC リクエストが発生するタイミング:
- webhook URL が登録されたとき。
- webhook URL を検証するため、概ね_毎時_。
- PUT リクエストを送信すると、CRC を手動でトリガーできます。webhook クライアントを開発する際は、CRC レスポンスの実装と並行して、CRC を手動でトリガーできるように計画してください。
レスポンス要件:
crc_token
と App の Consumer Secret から生成した、base64 エンコードの HMAC-SHA256 hash- 有効な response_token と JSON 形式
- レイテンシは 3 秒未満
- HTTP ステータスコード 200
言語別の HMAC ライブラリ:
Python におけるレスポンストークン生成の例:
JSON レスポンスの例:
その他の例:
- HERE は、Node/JS で実装された CRC 応答メソッドの例です。
- HERE は、Ruby で実装された CRC 応答メソッドの例です(generate_crc_response と、CRC イベントを受信する /GET ルートを参照)。
任意の署名ヘッダー検証
- Consumer Secret と受信したペイロード本文を用いてハッシュを作成します。
- 作成したハッシュを、base64 エンコードされた x-twitter-webhooks-signature の値と比較します。タイミング攻撃への耐性を高めるために、compare_digest などの手法を使用してください。
追加のセキュリティガイドライン
X の集約ネットワークブロック
- 199.59.148.0/22
- 199.16.156.0/22
- 192.133.77.0/26
- 64.63.15.0/24
- 64.63.31.0/24
- 64.63.47.0/24
- 202.160.128.0/24
- 202.160.129.0/24
- 202.160.130.0/24
推奨サーバー構成
- ssllabs.com のテストで「A」評価を取得
- TLS 1.2 を有効化
- Forward Secrecy を有効化
- SSLv2 を無効化
- SSLv3 を無効化(POODLE 対策)
- TLS 1.0 を無効化
- TLS 1.1 を無効化
- TLS 圧縮を無効化
- セッションチケットキーをローテーションしない限り、Session Tickets を無効化
- SSL 設定で「ssl_prefer_server_ciphers」または「SSLHonorCipherOrder」オプションを「on」に設定
- 暗号スイートのリストが、次のようなモダンなリストになっていることを確認:
ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES128-SHA256:AES128-SHA:AES256-GCM-SHA384:AES256-SHA256:AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:DES-CBC3-SHA
webhookとサブスクリプションの管理
webhook の作成と変更
webhook 設定管理 endpoint:
メソッド | Enterprise |
webhook URL を登録 / webhook_id を生成 | POST webhooks |
すべての webhook URL とそのステータスを返す | GET webhooks |
App の現在の webhook 設定を削除 | DELETE webhooks/:webhook_id |
CRC リクエストを手動でトリガー | PUT webhooks/:webhook_id |
webhook URL を更新するだけではいけないのはなぜですか?
ユーザーサブスクリプションの追加と削除
サブスクリプション管理 endpoints
Method | Enterprise |
新規ユーザーサブスクリプションの追加 | POST webhooks/:webhook_id/subscriptions/all |
ユーザーサブスクリプションの取得 | GET webhooks/:webhook_id/subscriptions/all |
すべての有効なサブスクリプションの一覧を返す | GET webhooks/:webhook_id/subscriptions/all/list |
アプリケーションのみの OAuth を使用してユーザーサブスクリプションを無効化 | DELETE webhooks/:webhook_id/subscriptions/:user_id/all.json |
ご留意ください: API の利用を開始する前に、X がお客様の開発者用 App に対して Account Activity API へのアクセスを有効化する必要があります。認証に使用する予定の App ID を、アカウントマネージャーまたはテクニカルサポートチームに共有してください。
- Consumer Keys (API Key と Secret)
- Access Tokens (Access Token と Secret)
- POST account_activity/webhooks: 指定したアプリケーションのコンテキストに新しい webhook の URL を登録します
- PUT account_activity/webhooks/:webhook_id: 指定した webhook の URL に対して CRC(challenge response check)を実行します
- DELETE account_activity/webhooks/:webhook_id: webhook を削除します
- POST account_activity/webhooks/:webhook_id/subscriptions/all: アプリケーションをユーザーのアカウントイベントに購読させます
- GET account_activity/webhooks/:webhook_id/subscriptions/all: webhook 構成がユーザーのイベントを購読しているかを確認します
- DELETE account_activity/webhooks/:webhook_id/subscriptions/all: 指定のユーザーコンテキストおよびアプリケーションのサブスクリプションを無効化します [DEPRECATED]
ご注意ください: 開発者用 App が「Read, Write, and Direct Messages」に有効化されていることを確認してください。この設定は、あなたのデベロッパーアカウントの Projects & Apps section 内、選択した開発者用 App の「App permissions」で変更できます。権限を変更した後は、App の認証情報を再生成する必要があります。
ご注意ください: API を利用開始する前に、X があなたの開発者用 App に対して Account Activity API へのアクセスを有効化する必要があります。そのため、認証に使用する予定の App ID を、アカウントマネージャーまたはテクニカルサポートチームに共有してください。
説明 | Endpoint | OAuth 1.0a (ユーザーコンテキスト) | OAuth 2.0 Bearer Token (アプリケーションのみ) |
指定されたアプリケーションコンテキストに対して新しい webhook URL を登録 | POST account_activity/webhooks | ✓ | |
指定されたアプリケーションのすべての URL とそれぞれの status を返す | GET account_activity/webhooks | ✓ | |
指定された webhook の URL に対して Challenge Response Check(CRC)を実行 | PUT account_activity/webhooks/:webhook_id | ✓ | |
アプリケーションをユーザーのアカウントイベントに購読させる | POST account_activity/webhooks/:webhook_id/subscriptions/all | ✓ * | |
現在アクティブな購読数を返す | GET account_activity/subscriptions/count | ✓ | |
webhook 構成がユーザーのイベントを購読しているかを確認 | GET account_activity/webhooks/:webhook_id/subscriptions/all | ✓ * | |
現在アクティブな購読の一覧を返す | GET account_activity/webhooks/:webhook_id/subscriptions/all/list | ✓ | |
webhook を削除 | DELETE account_activity/webhooks/:webhook_id | ✓ | |
[非推奨] 提供されたユーザーコンテキストおよびアプリケーションの購読を無効化 | DELETE account_activity/webhooks/:webhook_id/subscriptions/all | ✓ * | |
アプリケーション専用 OAuth を使用して購読を無効化 | DELETE /account_activity/webhooks/:webhook_id/subscriptions/:user_id/all.json | ✓ | |
アクティビティを webhook に再配信 | POST /1.1/account_activity/replay/webhooks/:webhook_id/subscriptions/all.json | ✓ |
- Consumer Keys (API Key および Secret)
- Access Tokens (Access Token および Secret)
- POST account_activity/webhooks: 指定されたアプリケーションのコンテキストに対して新しい webhook URL を登録します
- PUT account_activity/webhooks/:webhook_id: 指定された webhook の URL に対して CRC(チャレンジレスポンスチェック)を実行します
- DELETE account_activity/webhooks/:webhook_id: webhook を削除します
- POST account_activity/webhooks/:webhook_id/subscriptions/all: アプリケーションをユーザーのアカウントイベントに購読させます
- GET account_activity/webhooks/:webhook_id/subscriptions/all: webhook 構成がユーザーのイベントを購読しているか確認します
- DELETE account_activity/webhooks/:webhook_id/subscriptions/all: 指定されたユーザーコンテキストおよびアプリケーションのサブスクリプションを無効化します [DEPRECATED]
ご注意ください: 開発者用 App が “Read, Write, and Direct Messages” に有効化されていることを確認してください。この設定は、デベロッパーアカウントの Projects & Apps セクション の、選択した開発者用 App の「App permissions」で変更できます。権限設定を変更した後は、App のクレデンシャルを再生成する必要があります。
リトライ
Enterprise
Account Activity API の Enterprise ティアの利点の一つは、webhook イベントに対するリトライ機構です。HTTP 200 の「success」レスポンスコードが受信されない場合、X サーバーはリトライを開始し、5分間に最大3回まで webhook イベントを再送します。この webhook イベントのリトライサービスは、ネットワーク障害発生時やクライアント側のサービス中断・デプロイ時の信頼性確保とイベント復旧に寄与します。
リトライとは?
再試行のタイムライン
リトライのタイムライン
アクティビティが作成され、Account Activity API が webhook URL に POST しますが、3 秒でタイムアウトします。 |
直前のタイムアウト終了後に 3 秒待機し、Account Activity API が webhook URL に POST しますが、3 秒でタイムアウトします。 |
直前のタイムアウト終了後に 27 秒待機し、Account Activity API が webhook URL に POST しますが、3 秒でタイムアウトします。 |
直前のタイムアウト終了後に 242 秒待機し、Account Activity API が webhook URL に POST しますが、3 秒でタイムアウトします。 |
これ以降、Account Activity API は POST の試行を停止します。クライアントは他の X の endpoint を使用して data を復旧する必要があります。 |
アカウントアクティビティのデータオブジェクト構造
オブジェクト | 詳細 |
---|---|
for_user_id | 該当イベントに関連する、購読中のユーザーサブスクリプションを識別します。 |
is_blocked_by | (条件付き)他のユーザーが購読対象のユーザーをメンションした場合にのみ表示されます。Post のメンションイベントで true のときに含まれます。 |
source | アクティビティを実行しているユーザー。例: フォロー、ブロック、ミュートしているユーザーが source ユーザーです。 |
target | アクティビティの対象となるユーザー。例: フォロー、ブロック、ミュートされているユーザーが target ユーザーです。 |
メッセージタイプ | 詳細 |
---|---|
tweet_create_events | サブスクリプションユーザーが行う、またはそのユーザーに対して行われる以下のアクションに伴う Post ステータスのペイロード: Posts、リツイート、返信、@メンション、QuoteTweets、Quote Tweets のリツイート。 |
favorite_events | ユーザーと対象を含む Favorite(like)イベントのステータス。 |
follow_events | ユーザーと対象を含むフォローイベント。 |
unfollow_events | ユーザーと対象を含むフォロー解除イベント。 |
block_events | ユーザーと対象を含むブロックイベント。 |
unblock_events | ユーザーと対象を含むブロック解除イベント。 |
mute_events | ユーザーと対象を含むミュートイベント。 |
unmute_events | ユーザーと対象を含むミュート解除イベント。 |
user_event | ユーザーがアプリケーションの認可を取り消し、サブスクリプションが自動的に削除された際に送信される失効イベント。 |
direct_message_events | ダイレクトメッセージの送受信時に、ユーザーと対象を含むダイレクトメッセージのステータス。 |
direct_message_indicate_typing_events | ユーザーと対象を含む、ダイレクトメッセージの入力中イベント。 |
direct_message_mark_read_events | ユーザーと対象を含む、ダイレクトメッセージの既読イベント。 |
tweet_delete_events | コンプライアンス維持を容易にするための、削除された Posts の通知。 |
tweet_create_events(Posts、リツイート、返信、引用Tweet)
tweet_create_events (@メンション)
favorite_events
follow_events
unfollow_events
block_events
unblock_events
mute_events
unmute_events
user_event
direct_message_events
direct_message_indicate_typing_events
direct_message_mark_read_events
tweet_delete_events
Account Activity Replay API
Enterprise
Account Activity Replay API は、最長で過去5日分のイベントを取得できるデータ復旧ツールです。webhook サーバーがイベントを取り逃した場合のデータ復旧にご利用ください。たとえば、retry window を超える切断が発生した場合や、システムの復旧に数日を要するディザスタリカバリーの状況などが該当します。
Account Activity Replay API は、一定期間にわたりactivities の取り込みに失敗したあらゆる状況を想定して開発されました。リアルタイム配信用に使用しているのと同じ webhook に対してアクティビティを配信します。本製品は復旧ツールであり、バックフィルツールではありません。つまり、過去に配信が試行されたイベントのみがリプレイされます。Account Activity Replay API は、サブスクリプション作成時刻より前の期間のイベントを配信することはできません。
Account Activity Replay API の使用
制限事項
データの可用性とタイプ
移行の概要
- User Streams
- Site Streams
- GET direct_messages
- GET direct_messages/sent
- GET direct_messages/show
- POST direct_messages/new
- POST direct_messages/destroy
- Account Activity API の enterprise および premium
- GET direct_messages/events/list
- GET direct_messages/events/show
- POST direct_messages/events/new
- POST direct_messages/events/destroy
- User Streams および Site Streams から新しい webhook ベースのサービスへ移行する方向けの Account Activity API 移行ガイド
- ダイレクトメッセージの REST endpoint 間を移行する方向けの Direct Message 移行ガイド
- Account Activity Dashboard は、Account Activity API を使い始めるためのヘルパースクリプトを備えたサンプルの Node.js ウェブアプリです。
- SnowBot は、Account Activity API と REST ダイレクトメッセージ endpoint を使用するサンプルのチャットボットです。Ruby で記述され、Sinatra ウェブアプリフレームワークを使用し、Heroku にデプロイされています。
移行ガイド: User Streams/Site Streams から Account Activity API への移行
変更点の概要
廃止予定の API
代替API
相違点と移行時の考慮事項
新機能
ユーザー購読の管理
移行手順
以下の手順に従って、Site Streams API から Account Activity API へ簡単に移行してください
- 必要な webhook の数
- アプリケーションで管理している現在/見込みのサブスクリプション数/認可済みユーザー数
- 現在の X クライアントアプリケーション数
- X から望むサポートレベル(フォーラムサポート、またはマネージド Enterprise レベルの 1:1 サポート)
- 各パッケージの価格
- X app ページの permissions タブで「Read, Write and Access direct messages」を有効にします。 *注: これらの設定変更は遡及適用されません。すでに認可済みのユーザーは、認可時点の設定を保持します。あるユーザーがまだ読み取り、書き込み、ダイレクトメッセージへのアクセスを許可していない場合は、そのユーザーにアプリケーションを再認可してもらう必要があります。
- X Sign-in と、X API におけるユーザーコンテキストの仕組みに不慣れな場合は、Obtaining Access Tokens を確認してください。
- 「Keys and Tokens」タブの下部で、X app 所有者の access tokens を生成します。同じタブで、Consumer Key、Consumer Secret、Access Token、Access Token Secret を控えておいてください。API を使用する際に必要になります。
- application-only API メソッド用に、Consumer Key と Consumer Secret を使用して Bearer Token を生成します。
- イベント受信に使用する webhook 用の endpoint を備えた Web アプリを作成します(例: https://your_domain.com/webhook/twitter または https://webhooks.your_domain.com)。
- webhook を作成する際は、Consumer Key、Consumer Secret、Access Token、Access Token Secret を使用します。なお、endpoint は、crc_token と app の Consumer Secret から作成される、base64 エンコードされた HMAC SHA-256 の hash である response_token を含む JSON 応答を返す必要があります。
- Securing Webhooks のドキュメントを確認し、Challenge Response Check (CRC) の要件に特に留意してください。
- webhook が、イベント受信用の POST リクエストと CRC 用の GET リクエストをサポートしていることを確認してください。
- webhook のレイテンシが低いことを確認してください(POST リクエストへの応答が 3 秒未満)
- Webhook API は、次の 2 つの方法で webhook を保護します:
- あなたが Web アプリおよび webhook URL の所有者であることを検証するため、X は Challenge Response Check (CRC) を実行します。これは循環冗長検査(cyclic redundancy check)と混同しないでください。
- crc_token という名前のパラメータを含む GET リクエストが、あなたの webhook URL に送信されます。endpoint は、crc_token と app の Consumer Secret から作成される、base64 エンコードされた HMAC SHA-256 の hash である response_token を含む JSON 応答を返す必要があります。
- crc_token は、受信する各 CRC リクエストごとに変化することが想定されます。計算では、crc_token をメッセージとして使用し、Consumer Secret をキーとして使用してください。
- 応答が無効な場合、イベントは登録済み webhook への送信が停止されます。
- User Streams 上の現在のユーザーサブスクリプションのリストを取得する
- 次のリクエストで新しい Account Activity API のサブスクリプションを設定する: POST account_activity/all/:env_name/subscriptions
- 次のリクエストで Account Activity API のサブスクリプションを確認する: _GET account_activity/all/:env_name/subscriptions/list _
- 次のリクエストで Site Streams 上の現在のサブスクリプションのリストを取得する: GET /1.1/site/c/:stream_id/info.json
- 次のリクエストで新しい Account Activity API のサブスクリプションを設定する: POST account_activity/all/:env_name/subscriptions
- 次のリクエストで Account Activity API のサブスクリプションを確認する: _GET account_activity/all/:env_name/subscriptions/list _
- POST webhooks を使用して App に webhook URL を登録し、webhook_id を受け取ります。
- 返された webhook_id を使用して、POST webhooks/:webhook_id/subscriptions/all でユーザーサブスクリプションを追加します。
Account Activity ダッシュボード(Account Activity API サンプルアプリケーション)
- Account Activity Dashboard のサンプルアプリケーションはこちらからダウンロードできます(Node.js を使用)
- README の手順に従ってアプリをインストールし、起動してください
- アプリケーションを起動後、UI を使用して webhook を簡単に設定し、新しいサブスクリプションを作成できます
利用可能なアクティビティ
メッセージタイプ | 詳細 |
---|---|
tweet_create_events | サブスクリプションユーザーが行った、またはサブスクリプションユーザーに対して行われた次のアクションに関する Post ステータスのペイロード:Posts、リツイート、返信、@メンション、QuoteTweets |
favorite_events | ユーザーと対象を含むお気に入り(like)イベントのステータス。 |
follow_events | ユーザーと対象を含むフォローイベント。 |
block_events | ユーザーと対象を含むブロックイベント。 |
mute_events | ユーザーと対象を含むミュートイベント。 |
direct_message_events | ユーザーと対象を含むダイレクトメッセージのステータス。 |
direct_message_indicate_typing_events | ユーザーと対象を含むダイレクトメッセージの入力中イベント。 |
direct_message_mark_read_events | ユーザーと対象を含むダイレクトメッセージの既読イベント。 |
非推奨となったstreamingメッセージtype
空行 | User StreamsおよびSite Streamsでキープアライブメッセージとして使用されていたため、Account Activity APIでは空行は配信されなくなります。 |
制限通知 | 制限通知は特定のwebhookには送信されなくなります。 代わりに、ユーザーはAPIを呼び出して利用可能なハンドルの現在の使用状況を取得できます。これは将来的にdeveloper portalにも掲載される予定です。 |
切断メッセージ | webhookはアクティブな接続に依存しないため、切断通知は不要になります。 |
ストール警告 | webhookは、大量の受信メッセージを処理するアクティブな接続に依存しないため、ストール警告は不要になります。 |
フレンドリスト | フレンドリストは今後、能動的には送信されません。代わりに、この情報を取得するためのREST endpointが提供されます。 |
廃止されたイベントタイプ
説明 | イベント名 | 送信元 | 送信先 | 対象オブジェクト |
ユーザーがPostを削除する | delete | 現在のユーザー | 現在のユーザー | Post |
フォロー中のユーザーがPostを削除する | delete | フォロー中のユーザー | フォロー中のユーザー | Post |
ユーザーがPostのお気に入りを解除する | unfavorite | 現在のユーザー | Postの作者 | Post |
ユーザーのPostがお気に入り解除される | unfavorite | お気に入り解除したユーザー | 現在のユーザー | Post |
ユーザーが誰かのフォローを解除する | unfollow | 現在のユーザー | フォロー中のユーザー | Null |
ユーザーがListを作成する | list_created | 現在のユーザー | 現在のユーザー | List |
ユーザーがListを削除する | list_destroyed | 現在のユーザー | 現在のユーザー | List |
ユーザーがListを編集する | list_updated | 現在のユーザー | 現在のユーザー | List |
ユーザーが誰かをListに追加する | list_member_added | 現在のユーザー | 追加されたユーザー | List |
ユーザーがListに追加される | list_member_added | 追加したユーザー | 現在のユーザー | List |
ユーザーが誰かをListから削除する | list_member_removed | 現在のユーザー | 削除されたユーザー | List |
ユーザーがListから削除される | list_member_removed | 削除したユーザー | 現在のユーザー | List |
ユーザーがListを購読する | list_user_subscribed | 現在のユーザー | Listの所有者 | List |
ユーザーのListが購読される | list_user_subscribed | 購読したユーザー | 現在のユーザー | List |
ユーザーがListの購読を解除する | list_user_unsubscribed | 現在のユーザー | Listの所有者 | List |
ユーザーのListの購読が解除される | list_user_unsubscribed | 購読解除したユーザー | 現在のユーザー | List |
ユーザーがプロフィールを更新する | user_update | 現在のユーザー | 現在のユーザー | Null |
ユーザーが非公開設定を更新する | user_update | 現在のユーザー | 現在のユーザー | Null |
ダイレクトメッセージ移行ガイド
変更点の概要
新機能
- メディア添付(画像、GIF、動画)に対応。
- 事前定義されたオプションリストで、ユーザーに構造化された返信を促せる機能。
- 過去のダイレクトメッセージに最大30日間アクセス可能。
差分と移行時の考慮事項
新しいダイレクトメッセージオブジェクト
概要
- 完全に新しい Direct Message オブジェクト構造。
- ユーザーオブジェクトの簡素化。
- 新しい情報の提供(クイックリプライの応答、添付ファイルなど)。
ダイレクトメッセージの送信
まとめ
- メッセージは JSON の POST ボディで定義します
- Content-Type ヘッダーは application/json に設定する必要があります
- JSON ボディは OAuth 署名の生成には含まれません
ダイレクトメッセージの取得
sender_id
プロパティを参照してレスポンスを後処理する必要があります。
ページネーションは、ダイレクトメッセージのIDではなくカーソル値に基づく方式になりました。各レスポンスには cursor
プロパティが返されます。GET direct_messages/events/list は、過去30日間のメッセージを、30日間にどれだけメッセージが存在していても最大30日分まで返します。カーソルが返されない場合は、これ以上返すメッセージがないことを意味します。GET direct_messages/events/show による個別のダイレクトメッセージへのアクセス方法は同じですが、返されるダイレクトメッセージオブジェクトの構造は前述のとおり異なります。
最後に、ダイレクトメッセージへのリアルタイムアクセスは、Account Activity API の webhook を介して提供されます。User Streams または Site Streams からの移行については、Account Activity API の移行ガイドを参照してください。
要約
- 送信・受信メッセージが同一のendpointで返されるようになりました。
- 最大30日分のメッセージが返されます。
- カーソルベースのページネーション。
- webhook経由でのダイレクトメッセージへのリアルタイムアクセス。
ダイレクトメッセージの削除
概要
- ダイレクトメッセージを削除するには、そのidが必要です。
- 新しいendpointでは、DELETEリクエストが必要です。
- 削除されたダイレクトメッセージの公式Xクライアントでの反映方法は、これまでどおりです。
よくあるご質問
一般
- スピード: X のスピードでデータを配信します。
- シンプルさ: 単一の webhook 接続で、アカウントのすべてのイベントを配信します。API で配信されるアクティビティには、Posts、@mentions、replies、リツイート、Quote Tweets、Retweets of Quote Tweets、likes、送信済みダイレクトメッセージ、受信ダイレクトメッセージ、follows、blocks、mutes が含まれます。
- スケール: イベント上限によるレートリミットに縛られることなく、管理対象アカウントのすべてのアクティビティを受信できます。
- これから始める場合は、Getting started with webhooks ガイドをご覧ください。
-
X Dev サポート付きスクリプトに沿って進めてください:
- Account Activity API dashboard: webhook イベントを表示する Node の Web アプリ。
- SnowBot chatbot: Account Activity と Direct Message APIs 上に構築された Ruby の Web アプリ。このコードベースには、Account Activity API の webhook 設定を支援するscript が含まれます。
- サーバーが CRC に対して誤ったトークンで応答した場合。この場合、当社システムはアクティビティの送信を再試行しません。
- webhook URL に誤った証明書が構成されている場合。この場合も、当社システムはアクティビティの送信を再試行しません。
- サーバーが 2XX、4XX、5XX 以外のレスポンスコードを返した場合。
- gzip の使用を指定しているにもかかわらず、実際には送信していない場合。
- gzip の使用を指定していないにもかかわらず、実際にはレスポンスで送信している場合。
/all/
部分を他のアカウントアクティビティのデータオブジェクトに置き換えて、API が配信するアクティビティを限定できますか?POST https://api.x.com/1.1/account_activity/all/:env_name/subscriptions.json
いいえ、できません。現時点では、提供しているのは /all/
プロダクトのみです。
ユーザーからダイレクトメッセージの権限を要求せずに Account Activity API を使用する方法はありますか?
現時点では、この API でダイレクトメッセージのアクティビティを「フィルタリング」する方法がないため、ダイレクトメッセージの権限が必要です。
Account Activity API の無料版はありますか?
はい、無料のティアとしてサンドボックス版を提供しています。サンドボックスオプションは、webhook は1つ、購読は最大15件に制限されています。サンドボックスオプションの詳細はドキュメントをご覧ください。
購読ユーザーに言及した Post のリツイートを取得するために Account Activity API を使用できますか?
残念ながら、これはこの API が配信するアクティビティには含まれていません。これには Streaming API の使用をお勧めします。
tweet_create_event が表す可能性のあるアクティビティタイプは何ですか?
tweet_create_event のペイロードは以下の場合に送信されます。
購読ユーザーが次のいずれかのアクションを実行した場合:
- Post を作成
- リツイート
- Post に返信
- 購読ユーザーに @メンション* する
- 購読ユーザーが作成した Tweet を引用する
user_has_blocked
が表示され、「true」または「false」のいずれかに設定されます。このフィールドは Post のメンションでのみ公開されます。
Enterprise
自分の App を allowlist に追加する、またはすでに allowlist にあるかを確認するにはどうすればよいですか?
Enterprise API を介したアクセスのために許可リストに追加したX appsを管理するには、App の id を添えてアカウントマネージャーにご連絡ください。App の id は、developer portal の”Apps”ページに移動すると確認できます。
webhook を3件利用できる場合、Enterprise 用に登録した各 App で3件ずつの webhook を使用できますか?
webhook の上限は App レベルではなくアカウントレベルで設定されています。webhook を3件利用でき、Enterprise 用に登録した App が2つある場合、1つの App に2件、もう一方の App に1件の webhook を使用できますが、各 App に3件ずつは使用できません。
Account Activity Replay API を使用して再配信されるイベントの種類を指定できますか?
再生するイベントの種類は指定できません。指定した日時の範囲内で配信されたすべてのイベントが再生されます。
アプリケーションが Account Activity Replay API のイベントの取り込みに失敗した場合、再試行はありますか?
いいえ、再試行はありません。アプリケーションが Account Activity Replay API によって送信されたイベントの取り込みに失敗した場合、同一期間に対して別の Replay ジョブを送信し、取りこぼした Replay イベントの再配信を試みることができます。
部分的成功の完了イベントを受け取った場合はどうすればよいですか?
受信したイベントのタイムスタンプを控え、未受信のイベントに対して別の Replay ジョブをリクエストすることをお勧めします。
同時に実行できる Account Activity Replay API ジョブは何件ですか?
1つの webhook につき同時に実行できる Account Activity Replay API ジョブは1件のみです。
Account Activity Replay API のイベントと、webhook に配信されるリアルタイムの本番イベントをどのように区別できますか?
Account Activity Replay API は常に過去のイベントを配信するため、イベントのタイムスタンプに基づいてリアルタイムの本番イベントと区別できます。
アプリケーションがドロップまたは見逃したアクティビティの再配信に、Account Activity Replay API をどれくらい早く使い始められますか?
アクティビティは作成から約10分後に再配信が可能になります。
エラー対応ガイド
コード 32
- Enterprise - 使用しているコンシューマーキーおよび Access Tokens が、Enterprise 製品の利用に登録された X App に属していることを確認してください。コンシューマーキーや Access Tokens をお持ちでない場合、または X App を許可リストに追加する必要がある場合は、アカウントマネージャーにご連絡ください。
-
ユーザー context で認証する場合は、
oauth nonce
、oauth_signature
、oauth_timestamp
を適切に含めてリクエストを認可していることを確認してください。 -
Access Tokens に適切な権限レベルがあることを確認してください。
- App ダッシュボード の「Keys and tokens」タブで、Access Tokens のpermission levelが「Read, write, and direct messages」になっていることを確認してください。
- トークンの権限レベルがこれより低い場合は、「Permissions」タブでアクセス権限を「Read, write, and direct messages」に変更し、その後「Keys and tokens」タブから Access Tokens とシークレットを再生成してください。
-
URL の形式が正しいことを確認してください。
:env_name
は大文字と小文字を区別します。
コード 200 - Forbidden
- Premium - API にリクエストを送信する前に、承認済みのデベロッパーアカウントを必ず取得してください。リクエストでは適切な :env_name を使用する必要があり、これは dev environments ページで設定できます。
- Enterprise - 担当アカウントマネージャーにより、Account Activity API へのアクセスが付与されていることを確認してください。
- URI が正しく設定されていることを確認してください。リクエストに誤った URI を指定すると、このエラーが発生する可能性があります。
コード 214 - Webhook URL が要件を満たしていません。
- HTTPS を使用していることを確認してください。
- Webhook の URL が不正な形式である可能性があります。
- Webhook URL の設定方法の詳細は、Getting started with webhooks ページの Develop webhook consumer app セクションをご覧ください。
コード 214 - CRC の GET リクエストで高いレイテンシーが発生しています。webhook は 3 秒未満で応答する必要があります。
- サーバーの応答が遅いことを示します。CRC には 3 秒以内に応答していることを確認してください。
コード 214 - CRC の GET リクエスト中に 200 以外のレスポンスコード(例:404、500 など)
- サーバーが停止しています。サーバーが正常に稼働していることを確認してください。
コード 214 - 既に作成されたリソースが多すぎます。
- Enterprise - 利用可能な webhook をすべて使い切っています。登録済みの各 App で GET webhooks endpoint を使用し、webhook の配布先を特定してください。
コード 261 - アプリケーションは書き込みアクションを実行できません。
- API と併用している App の access token および access token secret に、適切な permission level が設定されていません。X apps ダッシュボードの「Keys and tokens」タブに移動し、access token と access token secret に割り当てられている権限レベルを確認してください。「Read, write and Direct Messages」以外に設定されている場合は、「Permission」タブで設定を変更し、新しい設定を反映するために access token と access token secret を再生成してください。
- また、app-only 認証で webhook を登録しようとしている可能性がありますが、これはサポートされていません。代わりにユーザー context で認証してください。詳細は、Enterprise Account Activity API の webhook 登録に関する API リファレンスの該当セクションを参照してください。
Account Activity API リファレンス索引
目的 | Enterprise |
webhook の URL を登録/webhook_id を生成 | POST webhooks |
すべての webhook URL とそのステータスを返す | GET webhooks |
チャレンジレスポンスチェックを手動で実行 | PUT webhooks/:webhook_id |
アカウントのイベントに App を購読登録 | POST webhooks/:webhook_id/subscriptions/all |
現在アクティブなサブスクリプション数を返す | GET subscriptions/count |
webhook がアカウントを購読しているか確認 | GET webhooks/:webhook_id/subscriptions/all |
現在アクティブなサブスクリプションの一覧を返す | GET webhooks/:webhook_id/subscriptions/all/list |
webhook を削除 | DELETE webhooks/:webhook_id |
3-legged OAuth でサブスクリプションを無効化(非推奨) | DELETE webhooks/:webhook_id/subscriptions/all |
application-only OAuth でサブスクリプションを無効化 | DELETE webhooks/:webhook_id/subscriptions/:user_id/all.json |
アクティビティを webhook に再配信 | POST replay/webhooks/:webhook_id/subscriptions/all |
Enterprise Account Activity API
POST account_activity/webhooks
指定されたアプリケーションのcontextに対して新しい webhook URL を登録します。保存前に、その URL は CRC リクエストで検証されます。検証に失敗した場合は、要求元に詳細なエラーメッセージを返します。 許可される webhook の数は、課金パッケージによって決まります。https://api.x.com/1.1/account_activity/webhooks.json
レスポンス形式 | JSON |
認証が必要 | はい(ユーザー context - すべての consumer と access tokens) |
レートリミット | はい |
リクエスト数 / 15分ウィンドウ(ユーザー認証) | 15 |
Tweet 編集のサポート | すべての Tweet オブジェクトに、Tweet の編集履歴を示す Tweet 編集 metadata が含まれます。詳細は”Tweet edits の基本”ページおよび「Tweet edits(編集)」ページ(/x-api/enterprise-gnip-2.0/fundamentals/edit-tweets)を参照してください。 |
url(必須) | コールバック用 endpoint のエンコード済み URL。 |
HTTP コード | メッセージ |
---|---|
200 | webhook の URL は指定された App に登録されています |
403 | リクエストにエラーがあります。以下のエラーメッセージセクションを参照してください。 |
Code | Message |
---|---|
214 | Webhook の URL が要件を満たしていません。 |
214 | 作成済みのリソースが多すぎます。 |
214 | Webhook の URL が要件を満たしていません。CRC トークンが無効、または JSON のレスポンス形式が不正です。 |
214 | CRC への GET リクエストのレイテンシーが高すぎます。webhook は 3 秒未満で応答する必要があります。 |
214 | CRC への GET リクエスト中に 200 以外のステータスコードが返されました(例: 404、500 など)。 |
GET account_activity/webhooks
指定したアプリケーションに対するすべてのURLとそのstatusesを返します。 URLが日次の検証に失敗した場合、そのURLは無効としてマークされます。URLを再度有効にするには、更新用のendpointを呼び出してください。https://api.x.com/1.1/account_activity/webhooks.json
レスポンス形式 | JSON |
認証の要否 | 必要(アプリケーションのみ・Bearer Token) |
レートリミット | あり |
リクエスト数 / 15分ウィンドウ(アプリケーション認証) | 15 |
リクエスト例
コード | メッセージ |
---|---|
99 | このリソースへのアクセス権がありません。 |
PUT account_activity/webhooks/:webhook_id
指定された webhook の URL に対して Challenge Response Check(CRC)を実行します。チェックが成功すると、ステータスをvalid
に設定して webhook を再有効化し、204 を返します。
リソースURL
https://api.x.com/1.1/account_activity/webhooks/:webhook_id.json
レスポンス形式 | JSON |
認証が必要 | はい(ユーザー context - すべてのコンシューマーおよび Access Tokens) |
レートリミット | あり |
リクエスト数 / 15分間ウィンドウ(ユーザー認証) | 15 |
webhook_id(必須) | webhook の ID。リソースパスで定義されます。 |
Code | Message |
---|---|
34 | webhook が存在しない、または別の X App に関連付けられています。 |
214 | webhook の URL が要件を満たしていません。 |
214 | webhook の URL が要件を満たしていません。CRC トークンが無効、または JSON レスポンス形式が不正です。 |
214 | CRC の GET リクエストのレイテンシーが高すぎます。webhook は 3 秒未満で応答する必要があります。 |
214 | CRC の GET リクエスト中に 200 以外のレスポンスコード(例: 404、500 など)です。 |
POST account_activity/webhooks/:webhook_id/subscriptions/all
指定したユーザーコンテキストに対して、指定したAppをすべてのメッセージタイプにおけるすべてのイベントの受信対象として登録します。有効化後は、リクエスト元ユーザーに関するすべてのイベントが、POSTリクエストでアプリケーションのwebhookに送信されます。 サブスクリプションは現在、お客様のアカウント設定に基づき制限されています。追加のサブスクリプションが必要な場合は、アカウントマネージャーまでご連絡ください。リソースURL
https://api.x.com/1.1/account_activity/webhooks/:webhook_id/subscriptions/all.json
レスポンス形式 | JSON |
認証が必要 | はい(3-legged OAuth(ホワイトリスト登録済みの Consumer Key と購読ユーザーの access token)) |
レートリミット | あり |
リクエスト数 / 15分ウィンドウ(ユーザー認証) | 500 |
webhook_id(必須) | webhook の id。リソースパスで定義されています。 |
コード | メッセージ |
---|---|
34 | webhook が存在しないか、別の X App に関連付けられています。 |
348 | クライアントアプリケーションには、このユーザーの webhook サブスクリプションにアクセスする権限がありません。 |
GET account_activity/subscriptions/count
この endpoint は、あなたのアカウントで現在アクティブなサブスクリプションの件数を返します。/count endpoint の利用にはアプリケーション専用の OAuth が必要です。そのため、ユーザー context ではなく Bearer Token を使用してリクエストしてください。https://api.x.com/1.1/account_activity/subscriptions/count.json
レスポンス形式 | HTTP レスポンスコード |
認証 | 必要(アプリケーションのみ・Bearer Token) |
レートリミット | あり |
リクエスト数 / 15分ウィンドウ(アプリケーション認証) | 15 |
コード | メッセージ |
200 | 成功。指定した webhook の購読数が返されます。 |
401 | 指定した webhook の購読を表示する権限が、App にありません。 |
レスポンス例 - 成功
HTTP 200コード | メッセージ |
---|---|
32 | 認証できませんでした。 |
GET account_activity/webhooks/:webhook_id/subscriptions/all
指定したユーザーのイベントに対して、webhook 設定がサブスクライブされているかどうかを確認する方法を提供します。指定したユーザーの context が、指定したアプリケーションで有効なサブスクリプションを持っている場合は 204 OK を返します。レスポンスコードが 204 でない場合、そのユーザーには有効なサブスクリプションがありません。詳細は以下の HTTP レスポンスコードとエラーメッセージを参照してください。https://api.x.com/1.1/account_activity/webhooks/:webhook_id/subscriptions/all.json
レスポンス形式 | JSON |
認証が必要 | はい(3-legged OAuth — ホワイトリスト登録済みの consumer key と購読ユーザーの access token) |
レートリミット | あり |
リクエスト数 / 15分間(ユーザー認証) | 500 |
webhook_id (必須) | webhook の ID。リソースパスで定義されています。 |
リクエスト例
$ curl —request GET —url https://api.x.com/1.1/account_activity/webhooks/:WEBHOOK_ID/subscriptions/all.json —header ‘authorization: OAuth oauth_consumer_key=“WHITELISTED_CONSUMER_KEY”, oauth_nonce=“GENERATED”, oauth_signature=“GENERATED”, oauth_signature_method=“HMAC-SHA1”, oauth_timestamp=“GENERATED”, oauth_token=“SUBSCRIBING_USER'''S_ACCESS_TOKEN”, oauth_version=“1.0“‘ HTTP 204 NO CONTENTGET account_activity/webhooks/:webhook_id/subscriptions/all/list
指定した webhook に対する現在の All Activity タイプのサブスクリプション一覧を返します。/list endpoint はアプリケーション専用の OAuth(App-only OAuth)を必要とするため、リクエストはユーザーコンテキストではなく Bearer Token を用いて行ってください。https://api.x.com/1.1/account_activity/webhooks/:webhook_id/subscriptions/all/list.json
応答形式 | HTTP レスポンスコード |
認証の要否 | 要(アプリケーションのみ — Bearer Token) |
レートリミット | あり |
リクエスト数 / 15分ウィンドウ(アプリケーション認証) | 50 |
webhook_id(必須) | webhook の id。リソースパスで定義されます。 |
Code | Message |
---|---|
200 | 成功。リクエストされた webhook のサブスクリプション一覧が返されます。 |
401 | 指定された webhook のサブスクリプションを表示する権限がアプリケーションにありません。 |
コード | メッセージ |
---|---|
32 | 認証に失敗しました。 |
DELETE account_activity/webhooks/:webhook_id
指定したAppの設定からwebhookを削除します。webhookのidは、GET /1.1/account_activity/webhooks を呼び出すことで取得できます。https://api.x.com/1.1/account_activity/webhooks/:webhook_id.json
レスポンス形式 | JSON |
認証が必要 | はい(user context — すべてのコンシューマーおよび Access Tokens) |
レートリミット | はい |
リクエスト/15分ウィンドウ(ユーザー認証) | 15 |
webhook_id (必須) | webhook の id。リソースパスで定義されます。 |
リクエストの例
DELETE account_activity/webhooks/:webhook_id/subscriptions/all (非推奨)
指定されたユーザーのcontextおよびアプリケーションに対するサブスクリプションを無効化します。無効化後、リクエスト元ユーザーのすべてのイベントはwebhookのURLに送信されなくなります。https://api.x.com/1.1/account_activity/webhooks/:webhook_id/subscriptions/all.json
レスポンス形式 | JSON |
認証が必要 | はい(3-legged OAuth — ホワイトリスト登録済みの consumer key と購読ユーザーの access token) |
レートリミット | はい |
リクエスト数 / 15分ウィンドウ(ユーザー認証) | 500 |
パラメータ
webhook_id(必須) | Webhookのid。リソースパスで定義されます。 |
DELETE /account_activity/webhooks/:webhook_id/subscriptions/:user_id/all.json
指定された webhook とユーザー id のサブスクリプションを無効化します。無効化後は、リクエスト元ユーザーに関するすべてのイベントは webhook の URL に送信されなくなります。なお、この endpoint にはアプリケーション専用の OAuth が必要なため、リクエストはユーザー context ではなく Bearer Token を使用して行ってください。https://api.x.com/1.1/account_activity/webhooks/:webhook_id/subscriptions/:user_id/all.json
レスポンス形式 | JSON |
認証 | 必要(アプリケーションのみ・Bearer Token) |
レートリミット | あり |
リクエスト数 / 15分間ウィンドウ | 500 |
コード | メッセージ |
---|---|
404 | 申し訳ありません、そのページは存在しません。- 指定されたユーザーidが実際には購読していない場合によく発生します。 |
Replay API
Request Method | HTTP POST |
URL | /1.1/account_activity/replay/webhooks/:webhook_id/subscriptions/all.json?from_date=yyyymmddhhmm&to_date=yyyymmddhhmm |
Response Format | JSON |
Requires Authentication | はい(アプリのみ - Bearer Token) |
Rate Limit | 15分あたり5リクエスト。要求可能なリプレイジョブ数に現在、上限はありません。 |
from_date | イベント提供の基準となる最も古い(開始)UTC タイムスタンプ。‘yyyymmddhhmm’ 形式で指定します。分精度で、包括的です(例: 12:00 は00分を含む)。有効な時刻は過去5日以内の UTC で、現在時刻の31分前より新しくしてはいけません。from_date と to_date はおおむね2時間以内に収めることを推奨します。 |
to_date | イベント提供の基準となる最新(終了)UTC タイムスタンプ。‘yyyymmddhhmm’ 形式で指定します。分精度で、排他的です(例: 12:30 はその時間の30分を含まない)。有効な時刻は過去5日以内の UTC で、現在時刻の10分前より新しくしてはいけません。 |
レスポンス
ステータス | テキスト | エラーコード | 説明 | メッセージ |
---|---|---|---|---|
202 | Accepted | N/A | リクエストは成功し、アクティビティが送信されます。 | N/A |
400 | Bad Request | 214 | webhook が無効としてマークされています。 | Webhook は無効としてマークされており、CRC チェックが必要です。 |
400 | Bad Request | 357 | query パラメータがありません。 | : queryParam は必須です。 |
400 | Bad Request | 358 | ルートまたは query パラメータの形式が不正です。 | パラメータを解析できません。 |
400 | Bad Request | 360 | ルートパラメータが負の値です。 | webhook_id: [] は 0 以上ではありません。 |
400 | Bad Request | 368 | from_date または to_date が過去ではありません。 | : [<field_value>] は過去ではありません。 |
400 | Bad Request | 356 | from_date は to_date より前でなければなりません。 | from_date は to_date より前でなければなりません。 |
400 | Bad Request | 356 | from_date は過去 5 日以内でなければなりません。 | from_date は過去 5 日以内でなければなりません。 |
401 | Unauthorized | 32 | 提供された 3-legged 認証により HTTP 認証が失敗しました。 | 認証方法が無効です。アプリケーション専用認証を使用してください。 |
401 | Unauthorized | 61 | クライアントはこのメソッドをリクエストする権限がありません。 | クライアントはこのメソッドをリクエストする権限がありません。 |
403 | Forbidden | 200 | クライアントに Replay が有効な Enterprise アカウントがありません。 | Account Activity API の replay が有効な Enterprise アカウントが必要です。Enterprise アカウントをお持ちで、replay が有効になっていることを確認してください。 |
404 | Not Found | 34 | 存在しない webhook_id、または webhook_id と application_id の不一致。 | Webhook が存在しないか、別の X アプリケーションに関連付けられています。 |
409 | Conflict | 355 | 進行中のリクエストがあり、別のリクエストを行う前に処理の完了を待つ必要があります。 | この webhook ではリプレイジョブがすでに進行中です。 |
429 | Too Many Requests | 88 | レートリミットに達しました(一定時間内のリクエスト数の上限に到達) | リクエストが多すぎます。API のリクエストレートを下げてください。 |
500 | Internal Server Error | 0 | 内部サーバーエラー。 | 内部サーバーエラー。 |
503 | Service Unavailable | 67 | X の 1 つ以上の依存サービスが利用できません。 | X サーバーエラー。指数バックオフ方式で再試行してください。 |