#48 チャットを使って通知する (前編)
Facebook の公開グループ「Google for Education 研究グループ」に寄せられていた以下のような質問。
Classroom の変化が本来はメールで通知されるはずなのに、Gmail の利用が制限されていることで受け取れない、という悩みなのだと思います。
この要望を、Google チャットのスペースを利用して解決できないか、チャレンジしてみました。 ※この記事では、解決に至っておらず、解決の糸口を見つけたところで、次の記事に続きます…
(0)前提条件
今回のプログラムを作成するにあたって、GAS でチャット(スペース)にメッセージを投稿する場合、次の条件を満たしていなければなりません。
Google Workspace で発行された Google アカウントであること
「Google Chat で利用できる機能を確認する(使用するアカウント別) - Google Chat ヘルプ」では「メッセージに Webhook を設定する」が利用できるのは下図のように、「有料の Google Workspace アカウント」と記載されていますが、これは「個人のアカウント」に対するものであり、有料プランの Google Workspace のアカウントであることを指しているわけではないようです。
そのため、有料プランではない「… for Education Fundamentals」でも利用可能です。無料の個人アカウント(@gmail.com)では利用できません。
しかしながら、「… Essential Starter」が含まれるのかは確認できていません。 ※確認できた方は、コメントなどで教えていただけるとありがたいです。
管理コンソールで「Chat用アプリ」の利用がオンになっている
管理コンソールの下図の部分での設定が重要です。「Chat 用アプリのアクセス設定」で次の 2つの設定をともにオンにしなければなりません。
ユーザーに Chat 用アプリのインストールを許可する
ユーザーに着信 Webhook の追加と使用を許可する
前項の「ユーザーに Chat 用アプリのインストールを許可する」「ユーザーに着信 Webhook の追加と使用を許可する」については組織全体でオンになっていなければなりません。
ヘルプ記事でも補足されていましたが、プログラムを利用するアカウントが属する組織部門だけでオンになっていても有効になりません。
後者の方については、上記のヘルプ記事に以下のように説明されています。管理コンソールの UI としては、組織部門ごとに設定できるようになっているものの、Chat API を利用したいのであれば「最上位の組織部門」、すなわち組織全体でオンにしていなければならないのです。
この記述に気付くまで、後述する他のサイトで紹介されているプログラムを実行しても、どうにもエラーになってしまい四苦八苦しました。同様のエラーになる場合には、この設定を確認してみてください。
(1)スペースの作成
まずは、投稿先となるスペースを作成します。「+ 新しいスペース」 →「スペースを作成」を選択します。
スペースの作成画面「スペースを作成」は、組織で利用している Google Workspace の設定によって表示される設定項目が多少変化すると思いますが、以下の項目を設定して「作成」ボタンを押します。
スペース名
説明
「スレッド返信を使用する」
組織の設定によっては、「組織外のユーザーの参加を許可する」が表示されていないケースもあると思います。
(2)Webhook の取得
スペースが作成できたら、スペース名の右側に表示されている ▼ をクリックして、「Webhook を管理」を選択します。 ※下図では、作成したスペースに「GAS でチャットに通知」というスペース名を設定しています。
「着信 Webhook」画面では、Webhook の「名前」と「アバターの URL」を設定します。
今回は Webhook の名前に「Webhookのテスト」と設定しています。 ※ここで設定した名前が、チャットに投稿したときの投稿者の名前になるので、そのように表示されることを意識しておきましょう。
Webhook の名前を設定すると、上図のような画面が表示されるので、作成した Webhook の右側に表示されているリンクのコピーボタンをクリックしておきます。
(3)GAS のプログラムの準備
今回は、Webhook を用いてチャットに投稿する動作を確認するプログラムを作成してみました。GAS に不慣れな人でも、この仕組みが利用できるかを確認できるように、プログラムを変更しなくてもいいように Google スプレッドシートに必要な情報を設定すればいいようにしてみました。
以下のリンクにアクセスして、自身の Google ドライブにスプレッドシートをコピーしてください。
https://docs.google.com/spreadsheets/d/10l30FOZ8Hd0n-RDSHNYC3FKVzdnmtgWAtYylmOlSPas/copy
セル B1 に、前項 (2) で取得した Webhook のリンクを貼り付けます。
(4)チャットに投稿してみる
前項 (3) までで、準備は完了です。「チャットに投稿」ボタンを押して、プログラムを実行してみましょう!
はじめて実行する場合には、権限の確認が行われるので、↓ の記事を参考にしながらプログラムが実行できるように許可してください。
前述の「(0)前提条件」で説明した条件が満たされていない場合には、下図のようにセル B3 にエラーが表示されます。
Chat 用アプリや Webhook が利用できる環境であれば、セル B3 にはチャットに情報が表示され、スペースには下図のようにセル B2 に指定した文字列が投稿されているはずです。
作成したプログラム
今回のスプレッドシート内の保存してある GAS のプログラムは、Webhook の動作を確認するためのもので、以下のような約 30行のプログラムです。
このプログラムは、以下の記事で公開されていたプログラムを以下のように変更したもので、30行あまりのプログラムで、大まかな流れは変更していません。
スペースへの投稿だけを行う。
Webhook や投稿する文字列は、スプレッドシートから取得する。
投稿した結果も表示する。
エラーが発生したときは、その詳細な情報が把握できるように表示する。
※muteHttpExceptions オプションも追加
この公開されていたプログラムが、とても参考になりました。ありがとうございます。
最後に
今回のプログラム作成にあたって、上記 note の記事に加えて、以下の Qiita なども参考にしました。このようにプログラムや情報を公開してくださっている方々、ありがとうございます!
当初は、職場で利用している GoogleWorkspace for Education Fundamentals の環境で、上記のような Webhook を利用した GAS を実行すると「This organization's administrator must allow users to install this Chat app」というエラーが発生し、原因がわからず四苦八苦しました。
この GAS が実行できている方に環境の差異を確認させていただいたり、テスト環境の Fundamentals で設定変更するなどして、何とか「(0)前提条件」のような条件にたどり着けました。
これで、GAS で Webhook を利用することで、プログラムによってチャットに投稿できるようになりました。記事のタイトルに「…(前編)」と銘打ってあるように、次は Google Classroom の通知をチャットに投稿するプログラムにアップグレードしてみようと思います。