このエンドポイントは、ポスト編集メタデータを含むように更新されました。これらのメタデータの詳細については、“ポストを編集” の基礎ページをご覧ください。 このエンドポイントは、Direct Messages エンドポイントと併用されることがよくあります。新しい v2 Direct Messages エンドポイントを公開しました。Enterprise と Premium Account Activity API は v2 の 1 対 1 メッセージをサポートしていますが、グループ会話はまだサポートしていません。
Enterprise
Account Activity API は、webhook を介してユーザーアカウントに関連するリアルタイムのアクティビティをサブスクライブできる機能を提供します。これにより、単一の接続を通じて、保有またはサブスクライブしている 1 つ以上のアカウントから、リアルタイムのポスト、Direct Messages、その他のアカウントイベントを受信できます。
webhook を登録している各ユーザーサブスクリプションごとに、以下のすべての関連アクティビティを受信します。
注意 - Account Activity API 経由ではホームタイムラインのデータを配信しません。このデータを取得するには、GET statuses/home_timeline を使用してください。
動画シリーズ
機能概要
-
ご不明な点がありますか? エラーが発生していますか?
- FAQ (よくある質問) または エラーのトラブルシューティングガイド を参照してください。
-
サンプルコードを試してみてください:
- Enterprise Account Activity API ダッシュボード:Enterprise ティアの Account Activity API を使用して webhook イベントを表示し、リプレイ 機能も備えた Node 製の Web アプリです。
- SnowBot chatbot:Enterprise Account Activity API と Direct Message API の上に構築された Ruby 製の Web アプリです。
Webhook と購読ユーザーの管理
- 登録済みの X App - こちらから登録
- ベアラートークン - 詳しくはこちら
- 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 -
購読ユーザーのアクセストークン
<SUBSCRIBING_USER'S_ACCESS_TOKEN>例:370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb
参照記事
- Challenge-Response Check (CRC) の概要
- [Account Activity データ type](/x-api/enterprise-gnip-2.0/fundamentals/account-activity#account-activity-data-object-structure
- Webhook とサブスクリプションの管理
Account Activity API のビデオウォークスルー
- webhook の登録
- ユーザーサブスクリプションの追加
- ユーザーサブスクリプションの削除
- アカウントアクティビティの受信
- アカウントアクティビティのリプレイ
-
質問がありますか? エラーが発生していますか?
- よくある質問 または エラーのトラブルシューティングガイド をお読みください。
-
サンプルコードを参照してください:
- Enterprise Account Activity API dashboard:Enterprise ティアの Account Activity API を使用して webhook イベントを表示し、Replay 機能を備えた Node.js 製の Web アプリです。
- SnowBot chatbot:Enterprise Account Activity API と Direct Message API を基盤として構築された Ruby 製の Web アプリです。
Webhook の利用を開始する
1. X App を作成する
- 開発者コンソール で承認済みの開発者アカウントを使用して X app を作成します。自社を代表して App を作成する場合は、企業用の X アカウントで App を作成することをお勧めします。開発者アカウントに申し込むには、こちらをクリックしてください。
- App ページの permissions タブで「Read, Write and Access direct messages」を有効にします。
- 「Keys and Access Tokens」タブで、App の Consumer Key (API Key) と Consumer Token (API Secret) を控えておきます。
- 同じタブで、App の Access Token and Access Token Secret を生成します。これらの Access Token は、X がアカウントイベントを送信する先となる webhook URL を登録する際に必要になります。
- X Sign-in や、X API におけるユーザーコンテキストの仕組みに不慣れな場合は、Obtaining Access Tokens を確認してください。イベントを受信するアカウントを追加するときは、そのアカウントの Access Token を使用して購読を行います。
- 開発者コンソール の “Apps” ページに表示されている App の数値 ID を控えておきます。Account Activity API アクセスを申請する際に、この App ID が必要になります。
2. Account Activity API アクセスを取得する
3. Webhook コンシューマー App を開発する
-
イベントを受信するための webhook として使用する URL を持つ Web アプリを作成します。これは、X の webhook からの着信イベントをリッスンするためにサーバー上にデプロイするエンドポイントです。
- 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=エンドポイントに対して POST リクエストを送信します。このリクエストを送信すると、X は Web アプリに CRC リクエストを送信します。Webhook が正常に登録されると、レスポンスには webhookidが含まれます。この webhookidは、Account Activity API への一部のリクエストを行う際に後で必要になります。 - X は、登録した URL にアカウントの webhook イベントを送信します。Web アプリが、着信イベントに対する POST リクエストをサポートしていることを確認してください。これらのイベントは JSON でエンコードされます。Webhook の JSON ペイロード例については HERE を参照してください。
-
Web アプリの準備ができたら、次のステップはアクティビティを受信するアカウントを追加することです。アカウントを追加 (または削除) する際には、アカウントの
idを参照する POST リクエストを送信します。詳細は、サブスクリプションの追加に関するガイド を参照してください。
4. セットアップの検証
- App と webhook が正しく構成されていることを検証するには、App がサブスクライブしている X アカウントのいずれかのポストに「いいね」を付けてください。サブスクライブしている各アカウントがいいねを受け取るたびに、webhook URL への POST リクエストを通じて
favorite_eventsを受信するはずです。 - サブスクリプションが追加されてからイベントの配信が開始されるまで、最大で 10 秒かかる場合があることに注意してください。
- webhook URL を登録する際、Web アプリはコンシューマートークンとシークレット に加えて App オーナーのユーザーアクセストークンとシークレット で認証を行う必要があります。
- すべての受信ダイレクトメッセージは webhook 経由で配信されます。POST direct_messages/events/new (message_create) を介して送信されたすべてのダイレクトメッセージも webhook 経由で配信されます。これは、別のクライアントから送信されたダイレクトメッセージも Web アプリが把握できるようにするためです。
- すべての webhook イベントには、そのイベントがどのサブスクリプションに対して配信されたかを示すユーザー ID である for_user_id が含まれていることに注意してください。
- 同じ会話で 2 人のユーザーがあなたの Web アプリをダイレクトメッセージ用に利用している場合、webhook は 2 つの重複イベント (各ユーザーごとに 1 件) を受信します。Web アプリ側でこれを考慮する必要があります。
- 同じ webhook URL を共有し、同じユーザーが各 App にマッピングされている Web アプリが複数ある場合、同じイベントが webhook に複数回送信されます (Web アプリごとに 1 回) 。
- 場合によっては、webhook が重複したイベントを受信することがあります。webhook アプリはこれを許容し、イベント ID によって重複排除を行う必要があります。
- Quick Reply の応答がリクエストに続けてすぐに返ってくることを想定しないでください。ユーザーは Quick Reply のリクエストを無視し、従来のダイレクトメッセージで返信することもできます。また、ユーザーはメッセージスレッド内で以前に返信していないリクエストに対して Quick Reply の応答を送信することもできます。
-
コード例はこちらを参照してください:
- Enterprise Account Activity API dashboard — Account Activity API のエンタープライズティアを使用して webhook イベントを表示する Node 製の Web アプリで、Replay 機能を備えています。
- SnowBot chatbot — Account Activity API と Direct Message API 上に構築された Ruby 製の Web アプリです。このコードベースには、Account Activity API の webhook セットアップを支援する script が含まれています。
Webhook のセキュリティ確保
- challenge-response チェックにより、Webhook イベントを受信する Web アプリの所有権を X が確認できます。
- 各 POST リクエスト内の署名ヘッダーにより、受信した Webhook が X から送信されたものであることをあなたが確認できます。
チャレンジレスポンスチェック
crc_token パラメータを付けてあなたの Web アプリに対して 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 をトリガーすることもできます。CRC をトリガーすることは、Webhook アプリケーションの開発中や、新しいコードをデプロイしてサービスを再起動した後などに有用です。
crc_token は受信する CRC リクエストごとに変更されると想定しておく必要があり、計算時には Consumer Secret をキーとして、この crc_token をメッセージとして使用しなければなりません。
3 秒以内に応答が返されない場合、または応答が無効になった場合、登録済み Webhook へのイベント送信は停止します。
CRC リクエストが行われるタイミング:
- webhook URL が登録されたとき。
- webhook URL を検証するために、おおよそ 1 時間ごと。
- PUT リクエストを送信することで、CRC を手動でトリガーできます。webhook クライアントを開発する際には、CRC レスポンスを実装しながら、この手動 CRC トリガーも行うことを想定しておいてください。
レスポンス要件:
crc_tokenと App の Consumer Secret から生成された、base64 エンコード済みの HMAC SHA-256 ハッシュ- 有効な response_token を含む JSON 形式
- 3 秒未満の応答時間
- HTTP 200 レスポンスコード
言語ごとの HMAC ライブラリ:
Python におけるレスポンストークン生成の例:
JSON レスポンスの例:
その他の例:
- こちら は、Node/JS で記述された CRC レスポンスメソッドの例です。
- こちら は、Ruby で記述された CRC レスポンスメソッドの例です (generate_crc_response と、CRC イベントを受信する /GET ルートを参照してください) 。
署名ヘッダー検証 (オプション)
x-twitter-webhooks-signature というヘッダーでハッシュ署名が渡されます。この署名を使用して、データの送信元が X であることを検証できます。POST のハッシュ署名は sha256= で始まり、X App Consumer Secret とペイロードの暗号化に HMAC SHA-256 が使用されていることを示します。GET のハッシュは、クエリパラメータ文字列 crc_token=$token&nonce=$nonce から計算されます。
リクエストを検証する手順
- 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 Compression を無効化する
- セッションチケットキーをローテーションしていない場合は、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 設定管理エンドポイント:
Webhook URL を更新するだけではだめなのはなぜですか?
User サブスクリプションの追加と削除
サブスクリプション管理エンドポイント
Account Activity API: Enterprise
ご注意ください: Account Activity API を利用開始する前に、まず X 側で開発者用 App に対して Account Activity API へのアクセスを有効化してもらう必要があります。そのため、認証に使用する予定の App ID をアカウントマネージャーまたはテクニカルサポートチームと必ず共有してください。
*_ 認証には、サブスクライブしているユーザーの Access Token が必要です。 _
OAuth 1.0a のユーザーコンテキスト認証が必要なエンドポイントについては、リクエストを認証するために次の認証情報を指定する必要があります。
- 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: 指定されたユーザーコンテキストおよびアプリケーションのサブスクリプションを無効にします [非推奨]
ご注意: 開発者 App が「Read, Write, and Direct Messages」に有効化されていることを確認してください。この設定は、開発者アカウントの Projects & Apps セクションの、対象の開発者 App の「App permissions」で変更できます。権限設定を変更した後は、App の認証情報を再生成する必要があります。
ご注意: Account Activity API を利用開始する前に、X 側で開発者 App に対して Account Activity API へのアクセスを有効化する必要があります。そのため、認証に使用する予定の App ID を、アカウントマネージャーまたはテクニカルサポートチームと必ず共有してください。
*_ 認証には、サブスクリプションを行うユーザーのアクセストークンが必要です。 _
OAuth 1.0a のユーザーコンテキスト認証を必要とするエンドポイントでは、リクエストを認証するために次のクレデンシャルを指定する必要があります。
- 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 セクション内で、対象の開発者 App の「App permissions」から変更できます。権限設定を変更した後は、App クレデンシャルを再生成する必要があります。
再試行
Enterprise
Account Activity API のエンタープライズティアの利点の 1 つは、webhook イベントに対する再試行メカニズムが提供されることです。success を示す HTTP 200 レスポンスコードが受信されない場合、X サーバーは再試行メカニズムを開始し、5 分間に最大 3 回まで webhook イベントを再送信します。この webhook イベント再試行サービスにより、ネットワーク障害が発生した場合や、クライアント側のサービス中断やデプロイ時にも、信頼性の向上とイベントの復旧に役立ちます。
リトライとは何ですか?
リトライタイムライン
再試行タイムライン
アカウントアクティビティのデータオブジェクト構造
利用可能なアクティビティ
ペイロード例
上記の表で説明した各アカウントアクティビティイベントについて、以下のペイロード例を参照してください。
tweet_create_events (投稿、リツイート、返信、引用ツイート)
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 移行ガイド
- Direct Message の REST エンドポイント間で移行する方向けの Direct Message 移行ガイド
- Account Activity Dashboard は、Account Activity API の利用を開始するためのヘルパースクリプトを備えたサンプルの Node.js Web アプリです。
- SnowBot は、Account Activity API と REST の Direct Message エンドポイントを利用するサンプルチャットボットです。Ruby で実装され、Sinatra Web アプリフレームワークを使用し、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」を有効にします。 *これらの設定変更は遡及的には適用されず、既に認可済みのユーザーは認可時点の設定を維持することに注意してください。ユーザーがまだ read、write、direct message アクセスを付与していない場合は、そのユーザーにアプリケーションを再認可してもらう必要があります。
- X Sign-in や、X API におけるユーザーコンテキストの仕組みに不慣れな場合は、Obtaining Access Tokens を確認してください。
- 「Keys and Tokens」タブの下部で、X app のオーナー用のアクセストークンを生成します。同じタブで、Consumer Key、Consumer Secret、Access Token、Access Token Secret を控えておいてください。API を利用する際に必要になります。
- application-only API メソッド用に、Consumer Key と Consumer Secret を使用してベアラートークンを生成します。
- イベントを受信するための webhook として使用するエンドポイントを備えた Web アプリを作成します (例: https://your_domain.com/webhook/twitter または https://webhooks.your_domain.com) 。
- webhook を作成する際に、Consumer Key、Consumer Secret、Access Token、Access Token Secret を使用します。エンドポイントは、response_token を含む JSON レスポンスを返す必要があり、response_token は crc_token と App の Consumer Secret から生成される base64 エンコードされた HMAC SHA-256 ハッシュでなければなりません。
- 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 に送信されます。エンドポイントは、crc_token と App の Consumer Secret から生成された base64 エンコード済み HMAC SHA-256 ハッシュである 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 を簡単に設定し、新しいサブスクリプションを作成できます
利用可能なアクティビティ
廃止されたストリーミングメッセージ種別
非推奨のイベント種別
ダイレクトメッセージ移行ガイド
変更概要
以下のDMエンドポイントをまだ使用している場合は、新しいエンドポイントへ移行する必要があります。新機能
- メディア (画像、GIF、動画) の添付に対応。
- あらかじめ定義された選択肢リストを使って、ユーザーに構造化された返信を促す機能。
- 過去 30 日分のダイレクトメッセージへのアクセス。
違いと移行時の考慮事項
新しいダイレクトメッセージオブジェクト
概要
- ダイレクトメッセージ (Direct Message) オブジェクト構造が完全に刷新されました。
- user オブジェクトが簡略化されました。
- 新しい情報が追加されました (クイック返信の応答、添付ファイルなど) 。
ダイレクトメッセージの送信
概要
- メッセージは JSON の POST リクエストボディ内で定義されます。
- Content-Type ヘッダーは application/json に設定する必要があります。
- JSON ボディは OAuth 署名生成の対象には含まれません。
ダイレクトメッセージの取得
概要
- 送信メッセージと受信メッセージが同じエンドポイントで返されるようになりました。
- 最大30日分のメッセージが返されます。
- カーソルベースのページネーションに対応しました。
- Webhook を通じてダイレクトメッセージにリアルタイムでアクセスできます。
ダイレクトメッセージの削除
DELETE direct_messages/events/destroy を使用して削除できるようになりました。インターフェースはほぼ同じで、削除するメッセージの ID が必要です。主な違いは、このエンドポイントでは POST リクエストではなく DELETE リクエストが必要になった点です。
削除されたダイレクトメッセージが公式 X クライアントにどのように反映されるかは、従来どおりです。ダイレクトメッセージは、指定されたユーザーコンテキストのユーザーのインターフェースからのみ削除されます。会話の他の参加者は、そのダイレクトメッセージに引き続きアクセスできます。
概要
- ダイレクトメッセージを削除するには ID が必要です。
- 新しいエンドポイントでは DELETE リクエストが必要です。
- 削除されたダイレクトメッセージが公式 X クライアントにどのように反映されるかは、これまでと変わりません。
**質問は開発者コミュニティフォーラム (devcommunity.com) に投稿してください。
よくある質問
一般
- 速度: X のスピードでデータを配信します。
- シンプルさ: アカウントのすべてのイベントを、単一の webhook 接続を通じて配信します。API で配信されるアクティビティには、投稿、@メンション、返信、Retweet、Quote Tweet、Quote Tweet の Retweet、いいね、送信された Direct Message、受信した Direct Message、フォロー、ブロック、ミュートが含まれます。
- スケール: レート制限やイベント数の上限に縛られることなく、管理対象アカウントのすべてのアクティビティを受信できます。
- これから始める場合は、Getting started with webhooks ガイドを参照することをおすすめします
-
X Dev 提供のスクリプトもあわせてご利用ください:
- Account Activity API dashboard: webhook イベントを表示する Node.js のウェブアプリケーションです。
- SnowBot chatbot: Account Activity API および Direct Message API 上に構築された Ruby のウェブアプリケーションです。このコードベースには、Account Activity API の webhook セットアップを支援するスクリプトが含まれています。
- サーバーが CRC に対して誤ったトークンで応答した場合。この場合、弊社システムはアクティビティを送信するための再試行を行いません。
- webhook URL に誤った証明書が設定されている場合。この場合も、弊社システムはアクティビティを送信するための再試行を行いません。
- サーバーが 2XX、4XXX、5XXX 以外のレスポンスコードを返した場合。
- gzip を使用すると指定しているにもかかわらず、実際には gzip を使用して送信していない場合。
- gzip の使用を指定していないにもかかわらず、実際には gzip を使用してレスポンスを送信している場合。
/all/ 部分を他のアカウントアクティビティのデータオブジェクトに置き換えて、API が配信するアクティビティを制限することはできますか?POST https://api.x.com/1.1/account_activity/all/:env_name/subscriptions.json
いいえ、これはできません。現時点では、利用可能なプロダクトは /all/ のみです。
ユーザーから Direct Messages の権限を要求せずに Account Activity API を使用する方法はありますか?
現時点では、この API では Direct Messages アクティビティだけを「フィルタリングして除外する」方法がないため、Direct Messages の権限が必須となります。
Account Activity API のサンドボックス版はありますか?
はい、テスト用のサンドボックスオプションを提供しています。サンドボックスオプションでは、webhook は 1 つに制限され、サブスクリプションの最大数は 15 件までとなります。サンドボックスオプションの詳細については、ドキュメント を参照してください。
購読しているユーザーに言及しているポストに対する Retweets を、Account Activity API で取得することはできますか?
残念ながら、これはこの API で配信されるアクティビティには含まれていません。この用途には、代わりに Streaming API の利用をお勧めします。
tweet_create_event で表される可能性のあるアクティビティタイプにはどのようなものがありますか?
tweet_create_event のペイロードは、次の場合に送信されます。
サブスクリプション対象ユーザーが次のいずれかの操作を行った場合:
- ポストを作成したとき
- Retweet したとき
- ポストに返信したとき
- サブスクリプションユーザーを @mentions* したとき
- サブスクリプションユーザーが作成したツイートを引用したとき
user_has_blocked が “true” または “false” のいずれかに設定されているのが確認できます。このフィールドは、ポストへの言及に対してのみ公開されます。
エンタープライズ
自分の App を allowlist に追加する、または既に allowlist に追加されているか確認するにはどうすればよいですか?
Enterprise API へのアクセス用に許可リスト (allowlist) に追加した X apps を管理するには、App の id (app ID) を添えてアカウントマネージャーまでご連絡ください。app ID は、開発者コンソール の “Apps” ページに移動すると確認できます。
3 つの webhook へのアクセス権がある場合、エンタープライズ利用として登録した各 App ごとに 3 つずつ webhook を使用できますか?
webhook の上限は App 単位ではなくアカウント単位で設定されています。3 つの webhook へのアクセス権があり、エンタープライズ利用として 2 つの App を登録している場合、1 つの App に 2 つ、もう一方の App に 1 つという形で利用できますが、各 App で 3 つずつ利用することはできません。
Account Activity Replay API で再配信されるイベントの種類を指定できますか?
リプレイするイベントの種類を指定することはできません。指定した日時の範囲内で配信されたすべてのイベントが再配信されます。
アプリケーションが Account Activity Replay API のイベントの取り込みに失敗した場合、再試行は行われますか?
いいえ、再試行は行われません。アプリケーションが Account Activity Replay API から送信されたイベントの取り込みに失敗した場合は、同じ期間を対象とする別の Replay ジョブを送信して、取り逃した Replay イベントの再配信を試みることができます。
部分的成功 (partial success) の完了イベントを受け取った場合、どうすればよいですか?
受信できたイベントのタイムスタンプを控え、受信できなかったイベントに対して別の Replay ジョブをリクエストすることをお勧めします。
同時に実行できる Account Activity Replay API ジョブはいくつまでですか?
1 つの webhook につき同時に実行できる Account Activity Replay API ジョブは 1 件のみです。
Webhook に配信されるイベントについて、Account Activity Replay API のイベントとリアルタイムの本番イベントをどのように区別できますか?
Account Activity Replay API は常に過去のイベントを配信するため、イベントのタイムスタンプに基づいてリアルタイムの本番イベントと区別できます。
アプリケーションがドロップまたは取り逃したアクティビティを再配信するために、どのくらい早く Account Activity Replay API を利用し始めることができますか?
アクティビティは、作成から約 10 分後に再配信が可能になります。
エラーのトラブルシューティングガイド
Code 32
- Enterprise - 使用しているコンシューマーキーとアクセストークンが、Enterprise 製品の利用のために登録されている X app に属していることを確認してください。コンシューマーキーやアクセストークンをお持ちでない場合、または X app を allowlist (許可リスト) に追加する必要がある場合は、アカウントマネージャーまでお問い合わせください。
-
ユーザーコンテキストで認証している場合は、
oauth_nonce、oauth_signature、oauth_timestampを含めて、リクエストを正しく認可 していることを確認してください。 -
アクセストークンに適切な権限レベルが付与されていることを確認してください。
- app dashboard の「Keys and tokens」タブで、アクセストークンの権限レベルが「Read, write, and direct messages」になっていることを確認してください。
- トークンの権限レベルがこれより低く設定されている場合は、「Permissions」タブに移動し、アクセス権限を「Read, write, and direct messages」に変更してから、「Keys and tokens」タブでアクセストークンとシークレットを再生成してください。
-
URL が正しい形式で構成されていることを確認してください。
:env_nameは大文字と小文字を区別する点に注意してください。
Code 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 セクションを参照してください。
Code 214 - CRC GET リクエストでレイテンシーが高い状態です。Webhook は 3 秒以内に応答する必要があります。
- これは、サーバーの処理が遅いことを意味します。CRC に 3 秒以内に応答していることを確認してください。
コード 214 - CRC GET リクエスト中の 200 以外のレスポンスコード (例: 404、500 など)
- サーバーがダウンしている可能性があります。サーバーが正常に稼働していることを確認してください。
コード 214 - 作成済みリソースが多すぎます。
- Enterprise - すでに利用可能な webhook をすべて使い切っています。登録済みの各 App について GET webhooks エンドポイントを使用し、webhook がどこに割り当てられているかを特定してください。
Code 261 - アプリケーションは書き込み操作を実行できません。
- 使用している API 用の App のアクセス トークンおよびアクセス トークンシークレットに、適切な権限レベルが設定されていません。X apps ダッシュボードの「Keys and tokens」タブに移動し、アクセス トークンおよびアクセス トークンシークレットに割り当てられている権限レベルを確認してください。これが ‘Read, write and Direct Messages’ 以外に設定されている場合は、「Permission」タブで設定を変更し、新しい設定を反映させるためにアクセス トークンおよびアクセス トークンシークレットを再生成する必要があります。
- 別の可能性として、サポートされていない app-only 認証を使用して webhook を登録しようとしている場合があります。その場合は、Enterprise Account Activity API の webhook 登録に関する APIリファレンスのセクションに記載されているとおり、代わりにユーザーコンテキストで認証してください。
Account Activity API リファレンスインデックス
エンタープライズアカウントアクティビティAPI
https://api.x.com/1.1/account_activity/webhooks.json
パラメータ
リクエスト例
$ curl —request POST —url ‘https://api.x.com/1.1/account_activity/webhooks.json?url=https%3A%2F%2Fyour_domain.com%2Fwebhooks%2Ftwitter%2F0' —header ‘authorization: OAuth oauth_consumer_key=“CONSUMER_KEY”, oauth_nonce=“GENERATED”, oauth_signature=“GENERATED”, oauth_signature_method=“HMAC-SHA1”, oauth_timestamp=“GENERATED”, oauth_token=“ACCESS_TOKEN”, oauth_version=“1.0“‘レスポンス例 - 成功時
HTTP 403
リソースURL
https://api.x.com/1.1/account_activity/webhooks.json
リクエスト例
指定した webhook の URL に対してチャレンジレスポンスチェック (challenge response check、CRC) をトリガーします。チェックが成功した場合、204 を返し、その webhook のステータスを
valid に設定して再度有効化します。
https://api.x.com/1.1/account_activity/webhooks/:webhook_id.json
パラメータ
リクエストの例
指定したユーザーコンテキストについて、すべてのメッセージ種別に関するすべてのイベントを、指定したアプリケーションに配信するよう登録します。有効化後は、リクエストしたユーザーに関するすべてのイベントが、POST リクエストを通じてアプリケーションの webhook に送信されます。
サブスクリプション数は現在、ご利用のアカウント設定に基づき制限されています。さらにサブスクリプションを追加する必要がある場合は、担当のアカウントマネージャーまでお問い合わせください。
リソースURL
https://api.x.com/1.1/account_activity/webhooks/:webhook_id/subscriptions/all.json
パラメータ
レスポンス例 - 成功時
HTTP 204 NO CONTENT
あなたのアカウントで現在アクティブなサブスクリプション数を返します。
/count エンドポイントにはアプリケーション専用の OAuth 認証が必要なため、ユーザーコンテキストではなくベアラートークンを使用してリクエストを行う必要があります。
https://api.x.com/1.1/account_activity/subscriptions/count.json
HTTP レスポンスコード
リクエスト例
成功時のレスポンス例
HTTP 200エラーメッセージ
HTTP 401
リソースURL
https://api.x.com/1.1/account_activity/webhooks/:webhook_id/subscriptions/all.json
リクエスト例
$ 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 CONTENThttps://api.x.com/1.1/account_activity/webhooks/:webhook_id/subscriptions/all/list.json
リソース情報
リクエスト例
$ curl —request GET —url https://api.x.com/1.1/account_activity/webhooks/:WEBHOOK_ID/subscriptions/all/list.json —header ‘authorization: Bearer TOKEN’レスポンス例 - 成功時
HTTP 200
HTTP 401
https://api.x.com/1.1/account_activity/webhooks/:webhook_id.json
パラメータ
リクエスト例
https://api.x.com/1.1/account_activity/webhooks/:webhook_id/subscriptions/all.json
パラメータ
リクエスト例
https://api.x.com/1.1/account_activity/webhooks/:webhook_id/subscriptions/:user_id/all.json