RORO

ふつうの日記(移転したい)

Facebook PageとInstagramへの反応をAPIでリアルタイムにウォッチする

(追記:その後、App作成時に “Facebook Business Integrations” という種別を選択できるようになったらしく、身内でしか使わないアプリに関しては以下のような審査は不要かもしれません。)


チームで管理するFacebookページやInstagramアカウントへの反応(例えばコメント)をリアルタイムに取得したいというニーズは多いと思う。これはFacebookが提供するWebhooksを使えば簡単に実現できる。ただしWebhooksの利用自体は簡単だが、その利用審査は多少面倒くさい。

Facebookの多くのAPIは、自分が管理するオブジェクトに対する操作であれば「開発モード」(つまり審査なし)でも使える。しかしここで扱う Webhooks (for Facebook Pages / Messenger / Instagram) に関しては、「ライブモード(本番モード)」でなければ動作しない。つまり、たとえ自分が管理しているページでの利用であっても、必要なパーミッションを申請して審査を受ける必要がある。

主要なWebhooksとしては以下がある:

  • Webhooks for Pages — Facebookページ上での各種アクティビティをリアルタイムに知れる。
  • Messenger Platform - Webhook — Facebookページの受信箱のアクティビティをリアルタイムに知れる。
  • Webhooks for Instagram — Instagramアカウント (Business/Creatorのみ) へのコメントやストーリーズ終了時のInsightsをリアリタイムに得られる。

それぞれに必要なパーミッションとその審査について簡単にまとめておく。

Webhooks for Pages

Page関係のWebhookを使うには、該当するオブジェクトを扱うパーミッションを取得して、なおかつライブモードで動作させる必要がある。それまでは開発者用のAppダッシュボードから送れるテストメッセージしか受信できない。

例えばページの投稿に付いたコメントをWebhookで知りたい場合は pages_read_user_content パーミッションが必要になる。(ちなみに以前は manage_pagespublish_pages という2種類のパーミッションしか存在しなかったが、API v7.0から細分化されたようだ)。

Facebookログインを一切使わないアプリを申請するときは、アプリが “Server-to-server App” であることをレビュアーに伝える必要がある。とくにWebhookだけを使うアプリはレビュアーに趣旨をうまく理解してもらえないことがある。申請がどうしても却下される場合は、Webhookの利用ではなく、サーバからPages API呼び出しを行う様子をスクリーンキャストとして撮影して申請するといいかもしれない。

Messenger PlatformのWebhook

Messenger Platformを使うには page_messaging パーミッションが必要になる。このパーミッションがない場合は、開発モード/ライブモードを問わず、管理者によるアクションに対してしかWebhookが送信されない。

page_messaging パーミッションの申請は簡単で、簡単なスクリーンキャストを撮影して送るだけでいい。Messenger PlatformはWebhookの利用が前提なので、レビュアーにWebhookの話が通じないという難しさもない。

審査の過程でテストメッセージが送られてくるので、それをちゃんと受信しておき、2日以内にSend APIを使って適当な返事をする必要がある。

Webhooks for Instagram

InstagramのWebhooksは、自分のInstagram Business/Creatorアカウントでの利用であれば審査なしでも使えるようだ(そういう仕様なのか、それともたまたま使えているだけなのかは分からない)。

これは次のようにする:

  • Facebookページと対象のInstagramアカウントをリンクする
  • Facebook Appの開発者をページの管理者にする
  • Facebook App内にInstagramのAppを作る
  • InstagramのWebhooks用エンドポイントを設定する
  • 対象のInstagram Business/Creator アカウントを、アプリのテスターとして追加する

これでWebhookが飛んでくるようになる。