今までSlack botでプッシュ通知機能を利用してきました。
昔ちょろっと記事を書いてます。
Slack の bot を自作する(AWS Lambda + API Gateway)
ただ、やっぱSlackは試しに作ってみただけで全然使ってないので、なじみやすいLINE botでプッシュ通知機能を実装したいな、とかねてから思っていました。
そこで、頑張って実装しました。
概略
LINE botは、いわゆるLINE公式アカウントという形で利用します。
※ 以前は自分が作ったものを公開していましたが、LINE公式アカウントの料金改定に伴い公開を中止しました。
仕組み
まず、LINE Developersにてログインします。
ログインしたら、プロバイダ→チャネルの順番で作成していきます。
何の知識もなくポチポチと作成したので、私は
- プロバイダ: 僕のプロバイダ
- チャネル: 僕のチャネル
という名前で作りました。
最終的に、以下のような感じになります。
チャネルでは、WebhookとしてAWS Lambda(API Gateway)を指定しています。
- 友達追加すると、そのイベントがAWS Lambdaに飛ぶのでDynamoDBにユーザーIDを保存します。
- 定期実行を有効にしたら、DynamoDBからどのニュースをプッシュ通知するかを取得して必要なものを毎日12時にプッシュ通知します。
- ブロックしたら、そのイベントがAWS Lambdaに飛ぶのでDynamoDBからユーザーIDを削除します。
ユーザーIDは友達追加のタイミングで保存しておかないと管理できないのでこうなりました。
ソースコード
というわけで、実装は全部AWS Lambdaなので、そのソースコードをご紹介。
手っ取り早く、GitHubにて公開しました。
なんかまずい情報が載っていたら教えていただけると大変助かりますm(_ _)m
ちなみに、応答メッセージ用のメソッドも載せてあります。
終わり
どこまで書けばいいのか分からなかったのと、色々と書けるほど自分が理解していないのでこの程度です。
箇条書きで補足すると。
- LINE botは利用が一定数を超えると課金される
- つまり、個人でちょろっと使う分には無料で使える
- LINE botの応答メッセージはAWSのAPI Gatewayで受けてAWS Lambdaを実行する
- LINE Messaging APIの応答メッセージを使ってユーザーに返信する
- プッシュ通知はAWSのAmazon CloudWatch Eventsを使ってAWS Lambdaを実行する
- LINE Messaging APIのプッシュ通知を使ってユーザーに通知を送る
- AWSの方が課金開始までの無料枠が大きいので、LINE botだけ注意すればいい
こんなところでしょうか。
ユーザー情報の保持にDynamoDBを初めて使ってみましたが、最初は癖のあるデータ構造に戸惑いましたが慣れれば使いやすいですね。
アクセス方法も最初からコードが示されていたので、それを修正して使えばOKでした。
ただし、AWS LambdaからDynamoDBにアクセスするためには実行ロールの設定でDynamoDBへのアクセス権限を付けないといけなかったりするので、そのあたりが難しいですね。
公開しているソースコードだとusersテーブルへアクセスしてデータを取り出していますが、そもそもAWS Lambdaはどうやってusersテーブルへアクセスしているのかよく分かっていません。
AWS Lambdaの所有者(つまり私)とusersテーブルの所有者(つまり私)が同じだからテーブル名だけでいけるのだろうか・・・
とまあ、DynamoDBに関してはまだまだ理解か浅いので、勉強していきたいところです。