薬を飲むまで飲んだか聞いてくるLINE botアプリを作ってみた[前編]

2021.04.30

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、リサリサです。

友達が毎晩飲まないといけない薬があるのに、よく飲み忘れると聞いたので、毎日薬を飲むまで飲んだかを聞いてくる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関数を作っていきます。