昨晩、
F8カンファレンス:FacebookがMessengerのチャットボットのプラットフォームを発表
FacebookのF8カンファレンスでMessengerのチャットボットのプラットフォームを発表しました。
ということで早速、オウム返しBotを作ってみます。
![S__2301957.jpg](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F18165%2Ff60f1274-a3a8-520b-fcd6-b657bf4bae8d.jpeg?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=66e963f4ef7da2c1fc6fdd1a0e6f3b13)
公式ドキュメントは
Messenger Platform - 参考資料 - 開発者向けFacebook
こちらです。
#1 Facebookの開発者ページでアプリまたはページを作成(または既存のアプリを利用)
チャットボットの公開には、Facebookアプリまたはページが必要です。
#2 アプリページの左サイドバーの下から2番目、Messengerを選択し、「Get Started」ボタンを押す
Messengerという項目が新しく追加されています。
#3 Webhookを登録しよう
若干ややこしいのですが、まずWebhookを設定する必要があります。ここでは、コールバックURLを登録するためにはまず、URLを用意し、適当なトークンを入力し、登録時に、Facebookが行う検証に合格する必要があります。
そのためのサンプルコードを記載します。(herokuの場合)
コールバックURL https://example.herokuapp.com/api/callback
トークン hogehoge
※トークンは各自適当なものを入力して下さい。
と入力します。
そして、検証用にcallbackを受け付けるための処理を用意します。
Railsでの例を記します。
def callback
if params["hub.verify_token"] == "hogehoge"
render json: params["hub.challenge"]
else
render json: "Error, wrong validation token"
end
end
その後、「確認をして保存」ボタンを押すと、FacebookがコールバックURLに検証のためのリクエストを送り、合格すると登録が完了します。
#4 アクセストークンを発行しよう
Facebookページを利用して、
#5 チャットボットを起動
4で取得したアクセストークンを利用して、curlコマンドからチャットボットを起動します。YOUR_TOKENを置き換えてコンソールから下記を叩いて下さい。
curl -ik -X POST "https://graph.facebook.com/v2.6/me/subscribed_apps?access_token=YOUR_TOKEN"
#6 テストしてみよう
Facebook Messengerアプリの「友達やグループを検索」から、登録したアプリ(またはページ)を検索して、友だちに追加し、適当に話しかけてみましょう。すると、コールバックURLにリクエストが届きます。
![S__2301955.jpg](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F18165%2Ff33baac5-cb48-7d5f-f809-a8ea13017a5f.jpeg?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=c3c8a44b88d1466c8fe5f25f2cb3f368)
![S__2301956.jpg](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F18165%2F0f0f981b-2989-4567-3bf9-71907ddd47b9.jpeg?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=43af82e014b7de251e8054c60eb605b5)
#7 オウム返ししてみよう
さて、最後になりますが、オウム返しをしてみます。
Botが発言をしても、同じコールバックに返ってくるので、適当に「hoge」とか返すサンプルを書いていたら無限ループになりハマりました。。。Botかユーザーの発言かどうかを判定して、場合分けしています。
def callback
token = "<TOKEN>"
message = params["entry"][0]["messaging"][0]
if message.include?("message")
#ユーザーの発言
sender = message["sender"]["id"]
text = message["message"]["text"]
endpoint_uri = "https://graph.facebook.com/v2.6/me/messages?access_token=" + token
request_content = {recipient: {id:sender},
message: {text: text}
}
content_json = request_content.to_json
RestClient.post(endpoint_uri, content_json, {
'Content-Type' => 'application/json; charset=UTF-8'
}){ |response, request, result, &block|
p response
p request
p result
}
else
#botの発言
end
end
#宣伝
下記2つを運営しておりますので、ぜひフォロー下さい!
Botに関するニュースメディア「BotEggニュース」 http://news.botandegg.com/
Facebook Bot研究会 https://www.facebook.com/groups/1684644661776706/?fref=ts