🐣
[作ってみた] Ruby on Rails で LINE BOT
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. 操作 - フォローとコマンド
- [LINE] BOTと友達になる。
- [LINE -> Rails] Followイベントが発生する。
- [Rails -> Postgres] 管理者として登録される。
- [LINE] "こまんど"と発言する。
- [LINE -> Rails] Messageイベントが発生する。
- [Rails -> LINE] コマンド一覧を返す。
- [LINE] "Show events"ボタンを押す。
- [LINE -> Rails] Postbackイベントが発生する。
- [Rails -> LIFF] Reminder BOT Webサイトを表示する。
6. 操作 - フォローとコマンド(二人目以降)
- [LINE] BOTと友達になる。
- [LINE] "こまんど"と発言する。
- [LINE] "Register"ボタンを押す。
- [LINE -> Rails] Postbackイベントが発生する。
- [Rails -> Postgres] ユーザーとして登録される。
- [LINE] "こまんど"と発言する。
- [LINE] "Show events"ボタンを押す。
- [LINE -> Rails] Postbackイベントが発生する。
- [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. ソースコード
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