ワタクシが従事しているプロジェクトが様々な理由でgoogle workspaceにチャットまで含めて移行することになり、slackではなくgoogle chatを使うことになった。
さて。
google chatはなんていうのか、slackと比べると実に至らないチャットで、まあgoogleが作るものはたいてい 「帯に短し、たすきに長し」 な代物が多いと、ワタクシなどは思っているのだが、それはさておきである。
ワタクシのプロジェクト、安いというのもありCIにunity cloud buildを使っているのだけど、こいつはslackやdiscordにはインテグレーション出来るが、google chatは出来ない。
これでgoogle workspaceの評価も出ているような気もするが…チャットにポストされないのはウザくてしょうがないので、仕方ないからGASを使ってウェブアプリを作り、これを経由することでgoogle chatとインテグレーションしたので、以下にそのやり方を書いておきたい。
1) google chat でWebhookを用意する
まずgoogle chatでwebhookを作る。これがないとchatと接続することは出来ない。
作り方はとても簡単だ。
- メニューより Webhookを管理を選ぶ。
- 着信Webhookの名前を決める(まあアイコンも決めてもいい)。
- URLが出来るので、これをコピーする(今やらなくてもよい)
2) GAS でBOTプログラムを作る
GASでプログラムを書く。このプログラムがunity cloud buildとgoogle chatを繋ぐためのchat botのコアになる。
function doPost(e) {
let str = e.postData.getDataAsString();
let params = JSON.parse(str);
let webhookUrl = "ここにWebhookのURLを入れる";
//Googleチャットの投稿メッセージを定義
let date = new Date();
let jstdate = Utilities.formatDate(date, "JST", "yyyy/MM/dd (E) HH:mm");
let message = {
'text' : '== Build Information '+jstdate+' ==\n'
+'Target: '+params.buildTargetName+' (#'+params.buildNumber+')\n'
+'Status: '+params.buildStatus+"\n"
+'Started by '+params.startedBy+"\n"
+'====================='
};
//HTTPS POSTのオプションパラメータの設定。API認証のためheaders情報必須
let options = {
'payload' : JSON.stringify(message),
'myamethod' : 'POST',
'contentType' : 'application/json'
};
//WebhookのURLに対しHTTP POSTを実行する
let response = UrlFetchApp.fetch(webhookUrl,options);
}
webhookのURLをちゃんと入れたら、あとはデプロイするだけである。
少し書いておくと、getDataAsStringをやっているのは、postされたモンをjsonでそのまま取る方法がないっぽかったのと、unity cloud buildがどーいうjsonを出しているのかslack APIのマニュアルを見て 「こんなもんだろう」 と想像はついたのだけど、実際わからなかったのでメッセージ本体にデバッグも兼ねてstrをぶっこんで、丸ごと表示テストしたからだ。
出す情報をカスタマイズしたい方は、let messageのゴチャゴチャやっているところを str に一度置き換えて、出てくるものを見て、各自でメッセージをカスタマイズして欲しい。
3) デプロイする
ウェブアプリとしてデプロイする。説明は面倒くさいので、マニュアルなりGAS入門なりを読んで欲しい。
ただ注意としてソースを修正してもデプロイしないと、実際のAPIが更新されないからね。これ、ワリとワナ。
で、デプロイされたURLをコピーしておく。
4) Unity Cloud Buildにwebhookを追加する
- Project Setting > Integrationを選択する。
- New Integrationを選択する。
- webhookを選択
- cloud buildのイベントを全部選択
- webhook URLにデプロイされたURLを入れる。
と、このようにして、google chatとunity cloud buildはイングレート可能である。
ちなみにgoogle chatのcard formatを使うと、もっとイロイロ出来るが、そんな必要はないだろう。