Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
55
Help us understand the problem. What is going on with this article?
@fuji_syan

Heroku+Railsで動かすFacebook Messengerのオウム返しBot

More than 5 years have passed since last update.

昨晩、

F8カンファレンス:FacebookがMessengerのチャットボットのプラットフォームを発表

FacebookのF8カンファレンスでMessengerのチャットボットのプラットフォームを発表しました。

ということで早速、オウム返しBotを作ってみます。

S__2301957.jpg

公式ドキュメントは
Messenger Platform - 参考資料 - 開発者向けFacebook

こちらです。

1 Facebookの開発者ページでアプリまたはページを作成(または既存のアプリを利用)

チャットボットの公開には、Facebookアプリまたはページが必要です。

Quick Starts - 開発者向けFacebook

2 アプリページの左サイドバーの下から2番目、Messengerを選択し、「Get Started」ボタンを押す

Messengerという項目が新しく追加されています。

スクショ 2016-04-13 11.51.37.png

3 Webhookを登録しよう

若干ややこしいのですが、まずWebhookを設定する必要があります。ここでは、コールバックURLを登録するためにはまず、URLを用意し、適当なトークンを入力し、登録時に、Facebookが行う検証に合格する必要があります。

スクショ 2016-04-13 11.56.27.png

スクショ 2016-04-13 12.05.07.png

そのためのサンプルコードを記載します。(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ページを利用して、

スクショ 2016-04-13 11.54.34.png

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

S__2301956.jpg

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

55
Help us understand the problem. What is going on with this article?
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

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
55
Help us understand the problem. What is going on with this article?