Account Activity API はコールするときの認証は User (OAuth) だったり App (Bearer) だったり色々なので、ドキュメントページは読むこと。
Account Activity API Overview — Twitter Developers
https://developer.twitter.com/en/docs/accounts-and-users/subscribe-account-activity/overview.html
エンドポイントの :env_name は env-beta となる。 (後々変わるかもね)
App Auth のための Bearer Token を得ておく。
POST
https://api.twitter.com/oauth2/token
webhook URL を登録する。 (同じ URL を登録しようとするとエラーが返る)
POST
https://api.twitter.com/1.1/account_activity/all/env-beta/webhooks.json
コールバック先に crc_token が送られてくるので、これと consumer secret key とで署名を作る。
Perl なら
hmac_sha256_base64(CRC_TOKEN, TWITTER_CONSUMER_SECRET);
で OK。
あとはレスポンスとして
{"response_token":"sha256=SIGNATURE"}
のように JSON で返す。
成功すると
{"id":"1","url":"URL","valid":true,"created_timestamp":"2018-04-19 11:13:00 +0000"}
というレスポンスが返ってくる。
url は env-beta/webhooks.json に POST したときの url パラメータと同じ。
id は webhook の id となるので、保存しておく。
ちなみに生存チェックなどで crc_token が送られてくるので、署名を返すコードは残しておくこと。
コールバックの登録が終わったらユーザーを登録。
POST
https://api.twitter.com/1.1/account_activity/all/env-beta/subscriptions.json
成功すればそのユーザーに関わるイベントが Callback URL へ POSTDATA パラメータに URL エンコードされた JSON が届くようになる。
各イベントの JSON の構造は下記 URL で確認。
Account Activity Data Objects - Twitter Developers
https://developer.twitter.com/en/docs/accounts-and-users/subscribe-account-activity/guides/account-activity-data-objects
コールバックに届いた JSON の for_user_id がイベントを受け取ったユーザー。 たぶん。
AA API を使ってみて
API 自体はそんなに変化球ってほどでも無いかな。
Hook の登録数とか Hook に登録した URL に対して登録できるユーザー数とかから考えるに、不特定多数向けのサービスを行う API ではなく、個人が自分自身へのアクションを記録するためとか、企業がキャンペーンを行うとき (例えば RT した瞬間に抽選が行われるとか) に使うような感じですかね。
WEB Push と組み合わせればアプリ作らなくても公式アプリっぽいことは出来そうだし、個人で設置運営するなら色々幅広いことは出来そう。
バズった場合無課金だと再送信は無いので取りこぼしは多そう。少し手も取りこぼしに対応しようとするなら node.js、Perl、Ruby、Python でもなんでもいいので、スクリプトでサーバー立ち上げればなんとかなりそうかも?
企業で使って取りこぼしが許されないのなら、課金することで再送信をしてくれるようになる。