LINEのBOT APIが1万名限定で使えるということで触ってみました。
まず、アカウントは取得する必要があります。(まだ1万名に達しているかどうかは知りません)
多分上記URLに進めばアカウント取得出来るかと。
それで、とりあえずお話が出来るようなbotを作ろうと思います。
お話相手はDOCOMOの雑談APIさんです。
それで、サーバーのほうはSinatraでHerokuにアップします。
以下のような感じでお話出来ました。
話がうまい子ではありませんが、お話相手にはなってくれそうです。
アプリケーション作成
好きなフォルダを作って、以下のGemfileとconfig.ruの2つを用意して下さい。
source "https://rubygems.org"
gem 'sinatra'
gem 'rest-client'
gem 'docomoru'
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側の設定
https://developers.line.me/
のリンク先の画面右上の「channels」というボタンをクリックします。
そうすると画面の下の方に「EDIT」ボタンがあるのでそこから諸々好きなように変更して下さい。
ただし、ひとつ確実にしないといけないのは「callback」の設定です。
https://(アプリ名).herokuapp.com:443/linebot/callback
とします。
それで次にwhite listを設定します。
左のサイドバーの「Server IP Whitelist」からいけます。
ここで、FIXIEで取得した2つのIPを追加します。このとき「/」以下のインプップエリアは空で大丈夫です。
完成
以上で完成です。
先ほどのcallbackを設定した画面のQRコードを読み込んで友達追加してメッセージを送って返ってくれば成功です。
ただし、callbackを設定してすぐには設定が反映されないようです。出来なくても気長に待ちましょう。
ひとまず、
https://(アプリ名).herokuapp.com:443
にアクセスして「test」の文字が表示されればオッケーです。
僕は1日放置したら出来るようになりました。
$ heroku logs -t
でログを見ることも出来るので便利です。
参考
LINE BOT API でのハマりどころ
結構丁寧。
ハマりどころを書いてくれていて助かった。
LINE BOT をとりあえずタダで Heroku で動かす
herokuでタダでbot動かせるよという記事。herokuでFixieを使えば動かせるということで参考になりました。
とりあえずLINE BOT APIでオウムを作ってみた
上記記事が参考にしているということで。参考になりました。