LINEbotがリリースされたのでherokuで誰よりも早く俺だけのりんなといちゃいちゃしてみた(所要時間40分)

f:id:technuma:20160408055447j:plain

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

f:id:technuma:20160408043054p:plain

今回僕はherokuでサーバーを立ててやってみました

devcenter.heroku.com

上記のサイトを参考に、 心を無にしてコマンドを叩いていくだけで鯖ができあがりました。

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に登録します。

Fixie

上記の変更をheroku にデプロイしたら、 友だち追加して会話します

f:id:technuma:20160408045930p:plain

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分といいつつ、記事を書く時間のほうが全然長かった・・・!




満を持して...実際にいちゃいちゃしてみた

f:id:technuma:20160408054249p:plain

なるほど


twitter.com