Googleカレンダーに登録している1週間分の予定をLINEに通知してくれるプロジェクトです。
※現在はLINEアカウントやAWSリソースを自分で用意する必要があります。
- LINEアカウント「マイスケジュールリマインダー」を友達登録する。
- GoogleアカウントでGoogleカレンダーへのアクセスを許可する。
- 毎日21時に1週間分の予定がLINEに通知されます。
- 1対1のトークのみ対応
- デフォルトのGoogleカレンダーの予定を1週間分通知する
- LINE上で購読カレンダーの一覧表示・追加・削除(クイックリプライ対応)
カレンダー一覧またはカレンダー- 現在購読中のカレンダー一覧を返信します。購読が無い場合は追加方法を案内します。
カレンダー追加- Googleアカウントと未連携の場合は、まず認可URLを返信します。URLを開き認可後、利用可能なカレンダーの一覧をクイックリプライで提示します。追加したいカレンダーを選択すると購読に登録されます。
カレンダー削除- 現在購読中のカレンダーをクイックリプライで提示します。削除したいカレンダーを選ぶと購読から削除されます。
- クイックリプライで表示できる件数には上限があります(最大12件)。
- 項目ラベルは表示上、最大20文字に丸めて表示されます。
- グループトーク内での通知
- 購読カレンダーのみを対象にした通知配信
各種インストールしてください。
- Bun v1.1.34 以上
- パッケージマネージャーやテストのランタイム環境として利用しています。
asdfでバージョン管理しているので、asdfもインストールしてください。
- AWS CLI v2.22.26 以上
- 後述のAWS SAMを利用するために必要です。
- 参考:AWS CLI の最新バージョンのインストールまたは更新 - AWS Command Line Interface
- AWS SAM (AWS Serveless Application Model)
- LambdaなどのAWSリソースを管理します。
- 参考:AWS SAM CLI のインストール - AWS Serverless Application Model
- LINE Messaging API:LINEユーザーにメッセージを送信するためのAPI
- Google Calendar API:Googleカレンダーの予定を取得するためのAPI
カレンダーの予定の通知は以下のように行っています。
graph LR
subgraph AWS
EventBridge -->|1.trigger| Lambda
end
subgraph Google
google[Google Calendar API]
end
Lambda -->|2.fetch| google
Lambda -->|3.pushMessage| messaging-api
subgraph LINE
messaging-api[LINE Messaging API] -->|4.notify| user((User))
end
- EventBridgeによって毎日21時にLambdaがトリガーされます。
- LambdaではGoogle Calendar APIからカレンダー情報を取得し、LINE Messaging APIに対してメッセージを送ります。
- LINEユーザーにメッセージが届きます。
LINEユーザーが友達登録した際、メッセージを送信した際は以下のようにイベントを取得できます。
graph LR
subgraph LINE
user((User)) -->|友達登録、メッセージ送信| line[LINE Platform]
end
subgraph AWS
apigw[API Gateway] -->|trigger|Lambda
end
line-->|Webhook|apigw
- LINEユーザーが友達登録やメッセージ送信などを行う
- LINEプラットフォームから登録済みのWebhook用エンドポイントにリクエストが送られる
- API GatewayからLambdaを起動する
- LINE
- LINE公式アカウントを作成する
- 参考:https://zenn.dev/link/comments/42fbfda5176305
- Google
- Google Cloudプロジェクトを作成し、Google Calendar APIを利用できるようにする
- Google CloudプロジェクトのクライアントID、クライアントシークレットを発行してください。
- 参考:https://zenn.dev/link/comments/522cacc14e3d14
以下のアクセストークンが必要になるため、発行します。
- LINE Messaging APIのためのチャネルアクセストークン
下記のコマンドを実行するとAWS環境にリソースが作成されます。
bun run build
bun run deployその後、AWS SSMのパラメータストアまたはLambdaの環境変数に以下の値を設定してください。
| パラメータ名 | 環境変数名 | 説明 |
|---|---|---|
| line-schedule-reminder-google-client-id | GOOGLE_CLIENT_ID | Google Calendar APIのためのクライアントID |
| line-schedule-reminder-google-client-secret | GOOGLE_CLIENT_SECRET | Google Calendar APIのためのクライアントシークレット |
| line-schedule-reminder-google-redirect-uri | GOOGLE_REDIRECT_URI | Googleで認可を得たときにリダイレクトされるURL |
| line-schedule-reminder-line-channel-access-token | LINE_CHANNEL_ACCESS_TOKEN | LINEチャネルアクセストークン |
| line-schedule-reminder-line-channel-secret | LINE_CHANNEL_SECRET | LINEチャネルの署名キー |
AWSマネジメントコンソールからデプロイしたLambdaをテスト起動してください。 (参考:コンソールでの Lambda 関数のテスト - AWS Lambda)
正しく設定できていれば公式アカウントからGoogleカレンダーの予定が通知されます。
ユニットテストは__tests__フォルダに格納しています。下記のコマンドで実行してください。
bun run testMITライセンスです。