薬を飲むまで飲んだか聞いてくるLINE botアプリを作ってみた[前編]
こんにちは、リサリサです。
友達が毎晩飲まないといけない薬があるのに、よく飲み忘れると聞いたので、毎日薬を飲むまで飲んだかを聞いてくるLINE botアプリを作ってみました。
飲んだと言わない限り、一時間置きにしつこくメッセージを送ってきますww
運用して1週間、飲み忘れてないようなので、作ってよかったかなと思ってますww
そんなに難しいことはしていないのですが、ブログにまとめた始めたら、とても長くなってしまったので、前編後編で分けて書いていきたいと思います。
この辺りのブログを参考にさせて頂きました。ありがとうございました!
環境
- Python 3.7
- line-bot-sdk 1.5.0
全体像
①Push機能
LINE botの方からPushしてほしいので、EventBridgeからLambdaを叩くようにします。
メッセージはこんな形になります。
②応答機能
LINE上で飲んだかどうかのボタンを押すと、薬を飲んだという情報がwebhookで届くので、DBを更新し、返答する機能も作ります。
メッセージはこんな感じになります。
③集計機能
おまけです。週の終わりにその週の状況を教えてあげる機能です。
メッセージはこんな感じになります。
作成の流れ
前準備
LINE Developersで、Messaging APIを作成
line-bot-sdkをLambdaのLayersに登録
DynamoDBのテーブルを作成
IAMポリシーとロールを作成
SSMパラメーターストアにuser情報を格納するパラメーターを作成
①Push機能
プッシュメッセージのサンプル動作の確認
Lambda関数を作成
トリガーを設定
テスト
②応答機能
応答メッセージのサンプル動作の確認
Lambda関数を作成
API Gatewayの設定
テスト
③集計機能
Lambda関数を作成
テスト
前準備
LINE Developersで、Messaging APIを作成
LINE Developersで、Messaging APIを作成していきます。
LINE Developersにログイン
LINE Developersにログイン。いつも使っているプライベートのLINEアカウントでログインできます。
プロバイダーを作成
プロバイダーを作成します。プロバイダー名は開発者名です。好きに設定します。
Messaging APIを作成
チャンネルはMessaging APIを選択。
それぞれ入力します。
あなたのユーザーIDの取得
作成されると、このような画面になります。
「チャンネル基本設定」の下の方、「あなたのユーザーID」を控えておきます。
チャンネルアクセストークンの取得
「Messaging API設定」を選択。
一番下に「チャンネルアクセストークン」というのがあるので、「発行」を選択。
ここで発行されたトークンを控えておきます。
LINE botを友達登録
同じく「Messaging API設定」からQRコードをスマホ読み取って、LINE botを友達登録しておきます。
以上で、とりあえずLINE Developersの前準備はおしまいです。
line-bot-sdkをLambdaのLayersに登録
LINEにメッセージを送るためには、HTTPリクエストを送る必要があります。urllib.requestでも十分実装できるのですが、line-bot-sdkというLINE bot用のライブラリがあるので、こちらをつかっていきます。
それぞれのLambda関数の中に含めてもいいのですが、今回作成する3つのLambda全てで使うものになるので、Layersに登録していきたいと思います。
リファレンスはここにあります。
zipを作成
pythonフォルダ配下にinstallして、zipに固めます。今回使った google-cloud-vision のバージョンは 2.3.2 でした。
$ mkdir python $ pip3 install -t ./python line-bot-sdk $ zip -r line-bot-sdk.zip python
Layers登録
「レイヤー」から「レイヤーの作成」を選択。
レイヤーを作成。
DynamoDBのテーブルを作成
薬を飲んだかどうかを記録するためのテーブルを作成。
IAMポリシーとロールを作成
↑で作ったDynamoDBとSSMのパラメータストアにアクセスできる権限をつけたロールを作ります。
ポリシーを作成
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "dynamodb:PutItem", "dynamodb:DeleteItem", "dynamodb:GetItem" ], "Resource": [ "arn:aws:dynamodb:*:xxxxxxxxxxxx:table/line-bot-medical" ] }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": [ "ssm:PutParameter", "ssm:GetParameter" ], "Resource": "*" } ] }
ロールを作成
上記ポリシーを使ってロールを作成します。作成方法は割愛します。
SSMパラメーターストアにuser情報を格納するパラメーターを作成
先ほど控えた「あなたのユーザーID」を指定しておきます。
後で、メッセージをプッシュする対象として使います。
中編へ続く
中編ではLambda関数を作っていきます。