Google Apps Script関連
Google Apps Script に関するメモ
Categories:
Google Form への投稿をフックしてSlackへ通知する
ポイント
- Google Form の各フォームの作成画面からスクリプトエディタへ飛べる
- 同じようなコードを多数書くのは面倒なので、複数のFormで共通的に使えるような運用を考える
- 外部ライブラリ的な使い方をする
本体はこれだけ。 最初は複数のフォームから同一のスクリプトを参照すればよいと思ったのだが、GAS上では「コンテナ(=ここでは各フォーム)」という形で1対1の関係になっているみたいなので、入り口となるスクリプトはフォームの数だけ作る必要があるように見える。
function call(form) {
GoogleFormParser.parse(form)
}
本体から呼び出す共通的なスクリプト。独立した新規スクリプトとして作成する。
やっていること
- Formのタイトルを取得している(通知されたあとに区別するため)
- 「質問」と「回答」それぞれを1つのテキストに結合している
- Parserと言いつつも最後に Slack へ通知する処理も書いている
const CHANNEL = "#google";
function parse(form) {
const formTitle = form.source.getTitle();
const itemResponses = form.response.getItemResponses();
const answers = [];
for(let i = 0; i < itemResponses.length; i++) {
const question = itemResponses[i].getItem().getTitle();
const answer = itemResponses[i].getResponse();
if(!answer) {
answers.push(question + ": 空欄");
} else {
answers.push("*" + question + "*: " + answer + "\n");
}
}
const body = ":wave: *Inquiry received* ("+ formTitle +"): \n"
+ "\n"
+ answers.join("\n");
slack(body);
}
function slack(body) {
PostSlack.sendMessage(body, CHANNEL);
}
Slackへ通知する責務を担う共通スクリプト。これも独立した新規スクリプトとして作成する。
- レガシーな Incomming Webhook ではなく、 Slack App としての実装
SLACK_BOT_TOKEN
としてトークンを事前にセットしておく(環境変数的に)。- 気にならないならハードコードしてもよい。
const token = PropertiesService.getScriptProperties().getProperty("SLACK_BOT_TOKEN");
// こちらは直接呼び出さない。private的な処理
function callWebApi(apiMethod, payload) {
const response = UrlFetchApp.fetch(
`https://www.slack.com/api/${apiMethod}`,
{
method: "post",
contentType: "application/x-www-form-urlencoded",
headers: { "Authorization": `Bearer ${token}` },
payload: payload,
}
);
console.log(`Web API (${apiMethod}) response: ${response}`)
return response;
}
// こちらの関数の呼び出しを期待している
function sendMessage(textMessage, channel) {
if (!channel) {
// チャンネル指定がない場合のデフォルト指定。適当に変更して構わない。
channel = "#general";
}
callWebApi("chat.postMessage", {
text: textMessage,
channel: channel
});
}
ライブラリ的な使い方は以下の記事でも触れているので参考に(この記事では、NotionへPostするためのライブラリ的な活用)
【Notionの活用例】Google Apps Script でメルマガを Notion に送る(スクリプト例)
https://fand.jp/notion/google-apps-script-with-magazine-example/
Google Apps Script を使って Notion にメルマガを集約するためのスクリプト実装例を紹介します。
参考情報