web初心者が LINE BOT 適当に作った。
最終的なコードは一番最後の記事に載せる。
#追記
この一連の記事はLINE Messaging APIになる前のbot trialでの内容である。
#まずは環境
言語: RubyとSinatraという軽量フレームワーク
サーバー: HerokuがSSL認証の部分で一番簡単そうだったのでとりあえずHeroku
#~オウム返しできるまで~
1.とりあえずはLINE developers にアクセス!
2.LINE BOTアカウントを登録
(この時はまだ名前とかトプ画とかの設定だけで大丈夫)
####3.アプリ作成
まずは好きなディレクトリ(フォルダ)に Gemfile と config.rb を作成
(Gemfile とは bundle という Ruby系 で超役に立つパッケージ管理?ツールみたいなの)
source "https://rubygems.org"
gem 'sinatra'
gem 'rest-client'
gem 'httpclient'
# coding: utf-8
require 'bundler/setup'
require 'sinatra/base'
require 'json'
class App < Sinatra::Base
before do
@endpoint_uri = 'https://trialbot-api.line.me/v1/events'
@request_header = {'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
post '/linebot/callback' do
params = JSON.parse(request.body.read)
params['result'].each do |msg|
request_content = {
to: [msg['content']['from']],
toChannel: 1383378250, # Fixed value
eventType: "138311608800106203", # Fixed value
content: {
contentType: msg['content']['contentType'],
toType: msg['content']['toType'],
text: msg['content']['text']
}
}
end
content_json = request_content.to_json
RestClient.proxy = ENV["FIXIE_URL"]
RestClient.post(@endpoint_uri, content_json,@request_header)
end
"OK"
end
run App
このようにコードを書きコマンドをうって Heroku にあげよう。
$ bundle install
$ git init
$ git add -A
$ git commit -m "first commit"
$ heroku create
$ heroku push heroku master
初回は heroku にログインしなければいけないかも。。。その時のコマンドは
$ heroku login
(アカウトがある事前提)
###4.環境変数設定
'X-Line-ChannelID' => ENV["LINE_CHANNEL_ID"],
'X-Line-ChannelSecret' => ENV["LINE_CHANNEL_SECRET"],
'X-Line-Trusted-User-With-ACL' => ENV["LINE_CHANNEL_MID"],
上の3つは そのままタイプしても大丈夫だが基本的には自分以外の人には見せちゃいけないので環境変数としてHerokuにあげとこう
・あげ方
LINE BOT のサイトの行って Channel ID, Channel Secret, Mid をメモる。
コードが置いてあるデイレクトリで以下をうつ。
$ heroku config:add LINE_CHANNEL_ID="LINE BOT の channel ID"
$ heroku config:add LINE_CHANNEL_SECRET="LINE BOT の Channel Secret"
$ heroku config:add LINE_CHANNEL_MID="LINE BOT の Mid"
(""を忘れずに。)
RestClient.proxy = ENV["FIXIE_URL"]
これは後で。
###5. LINE BOT の callback URL & Whitelist を登録する
他の記事にも書いてあるが一応書く。
LINE BOT など 最近のBOT系では SSL認証が必要。。。
(SSL認証は http じゃなくて https になってる)
Herokuは元々SSL認証が通ってる = 最高
Whitelist は 固定IPじゃなきゃダメ。 Heroku は固定じゃない。。。
Herokuは固定じゃない = 悲しみ
##対処法##
Fixie というアドオンを追加する。
ここでさっきの RestClient.proxy = ENV["FIXIE_URL"] の部分もやっちゃう。
1.Heroku dashboard -> BOTのアプリ -> アドオンのFixie の順でクリック
2.すると Fixie の サイト に飛ぶので 右上のACCOUNT をクリック
3.Proxy URL を全部メモる。
4.さっき同様に heroku config:add する。
同時にFixie のアカウントのページに書いてある Outbound IPs を どっちもメモる。
あと、必要なのがcallback URL。
##実際にcallback URL & Whitelist を書く##
callback URL
https://herokuのアプリ名.herokuapp.com:443/linebot/callback
Whitelist
さっきメモったFixieのOutbound IPsを書く 最後の空欄には、自分は24を入れた。
これでおうむ返しされたら勝ちだ。
一応 実際に来たメッセージの内容(params['result'][0])を載せとく。
{
"content"=>
{"toType"=>1,
"createdTime"=>1463666365473,
"from"=>"秘密",
"location"=>nil, "id"=>"秘密",
"to"=>["自分のID"], <- これが重要
"text"=>"おはよう",
"contentMetadata"=>{"AT_RECV_MODE"=>"2","SKIP_BADGE_COUNT"=>"true"},
"deliveredTime"=>0,
"contentType"=>1,
"seq"=>nil
},
"createdTime"=>1463666365620,
"eventType"=>"138311609000106303",
"from"=>"秘密",
"fromChannel"=>LINEのチャンネルID, <- コードで書いたやつ
"id"=>"これはよくわからん",
"to"=>["自分のID"],
"toChannel"=>自分のチャンネルID
}
上記の日本語が書いてあるのは数値が入ってます。
#まとめ
ここまで出来たら後は結構やり放題な気がする。
ここおかしいと思ったり、もっと詳しく聞きたい方はなんなりと言ってください!
#次回
#参考記事