LoginSignup
2
1

More than 1 year has passed since last update.

【GAS x slack】複数ユーザーにまとめてslackでDMを送る自動化

Posted at

概要

  • slack内のメンバーの中で、期日までにやって欲しいことが完了していないメンバーにリマインドのDMを送りたい
  • けれど、1人1人にメッセージを送っていくのは大変なので、GASとslack APIを連携し、自動化した

やりたいこと

  • スプレッドシートに一覧で表示されている、リマインドが必要なメンバーを取得して、全員に個別でDMを送りたい。
  • 送るメッセージの内容は、特定のセル(ここでは、E12セル )に表示させている(以下参照) Screenshot 2021-09-09 at 11.17.40.png

使うもの

  • スプレッドシート
    • 以下の情報を記載している
      • メッセージを送りたいメンバーの名前
      • それぞれのSlackID
      • 送るメッセージの内容
  • Google Apps Script
  • Slack
    • アプリを1つ作る必要があるので、管理者権限 or 管理者の承認がマスト

書いたコード

以下のスクリプトを書いて、スプレッドシートと接続。
ここで出てくるAPItokenは、slack側で発行する必要がある。

const APIToken = "token"; // 自分でSlack Appを作成し、発行されたtokenに差し替えてください
const sp = SpreadsheetApp.openById('spreadsheet_id'); // Slack IDが記載された スプレッドシートのURLに差し替えてください
const sheetName = sp.getSheetByName('シート名'); // 使用するシート名に差し替えてください
const infoCol = {
  "SlackID": "B", // DMを送る相手のIDが記載された列
  "content": sheetName.getRange('E12').getValues().toString().replace(/,/g , "\n") // 送る内容が記載されたセル
}

function main() {
  const rowBegin = 2; // メンバーリストの開始行
  const rowEnd = 280; // メンバーリストの最終行(最後の行を超えていれば、アバウトで大丈夫)
  const APIMethodUrl = "https://slack.com/api/chat.postMessage";

    postMessage(rowBegin, rowEnd, APIMethodUrl);
}

function getUserID(row) {
  let userID = sheetName.getRange(infoCol.SlackID + row).getValue();

  return userID;
}


function postMessage(rowBegin, rowEnd, APIMethodUrl) {
  for (let row = rowBegin; row < rowEnd; row++) {
    let userID = getUserID(row);

    if (userID == "")
      continue;

let payload = {
      "token": APIToken,
      "channel": userID,
      "text": infoCol.content
    };

    let params = {
      "method" : "post",
      "payload" : payload
    };

    UrlFetchApp.fetch(APIMethodUrl, params);
  }
}

slackとの連携

まずはslack上でbotを作成する必要がある。

slack画面上で、右上のAppディレクトリに移動。
Screenshot 2021-09-09 at 11.21.35.png

右上のビルドを選択。
Screenshot 2021-09-09 at 11.22.19.png

Create an appを選択。
Screenshot 2021-09-09 at 11.23.00.png

こんな表示が出てくるので、from scratch(0から作る)を選択。アプリの名前とワークスペースを選択するように指示されるので、よしなに選択。名前は後から変更可能。
Screenshot 2021-09-09 at 11.23.34.png

メニューのOAuth & Permissionsから、botに以下のようにスコープの権限を渡す。
これで、botからDMを送ることができるようになる。
Screenshot 2021-09-09 at 11.25.52.png

すると、tokenが発行されるので、bot user OAuth TokenをコピーしてGASに記述。
Screenshot 2021-09-09 at 11.27.30.png

ここまでできたら、GASのエディタ画面から「実行」を選択。
Screenshot 2021-09-09 at 11.32.03.png

こんな感じでメッセージが飛んできた。
Screenshot 2021-09-09 at 11.16.25.png

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1