情報の洪水に溺れてしまう
はじめまして、プロトタイピングを教えるスクールで担任をしている「りっく」といいます。
新しい生徒さんが入り、プロトタイピングについて授業をしていくのですが、
生徒さんにとっては、初めて使うWebサービス、初めて聞く単語、初めて触る抽象的な概念など、とにかく情報量が多く、初回授業後に大混乱が発生します。
情報のポータルサイトを作り、MicrosoftのTeamsに都度情報を流すものの、圧倒的な情報量の前では、どんなにまとめても溺れそうになる現状があります。。。
作ったもの
そこで、スマホから簡単に確認できるLINEBotを使って情報をわかりやすく表示できないかとあれこれ考え、作ってみました。
機能
- ポータルサイトや授業資料のURLを教えてくれる機能
- その週の宿題で気をつけることを教えてくれる機能(実装中)
- その週のTODOをまとめて教えてくれる機能(実装中)
- ちょっとした単語の意味など、ChatGPTに聞ける機能
- 使い方を教えてくれる機能
実装概要
Routerを使って処理を分岐させる
「○○」と入力したら「XX」とリプライメッセージを返す
「○○」と入力したら〜というのはRouterと線の設定で終わっているので返却内容を設定したらOK
TODOを返却する
まだ実装途中で、リプライメッセージの組み立ては参考程度にしておいてください
「「○○」と入力したら「XX」とリプライメッセージを返す」という設定を毎週チマチマと行えばいいのですが、非常に面倒なので、TODOの内容自体はスプレッドシートで設定し、それをAPIとして呼び出して使うようにしました。
スプレッドシートをAPIとして利用するにはSSSAPIというサービスがおすすめです。
ポイントはshowで、今表示したいのは1、もう終わった/次の授業のTODOは0と設定するようにします。
APIの呼出時にフィルターをかけ、showが1となっているものだけ取得するようにします
SSSAPIの資料によると、APIのURLに、
?filter__対象__条件指定=値
と値を追加してURLを組み立てるといいので、
「showが1と一致する(exact)」データだけ取得したい場合には以下のようになります
https://api.sssapi.app/<app_id>?filter__show__exact=1
そのデータをJSONで分解し、今回はTODOが複数なので、その後の処理で扱えるように、配列という箱の中に詰め直します。(もっといい方法がありそうではあるので、ご存知の方教えてください)
「Tool」 > 「Array aggregator」で以下のように設定します。
アウトプットを確認すると、Array Aggregatorの機能によって、Bundle1,2に分かれていたデータが、Bundle1にまとめられで[{Todo: ~~~~~},{Todo: ~~~~~}]という形で入っているのが確認できますね
リプライメッセージモジュールの中で、返信する内容を組み立てます
以下のように実装中です。配列に対する機能の「map」を使って取り出せそうですが、ちょっと期待どおりの動作しないので参考程度にお願いします
mapを使ってTodoを純粋な配列に変換
ArrayAggregatorで配列にしても、中身はcollectionになってしまっているので、mapで配列それぞれのcollectionのtodoを取り出します
[{Todo: ~~~~~},{Todo: ~~~~~}]
が
[~~~~~,~~~~~]
という形になります
mapを使って取り出した配列をjoinで繋げる
join([配列]; 区切り文字)という形式で設定します
Run Onceだと返信されるけど、スケジュールONで動かすと返信されない。。。調査中です。。。
参考記事
https://qiita.com/Ryo947/items/a0b3e12a065d09c43bd0
参考記事ではAPIから取得したデータに対して、ランダムに一つを取り出してリプライに利用しています。