スプレッドシートとSlack(スラック)をGASで連携!通知を自動化する方法
- Slack通知の自動化で手間を省きたい方
- 手動での連絡ミスをなくしたい方
スプレッドシートの入力ステータスを変えたらSlackで通知したい場合、毎回手動で通知を送るとなると手間がかかりませんか?
一回当たりの作業はそれほど時間はかからなくても、通知する数が増えれば大変になってきます。
そこで、今回はGoogle Apps Script (GAS) を使ってスプレッドシートとSlackを連携させ、通知を自動化する方法をご紹介します。
これにより手動で通知する手間が省け、情報共有もスムーズに行えるようになります。
なお、今回のGASを実行するにあたって、事前準備としてSlackの Webhook URLが必要になります。
URL取得がまだの方は、こちらの記事をご参照ください。
完成イメージ
スプレッドシート
Slack通知
- スプレッドシートの入力ステータスが変更されたらSlackで通知
- Slack通知ずみになったことをスプレッドシートに記入
今回の例ではシート名を「販売管理」として、スプレッドシートの支払いステータスが更新されたらSlackへ自動で通知します。
顧客が注文した商品について支払いが完了した場合、
「注文ID #003、鈴木 一郎様のご注文が支払い済みとなりました。発送の準備を進めてください。」
といった通知がSlackで送られます。
この通知で担当者が次のステップに進められるようにし、手動での連絡ミスも防ぎます。
手順
GASスクリプトの作成
はじめにスプレッドシートを開きます。
今回の例ではシート名を「販売管理」としてGAS実行の際に参照します。
列の記入例
A列 | 注文ID |
B列 | 顧客名 |
C列 | 注文日 |
D列 | 商品名 |
E列 | 数量 |
F列 | 金額(円) |
G列 | 支払いステータス |
H列 | 支払日 |
I列 | 配送ステータス |
Googleスプレッドシートを開き、メニューの「拡張機能」から「Apps Script」をクリックしてGASエディタを開きます。
function myFunction(){
}
が最初から入っているため、消去して以下のスクリプトを貼り付けます。
function notifySlack() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('販売管理');
var range = sheet.getDataRange();
var data = range.getValues();
for (var i = 1; i < data.length; i++) { // 1行目はヘッダーのため2行目から開始
var orderId = data[i][0]; // 注文ID (A列)
var customerName = data[i][1]; // 顧客名 (B列)
var paymentStatus = data[i][6]; // 支払いステータス (G列)
var notifiedStatus = data[i][9]; // 通知済みかどうか (J列、任意の空き列に「通知済み」を記録)
// 支払いステータスが「支払い済み」で、まだ通知されていない場合
if (paymentStatus === '支払い済み' && notifiedStatus !== '通知済み') {
var message = '注文ID #' + orderId + '、' + customerName + '様のご注文が支払い済みとなりました。発送の準備を進めてください。';
sendSlackNotification(message);
// 通知済みとして記録
sheet.getRange(i + 1, 10).setValue('通知済み');
}
}
}
function sendSlackNotification(message) {
var url = 'https://hooks.slack.com/services/XXXXXXXXX/XXXXXXXXX/XXXXXXXXXXXXXXXXXXXX'; // SlackのWebhook URLを設定
var payload = {
'text': message
};
var options = {
'method': 'post',
'contentType': 'application/json',
'payload': JSON.stringify(payload)
};
UrlFetchApp.fetch(url, options);
}
スクリプトの説明
- notifySlack() 関数
-
function notifySlack() { var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('販売管理'); var range = sheet.getDataRange(); var data = range.getValues(); for (var i = 1; i < data.length; i++) { // 1行目はヘッダーのため2行目から開始 var orderId = data[i][0]; // 注文ID (A列) var customerName = data[i][1]; // 顧客名 (B列) var paymentStatus = data[i][6]; // 支払いステータス (G列) var notifiedStatus = data[i][9]; // 通知済みかどうか (J列、任意の空き列に「通知済み」を記録) // 支払いステータスが「支払い済み」で、まだ通知されていない場合 if (paymentStatus === '支払い済み' && notifiedStatus !== '通知済み') { var message = '注文ID #' + orderId + '、' + customerName + '様のご注文が支払い済みとなりました。発送の準備を進めてください。'; sendSlackNotification(message); // 通知済みとして記録 sheet.getRange(i + 1, 10).setValue('通知済み'); } } }
- シートの取得とデータ範囲の設定
-
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('販売管理')
を使用して、「販売管理」シートを取得します。- シート名を必要に応じてご変更ください。
getDataRange()
でシート内のすべてのデータ範囲を取得し、その範囲の値をgetValues()
で2次元配列として取得します。
- データの繰り返し処理
-
for
ループを使って、2行目から最終行まで繰り返し処理します(1行目はヘッダー行のためスキップ)。- 各行から「注文ID (A列)」「顧客名 (B列)」「支払いステータス (G列)」「通知済みステータス (J列)」を取得します。
- 条件の確認とSlack通知
-
- 「支払いステータス」が「支払い済み」で、かつ「通知済み」ではない場合、Slackに通知を送ります。
- 通知メッセージを作成し、
sendSlackNotification()
関数を呼び出して通知を送信します。 - 通知後、該当行の「通知済み」列に「通知済み」と記録します。
- sendSlackNotification(message) 関数
-
function sendSlackNotification(message) { var url = 'https://hooks.slack.com/services/XXXXXXXXX/XXXXXXXXX/XXXXXXXXXXXXXXXXXXXX'; // SlackのWebhook URLを設定 var payload = { 'text': message }; var options = { 'method': 'post', 'contentType': 'application/json', 'payload': JSON.stringify(payload) }; UrlFetchApp.fetch(url, options); }
- Slack Webhook URLの設定
-
url
変数にSlackのWebhook URLを設定します。- このURLはSlackで設定したIncoming WebhookのURLです。
- 通知内容の作成
-
payload
オブジェクトに通知するメッセージを設定します。- ここでは引数
message
を使用してSlackに送信するテキストを指定します。
- リクエストのオプション設定
-
options
変数でHTTPリクエストの設定を行います。method
はPOST、contentType
はJSON形式、payload
はメッセージ内容をJSON文字列に変換したものです。
- Slackへのリクエスト送信
-
UrlFetchApp.fetch(url, options)
を使ってSlackに通知を送信します。この関数を使用すると、指定されたURLに対してHTTPリクエストを送ることができます。
function sendSlackNotification(message) {
var url = 'https://hooks.slack.com/services/XXXXXXXXX/XXXXXXXXX/XXXXXXXXXXXXXXXXXXXX'; // SlackのWebhook URLを設定
Slackに通知を送るためには、Webhook URLが必要です。
'https://hooks.slack.com/services/XXXXXXXXX/XXXXXXXXX/XXXXXXXXXXXXXXXXXXXX'
の部分をご自身で取得したWebhook URLに置き換えます。
コードを書いたら、名前をつけて保存します。
(例:「Slack通知」)
スクリプトを実行して、Slackを通知します。
初めてそのスクリプトを実行する場合は権限の確認が必要です。
そのため、『権限を確認』を押します。
許可の詳細手順
「詳細」をクリックします。
「無題のプロジェクト(安全ではないページ)に移動」をクリックします。
「許可」をクリックします。
Webhook URL取得の際に指定したチャンネル宛にSlackが通知されます。
スプレッドシートのJ列には「通知済み」と入力されます。
トリガー設定(例:1時間おきにGASを実行)
定期的にSlack通知がされるよう設定
スクリプトが正常に動作できたら、次に通知を定期的に実行するためのトリガーを設定します。
Google Apps Scriptの「時計アイコン」から「トリガー」を選択します。
画面右下にある「トリガーを追加」を選択します。
実行する関数としてnotifySlack
を選択します。
(その下にある項目「実行するデプロイを選択」はHeadのまま)
イベントの種類として「時間主導型」を選びます。
今回の例では1時間おきにスプレッドシート内のチェックが行われるように設定しています。
お好みに応じて分ベースや日ベースなどに設定できます。
設定が完了したら「保存」ボタンをクリックして、トリガーを有効にします。
これでトリガー設定が完了です。
トリガー設定により、支払いステータスに更新があった際、定期的にSlackに通知が送られるようになります。
まとめ
- 事前準備としてSlackの Webhook URLが必要
- スプレッドシート内の入力ステータスが変更されたらSlack通知
- 定期的にスプレッドシート内をチェックするようトリガー設定
今回は、Google Apps Scriptを使ってスプレッドシートとSlackを連携させ、支払いステータスの更新を自動通知する方法をご紹介しました。
Slack通知を自動化することで、チーム内の情報共有がスムーズになり手間も省けます。
スクリプトを変更して他の通知用途にも応用可能です。
ぜひご活用ください。
弊社では、Google Apps Script(GAS)を活用した業務効率化のサポートを提供しております。
GASのカスタマイズやエラー対応にお困りの際は、ぜひお気軽にご相談ください。
また、ITツールの導入支援やIT導入補助金の申請サポートも行っております。
貴方の業務改善を全力でサポートいたします。
コメント