#49 チャットを使って通知する (後編)
以下の前編からの続きです。Webhook を利用して、Google チャットのスペースへの投稿が行えるので、これを利用して Google Classroom への投稿を、スペースを使って通知するプログラムを作ってみました。
どんなプログラム?
作成したのは、下図のようなスプレッドシート(3つのシート)と、内蔵された GAS のプログラムです。
GAS に不慣れな人でも利用できるように、細かなカスタマイズを行わないのであれば、GAS のエディタ画面を開くことなく、スプレッドシートで設定値を設定し、配置されたボタンを押すだけで導入できるようにしてあります。
このプログラムによって、クラスに新規の投稿があった場合にはスペースに投稿されるようになります。Gmail が利用できないなどで、クラスの状況を把握しづらいがチャットは利用できる場合には、チャット(スペース)によって通知が行えます。
導入方法
(0)スプレッドシートのコピー
以下のリンクにアクセスして、自身のGoogle ドライブにスプレッドシートをコピーしてください。
https://docs.google.com/spreadsheets/d/1CcxOnQRMn7HJniua_plvCyXHkZtbj6XjZRBKNmx3vVA/copy
上記 URL からコピーした時点では、シート「設定」以外はデータが空になっています。
シート「クラス一覧」 → 1行目に見出し行があるだけ
シート「通知履歴」 → すべて空欄
以降は、シート「設定」にも記載されている手順に沿って設定・操作していきます。
(1)Webhook の設定
セル B1 に、更新内容を投稿するチャット(スペース)の Webhook を入力します。 設定する Webhook については、再掲になりますが、以下の前編をご覧ください。
シートの右側にある「Webhook 動作確認」ボタンを押すと、入力された内容でテスト投稿を行います。
はじめて実行する場合には、権限の確認が行われるので、↓ の記事を参考にしながらプログラムが実行できるように許可してください。
入力した Webhook が正しく動作していれば、下図のように「Webhook の動作確認」という投稿が行われているはずです。問題なければ、次に進みます。
(2)通知する時間帯を確認する
このプログラムによって、通知を行う時間帯を、セル B4 ・ B5 に 24時間表記の時間(0~24)で設定します。
現在設定されている値で問題ないかを確認します。
ここで設定した時間外には、トリガー関数が実行されても通知されません。常時に通知して欲しい場合には、0 と 24 を設定します。
(3)最大取得件数を確認する
セル B7 の「最大取得件数」は、それぞれのクラスに対して、何件分の更新をさかのぼってチェックするのかを指定します。
現在設定されている値で問題ないかを確認します。
クラスの更新頻度にもよりますが、あまり大きな値を設定する必要はないと思います。
このプログラムでは 5分間隔にチェックを行いますが、このチェックが行われる間隔に「最大取得件数」よりも多い投稿が行われるようであれば、相応の値に変更してください。
(4)参加しているクラスの一覧を取得
「参加クラスを取得」ボタンを押して、プログラムを実行するアカウントが参加しているクラスの一覧を、シート「クラス一覧」に作成します。
このとき、シート「クラス一覧」の内容はすべて削除され、一覧が再作成されます。
(5)処理対象のクラスを確認
前項の操作でシート「クラス一覧」の作成されたクラス一覧のうち、更新チェックを行う対象のクラスを残し、チェックの対象にはしないクラスの行は削除します。
ラベル行である 1行目は残したままにして、削除しないでください。
処理対象として残す行は、編集・変更せずにそのまま残してください。ソートするなど、行の順番が変更になっても構いません。 ※列 A「ID」と列 B「クラス名」はプログラム中で使用しているので、変更されるとエラーの原因となります。
参加しているクラスすべてをチェックすることも可能ですが、多くのクラスに参加している場合、多数の通知に埋もれてしまって、チャットで通知されていても見落としてしまうかもしれません。
(6)動作チェック
「動作チェック」ボタンを押すと、以上の設定で更新チェックが行われ、現在の状態での通知が行われます。
このときに各クラスに投稿されている内容をさかのぼって検出します。対象となるクラスが多い場合には、大量の通知が投稿されます。
この処理は、あとでトリガー関数として定期的に実行する関数を、手動で実行させています。
「(2)通知する時間帯を確認する」に当てはまらない時間にボタンを押した場合、動作チェックは行えません。
(7)トリガー関数の登録
前項までの設定・動作が問題なければ、「トリガー関数 登録」ボタンを押してトリガー関数を登録します。
「トリガー関数 登録」ボタンを押すと、二重登録を防ぐために、既に登録されているトリガー関数はすべて削除されます。
※同じスプレッドシート内に他のプログラムを追加し、そのプログラムのためのトリガー関数を設定している場合には注意してください。設定したトリガー関数は、5分間隔で実行されます。
注意点
このプログラムは、以下の Google Classroom API を利用して、それぞれのクラスの投稿を検出して、新規の投稿があれば通知を行います。
上記の Google Classroom API では、追加された投稿を検出できるものの、下図のような課題・質問・資料が追加されたことは検出できません。
同様に投稿に対するコメントも検出できません。
トリガー関数によるチェックの間隔は 5分間に設定してあります。この設定値は、installTrigger() で行っています。下図のように .everyMinutes(5) となっている 5 がチェック間隔です。
この値でチェック間隔を変更できますが、設定できるのは 1、5、10、15、30 に限られます。
チャット(スペース)に投稿される内容は、下図のように「クラス名」「投稿者の名前」「投稿の本文」が連結されたものです。 ※この体裁については、GAS のプログラムの下図の部分でカスタマイズが可能です。
前項のように、「投稿者の名前」として Google アカウントに設定されている名前を取得して表示していますが、Classroom.UserProfiles.get( ) によって取得できない場合には、数字の羅列によるユーザー ID を表示します。
最後に
Facebook で見かけた質問をきっかけに、Gmail が利用できない環境下で、チャット(スペース)を使って通知を行うためのプログラムを作ってみましたが… 「Gmail を制限しているところって、チャットも制限しているのでは?」とも思ったり。(-_-;
Gmail による外部との送受信を嫌うのであれば、以下のヘルプ記事や、以下の EDL の書籍の p.156~161 あたりをもとに制限すればいいのであって、機能そのものを制限するのは適切ではないように思います。
今回のプログラム作成にあたって、以下のページで公開されていたプログラムを参考にさせて頂きました。プログラムの大まかな流れを参考にして、対象となるクラスの指定や導入などの UI を整理したつもりです。
このようにプログラムや情報を公開してくださっている方々、ありがとうございます!
そして、お決まりのフレーズなどを書いておきます。
一応の動作確認は行っているものの、不慮のトラブルによって損害等が生じても、責任はとれませんので予めご了承ください。
コメントを含めても 230行くらいのスクリプトであり、実行に際して目的外の場所への書き出しや収集などは行っていません。
特別なエラー処理は行っていないので、意図しないケースでエラーが発生してしまうかもしれません。どうにもならない場合には、ご連絡ください。
わたし自身にしてみると、このような「スクリプト/プログラムを作ること」が目的になっているような感じですが、このスクリプト/プログラムが何かの役に立てば幸いです。
こんなプログラムがあると、「もっと学校の業務が楽になるのに!」というアイディアがあれば、以下の記事からお聞かせください。