概要
- slack内のメンバーの中で、期日までにやって欲しいことが完了していないメンバーにリマインドのDMを送りたい
- けれど、1人1人にメッセージを送っていくのは大変なので、GASとslack APIを連携し、自動化した
やりたいこと
使うもの
- スプレッドシート
- 以下の情報を記載している
- メッセージを送りたいメンバーの名前
- それぞれの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を作成する必要がある。
こんな表示が出てくるので、from scratch(0から作る)を選択。アプリの名前とワークスペースを選択するように指示されるので、よしなに選択。名前は後から変更可能。
メニューのOAuth & Permissionsから、botに以下のようにスコープの権限を渡す。
これで、botからDMを送ることができるようになる。