Google Forms
をそのまま使っていると、フォームから回答や問い合わせがあったときに基本的に気づかないので、だいたいは個人で使っているSlack
に通知を飛ばすようにしています。
もちろん、Slack
経由でiPhone
などにも通知が飛ぶので重宝します。
だいたいこんな感じで Slack
に通知が入ります👇
個人的にこのSlack + Google Forms
の組み合わせはよく使うため、個人的メモとして、いつでもちゃちゃっと作れるようにQiitaに備忘録を残しておくことにしました。
基本的には、下記の手順をそのまま実施すればOKかと思います。
(テキストなどは適宜アレンジしてください)
設定手順
-
Slack
にてIncoming Webhook
を追加し、webhook url
をメモする -
Google Forms
でアンケートを作成。 - アンケート作成後、そのままformsから
スクリプトエディタ
を起動し、下のコードを貼る - 適宜テキストなどを編集し、さきほどメモった
webhook url
もコード内に貼る。 - onFormSubmit関数をフォーム送信時に実行するようにトリガーを設定
スクリプトエディタに貼り付けるコードの内容
function sendToSlack(data, url) {
var payload = JSON.stringify(data);
var options = {
"method" : "POST",
"contentType" : "application/json",
"payload" : payload
};
UrlFetchApp.fetch(url, options);
}
function onFormSubmit(e){
// webhook url
var POST_URL = ""; // SlackのIncoming Webhook urlを入力
var data = '';
var formResponse = e.response;
var itemResponse = formResponse.getItemResponses();
for (var i = 0; i < itemResponse.length; i++) {
var formData = itemResponse[i];
var title = formData.getItem().getTitle();
var response = formData.getResponse();
// アンケート項目
data += title
data += ':\n'
// 項目への回答内容
data += response
data += '\n'
}
var attach = {
pretext: 'アンケートに回答がありました',
title: 'アンケート結果',
text: data,
color: "#7CD197"
}
var attachments = []
attachments.push(attach);
var jsonData = {
username: "アンケート回答",
channel: "", // 送信したいチャンネル名を入力してください
icon_emoji: ':hatching_chick:', // お好みで絵文字を
attachments: attachments
}
sendToSlack(jsonData, POST_URL);
}
かなり雑ではありますが、こだわらなければ、これでおよそ10分ほどで設定が行なえます。
V8ランタイムを用いた書き方 - ECMAScript 2015(ES6)対応版
気づけばGoogleのApps ScriptはランタイムがV8になり、ECMAScript 2015(ES6)が利用できるようになっていたため、そちらに対応したコードも載せました。
処理の内容は上に載せたコードと同一です。
const sendToSlack = (data, url) => {
const options = {
"method" : "POST",
"contentType" : "application/json",
"payload" : JSON.stringify(data),
};
UrlFetchApp.fetch(url, options);
}
const onFormSubmit = (e) => {
// webhook url
const POST_URL = ""; // SlackのIncoming Webhook urlを入力
let data = '';
const itemResponse = e.response.getItemResponses();
for (let i = 0; i < itemResponse.length; i++) {
const title = itemResponse[i].getItem().getTitle();
const response = itemResponse[i].getResponse();
// アンケート項目
data += title
data += ':\n'
// 項目への回答内容
data += response
data += '\n'
}
const attach = {
pretext: 'アンケートに回答がありました',
title: 'アンケート結果',
text: data,
color: "#7CD197"
}
const attachments = []
attachments.push(attach);
const jsonData = {
username: "アンケート回答",
channel: "", // 送信したいチャンネル名を入力してください
icon_emoji: ':hatching_chick:', // お好みで絵文字を
attachments: attachments
}
sendToSlack(jsonData, POST_URL);
}