GoogleFormを触る機会があったので、Slack通知のGASをまとめました。
大文字で記した変数に必要な値(トークンやチャンネル名)を渡せばコピペで動きます。
フォームで送信された内容のオブジェクトをgetResponseObject
で生成し、文字列としてSlackに投稿します。内容は必要に応じていじってください。
GAS
function getResponseObject(e) {
if (!e) { return false; }
var obj = {};
var responses = e.response.getItemResponses();
for (var i = 0; i < responses.length; i++) {
var data = responses[i];
var key = data.getItem().getTitle();
var val = data.getResponse();
obj[key] = val;
}
return obj;
}
function sendToSlack(e) {
var url = 'https://slack.com/api/chat.postMessage';
UrlFetchApp.fetch(url, {
method: 'POST',
payload: {
token: SLACK_TOKEN,
channel: SLACK_CHANNEL,
username: SLACK_BOTNAME || 'TestBot',
text: JSON.stringify(getResponseObject(e)) || 'hello, world.',
parse: 'full',
icon_emoji: SLACK_ICON || ':ok_woman:'
}
});
}
GoogleFormEvent
はまりどころ
送信時にSlackに投稿させるためには、今回の場合sendToSlack
をトリガーに設定する。
登録したトリガーは図のように確認ができる。
ただ、ここで設定したトリガーは他人と共有されない。
そのため、他の人が設定したトリガーがここに表示されるようなことはないし、sendToSlack
を別の人がトリガーとして設定していた場合は何度も呼ばれることになるが、なかなか気付きにくい。