LINEに続いて、FacebookでもBot作りたいなーと思って調べていたら、ヤマレコがAPIを提供していたので、利用して作成。
Facebookの審査に手間取ってなんだかんだ作ってから1か月くらいかかってしまった。
#概要
山の情報を調べて返すBot
https://www.facebook.com/letsgoclimbing/
Facebookページからアクセス。
ページは、Bot用に作成。
・フリーワード検索。
・ヤマレコに登録されたエリア・ジャンルから検索。
・地名データの地点情報から、近隣情報検索。
Facebook Messenger Platform
Botを実現するためのPlatform。
FacebookページへのメッセージをWebhookして、
送信者に規定形式のメッセージをSendできる。
#ヤマレコAPI
ヤマレコ Web API
https://sites.google.com/site/apiforyamareco/
※2014年8月19日より、一部のAPIでOAuth認証が不要になり、より簡単に使えるようになりました!
と有り、認証不要でAPIを利用可能に。
地名データ等を取得できる。エリア内検索や、地点情報の近隣検索も。
#構成
Facebookアプリの管理画面から、テストアプリを作成できたので、
テストアプリに開発環境を紐づけ、本番環境と開発環境を分けてみた。
本番環境
Heroku(PHP Framework)
※FacebookからのHTTPSリクエストが利用可能
下記の方を参考に。(forkさせて貰った)
Heroku初めて使った。
これからPHPでFacebook Messenger Botづくりを始める人向けの簡易スターターキット
http://qiita.com/tmtysk/items/4ebb25ed927b7dd96399
github からデプロイ。
Configは、Facebook認証情報周り。
SettingsのConfig Variablesから設定。ローカルコンフィグを上書き。
composer で setupスクリプトを定義、デプロイ時に実行。
開発環境
AWS Cloudfront + 個人サーバ
※HTTPSオフロードしたい為
上記githubをcloneして配置。
Configは、ローカルファイル(config.json)をsetup。
テストOKなら、github に push。
共通
PHP。
Sympony、Silex、Monolog、GuzzleHttpも、fork元の構成を流用して。これらも全部初めて。
ログは、どちらもMonologで出力。
#Bot作成の流れ
Facebookページ作成、アプリ作成、WebHooks登録、ページトークン生成、Subscribe設定等は、
以下等のページを参考にしながら。
Messengerで簡単なBotつくる(Facebook Messenger Platform from F8)
http://qiita.com/pochi-sato/items/f3f5598e36c1fa92d840
#Facebookアプリ審査
時間かかったのが、審査。
アプリに対して pages_messaging というアイテムが割り当てられていないので、
アプリ画面で登録した人と作成したテストユーザ以外にメッセージを送信できない。
WebHookまではできる。
審査はテストユーザで、という事になっている(※それ以外も可?)が、
アイテムが無いと、テストユーザにも、メッセージを送信できない。
#アプリ配下のテストユーザには送れてよいと思うんだけど、駄目なんだろうか。。
という事で、
・テストユーザでページを生成
・ページアクセストークンを取得
#更に、有効期限が短いので審査時間を考慮すると、伸ばすことが必要
・Botで利用するトークンを、一時的に上記トークンへ置き換え。
・ページ情報と共に、テストユーザで申請
#審査ページでは、正式ページしか選択できないので
といった手順で審査した。
参考にしたのは、以下のページ。
Latest Response from Facebook
https://developers.facebook.com/bugs/230322797329131/?hc_location=ufi
pages_messaging の審査は通ったが、この手順で本当に良いんだろうか。
また、Facebookアプリ的には一般的な方法なんだろうか。
テストユーザを指定するんだけど、
ID、パスワード等、全ての情報を教えてくださいとrejectされて、
でも入力欄が無いから、フリーテキストが利用できる、APIの利用手順の所に、
ID、パスワード、e-mail、テストページ等の情報を纏めて書いて送ったら通った。
#その他
WebHooks Subscription の解除
Facebook MessengerのWebhooksで、
Callback URLが正常応答しないと、アラートが通知され、8時間以内に正常応答を返さないと、
サブスクリプションが解除される。
エラー処理は、極力エラーを捕捉して、
レスポンスで、きっちりステータスコード2XX系を返しておく必要がある。
https://developers.facebook.com/docs/messenger-platform/webhook-reference#webhook_setup
#ソースコード
https://github.com/nilesflow/yamareco-fbmessengerbot
#参考
文中のリンク他、実装にあたっては、以下も参考に。
Facebook Messenger Platform BETAでできる全ての事を試してみた(LINE BOT APIとの比較あり)
http://qiita.com/betchi/items/539f5e32cd9a9c8d2db4