LoginSignup
35
32

More than 5 years have passed since last update.

Sinatra LINE BOT ひとまず お話出来るようにしてみた (LINE BOT API + DOCOMO 雑談API)

Last updated at Posted at 2016-04-12

LINEのBOT APIが1万名限定で使えるということで触ってみました。

BOT API Trial Account

まず、アカウントは取得する必要があります。(まだ1万名に達しているかどうかは知りません)
多分上記URLに進めばアカウント取得出来るかと。

それで、とりあえずお話が出来るようなbotを作ろうと思います。
お話相手はDOCOMOの雑談APIさんです。

それで、サーバーのほうはSinatraでHerokuにアップします。

以下のような感じでお話出来ました。
話がうまい子ではありませんが、お話相手にはなってくれそうです。

slack_for_ios_upload.png

アプリケーション作成

好きなフォルダを作って、以下のGemfileとconfig.ruの2つを用意して下さい。

Gemfile
source "https://rubygems.org"

gem 'sinatra'
gem 'rest-client'
gem 'docomoru'
config.ru
require 'bundler/setup'
require 'sinatra'
require 'json'
require 'rest-client'
require 'docomoru'

class App < Sinatra::Base
  get '/' do
    'test'
  end

  post '/linebot/callback' do
    params = JSON.parse(request.body.read)

    params['result'].each do |msg|
      client = Docomoru::Client.new(api_key: ENV["DOCOMO_API_KEY"])
      response = client.create_dialogue(msg['content']['text'])
      msg['content']['text'] = response.body['utt']

      request_content = {
        to: [msg['content']['from']],
        toChannel: 1383378250, # Fixed  value
        eventType: "138311608800106203", # Fixed value
        content: msg['content']
      }

      endpoint_uri = 'https://trialbot-api.line.me/v1/events'
      content_json = request_content.to_json

      RestClient.proxy = ENV["FIXIE_URL"]
      RestClient.post(endpoint_uri, content_json, {
          'Content-Type' => 'application/json; charset=UTF-8',
          'X-Line-ChannelID' => ENV["LINE_CHANNEL_ID"],
          'X-Line-ChannelSecret' => ENV["LINE_CHANNEL_SECRET"],
          'X-Line-Trusted-User-With-ACL' => ENV["LINE_CHANNEL_MID"]
      })
    end

    "OK"
  end
end

run App

それで bundle install して下さい。
簡単です。

基本的なBOTの処理は
http://qiita.com/yuya_takeyama/items/0660a59d13e2cd0b2516
を参考にさせて頂きました。

あと、DocomoのAPIですが、docomoのAPIのためのgemがあったのでこちらを利用することにしました。
https://github.com/r7kamura/docomoru

この後で、DocomoのAPIを取得します。

流れとしては、LINEからのコールバックを受けて、受けたコメントをDocomoの雑談APIへ。そして返答をそのままLINEのメッセージとして返すという感じです。

DocomoのAPI KEY取得

以下のURLからAPI KEYを取得します。
https://dev.smt.docomo.ne.jp/?p=docs.api.page&api_name=dialogue&p_name=api_usage_scenario

申請をするとすぐにdevelop用のAPI KEYをもらえます。

herokuにアップ

herokuを使ったことがない方はアカウントを取得して必要な toolbeltをインストールする必要があります。

$ git init
$ git add .
$ git commit -m "Create line bot"
$ heroku create (アプリ名)
$ git push heroku master

herokuに必要な設定

LINE BOTには接続元IPが必要らしく、Fixieというアドオンを使います。HTTPプロキシを発行してくれて、アウトバウンドのIPを固定してくれるようです。

$ heroku addons:create fixie:tricycle

http://fixie:hogehoge:80 みたいなのがプロキシのURLで
123:123:123:123 みたいなのが固定IPです。2つある。

この2つが取得出来たらオーケーです。(herokuの管理画面からも確認にいける)

この後に、環境変数を設定します。

以下のように設定します。
必要なのは、
FIXIE_URL -> 直前で取得したプロキシURL
LINE_CHANNEL_ID、LINE_CHANNEL_MID、LINE_CHANNEL_SECRET -> アカウントを発行するともらえる
DOCOMO_API_KEY -> ちょっと上のほうで取得したDocomoのapiのkey

line-bot-demo_·_Settings___Heroku.png

Line Bot側の設定

https://developers.line.me/
のリンク先の画面右上の「channels」というボタンをクリックします。

そうすると画面の下の方に「EDIT」ボタンがあるのでそこから諸々好きなように変更して下さい。
ただし、ひとつ確実にしないといけないのは「callback」の設定です。

https://(アプリ名).herokuapp.com:443/linebot/callback とします。

LINE_developers.png

それで次にwhite listを設定します。

LINE_developers 2.png

左のサイドバーの「Server IP Whitelist」からいけます。
ここで、FIXIEで取得した2つのIPを追加します。このとき「/」以下のインプップエリアは空で大丈夫です。

完成

以上で完成です。
先ほどのcallbackを設定した画面のQRコードを読み込んで友達追加してメッセージを送って返ってくれば成功です。
ただし、callbackを設定してすぐには設定が反映されないようです。出来なくても気長に待ちましょう。

ひとまず、
https://(アプリ名).herokuapp.com:443 にアクセスして「test」の文字が表示されればオッケーです。

僕は1日放置したら出来るようになりました。

$ heroku logs -t

でログを見ることも出来るので便利です。

参考

LINE BOT の公式ページ
公式リファレンス

LINE BOT API でのハマりどころ
結構丁寧。
ハマりどころを書いてくれていて助かった。

LINE BOT をとりあえずタダで Heroku で動かす
herokuでタダでbot動かせるよという記事。herokuでFixieを使えば動かせるということで参考になりました。

とりあえずLINE BOT APIでオウムを作ってみた
上記記事が参考にしているということで。参考になりました。

35
32
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
35
32