【GAS】Google Apps Script 活用事例 Slackのワークフローのwebhookを使ってみた
Slack ワークフローを触る機会があり、その中にwebhookを使って開始するというのがあり、気になり試してみました。
そもそも、簡易版のIncoming Webhook
プログラミング知識が無くても、日常的なタスクを効率化出来るというのが売り込みポイントです。GASを書ける人にとっては、Incoming Webhook使えば良くね?となってしまいます。
Slack Appを作る場合、OAuth & Permissionの設定が面倒だったりするので、そういう面倒な事を取っ払って実装出来るのは良いかなと思いました。
ちょっと使いどころを選ぶ印象
Google Workspaceのセキュリティの関係で、doPost関数を使ったインタラクティブな処理、例えばボタンを押したらメッセージの一部を動的に変えるような機能を使いたくても使えないというケースでは有効な手立てになるかもしれません。
利点はあるものの、大抵の場合はワークフロー単体で十分イケるし、足りない場合もGASとIncoming Webhookを使えば十分要件を満たせそうかなと思っています。
なので、ちょっと使い所を選ぶ印象と言ったところ。
2024年現在出来ないこと
条件分岐が出来ないので、1タスク 1ワークフローが基本
例えば、Google Formsの回答などを変数として扱えるが、マークダウンが使えない。すべてplain textとして認識される
受け取ったjsonにfor文を回して成形するような事も出来ないので、複雑なオブジェクト操作には向いていない
Google Formsに回答があったら、Slackに通知する
フォームの内容を操作する。例えば英語で受け取った回答を日本語に翻訳する。質問内容をChat GPTに投げて回答結果を得たいケースがあるときは良いかもしれません…いや、そんなケースあるのか?
function submitForm(e) {
const url = "https://hooks.slack.com/triggers/**************";
const email = Session.getActiveUser().getEmail();
console.log(`フォームを提出した人:${email}`);
const items = e.response.getItemResponses();
let message = '';
for (const item of items) {
const question = `${item.getItem().getTitle()}`;
let answer = item.getResponse();
message += `${question}\n${answer}\n\n`;
}
console.log(message);
const payload = {
"userId": email,
"text": message
};
const options = {
"method": "post",
"contentType": "application/json",
"payload": JSON.stringify(payload)
};
UrlFetchApp.fetch(url, options);
}