Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
3
Help us understand the problem. What is going on with this article?
@chanP_yamazaki

【GAS】【SLACK】スプレッドシートで作った予定をSLACKに送信する

More than 1 year has passed since last update.

概要

プロジェクトのスケジュールをスプレッドシートで管理しているのですが、それを見に行くのが億劫と言われたので、毎日SLACKにリマインドさせることにしました

slack通知用のwebhookをチャンネルに追加

「プロジェクトのメニュー 」 -> 「その他管理項目」 -> 「App管理」 -> 「カスタムインテグレーション」 -> 「Incoming Webhook」 -> 「設定の追加」
から、追加するチャンネルを選択して追加

単純な通知機能を実装

function sendTest()
{
  var postUrl = "Webhook URL";
  var postChannel = "チャンネル名";
  var sendMessage = "test";
  sendHttpPost(sendMessage, postUrl, postChannel);
}

/**
 * slackへのリクエスト送信
 */
function sendHttpPost(message, postUrl, postChannel)
{
    var jsonData = {
        "channel" : postChannel,
        "text"    : message
    };
    var payload = JSON.stringify(jsonData);
    var options = {
        "method"      : "post",
        "contentType" : "application/json",
        "payload"     : payload
    };

    UrlFetchApp.fetch(postUrl, options);
}

▼通知結果
スクリーンショット 2018-12-04 16.20.37.png

スプレッドシートの値を読み込んで結果を通知させる処理

▼スプレッドシート
スクリーンショット 2018-12-04 16.34.41.png

function scheduleReminder() {
  var postUrl = "Webhook URL";
  var postChannel = "チャンネル名";
  var sendMessage = "<!here>\n";
  var jpDateList = ['日', '月', '火', '水', '木', '金', '土'];
  var dateObject = new Date();

  if (dateObject.getHours() == 9) {
    datetime = Utilities.formatDate(dateObject, "Asia/Tokyo", "yyyy/MM/dd");
  } else {
    dateObject.setDate(dateObject.getDate() + 1);
    datetime = Utilities.formatDate(dateObject, "Asia/Tokyo", "yyyy/MM/dd");
  }
  sendMessage += "[" + datetime + " (" + jpDateList[dateObject.getDay()] + ")] の予定です。\n";

  sendMessage = sendMessage + getRemindMessage(datetime);

  // 送信
  sendHttpPost(sendMessage, postUrl, postChannel);
}

function getRemindMessage(date) {
  var message = "";
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var workingSheet = spreadsheet.getSheetByName("スケジュール");

  // ここで今日のrowを取得
  var dateColumn = 1; // 日付が入力されているカラム
  var contentRow = 2;
  var startRow = 2;
  var lastRow = workingSheet.getLastRow();
  var isFind = 0;
  for (var rowCount = startRow; rowCount <= lastRow; rowCount++) {
    var tmpValue = workingSheet.getRange(rowCount, dateColumn).getValue();
    if(typeof(tmpValue) == "string"){
      // 日付型じゃない
      continue;
    }

    if (date == Utilities.formatDate(tmpValue, "Asia/Tokyo", "yyyy/MM/dd")) {
      contentRow = rowCount;
      isFind = 1;
      break;
    }
  }

  if (isFind == 0) {
    return "見つかりませんでした。";
  }

  // 今日の予定が入っている部分を抜き出してメッセージに追加
  var titleRow = 1; // タイトルが入力されている行
  for (var titleColumn = 3; titleColumn < 7; titleColumn++) {
    var titleName = "◆ " + workingSheet.getRange(titleRow, titleColumn).getValue() + "\n";
    var content = workingSheet.getRange(contentRow, titleColumn).getValue();
    if (content == "") {
      // 予定がなければSKIP
      continue;
    }
    content = "```" + content + "```\n\n";
    message = message + titleName + content;
  }

  if (message == "") {
    return "何も予定はありません。";
  }

  return message;
}

function sendHttpPost(message, postUrl, postChannel) {
  var jsonData = {
    "channel" : postChannel,
    "text"    : message
  };
  var payload = JSON.stringify(jsonData);
  var options = {
    "method"      : "post",
    "contentType" : "application/json",
    "payload"     : payload
  };

  UrlFetchApp.fetch(postUrl, options);
}

▼通知結果
スクリーンショット 2018-12-04 16.35.44.png

GASからスクリプトを定期実行させる

時計のマークからトリガーを追加
スクリーンショット 2018-12-04 16.37.26.png
指定の関数が特定の時間で実行されるようにトリガーを新規作成
スクリーンショット 2018-12-04 16.37.57.png

3
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
3
Help us understand the problem. What is going on with this article?