Googleフォームの回答をGASでSlackに飛ばして、請求書作成依頼フォームを作る
みなさま今日もお疲れ様です。
スプシ芸人の金山雄星です。
今日は、社内の請求書発行フローを改善すべく、Googleフォームの回答をGASでSlackに飛ばして、請求書作成依頼フォームを作ったので、共有します。
Slackワークフローというものもある
Slack内でフォームのように決まったフォーマットで入力するには「ワークフロー」の機能があります。
これも便利なんですが、データを貯めていきたいときに心許ないので、今回はGoogleフォーム→Slackに通知という設計で作ることにしました。
具体的な手順
Slack Webhookを利用することで実現します
Slackの設定
Slack App DirectoryのIncoming WebHooksの機能を探します。
ネットに直リンクもあるのですが、Slackのワークスペース情報も含んだリンクになる?ので上手く行かないこともあるので
とググってください。
Incoming WebHooks |Slack App Directory
のページが目的のページです。
こんなページに飛ぶので、「Slackに追加」をクリックします。
Webhookを使いたいチャンネルを選択して、
「Incoming Webhook インテグレーションの追加」をクリックすると
あっという間に、WebhookURLが発行されました。
このURLがGETできたら、Slack側での設定は完了です。
GAS
回答結果をSlackに飛ばしたい対象のGoogleフォームを開きます。
右上の団子マークから、「スクリプトエディタ」を開きます。
そこに下記のコードを貼り付けます。
(元々あるmyfunctionは全部消してください)
function notifySlack(e) {
let itemResponses = e.response.getItemResponses();
let questionAndAnswers = [];
for(let i = 0; i < itemResponses.length; i++) {
let questionTitle = itemResponses[i].getItem().getTitle();
let answer = itemResponses[i].getResponse();
if(!answer) {
questionAndAnswers.push(questionTitle + ": 未回答");
} else {
questionAndAnswers.push("■" + questionTitle + "\n" + answer + "\n");
}
}
let url = "https://hooks.slack.com/services/hogehoge";
let body = "\n請求書送付依頼フォーム \n"
+ "\n"
+ questionAndAnswers.join("\n");
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);
}
こんな感じ。
黒塗り部分に先ほど発行したSlackのWebhook URLを貼り付けてください。
これで下準備は完了です。一度保存をしておいてください。(認証を求められたら許可してくださいね)
あとはトリガーの設定です
左上の「トリガー」からトリガーを追加し
こんな感じで設定してください!
実行する関数は「notifySlack」 で、
イベントの種類は「フォーム送信時」ですね。これが肝です。
こうなっていたらOKです。
試しにフォームを送信してみてください!
予想以上にあっさり、GoogleフォームとSlackの連携ができました。
ところで、
請求書の依頼を出す際は、経理担当者のメンバーをメンションしたいのではないでしょうか?
Slack Webhookでメンションも合わせて行ってみたいと思います。
Webhookのtext内で@名前という文字をベタうちしても、実はメンションにはならず、ここでは、メンバーIDというものが必要になります。
ここにあります(言わずもがなw)
<@hogehoge>
こんなフォーマットでIDを記載すると、メンションになるみたいです。
function notifySlack(e) {
let itemResponses = e.response.getItemResponses();
let questionAndAnswers = [];
for(let i = 0; i < itemResponses.length; i++) {
let questionTitle = itemResponses[i].getItem().getTitle();
let answer = itemResponses[i].getResponse();
if(!answer) {
questionAndAnswers.push(questionTitle + ": 未回答");
} else {
questionAndAnswers.push("■" + questionTitle + "\n" + answer + "\n");
}
}
let url = "https://hooks.slack.com/services/hogehoge";
let body = "\n<@hogehoge>"
+"\n請求書送付依頼フォーム \n"
+ "\n"
+ questionAndAnswers.join("\n");
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);
}
メンションをつけたGASコード全体がこちら。(中央あたりが少し変わってます)
これで無事、メンションも飛ばすことができました!!!
お疲れ様でした。
ご覧いただきありがとうございました!
合同会社VISION EYEでは、”ITの力で日本の中小企業を助太刀する”をモットーに、業務効率化のための社内システムの開発・データを活用したマーケティング支援を行っています。
お気軽にご相談ください!
yusei.kanayama@vision-eye.co.jp
金山
この記事が気に入ったらサポートをしてみませんか?