Facebook Messanger Platformを調べてみた
Bot熱が冷めないshirakiyaです。
昨日のLINE Botを調べてみたに引き続き、今回はFecebookのMessanger Platformについて調べてみました。
作成の流れと詳細
Messanger Platform 公式ドキュメント
↑のGetting Startedを参考に調べて行きました。
0. 必要なもの
いきなり流れとかじゃないのですが、前提として以下のものが必要になります。
1. FacebookアプリとFacebookページを作成する
まず始めにFacebookアプリを作成します。
あまり重要なところじゃないので端折りますが、fecebook for developersからアプリを作成します。
作成するときは、Webサイトでもモバイルアプリでもなんでもないので下図のようにbasic setupから進めると、余計な作成フローを進まずにいけるのでおすすめです。
アプリと共にFacebookページも作成する必要があります。作成の方法は割愛します。(ヘッダーにある下向き三角マークから「ページを作成する」があるので、そこから作成できます。)
とりあえず適当に進めて作成してみました。
2. FacebookアプリにMessangerを追加する
Messangerの追加
左カラムにある「製品を追加」から、Messangerという製品("Product"の直訳なので日本語では不自然になってる?)を追加します。
Webhook設定
ページトークンの下にある「Setup Webhooks」から設定します。
ここでcallback URLとトークンを自由に設定できます。
が、 この時点でこちらで用意すべきBotのシステムができていないので、一旦パスして後で入力することとします 。
3. Botアプリを作成する
ここで言うBotアプリは「Botを動作させるためにユーザーが用意するシステム」のことで、Facebookアプリのことではないのであしからず。
3-1. Webhook設定のためのWebアプリを用意する
まず、「Webhook設定」を完了することを目指します。
ここでしないといけないのは、要は"疎通確認"ですので、以下を満たすようにサーバーや簡単なWebアプリを構築します。
- callback URLが用意できていなかったので、そのURLを用意する
- Facebook側から送られるGETリクエストに対し、
Verify Token
を確認してchallenge
を返す
今回も簡単のため、Heroku+Flaskを用いて構築しました。
Herokuの構築手順は割愛することとして、Webアプリには以下のような処理を行います。
- app.py
# -*- coding: utf-8 -*- import os from flask import Flask from flask import request app = Flask(__name__) # エンドポイントはなんでも良い @app.route('/webhook', methods=['GET']) def varification(): VERIFY_TOKEN = os.getenv('VERIFY_TOKEN') # Facebookからは # `?hub.mode=subscribe&hub.challenge=<value>&hub.verify_token=<verify-token>` # というパラメータが送られてくる # `hub.verify_tokenが一致していることを確認する if request.args.get('hub.verify_token') == VERIFY_TOKEN: # 一致している場合は`hub.challenge`をそのまま返す return request.args.get('hub.challenge') return 'Error, wrong validation token' if __name__ == '__main__': app.run()
構築しアクセス可能な状態にした後に、Facebookアプリ側の画面に戻りWebhook設定を行います。
URLと任意のVerify Token(今回であればHerokuの環境変数に定義したものと同じもの)を入力し、フォロー入力欄には少なくとも「message」にチェックを入れます。
「確認して保存」を押すと、裏で疎通確認が行われます。失敗すればエラー原因と共にダメって言われます。
ちなみにここにある「フォロー入力欄」は以下の意味のようです。
チェック | 説明 |
---|---|
messaging_optins | Send-to-Messanger Pluginボタンを押されてMessangerにやってきた時にcallbackするかどうか |
messages | ユーザーからのメッセージが送られた時にcallbackするかどうか |
message_deliveries | メッセージが送信できた後にcallbackするかどうか(?) 「This callback will occur when a message a page has sent has been delivered.」 ←Facebookのタイポ? |
messaging_postbacks | [構造化メッセージ」と呼ばれるボタン付きメッセージで、ボタンが押された時にcallbackするかどうか |
3-2. メッセージを受信し、返信するようにする
次はユーザーから送信されたメッセージを受信して、オウム返しするプログラムを書いていこうと思います。
まず、作成しているFacebookアプリとFacebookページを紐付けます。
ページを選択から、先ほど作成したFacebookページを選択し、フォローします。
フォローしたら、トークン生成からFacebookページのページトークンを生成します。このトークンがあればAPI利用の認証ができるようになります。
実際の開発したものに関して、オウム返しするだけですがコードはこちらです。
イメージとしては、例えばユーザーがメッセージを送った場合ではMPから以下の1つ目の様なJSONがPOSTで送られてくるので、それに対応して2つ目のJSON共にAPIを叩くとBot側から簡単なメッセージを送信することができます。
- receive
{ "object":"page", "entry":[ { "id":"PAGE_ID", "time":1460245674269, "messaging":[ { "sender":{ "id":"USER_ID" }, "recipient":{ "id":"PAGE_ID" }, "timestamp":1460245672080, "message":{ "mid":"mid.1460245671959:dad2ec9421b03d6f78", "seq":216, "text":"hogefugapiyo" } } ] } ] }
- request
{ "recipient":{ "id":"<entry[0]['sender']['id']>" }, "message":{ "text":"みゅ!" } }
Facebookの画面にて、FacebookページとMessageのやり取りを行います。
(やっぱり感じるデバック感。。返事が来ないと二重で悲しい)
できました!
これで簡単なBotは作成できました。
参考:Messengerで簡単なBotつくる(Facebook Messenger Platform from F8) - Qiita
システム構成
まとめがてら、全体像はこんな感じです。
LINE Botと異なるのは、LINEではLINE Bot Trial Accountを作成すればその時点でアカウントが作成されましたが、FacebookではFacebookページのアカウントとMessangerでやりとりを行うため、Facebookページが必要になります。
何ができるのか
- メッセージの送信
- テキスト/画像の送信
- Facebookが用意しているテンプレートメッセージ
- Generic(テキスト&画像&ボタン)
- Button(テキスト&ボタン)
- Receipt(領収書)
- メッセージ開始時のメッセージ送信
- Web埋め込み用の"Send to Messanger" / "Message Us" ボタンをデフォルトでサポート
- → エントリーポイントを増やしやすい
- ユーザーの情報取得
- (別にMPならではのAPIではなさそうですが)
https://developers.facebook.com/docs/messenger-platform/implementation
このページに全てが書かれているので詳細はこちらから。
その他情報
審査
作成したBotを公開するには、Facebookによる審査が必要のようです。
- page_messaging
- pages_messaging_phone_number (optional)
という二つの権限があり、それらの利用範囲を以下の表にまとめました。
page_messaging | pages_messaging_phone_number |
---|---|
(OK) ユーザーとの初期接触時の体験 | (OK) SMSを使ったメッセージの送信 |
(OK) 予約・購入・注文の確約 | (NG) ユーザーの同意無しでSMSを使ったメッセージを送信すること |
(OK) カスタマーサポートなメッセージの送信 | |
(NG) サービス・商品のアップセリングやクロスセリング | |
(NG) 広告やニュースレター、お知らせ等の送信 |
https://developers.facebook.com/docs/messenger-platform/app-review
料金
Bot作成では基本無料のようです。
が、Customer Matchingなる機能を利用する場合は、Customer Matchingしたユーザー一人毎に$99を払わないといけないようです。
Cutormer Matchingとは電話番号からユーザーを特定してMessangerでそのユーザーにリーチすることを可能にする機能のようです。ただし、FacebookページがUSのアドレスで登録されているか、一人の管理者がUSのアドレスで登録されていることが条件のようです。
(ってかめっちゃ高い…)
Wit.ai
http://www.torchlight.co.jp/blog/facebook/f8-2016-messenger-bots.html
こちらの記事にある通り、Wit.aiという自然言語処理に長けた人工知能が含まれる「bots on Messanger」も利用可能なのかなと思いきや、今は使うことができなかったです(ドキュメントには一部に紹介があるのみです)。
が、現状で特別何か連携がないというだけで、Wit.aiは利用可能なので使ってみるのも面白いかもです。
簡単にブロック可能
ユーザーはボットを簡単にブロックすることができます。あるいは、広告メッセージだけブロックすることもできるようです。
完全に、お助けツールという立ち位置だけしか認めないし、プロモーションのためにBotを使うなというFacebookのメッセージが受け取れますね。
感想
- MPは何か"契約"を結ぶための商用Botに特化している
- LINEにはGreatingメッセージのようなものがBussiness Connectしかなかったので便利っぽい
Enjoy Bot Life!!