Language & Framework/Node.js

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

kyo 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시에 메세지를 발송하는 함수를 실행하게 된다.