このエンドポイントは、ポスト編集メタデータを含むように更新されました。これらのメタデータの詳細については、“ポストを編集” の基礎ページをご覧ください。 このエンドポイントは、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 を使用してください。
Account Activity API を手早くキャッチアップするには、全4回の動画シリーズをご覧ください。
-
ご不明な点がありますか? エラーが発生していますか?
- FAQ (よくある質問) または エラーのトラブルシューティングガイド を参照してください。
-
サンプルコードを試してみてください:
- Enterprise Account Activity API ダッシュボード:Enterprise ティアの Account Activity API を使用して webhook イベントを表示し、リプレイ 機能も備えた Node 製の Web アプリです。
- SnowBot chatbot:Enterprise Account Activity API と Direct Message API の上に構築された Ruby 製の Web アプリです。
- 登録済みの X App - こちらから登録
- ベアラートークン - 詳しくはこちら
- Challenge-Response Check (CRC) に合格する webhook - 詳しくはこちら
- Enterprise アカウント - こちらから申請
- 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 とサブスクリプションの管理
- 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 アプリです。
- 開発者コンソール で承認済みの開発者アカウントを使用して 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 が必要になります。
-
イベントを受信するための 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 リクエストを送信します。詳細は、サブスクリプションの追加に関するガイド を参照してください。
- 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 が含まれています。
- 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 へのイベント送信は停止します。
- 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 レスポンスコード
- こちら は、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 のようなメソッドを使用してください。
- 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 の設定を変更できないのはなぜですか? X はセキュリティを非常に重視しています。Webhook URL が変更されたということは、あなたのアプリケーションの consumer key と consumer secret が漏えいした可能性があることを意味します。新しい Webhook 設定の作成を必須にすることで、ユーザーのイベントへの購読を改めて行ってもらう必要が生じます。これには、悪意のある第三者が所持している可能性が比較的低い access token の使用が必要になります。その結果、第三者があなたのユーザーの非公開情報を受け取ってしまう可能性を低減できます。
エンタープライズプランでは、数千件規模のサブスクリプションをサポートしています。すでにアカウントマネージャーがいる場合は、ご質問があれば担当のアカウントマネージャーまでお問い合わせください。エンタープライズ API へのアクセスを申請するには、こちらをクリックしてください。
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 イベント再試行サービスにより、ネットワーク障害が発生した場合や、クライアント側のサービス中断やデプロイ時にも、信頼性の向上とイベントの復旧に役立ちます。
Account Activity API には、クライアントの Web アプリがアカウントアクティビティの webhook イベントに対して「成功」を示す 200 レスポンスを返さない場合に、リトライを行う機能があります。クライアント側がイベントを正常に受信したことを確認しない場合、X はそのイベントが受信されなかったものとみなします。非 200 レスポンスを受信した場合、3 秒以内にレスポンスが受信できない場合、またはまったくレスポンスを受信しない場合、リクエストを再送し、そのリクエストを 3 秒間オープンな状態にして待機します。これは、X があなたの webhook URL に送信しようとしているアクティビティに対して応答するために、2 回の試行で合計およそ 5 秒の猶予があることを意味します。サーバーが応答しない、または一時的なエラーを返す場合、5 分間にわたってリトライを継続します。検証を確認するためのリトライ試行は合計 3 回行われます。これにより冗長性と安全策が確保され、すべての webhook イベントを確実に受信できるようになります。リトライが発生しているサブスクリプションでは、購読しているすべてのユーザーに対する任意/すべてのアクティビティについて、リトライされたイベントを受け取ることになります。
これら 8 回の試行のいずれにおいても検証を確認できなかった場合、そのアクティビティは Account Activity API 経由では利用できなくなります。
Account Activity API は、200 レスポンスが受信されるまで、最大 5 分間のあいだに最大 3 回までリトライを行います。詳しくは以下の表を参照してください。約 5 分を過ぎると、そのアクティビティは Account Activity API を通じて再送できません。取り逃したデータを収集するには、他の X のエンドポイントを使用する必要があります。たとえば、search APIs を使用して、該当する投稿、リツイート、引用ツイート、メンション、返信を取得できます。取り逃したダイレクトメッセージは、このエンドポイントで取得できます。
利用可能なアクティビティ
ペイロード例
上記の表で説明した各アカウントアクティビティイベントについて、以下のペイロード例を参照してください。
Enterprise
Account Activity Replay API は、最大 5 日前までのイベントを取得できるデータリカバリツールです。webhook サーバーがイベントの受信に失敗した状況、たとえば retry window を超える切断が発生した場合や、システムを通常どおりの状態に復旧するまでに数日を要するディザスタリカバリのシナリオにおいて、データを復旧する目的で使用します。
Account Activity Replay API は、ある期間にわたって activities の取り込みに失敗したあらゆるシナリオを想定して開発されました。アクティビティは、元のリアルタイム配信で使用されていたものと同じ webhook に配信されます。本プロダクトはリカバリツールでありバックフィルツールではないため、過去に配信が試行されたイベントのみがリプレイされます。Account Activity Replay API は、サブスクリプションが作成された時刻より前の期間のイベントを配信することはできません。
アカウントで Replay 機能が有効になっている場合、Account Activity API へのリクエストとほぼ同様の方法でリクエストを送信できます。重要な点として、どの webhook のアクティビティをリプレイしたいかを示すために、リクエストで webhook id パラメーターを指定する必要があります。言い換えると、Replay リクエストは、webhook id と application id に基づいて、開始日時から終了日時までのイベントを取得するよう Account Activity Replay API に要求するものです。
UTC 時刻で指定する必要がある点に注意してください。これらのアクティビティは、その id に関連付けられた登録済み webhook を通じて、1 秒あたり最大 2,500 件のイベントの速度で配信されます。また、1 つの webhook につき同時に実行できる Replay ジョブは 1 つだけですが、その webhook で指定された日時の期間中にアクティブだったすべてのサブスクリプションがリプレイされることも覚えておいてください。
イベントは、指定した期間の最初 (最も古い) 1 分間から配信が開始され、その後は最終分が配信されるまで、 (可能な限り) 時系列順に続きます。その時点で、Replay は ジョブ完了イベント を webhook に配信します。アクティビティは時系列順に配信されるため、開始時刻付近に一致する結果がほとんどない、またはまったくない場合、最初の結果が配信されるまでに時間が空く可能性があります。
Replay は、最大で 5 日前までのアクティビティを簡単に取得するためのツールとして設計されていますが、サブスクリプションが作成された時刻より前のイベントは配信されません。たとえば、3 日前に新しいサブスクリプションを追加し、本日から過去 5 日間を対象とする Replay ジョブを実行した場合、受信できるのはこの新しいサブスクリプションが有効だった 3 日間分のデータのみです。
Account Activity Replay API からのアクティビティは、リクエストの開始から 5 日間利用可能で、各アクティビティが作成されてからおよそ 10 分後に新しいデータが利用可能になります。from_date パラメータと to_date パラメータを使用して、この 5 日間の範囲内の任意の期間を指定してリクエストを行うことができます。Replay へのアクセス権を得る前に元々配信されていたイベントは、Replay を使ってリプレイすることはできません。たとえば、お使いのアカウントが 2019 年 6 月 1 日 3:30PM UTC に Account Activity Replay API へのアクセスが有効化された場合、その日時より前のイベントを Replay を使って取得することはできません。
Account Activity Replay APIリファレンスを参照してください。
Site Streams、User Streams、および Account Activity API - DM Only の標準ベータ版プロダクトは 2018 年に提供終了しました。これらのプロダクトを利用していた場合は、必ず Account Activity API のプレミアム版またはエンタープライズ版へ移行してください。
レガシーの Direct Message エンドポイントも提供終了しました。これらのエンドポイントを利用していた場合は、新しい DM エンドポイント、または Account Activity 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 にデプロイされています。
- 必要な 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 Dashboard サンプルアプリケーションを こちら からダウンロードします (Node.js を使用します)
- README の手順に従ってアプリをインストールし、起動します
- アプリケーションを起動したら、UI から webhook を簡単に設定し、新しいサブスクリプションを作成できます
2018 年 9 月 17 日に従来のダイレクトメッセージ用エンドポイントを廃止しました。
これらのエンドポイントを利用していた場合は、新しいダイレクトメッセージ用エンドポイントまたは Account Activity API へ必ず移行してください。
詳しくは、このお知らせをご確認ください。
このガイドは、従来のダイレクトメッセージ REST API から、ベータ版を卒業した強化版 API へ移行する際の支援を目的としています。以下では、変更点の概要、新機能の一覧、移行に役立つ主な相違点と考慮事項を説明します。新しいダイレクトメッセージ用エンドポイントは、すべての開発者にご利用いただけます。User Streams または Site Streams からの移行については、Account Activity API への移行ガイドを参照してください。
変更概要
以下のDMエンドポイントをまだ使用している場合は、新しいエンドポイントへ移行する必要があります。
新しい Direct Message API エンドポイントは、さまざまな新機能に対応し、既存のダイレクトメッセージへのアクセスを改善します。新機能には次のようなものがあります。
- メディア (画像、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) に投稿してください。 Account Activity API を利用する利点は何ですか? Account Activity API は webhook を使用します。つまり、ストリーミング API と異なり、こちらから情報を送信するためにオープンな接続を維持しておく必要がありません。Webhook は REST API とも異なり、必要なデータを取得するために 15 分ごとに何百回もポーリングする必要もありません。イベント発生と同時にデータを配信できるため、ユーザーとアプリケーション間のやり取りをより効率的に行えます。 Account Activity API には、次のような多くの利点があります。
- 速度: 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 分後に再配信が可能になります。
このエラーは一般的に、指定しているリクエスト、ヘッダー、認可、または URL のいずれかの形式が不正であることを意味します。これは Account Activity API 固有のエラーではなく、認可エラーであり、X が適切な OAuth 設定や URL を受け取れていない状態です。
- 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は大文字と小文字を区別する点に注意してください。
- Premium - API にリクエストを送信する前に、承認済みの開発者アカウントを持っていることを確認してください。また、リクエスト内で適切な :env_name を使用する必要があります。これは dev environments ページで設定できます。
- Enterprise - アカウントマネージャーが、Account Activity API へのアクセス権を付与していることを確認してください。
- URI を正しく設定していることを確認してください。リクエストで誤った URI を指定している場合、このエラーが発生する可能性があります。
- HTTPS を使用していることを確認してください。
- webhook URL が正しい形式になっているか確認してください。
- webhook URL の設定方法については、Getting started with webhooks ページの Develop webhook consumer app セクションを参照してください。
- これは、サーバーの処理が遅いことを意味します。CRC に 3 秒以内に応答していることを確認してください。
- サーバーがダウンしている可能性があります。サーバーが正常に稼働していることを確認してください。
- Enterprise - すでに利用可能な webhook をすべて使い切っています。登録済みの各 App について GET webhooks エンドポイントを使用し、webhook がどこに割り当てられているかを特定してください。
- 使用している API 用の App のアクセス トークンおよびアクセス トークンシークレットに、適切な権限レベルが設定されていません。X apps ダッシュボードの「Keys and tokens」タブに移動し、アクセス トークンおよびアクセス トークンシークレットに割り当てられている権限レベルを確認してください。これが ‘Read, write and Direct Messages’ 以外に設定されている場合は、「Permission」タブで設定を変更し、新しい設定を反映させるためにアクセス トークンおよびアクセス トークンシークレットを再生成する必要があります。
- 別の可能性として、サポートされていない app-only 認証を使用して webhook を登録しようとしている場合があります。その場合は、Enterprise Account Activity API の webhook 登録に関する APIリファレンスのセクションに記載されているとおり、代わりにユーザーコンテキストで認証してください。
指定されたアプリケーションコンテキストに対して、新しい webhook URL を登録します。保存前に、URL は CRC リクエストによって検証されます。検証に失敗した場合は、リクエスト送信者に詳細なエラーメッセージを返します。
許可される webhook の数は、課金パッケージによって決まります。
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
リクエスト例
POST /1.1/account_activity/replay/webhooks/:webhook_id/subscriptions/all.json ¶
リクエストで指定された日時のウィンドウ内に存在していたすべてのサブスクリプションについて、過去最大5日分のアクティビティを取得するリクエストを送信します。Webhook にアクティブなユーザーサブスクリプションがある場合、それらのイベントも同時に受信します。注記: Replay イベントを配信する前に CRC を実行します。
API からは次のレスポンスが返される可能性があります。ほとんどのエラーコードでは、ボディに追加の詳細を含む文字列が返されます。200 以外のステータスコードのレスポンスの場合は、エラーを解消してから再試行してください。
ジョブが正常に完了すると、Account Activity Replay API は次のジョブ完了イベントを送信します。このイベントを受信した時点で、そのジョブの実行は終了しており、新たに別のジョブを送信できます。