🐣

[作ってみた] Ruby on Rails で LINE BOT

2021/07/18に公開

0. 初めに

A. Rails歴半年程度です、お察しください。

1. 開発環境

Name Plan
IDE AWS Cloud9
PaaS Heroku
Data store Heroku Postgres Hobby Dev
Data store Heroku Redis Hobby Dev
Scheduler Heroku Scheduler Standard

2. ブロック図

A. LINEでのログイン情報(アクセストークン)を利用してデータにアクセスする
B. データの登録編集表示はRuby on Railsで作成したWebサイトで行う
C. データの表示はLINE BOTでも行える
D. リマインダー通知はLINE Notifyを通して行う

3. ルートイメージ

4. サイトイメージ

5. 操作 - フォローとコマンド

  1. [LINE] BOTと友達になる。
  2. [LINE -> Rails] Followイベントが発生する。
  3. [Rails -> Postgres] 管理者として登録される。
  4. [LINE] "こまんど"と発言する。
  5. [LINE -> Rails] Messageイベントが発生する。
  6. [Rails -> LINE] コマンド一覧を返す。
  7. [LINE] "Show events"ボタンを押す。
  8. [LINE -> Rails] Postbackイベントが発生する。
  9. [Rails -> LIFF] Reminder BOT Webサイトを表示する。

6. 操作 - フォローとコマンド(二人目以降)

  1. [LINE] BOTと友達になる。
  2. [LINE] "こまんど"と発言する。
  3. [LINE] "Register"ボタンを押す。
  4. [LINE -> Rails] Postbackイベントが発生する。
  5. [Rails -> Postgres] ユーザーとして登録される。
  6. [LINE] "こまんど"と発言する。
  7. [LINE] "Show events"ボタンを押す。
  8. [LINE -> Rails] Postbackイベントが発生する。
  9. [Rails -> LIFF] Reminder BOT Webサイトを表示する。

7. LINE コマンド

コマンド 動作 備考
こまんど コマンドボタン一覧を表示 8. コマンドボタン
ばいばい BOTを退出させる
きょう 今日の予定を表示 現在時までに終了した予定は含まない
あした 明日の予定を表示
きょうあした 今日と明日の予定を表示 現在時までに終了した予定は含まない
こんしゅう 今週の予定を表示 現在時までに終了した予定は含まない
らいしゅう 来週の予定を表示
こんげつ 今月の予定を表示 現在時までに終了した予定は含まない
らいげつ 来月の予定を表示
?[WORD] [WORD]に指定した言葉を含む予定を表示

※ 定期予定は次回分のみ表示

8. コマンドボタン

コマンド 機能 対象者
Register ユーザーとして登録する ユーザーのみ
Show events (All) Reminder BOT Webサイトを表示する 管理者のみ
(全ての予定を表示する)
Show events Reminder BOT Webサイトを表示する 全て
(自分の予定を表示する)
Sidekiq Sidekiq Webサイトを表示する 管理者のみ

9. Reminder BOT Webサイト

9-1-1. 予定一覧画面

9-1-2. 各要素の動作

要素 動作 備考
Createボタン(青色) 予定作成画面へ ​         ​
Dataボタン(緑色) 予定編集画面へ
Deleteボタン(赤色) 予定を削除する

※ 終了済みの予定には"[Ended]"と表記
※ 次の通知には"[Next time]"と表記

9-2-1. 予定作成画面

9-2-2. 各要素の動作

要素 動作 備考
Backボタン(青色) 予定一覧画面へ
Title タイトル
Description 説明
Start date 開始日
End date 終了日
Start time 開始時間
End time 終了時間
Day of week 曜日
With order 何番目 曜日と組合せて、「第ニ金曜日」などを表す
Week of month 何週目 曜日と組合せて、「第四週の火曜日」などを表す
Day of month 月の特定の日 毎月25日や末日(-1を選択)などを表す
Reminder-1 通知1
Reminder-2 通知2
Reminder-3 通知3
Create eventボタン(緑色) 予定を作成する

9-2-3. 主な入力規則

要素 ​ 空欄 ​ 備考
Title 不可
Description
Start date 1. 現在日以降であること
End date 1. 開始日が入力されていること
2. 開始日以降であること
Start time 1. 開始日が入力されている場合、現在時以降であること
End time 1. 開始時が入力されていること
2. 開始時以降であること
3. 開始日が入力されている場合、開始日時以降であること
Day of week 1. 開始日と開始時が入力されていないこと
2. 月の特定の日が入力されていないこと
With order 1. 曜日が入力されていること
Week of month 1. 曜日が入力されていること
Day of month 1. 開始日と開始時間が入力されていないこと
2. 曜日が入力されていないこと
Reminder-1 不可
Reminder-2 不可
Reminder-3 不可

9-3-1. 予定編集画面

9-3-2. 各要素の動作

要素 動作 備考
Backボタン(青色) 予定一覧画面へ ​         ​
Save eventボタン(緑色) 編集を保存する

※上記以外は予定作成画面(9-2-2. 各要素の動作)と同等

9-3-3. 主な入力規則

※予定作成画面(9-2-3. 主な入力規則)と同等

9-4-1. ユーザー一覧画面

9-4-2. 各要素の動作

要素 動作 備考
Dataボタン(緑色) ユーザー編集画面へ ​         ​
Deleteボタン(赤色) ユーザーを削除する

9-5-1. ユーザー編集画面

9-5-2. 各要素の動作

要素 動作 備考
Backボタン(青色) ユーザー一覧画面へ
LINE name ユーザー名 LINEサーバーより取得
Activate アクティベート ユーザーの有効/無効
Notify token トークン LINE Notifyより取得
Expires in 有効期限
Reminded at 最終通知日時
Save userボタン(緑色) 編集を保存する

9-5-3. 主な入力規則

要素 空欄 備考
LINE name ​ 不可 ​ ​         ​
Activate 不可
Notify token
Expires in
Reminded at

10. Sidekiq Webサイト

11. LINE Notfiy

12. 管理者とユーザーの権限

操作 管理者 ユーザー
Users [表示、編集、削除] 全て 自分のみ
(編集はNotify tokenのみ)
Events [登録、表示、編集、削除] 全て 自分のみ

13. ソースコード

https://github.com/kaiyu-tech/reminder-bot.git

14. 環境変数

・Development、Production、Test

要素 説明 備考
LINE_CHANNEL_ID LINE チャネルID LINE Developersより取得
LINE_CHANNEL_SECRET LINE チャネルシークレット LINE Developersより取得
LINE_CHANNEL_TOKEN LINE チャネルアクセストークン LINE Developersより取得
LIFF_CHANNEL_ID LIFF チャネルURL LINE Developersより取得
LIFF_CHANNEL_URL LIFF チャネルURL LINE Developersより取得
HASH_SALT Hash Salt テストでは使用しない
ENCRYPTION_PEPPER Encryption Pepper
HEROKU_URL Heroku URL
SIDEKIQ_USERNAME Sidekiq Username
SIDEKIQ_PASSWORD Sidekiq Password
LINE_NOTIFY_TOKEN LINE Notifyトークン LINE Notifyより取得

・Test専用

要素 説明 備考
HASH_SALT_TEST Hash Salt テスト中の低コスト生成用

15. おわり

様々な面で不足している部分が多いことは認識しています。
ひとまずの成果物としてアウトプットしました。

Discussion