kyo
Hyo's Inside
kyo
전체 방문자
오늘
어제
  • 분류 전체보기 (29)
    • Computer Science (1)
    • 42Seoul (6)
    • Algorithm (9)
      • Theory (5)
      • Daily PS (4)
    • Language & Framework (12)
      • Spring (0)
      • Java (11)
      • React (0)
      • C&C++ (0)
      • Node.js (1)
    • Dev (1)

블로그 메뉴

  • 홈
  • 태그

공지사항

인기 글

태그

  • 도커
  • minitalk
  • 슬랙봇
  • 자바
  • LEMP
  • 세미나
  • 알고리즘
  • Nginx
  • 참고자료 : 이것이 코딩테스트이다 with 파이썬
  • Greedy
  • mutex
  • 42SEOUL
  • sigaction
  • 백준
  • 슬랙
  • slack
  • Algorithm
  • 빅오
  • philosophers
  • docker

최근 글

티스토리

kyo

Hyo's Inside

[Node.js] Slack 봇으로 일정 시간마다 DM 발송하기
Language & Framework/Node.js

[Node.js] Slack 봇으로 일정 시간마다 DM 발송하기

2022. 2. 28. 15:15

42Seoul의 캐비닛 대여 서비스 배포를 앞두고 반납기한이 임박한 유저를 대상으로 슬랙 메세지를 발송하는 슬랙봇을 만들어봤다.

대여 성공시 & 매일 오전 9시를 기준으로 반납일이 다음 날인 학생을 대상으로 슬랙 메세지를 발송한다.

 

슬랙 봇을 생성하는 과정은 생략하겠다.

https://api.slack.com/apps

위 주소로 접속 후 슬랙봇을 생성하였다면 Features -> OAuth & Permissions -> Scopes 에서 지정한 워크스페이스에서 봇이 사용할 권한을 설정할 수 있다.

 

DM 발송을 위한 chat: write 과 워크스페이스에 있는 유저 정보를 읽어오기 위한 user:read 를 추가했다.

 

권한을 추가한 후 OAuth Tokens for Your Workspace로 올라가서 토큰을 발급받으면 된다.

권한이 변경되었다면 Reinstall 을 하는 것을 잊지말자.

해당 토큰은 api 요청 시 사용된다.

토큰이 정상적으로 발급되었는지 테스트해보자

 curl -H "Authorization: Bearer (토큰값)" https://slack.com/api/auth.test

"ok":true 라고 뜨면서 관련 정보가 나온다면 성공적으로 발급 된 것이다.

 

메세지 발송 api 요청도 잘 작동하는지 테스트 해볼 수 있다.

 curl -d "text=테스트 메세지" -d "channel=C035BE6L5MW" -H "Authorization: Bearer (토큰값)" -X POST https://slack.com/api/chat.postMessage

메세지가 잘도착한 것을 확인했다면 슬랙메세지를 발송하는 코드를 작성해보자.

 

예시코드

export async function sendLentMsg() {
    const message = `발송할 메세지`
    try {
        await slackBot.chat.postMessage(
            {
                text: message,
                channel: '발송할 채널 번호',
            },
        );
    } catch (error) {
        console.log(error);
        throw error;
    }
};

slackBot.chat.postMessage 함수로 메세지를 간편하게 발송할 수 있다.

 

이번엔 원하는 일정시간 마다 자동으로 슬랙 메세지를 발송하는 코드도 구현해보자.

 

node-schedule은 일정한 규칙으로 특정 시간에 작업을 실행해주는 모듈이다.

npm install node-schedule
scheduleJob의 매개변수로 아래의 규칙에 맞게 원하는 매크로 시간을 설정할 수 있다.

 

*    *    *    *    *    *
┬    ┬    ┬    ┬    ┬    ┬
│    │    │    │    │    │
│    │    │    │    │    └ day of week (0 - 7) (0 or 7 is Sun)
│    │    │    │    └───── month (1 - 12)
│    │    │    └────────── day of month (1 - 31)
│    │    └─────────────── hour (0 - 23)
│    └──────────────────── minute (0 - 59)
└───────────────────────── second (0 - 59, OPTIONAL)

예시코드

export default function slack() {
    const result = schedule.scheduleJob('0 9 * * *', function () {
        sendReturnMsg();
    });
}

이렇게 설정을 하면 매일 오전 9시에 메세지를 발송하는 함수를 실행하게 된다.

    kyo
    kyo
    〈 🖥〉

    티스토리툴바