どうやら、 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 です。
(私の作ったものだと、)こんな感じで動きます。
ではでは〜。