フォーム送信時に内容をslackに送信
ユーザーからのお問い合わせのフォームにgoogle formを使用している場合、通知にメールを設定することが出います。
しかし、メールの場合だと見逃してしまうことがあるので、普段チームで使用しているslackのチャンネルに送信しようと思い、GAS(Google App Script)を使用して実装しました。
必要な情報
- google form
- google spreadsheet(解答)
- slackのtoken
完成コード(Google App Script)
//フォームが送信されたら実行
function onFormSubmit(e) {
sendToSlack();
}
//Slackに送信
function sendToSlack(){
var url = 'https://slack.com/api/chat.postMessage';
var token = '【your_token】'; //取得したtoken
var channel = '【your_channel】'; //例: #general
var text = trimMessage();
var username = '【anyone】'; //なんでもいいです。 hogehogeとかでもいいです
var parse = 'full';
var icon_emoji = '【your_icon_emoji】'; //アイコンを絵文字にすることができます。僕は猫が好きなので:cat2:にしてます。
var method = 'post';
var payload = {
'token' : token,
'channel' : channel,
'text' : text,
'username' : username,
'parse' : parse,
'icon_emoji' : icon_emoji
};
var params = {
'method' : method,
'payload' : payload
};
//slackにポスト
var response = UrlFetchApp.fetch(url, params);
}
// slackにメッセージとして送信したいテキストを作成する
function trimMessage(){
var sheet = SpreadsheetApp.getActiveSheet();
var row = sheet.getLastRow(); //最終行の番号
var column = 1; //列の左端の番号(Aの場合は1)
var numrows = 1; //行を何行取得するか
var numcolumns = sheet.getLastColumn();
var values = sheet.getRange(row, column, numrows, numcolumns).getValues();
var message = String(values).replace(/\,/g, '\r\n'); //「,」を改行に全て変更する
return message;
}
スクリプト解説
onFormSubmit()
フォームが送信されたらここが呼び出されるように設定しました
中でsendToSlackを呼び出しています
sendToSlack()
slackに送信するための情報を定義して、slackにpostしています。
slackに送信したいメッセージを整えるためにtrimMessageを呼び出して成形したメッセージを作成します。
trimMessage()
slackに送信したいメッセージは、今送信されたformの中身なので、spreadsheetの一番下の行を取得するようにしました。
取得に定義したシートに対してgetRangeメソッドを使用しています。
getRangeメソッドは「何行目」の「何列目」から「何行分」を「何列目」まで取るかを引数に渡すと、対応する範囲のカラムを返してくれます!
僕が作成したtrimMessage()の中身だと、以下の部分です。
//現在のシートを取得
var sheet = SpreadsheetApp.getActiveSheet();
//getRangeに渡す引数に必要な情報(何行目の、何列目から、何行分を、何列目まで)を設定
var row = sheet.getLastRow(); //最終行の番号を取得(何行目の)
var column = 1; //列の左端の番号(Aの場合は1)、(何行目から)
var numrows = 1; //行を何行分取得するか(難行分を)
var numcolumns = sheet.getLastColumn(); //最終行の最終カラムの番号を取得(何列目まで)
//設定した情報を使ってgetRangeを実行して、getValuesでレコードの中身を取得します。
var values = sheet.getRange(row, column, numrows, numcolumns).getValues();
valuesにはgetRange()で指定した範囲をgetValues()で取得したオブジェクトが入っています。
また、これをString()でモジレツに変換すると、各カラムの中身が,区切りで文字列になっています。
一つ一つのカラムを改行してslackに送信したいので、,の部分をslack用の改行コードに置換しましょう。
var message = String(values).replace(/\,/g, '\r\n'); //「,」を改行に全て変更する
//*formからの送信内容に,が入っていたらそこも改行されてしまうのでそこはなんとかしたい。。。
return message; // messageを返す
これで実際の作業は終わりです。
あとは、実際にformから送信してみたり、メニュー内の実行からonformsubmitを実行してデバッグしてみてください!
ありがとうございました!