6
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

Facebook Messenger Bot:ヤマレコAPIで山の情報を検索して返すBot を作成

LINEに続いて、FacebookでもBot作りたいなーと思って調べていたら、ヤマレコがAPIを提供していたので、利用して作成。
Facebookの審査に手間取ってなんだかんだ作ってから1か月くらいかかってしまった。

概要

山の情報を調べて返すBot
https://www.facebook.com/letsgoclimbing/

Facebookページからアクセス。
ページは、Bot用に作成。

山の情報を調べて返すBot.png

・フリーワード検索。
・ヤマレコに登録されたエリア・ジャンルから検索。
・地名データの地点情報から、近隣情報検索。

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 からデプロイ。

https://github.com/nilesflow/yamareco-fbmessengerbot

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

ソースコード

参考

文中のリンク他、実装にあたっては、以下も参考に。

Facebook Messenger Platform BETAでできる全ての事を試してみた(LINE BOT APIとの比較あり)
http://qiita.com/betchi/items/539f5e32cd9a9c8d2db4

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
6
Help us understand the problem. What are the problem?