Slack API를 사용하여 DM 동시 전송
너는 왜 그렇게 하려고 하느냐?
실습지에서 상당한 주파수로 동시에 메일을 보내는데 설정이 힘들어요.그리고 모든 사용자가 슬랙에 있습니다.그럼 슬랙 하나씩 시키자. 메일 같은 구식 도구는 쓰지 말자. 그걸 계기로
왜 DM이야?
네, 그렇죠?나는 DM, 나를 싫어한다.DM이 왔습니다. "같은 내용의 오픈 채널에서 다시 한 번 투고해 주시겠습니까?"그렇게 말하는 과격파지만 이번 콘텐츠는 특정 이용자군(그리고 조합마다 바뀌는 것)만 볼 수 있어 울고 있는 DM을 쓰기로 했다.
결론
"설명이 좋으니 코드를 보여주세요"라고 말하는 사람이 있을 것 같아서 먼저 올렸어요.상세한 설명은 나중에 하는 미국 스타일이다.USA! USA!!
const APIToken = "xoxb-*****"; // 自分でSlack Appを作成し、発行されたtokenに差し替えてください
const sheetUrl = "https://docs.google.com/spreadsheets/d/*****/edit"; // Slack IDが記載された スプレッドシートのURLに差し替えてください
const sheetName = SpreadsheetApp.openByUrl(sheetUrl).getSheetByName('シート1'); // 使用するシート名に差し替えてください
const infoCol = {
"SlackID": "B", // DMを送る相手のIDが記載された列
"content1": "C", // 送る内容が記載された列
"content2": "D",
"content3": "E"
}
function main() {
const rowBegin = 2; // シートに合わせて変更してください
const rowEnd = 30; // シートに合わせて変更してください
const APIMethodUrl = "https://slack.com/api/chat.postMessage";
if (isGoodTime() == false) {
Logger.log("深夜なので実行しませんでした。");
} else {
postMessage(rowBegin, rowEnd, APIMethodUrl);
}
}
function isGoodTime() {
const goodTimeBegin = 8;
const goodTimeEnd = 22;
const date = new Date();
const time = date.getHours();
return (time >= goodTimeBegin && time <= goodTimeEnd) ? true : false;
}
function getUserID(row) {
let userID = sheetName.getRange(infoCol.SlackID + row).getValue();
return userID;
}
function createMessage(row) {
let msgContent1 = sheetName.getRange(infoCol.content1 + row).getValue();
let msgContent2 = sheetName.getRange(infoCol.content2 + row).getValue();
let message = ("content1: " + msgContent1 + "\ncontent2: " + content2 + "\ncontent3: " + content3);
return message;
}
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": createMessage(row)
};
let params = {
"method" : "post",
"payload" : payload
};
UrlFetchApp.fetch(APIMethodUrl, params);
}
}
해설
Slack API를 사용하여 App을 만들려면(대략)
각 함수 정보
main()
자바스크립트를 아는 사람은 "아니야, 있어
main()
...?"혼란스러웠지?알아, 그런 마음.하지만 평소 C만 접촉하는 사람으로서 main()
가 없으면 안심할 수 없다.용서해 주세요.그리고 main()
를 보면 전체적인 개요를 파악할 수 있다.main()
의 역할은 다음과 같다.확인
isGoodTime()
이 발언가능 시간(8~22시)postMessage()
투고하라고간단하네.원래
isGoodTime()
는 상식에 맞지 않는 시간에 DM 알림을 방지하기 위해 필요하지 않은 분들은 모두 결제해주세요.isGoodTime()
이것은 함수 이름과 같다.현재 시간이 설정된'good time'범위 내에 있는지 판단하기만 하면 됩니다.
postMessage()
이것은 프로그램의 간 함수다.맡은 기능은 함수 이름과 같다.자세한 설명을 쓰는 것이 번거로워졌으니 다소나마 양해해 주십시오.
변수 추가 정보
rowBegin , rowEnd
스프레드시트의 DB는 몇 줄에서 몇 줄로 기록됩니까?
main()
에서 정의하여 교부하다.나는 이것이 좌석에 따라 다르다고 생각한다. 적당히 변경해 주십시오.제 좌석은 아래와 같습니다rowBegin = 2
.APIMethodUrl
여기 있습니다
https://slack.com/api/chat.postMessage
.Slack API에 기재되어 있으며 다른 방법을 시도할 수 있습니다.총결산
"아, 정리 다 됐나요?"라고 외쳤다.아니오, 설명이 부족한 점이 많다는 것을 알고 있습니다.젠의 편집이 재밌어서 어느새 열심히 쓰기 시작했는데 매번 에너지 부족으로 다 못 쓰게 되더라고요.이 녀석은 단지 젠의 편집기를 쓰려는 것뿐"이라며 활달한 마음으로 받아들이라고 했다.자세한 상황은 내가 흥미가 있으면 보충해 두겠지만 아마 그럴 리가 없다.용서해 주세요.
Reference
이 문제에 관하여(Slack API를 사용하여 DM 동시 전송), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/yhakamay/articles/45ea0169fb8f7c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)