こんにちは。まさきです。
今回はGoogleAppsScriptを使用し、Googleフォームで送信した内容を好きなSlackのチャンネルに投稿する方法をご紹介します。
Googleフォームの内容をSlackで通知を受けたいときに便利です。
結論
ではまず結論です。
今回の結論はコードのご紹介です。
対象のGoogleフォームのスクリプトエディタを開き、以下のコードを貼り付けてください。
/*フォーム送信時に起動するトリガーに「submitForm」を設定*/
function submitForm(e) {
/* ステップ1: フォームのデータを取得する */
//すべての質問と回答を取得する
let itemResponses = e.response.getItemResponses();
/* ステップ2: 必要なデータを抽出する */
//個々の質問と回答を格納するための空配列を宣言する
let questionAndAnswers = [];
//for文(ループ)で変数itemResponsesから個々の質問と回答を取得する
for(let i = 0; i < itemResponses.length; i++) {
//質問のタイトルを取得する
let questionTitle = itemResponses[i].getItem().getTitle();
//回答を取得する
let answer = itemResponses[i].getResponse();
//未回答の質問かどうかで送信文章を調整する
if(!answer) {
questionAndAnswers.push("【" + questionTitle + "】: 未回答\n");
} else {
questionAndAnswers.push("【" + questionTitle + "】\n" + answer + "\n");
}
}
/* ステップ3: 宛先、本文を決める */
//Slackの宛先 (チャンネル)
//★★★SlackのIncoming Webhook URLを入力してください★★★
let url = "※SlackのIncoming Webhookで取得したURL";
//Slackの本文
//★★★お好きな本文に変更ください★★★
let body = "○○フォームの回答を受信しました。\n"
+ "\n"
//一次元配列questionAndAnswersに対してjoinメソッドを使って文字列を作成する
//区切り文字は改行"\n"
+ questionAndAnswers.join("\n");
/* ステップ4: 指定したSlackチャンネルに通知を送信する */
//Slackを送信する
sendSlack(url, body);
}
function sendSlack(url, body) {
let data = {
"text": body
}
let options = {
"method" : "post",
"contentType": "application/json",
"payload" : JSON.stringify(data)
};
UrlFetchApp.fetch(url, options);
}
この時にUrlFetchApp.fetchの送信先であるurlはSlackにIncoming Webhookを入れてチャンネルのURLを自分で取得して設定する必要があります。
実装はこれでOKです。
それでは、ここからは詳しい実装方法を手順に沿ってご説明していきます。
手順
Googleフォームからスクリプトエディタを開く
送信内容をSlackに送りたいGoogleフォームを開き、左上のその他から「スクリプトエディタ」を開きます。
これでGoogleフォームに紐づくGoogleAppsScriptが書けるようになります。
このままコードを書いてもいいのですが、先にSlackにIncoming WebhookをいれてURLを取得します。
SlackのIncoming Webhookを入れてURLを作成する
Incoming WebHooksとは他のアプリからSlackにメッセージを投稿するための仕組みです。
Slackを開き、対象のワークスペースでAppの「アプリを追加する」をクリックします。
Appの追加画面が開くので検索に「Incoming WebHooks」と入力し、以下のアプリが出たらIncoming WebHooksを追加します。
するとブラウザが開き、このような画面が表示されます。
Slackに追加をクリックします。
あとは画面に沿って入力してください。
投稿するチャンネル名、投稿する名前、アイコンは好きに選んでください。
合わせてWebhookのURLが発行されますので、コピーしておきます。
※後ほどコードに埋め込みます。
URLが取得できればSlack側の設定は完了です。
では準備ができたのでコードを書いていきます。
コードを書く
コードは結論でも例に挙げたソースを使用します。
スクリプトエディタに戻ります。
デフォルトでmyfunction関数がありますが、削除して以下のコードをコピーしてください。
このときurl変数には先ほどWebHookで取得したURLに書き換えてください。
/*フォーム送信時に起動するトリガーに「submitForm」を設定*/
function submitForm(e) {
/* ステップ1: フォームのデータを取得する */
//すべての質問と回答を取得する
let itemResponses = e.response.getItemResponses();
/* ステップ2: 必要なデータを抽出する */
//個々の質問と回答を格納するための空配列を宣言する
let questionAndAnswers = [];
//for文(ループ)で変数itemResponsesから個々の質問と回答を取得する
for(let i = 0; i < itemResponses.length; i++) {
//質問のタイトルを取得する
let questionTitle = itemResponses[i].getItem().getTitle();
//回答を取得する
let answer = itemResponses[i].getResponse();
//未回答の質問かどうかで送信文章を調整する
if(!answer) {
questionAndAnswers.push("【" + questionTitle + "】: 未回答\n");
} else {
questionAndAnswers.push("【" + questionTitle + "】\n" + answer + "\n");
}
}
/* ステップ3: 宛先、本文を決める */
//Slackの宛先 (チャンネル)
//★★★SlackのIncoming Webhook URLを入力してください★★★
let url = "※SlackのIncoming Webhookで取得したURL";
//Slackの本文
//★★★お好きな本文に変更ください★★★
let body = "○○フォームの回答を受信しました。\n"
+ "\n"
//一次元配列questionAndAnswersに対してjoinメソッドを使って文字列を作成する
//区切り文字は改行"\n"
+ questionAndAnswers.join("\n");
/* ステップ4: 指定したSlackチャンネルに通知を送信する */
//Slackを送信する
sendSlack(url, body);
}
function sendSlack(url, body) {
let data = {
"text": body
}
let options = {
"method" : "post",
"contentType": "application/json",
"payload" : JSON.stringify(data)
};
UrlFetchApp.fetch(url, options);
}
入力するとこのようになります。
入力したらファイルの保存は忘れずに行ってください。
では軽くコードの説明をします!
Googleフォーム送信時のトリガーとして設定した関数では、引数としてフォームの入力内容を受け取れます。
今回は変数eとしてフォームの情報を受け取っており、for文を使用してeに入っている項目の名前と入力内容を取得しています。
function submitForm(e) {
/* ステップ1: フォームのデータを取得する */
//すべての質問と回答を取得する
let itemResponses = e.response.getItemResponses();
//for文(ループ)で変数itemResponsesから個々の質問と回答を取得する
for(let i = 0; i < itemResponses.length; i++) {
//質問のタイトルを取得する
let questionTitle = itemResponses[i].getItem().getTitle();
//回答を取得する
let answer = itemResponses[i].getResponse();
関数をトリガーに設定する
では先ほど作成した関数がGoogleフォームで登録したタイミングで起動するようにGASのトリガーという機能を使用します。
GASの左側のメニューからトリガーを開きます。
トリガーの設定画面に移動したら「トリガーの追加」から新規トリガーを設定します。
設定内容はこちらです。
これで「フォーム送信時」に「SubmitForm」が起動するようになります。
今回は以上になります。
GoogleAppsScriptするならこちらの参考書がおすすめです。
詳解! Google Apps Script完全入門 [第2版] ~GoogleアプリケーションとGoogle Workspaceの最新プログラミングガイド~ [ 高橋宣成 ]
最後まで読んで頂きありがとうございました!