主にプログラミング関連のメモ帳 ♪(✿╹ヮ╹)ノ
書いてあるコードは自己責任でご自由にどうぞ。記事本文の無断転載は禁止です。
2016/04/12
どうやら、 LINE の Bot を作るための API が公開されているようなので、
早速作ってみようと思います(若干乗り遅れた感はありますが)。
ということで、作成したやつのリポジトリ:
GitHub - mika-archived/line-weather-bot
地名を送信すると、その場所の天気を絵文字で返信するだけのものです。
Heroku の無料プラン上で動いています。
今回は、小さなアプリであるため、 Sinatra で作成しました。
アカウント登録などは、すでに解説記事などが上がっていたので、そちらを参考に。
ちなみに、今日もまだ申し込みできるようでしたので、興味が有るのならお早めに。
ということで、早速作成していきます。
とりあえず、 Sinatra アプリを作っていきます。
$ mkdir line-bot
$ cd line-bot/
$ bundle init
$ vim Gemfile
Gemfile を編集。
source "https://rubygems.org"
gem "sinatra"
gem "sinatra-contrib"
gem をインストールし、スクリプトを書いていきます。
$ bundle
$ vim app.rb
require "sinatra"
require "sinatra/reloader" if development?
get "/" do
"Hello, world!"
end
これで、 ruby app.rb
とし、 http://localhost:4567
にアクセスすれば、「Hello, world!」と
表示されます。
次は、 Bot の機能を作成していきます。
チャットなどが送られてきたら、 Callback URL へとアクセスされるようなので、そこへ実装していきます。
とりあえず、送られてきたテキストを、そのまま返すだけの Bot です。
require "rest-client"
require "json"
# ~
post "/callback" do
line_mes = JSON.parse(request.body.read)["result"][0]
message = line_mes["content"]["text"]
contents = {
contentType: 1,
toType: 1,
text: message
}
post_params = {
to: [line_mes["content"]["from"]],
toChannel: 1383378250,
eventType: 138311608800106203,
content: contents
}
headers = {
"Content-Type": "application/json; charser=UTF-8",
"X-Line-ChannelID": "YOUR_CHANNEL_ID",
"X-Line-ChannelSecret": "YOUR_CHANNEL_SECRET",
"X-Line-Trusted-User-With-ACL": "YOUR_CHANNEL_MID"
}
RestClient.proxy = ENV["FIXIE_URL"]S
RestClient.post("https://trialbot-api.line.me/v1/events", post_params.to_json, headers)
end
これを、 Heroku へと push します。
$ heroku create line-bot
$ git push heroku master
次に Heroku にて、 Fixie を導入します。
これは、 LINE が Bot がメッセージを送信する際に、送信元の IP アドレスを、
予めホワイトリストに登録する必要が有るためです。
アプリの Resources から、 Add-on で、 Fixie を導入します(Free プランで OK)。
なお、 Add-on の導入には、クレジットカードの登録が必要です。
導入したら、 Outbound IPs の IP アドレスをホワイトリストに登録します。
あとは、コンタクトに追加して、チャットを送信すれば OK です。
(私の作ったものだと、)こんな感じで動きます。
ではでは〜。