Slack API를 사용하여 DM 동시 전송

14125 단어 SlackAPIGAStech

너는 왜 그렇게 하려고 하느냐?


실습지에서 상당한 주파수로 동시에 메일을 보내는데 설정이 힘들어요.그리고 모든 사용자가 슬랙에 있습니다.그럼 슬랙 하나씩 시키자. 메일 같은 구식 도구는 쓰지 말자. 그걸 계기로

왜 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을 만들려면(대략)

  • 신규 Slack App
  • 스프레드시트에서 목적지의 슬랙 ID가 보낸 내용의 DB(?)
  • 👆의 코드를 기반으로 여러 가지 개작
  • 더 자세한 순서를 알고 싶은 분.
  • [GAS] 슬랙봇 만드는 법, 오지<unk>이 넓을수록 자세히 설명
  • Google Apps Script로 슬랙의bot을 만들어 보세요.
  • 각 함수 정보


    main()


    자바스크립트를 아는 사람은 "아니야, 있어main()...?"혼란스러웠지?알아, 그런 마음.하지만 평소 C만 접촉하는 사람으로서 main()가 없으면 안심할 수 없다.용서해 주세요.그리고 main()를 보면 전체적인 개요를 파악할 수 있다.main()의 역할은 다음과 같다.

  • 확인isGoodTime()이 발언가능 시간(8~22시)
  • OK하면 postMessage()투고하라고
    간단하네.원래isGoodTime()는 상식에 맞지 않는 시간에 DM 알림을 방지하기 위해 필요하지 않은 분들은 모두 결제해주세요.
  • isGoodTime()


    이것은 함수 이름과 같다.현재 시간이 설정된'good time'범위 내에 있는지 판단하기만 하면 됩니다.

    postMessage()


    이것은 프로그램의 간 함수다.맡은 기능은 함수 이름과 같다.자세한 설명을 쓰는 것이 번거로워졌으니 다소나마 양해해 주십시오.
    변수 추가 정보

    rowBegin , rowEnd


    스프레드시트의 DB는 몇 줄에서 몇 줄로 기록됩니까?main()에서 정의하여 교부하다.나는 이것이 좌석에 따라 다르다고 생각한다. 적당히 변경해 주십시오.제 좌석은 아래와 같습니다rowBegin = 2.

    APIMethodUrl


    여기 있습니다https://slack.com/api/chat.postMessage.Slack API에 기재되어 있으며 다른 방법을 시도할 수 있습니다.

    총결산


    "아, 정리 다 됐나요?"라고 외쳤다.아니오, 설명이 부족한 점이 많다는 것을 알고 있습니다.젠의 편집이 재밌어서 어느새 열심히 쓰기 시작했는데 매번 에너지 부족으로 다 못 쓰게 되더라고요.이 녀석은 단지 젠의 편집기를 쓰려는 것뿐"이라며 활달한 마음으로 받아들이라고 했다.자세한 상황은 내가 흥미가 있으면 보충해 두겠지만 아마 그럴 리가 없다.용서해 주세요.

    좋은 웹페이지 즐겨찾기