公開日:2/23/2022 更新日:3/26/2022
Googleフォーム記入内容をスプレッドシートから抽出してSlackに連携する面倒な作業があり、 GAS (Google Apps Script) を使って自動化できると知ったので本記事のプログラムを作りました。
まずは 下記URLからSlackにログインしてincoming-webhookを登録する。
https://my.slack.com/services/new/incoming-webhook/
チャンネルへの投稿欄に通知を投げたいチャンネルを選択後、追加ボタンを押下する。
Webhook のURL はGASのコーディングで必要なのでメモっておく。
Googleフォームの下記赤枠のスクリプトエディタからGASのページを開いてコーディングをしていく。
gas のスクリプトは以下のようになりました。
完成したコード
function myFunction() {
var form = FormApp.getActiveForm();
var formResponses = form.getResponses();
var lnum = formResponses.length;
var itemResponses = formResponses[lnum-1].getItemResponses();
var name = itemResponses[0].getResponse() + " "
var schedule = itemResponses[1].getResponse() + " " + itemResponses[2].getResponse();
const slackMsg = name + " さんが " +schedule + " に予約しました!";
sendSlack(slackMsg);
}
function sendSlack(slackMsg){
// slackにて追加したWebhook URLを設定
var webHookUrl = "https://hooks.slack.com/services/xxxxxxxxxxxxxxxxxxxxxxxxxx";
var jsonData =
{
"channel": "#test_1",
'icon_url': "https://www.g-workspace.jp/wp-content/uploads/Forms_Product_Icon_512dp.png",
"text": slackMsg,
"link_names": 1,
"username": "説明会予約通知bot"
};
var payload = JSON.stringify(jsonData);
var options =
{
"method": "post",
"contentType": "application/json",
"payload": payload
};
// リクエスト
UrlFetchApp.fetch(webHookUrl, options);
}
幾つか補足でコードについて説明を加えます。
var form = FormApp.getActiveForm();
var formResponses = form.getResponses();
var lnum = formResponses.length;
var itemResponses = formResponses[lnum-1].getItemResponses();
今回は、対象のフォームに紐づく形でスクリプトを作成したのでgetActiveForm
で欲しいフォームの情報が取得できます。
FormApp.openBy(フォームID)
や FormApp.openByUrl(フォームURL)
を使用すればフォームを別途指定して情報取得することも可能です。
formResponses.length
ではGoogleフォームの総回答数が取得できます。なので、formResponses[lnum-1].getItemResponses()
で最新のフォーム回答の情報を取得することが出来ます。
逆にformResponses[0].getItemResponses()
だと一番古い回答情報が取得可能です。
var name = itemResponses[0].getResponse() + " "
var schedule = itemResponses[1].getResponse() + " " + itemResponses[2].getResponse();
itemResponses[N].getResponse()
で回答があった質問から、N-1番目の回答を取得することが出来ます。
今回は、1番目と2番目と3番目の質問の回答を組み立ててメッセージの文字列を作りました。
※ 注意点
任意の質問が途中に存在した場合、回答の有無により itemResponses[X].getResponse()
の結果がずれる可能性あり。
イベントの選択をフォーム送信時に設定する。
実際にフォームに必要事項を記入して送信した際にトリガーが正常終了することを確認する。
成功すると、以下のようにSlackに無事通知される。
以上、【GAS】Googleフォームの回答をSlack通知するやり方 でした。
本記事が参考になると幸いです。