仕事でGSS(Googleスプレッドシート)で業務の管理をしているんだけど、他の人が更新したタイミングがわからず、大事な情報を自分だけ見損ねていた・・・なんてことがあったんだ
それなら、GSSを更新したら自動でslackに通知してくれるプログラムを作ったら、解消できそう♪
その方法について説明していくよ
このブログを読むとできるようになること
Googleスプレッドシートを更新したら、slackで自動通知を送ることが可能に
開発環境
GoogleAppsScript
Mac
まずはGSSを用意
今回、3店舗あるレストランで、お客様から受けたクレーム(要望)を一括して共有するGSSを作成しました。
D列にクレーム内容、E列をプルダウン式にして通知送付が選択されたらslackに自動通知する仕組みを作ります。
スプレッドシートの名前を試作ということで「試し」にしました。
ダサくてごめん(笑)
Apps Scriptを開く
コードを書く場所を開きます。
拡張機能→Apps Scriptがあるので、クリック
ロジックを整理
今回のロジックとしてはこのような流れです。
A:対象のスプレッドシートを指定
B:どこのセルを入力したら自動通知させるか指定
C:slackに送付するテキストを入力
D:slackのどのチャンネルに自動通知するか指定
E:トリガーを設定
コードを入力(対象のセルを指定)
いよいよコードを入力していきます。
function myFunction() {
var activeSpreadsheet = SpreadsheetApp.getActiveSpreadsheet(); // スプレッドシート
var activeSheet = activeSpreadsheet.getActiveSheet(); // アクティブシート
if(activeSheet.getName() != "試し"){
return;
}
var activeCell = activeSheet.getActiveCell(); // アクティブセル
if(activeCell.getColumn() == 5 && activeCell.getValues() == "通知送付"){
var newInputRow = activeCell.getRow();
var taskNo = activeSheet.getRange(activeCell.getRow(), 1).getValues();
var naiyo = activeSheet.getRange(activeCell.getRow(), 4).getValues();
// 送信するSlackのテキスト
var slackText = "@here\n" + "\n" +
"【新たな3PJ共通依頼事項が得意先よりありました】\n" + "\n" +
"・追加タスク : No" + taskNo + "\n" +
"・内容 : " + naiyo + "\n" +
"https://docs.google.com/spreadsheets/d/1_1cJquP02ltWVTdnJj04hXSuet7dgrIHQMkA2Mducio/edit#gid=0&range=C" + newInputRow;
sendSlack(slackText);
}
}
getActiveSpreadsheet()でアクティブなスプレッドシートを読み込み、getActiveSheet()で対象のシートを読み込みます。
activeCell.getColumn() == 5 && activeCell.getValues() == "通知送付")では、
5の箇所に左から数えた列番号・通知送付の箇所に、1行目のタイトルを入力します。
"・内容 : " + naiyo + "\n"
naiyoは変数になっているので、実際は下記のように表示されます
Webhookの設定
Slackへの投稿を行うには、Webhookの設定が必要になってきます。以下のURLから設定をしてください。
https://my.slack.com/services/new/incoming-webhook/
対象のチャンネルを指定するとURLが発行されます。
これは後ほど使うので、消さずに保存しておいてください。
コードを入力(slackとの連携)
function sendSlack(slackText){
// Step1で取得したWebhook URLを設定
var webHookUrl = "ここに先ほどコピペしたWebhook URLを記載";
var jsonData =
{
"channel": "#gas", // 通知したいチャンネル
'icon_url' : "https://entershare.jp/wp-content/uploads/2017/11/unnamed.png",
"text" : slackText,
"link_names" : 1,
"username" : "3店舗共通依頼事項通知bot"
};
var payload = JSON.stringify(jsonData);
var options =
{
"method" : "post",
"contentType" : "application/json",
"payload" : payload,
};
// リクエスト
UrlFetchApp.fetch(webHookUrl, options);
}
var webHookUrl という変数に、先ほどコピペしたURLを記載します。
"channel",'icon_url,"username"をそれぞれ指定
トリガーを設定
トリガーをクリックして、右下のトリガー追加
下記のように、変更します。
実行する関数はご自分のものを選択ください
これで完成!
できているでしょうか・・・
No1のタスクのステータス(E列)を通知送付に変更
#gasチャンネルに投稿されている!!
できたーーーー(´▽`)
(画像が表示されないのは、要改善・・・)
実行までの課題
私はGoogle APIがオフになっていたので、一旦作業が止まりました・・・
実行できない人はここを気をつけてみてね!
これで、誰かがいつGSSを更新しても、情報を見損ねる心配がグッと減りました!
活用してみてね♪