LINEbotがリリースされたのでherokuで誰よりも早く俺だけのりんなといちゃいちゃしてみた(所要時間40分)
Microsoftのりんなちゃん、おしゃべりでかわいいのですが、 僕から見ると最近饒舌すぎるしネットを知りすぎているのが怖いなと思っていました。
そんな矢先にLINEbotがリリースされたので、最速で俺だけのりんなといちゃいちゃするために簡単なbot導入手順メモを書いておきます。
LINE developers アカウント登録
以下のリンクから開発者登録できます。
先着10,000名らしいです。
https://business.line.me/services/products/4/introduction
開発者登録、BOT API Trial Account利用登録が終わると管理画面にログインすることができます。 管理画面にログイン後、 Basic infomation というリンクをクリックします。
LINE developers の画面にて設定
以下の項目をメモしておきましょう。
Channel ID
Channel Secret
MID
最下部にCallback URLという項目があるので、そこにサーバーのドメインを入力します。(今回はherokuでやるので後で入力でOK)
!!!注意!!!
Callback URLはhttpsのみ使用可能です 形式は以下の形で入力してください
IPを入力するのを忘れずに!
https://test.com:443/callback
今回僕はherokuでサーバーを立ててやってみました
上記のサイトを参考に、 心を無にしてコマンドを叩いていくだけで鯖ができあがりました。
LINEのAPIを受けられるようにコードを書き換え
POSTを受けられるように変更
# APP/config/routes.rb # 追加 post '/' => 'welcome#index'
controllerにて request body をログに吐くように変更
# APP/app/controllers/welcome_controller.rb class WelcomeController < ApplicationController # GET /welcome def index http.set_debug_output $stderr end end
固定IPの追加<追記>
herokuにアドオンを追加して固定IPを設定します。
heroku addons:create fixie:tricycle
固定IPは2つ発行されるので、両方ともwhitelistに登録します。
上記の変更をheroku にデプロイしたら、 友だち追加して会話します
heroku logs --tail
した状態でLINEを送って待っていると
heroku のログに↓のように流れてくるので
Parameters: {"result"=>[{"content"=>{"toType"=>1, "createdTime"=>1460050864600, "from"=>"u7c2d7a2126afd61282xxxxxxxxxxxxxx", "location"=>nil, "id"=>"414066xxxxxxx", "to"=>["u9b493f87f568494cccbff34dxxxxxxxx"], "text"=>"あああ", "contentMetadata"=>{"AT_RECV_MODE"=>"2"}, "deliveredTime"=>0, "contentType"=>1, "seq"=>nil}, "createdTime"=>1460050864614, "eventType"=>"138311609000106303", "from"=>"u206d25c2ea6bd87c17655609axxxxxxx", "fromChannel"=>134130xxxx, "id"=>"WB1519-3341xxxxxx", "to"=> ["u9b493f87f568494cccbff34dxxxxxxxx"], "toChannel"=>14619xxxxx}], "welcome"=>{"result"=>[{"content"=>{"toType"=>1, "createdTime"=>1460050864600, "from"=>"u7c2d7a2126afd61282xxxxxxxxxxxxxx", "location"=>nil, "id"=>"414066xxxxxxx", "to"=>["u9b493f87f568494cccbff34d41xxxxxx"], "text"=>"あああ", "contentMetadata"=>{"AT_RECV_MODE"=>"2"}, "deliveredTime"=>0, "contentType"=>1, "seq"=>nil}, "createdTime"=>1460050864614, "eventType"=>"138311609000106303", "from"=>"u206d25c2ea6bd87c17655609axxxxxxx", "fromChannel"=>134130xxxx, "id"=>"WB1519-3341xxxxxx", "to"=> ["u9b493f87f568494cccbff34d41xxxxxx"], "toChannel"=>14619xxxxx}]}}
ログに出てきた一番最初のfromの値を json の to に入れて、
以下のように curl してみます。
!!!注意!!!
eventTypeは【138311608800106203】このままの数字を入力します。
toChannelは【1383378250】このままの数字を入力します。
curl -v \ --proxy http://fixie:xxxxxx@xxxxx.usefixie.com:80 \ -H "X-Line-ChannelID: 146xxxxxxx" \ -H "X-Line-ChannelSecret: 355e19cf1885b34d90bba0xxxdxxxxxx" \ -H "X-Line-Trusted-User-With-ACL: u9b493f87f568494cccbfxxxxxxxxxxxx" \ -H "Content-type: application/json; charset=UTF-8;" \ -X POST -d '{"to":["u7c2d7a2126afd61282xxxxxxxxxxxxxx"], "toChannel":13833xxxxx, "eventType":"138311608800106203", "content":{ "contentType":1,"toType":1,"text":"てすと" } }' https://trialbot-api.line.me/v1/events
もし Your ip address [xxx.xxx.xx.xxx] is not allowed to access this API
とwhitelist以外からのIPが帰ってきた場合は ServerIP Whitelistのリンクから許可して、再度curlします。
感想
slackと違って一旦fromの値を取得しないと返信できないようです。 そのため一旦ユーザーから話しかけてもらわないと、こちらからアクションを起こせないのかもしれません。(要確認)
今回はbotといいつつ、簡単にcurlで済ませる方法で書いてしまいました。 余裕ができたらもう少しbotっぽくカスタマイズしたものを紹介しようと思います。
所要時間40分といいつつ、記事を書く時間のほうが全然長かった・・・!
満を持して...実際にいちゃいちゃしてみた
なるほど