27
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

慣れるより愛せ!!Facebook Messenger APIでメッセージが送信できないときの対処まとめ

Last updated at Posted at 2018-05-21

これはなに?

ヤーマン。
私はZEALSという会社でMessenger APIを使ってアプリケーションを開発しているのですが、Facebook Messenger APIで、ユーザーに対してメッセージを送信できないときが度々あります。
facebookサーバーへリクエストしているJSONの形式が違う〜とかはまぁもちろんデバッグすれば直せますが、ユーザーによって送信できたりできなかったりすることもしばしばあるので、そこらへんのエラー内容の整理とかをしていきます。
ちょくちょくデバッグのコツというか流れのTips?も僭越ながら盛り込んでみました。
そもそも、Messenger APIでエラーメッセージについてまとまっていますが、なかなか分かりにくく無いですか??(私だけ?)

Messenger APIは物凄い早さでアップデートが繰り返されています。
エラーメッセージが変わることもあるので予めご了承ください。

対象者: Facebook Messenger APIを使用してサービスを提供している人

どんなときにメッセージが送信できないの?

前提

まずは最低限、request bodyとresponse bodyを表示させて、messageの形式が合っているかどうかを確認してください。
ここではmessageの形式が合っている上で送信できないケースを中心に紹介し、デバッグ方法やアプリケーション上での対処内容等を書いていきたいと思います。

難易度★☆☆☆☆: ユーザーがブロックしている場合

{"error":{"message":"(#200) This person isn't available right now.","type":"OAuthException","code":200,"error_subcode":1545041,"fbtrace_id":"hogehoge"}}

ユーザーがスレッドをブロックしていると、こんなresponse bodyが返ってくることがあります。
このときのstatus codeは403です。
ちなみにユーザーがブロックしているかどうかは、Facebook Pageの受信箱からユーザーへメッセージを送信しようとすると、

Screenshot from Gyazo
こんな感じになっていることからもユーザーがブロックしていることは判断できます。
このメッセージが出ていたらメッセージ送信はもう諦めましょう。誰も悪くない。

難易度★★☆☆☆: appで申請している権限が足りていない

続いてはこちらのresponse。

'{"error":{"message":"(#230) Requires pages_messaging permission to manage the object","type":"OAuthException","code":230,"fbtrace_id":"hogehoge"}}'

これも403が返ってきます。少しテンパるかもしれませんが、無問題(もーまんたい)。
appのreviewでmessage_subscriptionが追加されていないだけです。
トークンデバッガというものを使うとすぐに対処ができます。
スクリーンショット 2018-05-21 17.40.02.png

ここにpages_messaging_subscriptionsというscopeが無いのが原因です。
appのreviewを申請し、page tokenを発行し直してください。

難易度★★★☆☆: access tokenが無効になっている

次はこのレスポンス。

{“error”:{“message”:“Error validating access token: The session has been invalidated because the user changed their password or Facebook has changed the session for security reasons.“,”type”:“OAuthException”,“code”:190,“error_subcode”:460,“fbtrace_id”:“hogehoge”}}

幸い、前述のトークンデバッガを使用すれば何かしらエラーメッセージが出力されることがほとんどです。

これもトークンを発行し直すしかありません。
トークンを発行し直すのにはGraph API Explorerから行うと良いでしょう。

難易度★★★★☆: response bodyがなくてparseできない!?

続いてはこちらのresponseを御覧ください。

''

そう、status_code: 500 です。
これマジで時々返ってきますからね。。
こうなったら時間を置いて再度試すしかありません。
事実、プロダクション環境ではmessenger apiを叩く箇所でretry処理を実行するようにしています。

難易度★★★★★: facebookページが凍結されている

(#2022) An error occurred while processing this request. Please try again later

こんなエラーが発生することがありました。
page tokenもユーザーのstatusも全く問題がなくて絶望します。

これ、ユーザーからのブロックが多いとユーザーに対してメッセージを送信できなくなるんだとか。
ある種の凍結ですね。facebookのサポートに問い合わせ、スパムアカウントではないことを報告して凍結解除して貰う必要があります。
凍結解除リクエストを送っても承認が降りないケースもあります。
そのときは凍結ページの高評価レビューを集めてから再度解除リクエストを送信すると承認が降ります。

難易度∞: Facebookの不具合でエラーメッセージ関係なしにエラーが出る

上記のエラー、全てが唐突に出ることがあります。
message_subscription 権限があったとしてもmessage_subscription 権限がない、というエラーが起きることもあります。
そんなときは素直にFacebook Bug ReportsへLet's Goです。

ちなみに、ブロックも何もしていないユーザーへメッセージを送信しようとした際に難易度★☆☆☆☆のユーザー受信拒否エラーが出ることもありました。こうなるともう意味がわかりません。
そのときの実際のBug Reportはこちら

まとめ

デバッグをするときは、responseのbodyを見て対処していくことが多いです。
その際はToken Debuggerは必須ですね。

Bugのサポートは大体1日以内にレスを返してくれるので、本国のMessenger Developerも頑張っているということを忘れてはなりません。
Facebook Messenger APIに苛立ちを覚えるのではなく、愛を持って接していくことが大切なのかもしれませんね()

27
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?