ごみ収集日前にアラートを出すLINEbot

meet line-bot

最近 引越をした友人から「ごみ出しリマインダーを作って」と言われ模索することに。

ポイントは既存かつよく使用するアプリでリマンドできること。
APIもSDKも用意されているLINEがぴったりだと思い、挑戦しました。

構想

  • Springのスケジュール機能(cron)を使って、ごみ収集日前に該当者へリマインドをプッシュ
  • 該当者から何かメッセージが来たらレスポンス
  • ごみ捨てが終わっていたら褒め、まだだったら捨てようねと励ます(大事)

レスポンスに応対する箇所は「Webhook」、リマインド箇所は「Messaging API」で実装します。

環境

  • jdk1.8
  • Spring Boot
  • Heroku

herokuでアプリケーションの作成、LINEでチャンネルの作成、Webhookの有効化、Webhookのurlの登録が必要です。

SDKの使い方に慣れる

まずLINEでチャンネルを解説し
SDKのページにあるサンプル「echo」をherokuにデプロイし、エコーバックを楽しみました。
続いてサンプル「kitchensink」をherokuにデプロイしどのように作ればいいかを理解。
機能が網羅されているので、掴みやすかったです。

プロジェクト構成

依存関係

1
2
3
4
5
<dependency>
<groupId>com.linecorp.bot</groupId>
<artifactId>line-bot-spring-boot</artifactId>
<version>1.11.0</version>
</dependency>

LINE Messaging API SDKを追加します。

プロパティ

1
2
3
line.bot.channelSecret = XXXXX
line.bot.channelToken = XXXXX
line.bot.handler.path = /callback

LINEで開設したチャンネルの情報を設定します。

プッシュの実装

confirm.png
ごみ出しが完了したか確認するため、確認テンプレートを使用します。

コントローラ化する必要はありませんが、GETで呼び出せるようにすると確認する時に楽です。

余談ですが作っている当初、この部分ははSDKを使わずに地道実装していました…w
#こちらでも動作はします。

レスポンスの実装

Webhookはメッセージやスタンプなど何か送られた際に応答を返すことができます。
確認で「はい」もしくは「いいえ」が返却されるようにしたので、この2つのワードを拾い
スタンプとメッセージを返すようにします。

replyにreplyTokenとメッセージを設定します。
メッセージはコードに記述しているようにリストで複数設定することができます。

スケジューリング

Springのスケジュール機能@Scheduledを利用します。

※@EnableSchedulingアノテーションをmain関数のあるクラスにつけるのを忘れずに

備考

環境変数

1
2
3
4
line.bot.channelSecret = ${LINE_BOT_CHANNEL_SECRET}
line.bot.channelToken= ${LINE_BOT_CHANNEL_TOKEN}
cron.setting = ${LINE_CRON}
garbage.reminder.id = ${LINE_ID}

環境変数は全てherokuに持たせるようにしました。
コンソールで変更できるのでらくちんですね!

botのアイコン

アイコンはtabagotchiから拝借。
お気に入りの拡張機能です

動作確認

まとめ

SDKを使用すると、すっきり書けて楽ですね。

自前実装ではOkHttp3ClientHttpRequestFactoryを用いたRestTemplateの実装ができました。
こういう小さな達成感は大事(笑

楽しく書けました X)
あとは気に入ってくれるといいなぁ

ソースコード

https://github.com/aytdm/garbage-reminder-bot

参考

Share