スプレッドシートとSlack(スラック)をGASで連携!通知を自動化する方法

この記事をおすすめの方
  • Slack通知の自動化で手間を省きたい方
  • 手動での連絡ミスをなくしたい方

スプレッドシートの入力ステータスを変えたらSlackで通知したい場合、毎回手動で通知を送るとなると手間がかかりませんか?

一回当たりの作業はそれほど時間はかからなくても、通知する数が増えれば大変になってきます。

そこで、今回はGoogle Apps Script (GAS) を使ってスプレッドシートとSlackを連携させ、通知を自動化する方法をご紹介します。

これにより手動で通知する手間が省け、情報共有もスムーズに行えるようになります。

なお、今回のGASを実行するにあたって、事前準備としてSlackの Webhook URLが必要になります。

URL取得がまだの方は、こちらの記事をご参照ください。

目次

完成イメージ

スプレッドシート

Slack通知

  • スプレッドシートの入力ステータスが変更されたらSlackで通知
  • Slack通知ずみになったことをスプレッドシートに記入

今回の例ではシート名を「販売管理」として、スプレッドシートの支払いステータスが更新されたらSlackへ自動で通知します。

顧客が注文した商品について支払いが完了した場合、

「注文ID #003、鈴木 一郎様のご注文が支払い済みとなりました。発送の準備を進めてください。」

といった通知がSlackで送られます。

この通知で担当者が次のステップに進められるようにし、手動での連絡ミスも防ぎます。

手順

GASスクリプトの作成

STEP
スプレッドシートを準備

はじめにスプレッドシートを開きます。

今回の例ではシート名を「販売管理」としてGAS実行の際に参照します。

列の記入例

A列注文ID
B列顧客名
C列注文日
D列商品名
E列数量
F列金額(円)
G列支払いステータス
H列支払日
I列配送ステータス
STEP
GASエディタを開く

Googleスプレッドシートを開き、メニューの「拡張機能」から「Apps Script」をクリックしてGASエディタを開きます。

STEP
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リクエストを送ることができます。

STEP
SlackのWebhook URLの設定
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に置き換えます。

(Webhook URL 取得方法)

STEP
スクリプトを保存

コードを書いたら、名前をつけて保存します。

(例:「Slack通知」)

STEP
スクリプトをテスト実行

スクリプトを実行して、Slackを通知します。

初めてそのスクリプトを実行する場合は権限の確認が必要です。

そのため、『権限を確認』を押します。

許可の詳細手順

「詳細」をクリックします。

無題のプロジェクト(安全ではないページ)に移動」をクリックします。

許可」をクリックします。

STEP
Slackが通知されたことを確認

Webhook URL取得の際に指定したチャンネル宛にSlackが通知されます。

スプレッドシートのJ列には「通知済み」と入力されます。

トリガー設定(例:1時間おきにGASを実行)

定期的にSlack通知がされるよう設定

スクリプトが正常に動作できたら、次に通知を定期的に実行するためのトリガーを設定します。

STEP
トリガーを選択

Google Apps Scriptの「時計アイコン」から「トリガー」を選択します。

STEP
トリガーを追加

画面右下にある「トリガーを追加」を選択します。

STEP
実行する関数を選択

実行する関数としてnotifySlackを選択します。

(その下にある項目「実行するデプロイを選択」はHeadのまま)

STEP
イベントのソースを選択

イベントの種類として「時間主導型」を選びます。

STEP
時間ベースのトリガーを選択

今回の例では1時間おきにスプレッドシート内のチェックが行われるように設定しています。

お好みに応じて分ベースや日ベースなどに設定できます。

STEP
トリガーの保存

設定が完了したら「保存」ボタンをクリックして、トリガーを有効にします。

これでトリガー設定が完了です。

トリガー設定により、支払いステータスに更新があった際、定期的にSlackに通知が送られるようになります。

まとめ

  • 事前準備としてSlackの Webhook URLが必要
  • スプレッドシート内の入力ステータスが変更されたらSlack通知
  • 定期的にスプレッドシート内をチェックするようトリガー設定

今回は、Google Apps Scriptを使ってスプレッドシートとSlackを連携させ、支払いステータスの更新を自動通知する方法をご紹介しました。

Slack通知を自動化することで、チーム内の情報共有がスムーズになり手間も省けます。

スクリプトを変更して他の通知用途にも応用可能です。

ぜひご活用ください。

弊社では、Google Apps Script(GAS)を活用した業務効率化のサポートを提供しております。

GASのカスタマイズやエラー対応にお困りの際は、ぜひお気軽にご相談ください。

また、ITツールの導入支援やIT導入補助金の申請サポートも行っております。

貴方の業務改善を全力でサポートいたします。

お問い合わせはこちら

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次