Slackを使っていて、いろんな活用をしている。 その活用の中で、営業やカスタマサクセスチームは、顧客との専用チャンネルを作り、顧客との密なコミュニケーションをしている。 何年か経ちそんなチャンネルもいっぱいになり、100を超えてくると、Slackで何か通知を出すのも一苦労だ。 自分の顧客にリリースノートを共有したくても、数十チャンネルにポストをしまくる必要がでてくる。
Slackで指定の複数チャンネルにまとめてメッセージを送る方法を探してみたが、意外と無い。
なのでSlackの複数チャンネル一斉通知の仕組みをGoogle SheetとGoogle App Scriptで作ってみた。
前提として、利用者はカスタマサクセスとか営業とかNot Engineerな人でも簡単に使える、ということがある。
利用の流れ
Step1
通知先チャンネルのシートに、通知対象のslackのチャンネル名を入れる。
Step2
通知内容の設定の通知内容にコメントを入れる。
Step3
通知用ボタンのボタンクリックをし、ポップアップでOKを押すと、一斉に通知される。
何十チャンネルにも同時に送る必要があるユースケースがどんくらいあるかわからないが、パートナーとのSlackチャンネルがいっぱいあってたまに同時配信したいとかそういうときは便利なんじゃなかろうか。
作り方
Google App Scriptのコード
通知用のコードはこんな感じ。シートとかの情報は固定箇所指定になっているので、上記の画像と同じフォーマットでシートを作る必要がある。
function postMessage() { var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); var channels = spreadsheet.getSheets()[0].getRange("A:A").getValues(); Logger.log(channels); var message = spreadsheet.getSheets()[1].getRange("B1").getValue(); Logger.log(message) var debug_flag = spreadsheet.getSheets()[1].getRange("B2").getValue(); Logger.log(debug_flag); var confirmation = Browser.msgBox("下記の内容を通知しますか? (debug mode="+ debug_flag +")", message, Browser.Buttons.OK_CANCEL); if (confirmation == 'cancel') { Browser.msgBox("キャンセルします"); return; } if(debug_flag) { postSlack("test-channel", message) return; } for(var i=0;i<channels.length;i++) { if(channels[i] != '') { Logger.log("Posted:" + channels[i]); var res = postSlack(channels[i][0], message); Logger.log(res); } } } function postSlack(channel, message) { var payload = { "token" : PropertiesService.getScriptProperties().getProperty("SLACK_TOKEN"), "channel" : channel, "text" : message, "icon_emoji": ":hi:", "username": "Customer Success Announcement" }; var params = { "method" : "post", "payload" : payload }; return UrlFetchApp.fetch("https://slack.com/api/chat.postMessage", params); }
設定サンプルのシートはこちら: Slack一斉通知のサンプル - Google スプレッドシート (コード自体は動作しないのであしからず。)