42Seoul의 캐비닛 대여 서비스 배포를 앞두고 반납기한이 임박한 유저를 대상으로 슬랙 메세지를 발송하는 슬랙봇을 만들어봤다.
대여 성공시 & 매일 오전 9시를 기준으로 반납일이 다음 날인 학생을 대상으로 슬랙 메세지를 발송한다.
슬랙 봇을 생성하는 과정은 생략하겠다.
위 주소로 접속 후 슬랙봇을 생성하였다면 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
* * * * * *
┬ ┬ ┬ ┬ ┬ ┬
│ │ │ │ │ │
│ │ │ │ │ └ 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시에 메세지를 발송하는 함수를 실행하게 된다.