Madogiwa Blog

主に技術系の学習メモに使っていきます。

herokuとrubyでゴミ出しを通知するLINE BOTを作ってみた🔔

みなさんこんにちは、まどぎわです(・∀・)
今回は、いつも忘れてしまっていたので、毎日明日出せるゴミを通知してくれるLINE BOT作ってみました🙌

f:id:madogiwa0124:20180930232656p:plain

やってみたら意外と簡単に出来たので手順等をメモしておきます📝

LineBotの作り方

流れは下記のような感じです👇

  1. LineDevelopersに登録
  2. チャンネル作成
  3. BOTを実装
  4. herokuにアプリを作成

LineDevelopersに登録

下記からLineDevelopersに登録できます👀

LINE Developers

f:id:madogiwa0124:20180930232920p:plain

画面に従って行って貰えれば、特に躓くところは無いと思います。

チャンネル作成

BOTを作成するには、まずはチャンネルを作る必要があります。
チャンネルとは、実際にBOTを運用するにあって必要な情報、Tokenや表示する名前等を登録します。詳しいやり方は、まとめてくださっている方がいらっしゃいますので、下記等を参考にしてみてください👇

qiita.com

BOTを実装

今回は、sinatraと公式のgemline-bot-sdk-rubyを使って作成しました。 軽く動かすだけだったら、公式チュートリアルをコピペするとオウム返しのLineBotが作成出来ます🐦

github.com

私のBotの返信処理は下記の通りです👇
メッセージが来たら、明日がなんのゴミの日かを取得し返信しています。

app.rb

post '/callback' do
  // リクエストボディの取得
  body = request.body.read

  // リクエストのチェック
  signature = request.env['HTTP_X_LINE_SIGNATURE']
  unless client.validate_signature(body, signature)
    error 400 do 'Bad Request' end
  end

  // リクエストボディをパース
  events = client.parse_events_from(body)
  events.each do |event|
    // メッセージを受信したら
    case event
    when Line::Bot::Event::Message
      // 通知メッセージを返信する
      client.reply(event['replyToken'], GomiChecker.notice_message)
    end
  end
end

ちなみに、返信等のcallbackを受けずにBOT側から通知を送信する場合は、下記のような実装になります。※ユーザーIDを指定して通知を行う必要があるので、環境変数で管理するようにしてます。

batch.rb

def push_ids
  ENV['PUSH_TO_ID'].split(',')
end

begin
  // 環境変数に設定されたすべてのユーザーに通知を送信
  push_ids.each { |id| client.push(id, GomiChecker.notice_message) }
rescue => e
  puts "batch exec error ..."
  p e
end

詳しい実装はGithubにコードを上げているので、そちらをご確認ください。

github.com

herokuにアプリを作成してデプロイ

下記のような感じでherokuにデプロイすると実際にLINEBOTが動き出すと思います🙌

$ heroku create
# hoge.gitは自分のアプリに合わせて変える
$ git remote add heroku https://git.heroku.com/hoge.git
$ git push heroku master

これでLINEから自分のBOTを友達登録して、通知を受け取れるはずです!🔔

おわりに

今回は、いつも忘れる明日のゴミの日を通知するBOTを作ってみました、実際に自分の生活を豊かにするアプリは良いですね🏠 LINEBOTを使うのは初めてでしたが結構簡単に作れたので、また何か日常で困ったことがあったら使ってみようかなと思いました🙌