직장인건강지킴이 텔레그램 챗봇 개발기

 

Healthy Worker Bot

인턴을 하면서 9시부터 18시까지 계속 앉아서 일하다보니 어깨통증이 다시 심해지고,
물도 안마시게 되어서 건강한 직장인이 되기위해 지속적으로 알림을 주는 챗봇을 만들었다.

기능

나의 근무시간인 9시부터 18시까지 작동한다.

  • 20분 간격으로 알림
  • 2시간 간격으로 스트레칭 알림

1

구현

node-telegram-bot-api를 사용해서 텔레그램 챗봇으로 만들었다.
사용자들의 고유 아이디는 MongoDB에 저장한다.
알림을 보내야되는 시간마다 DB에서 고유 아이디를 가져와서 보내도록 구현했다.

function SendMsg(url,cap) {
    User.find({activate:true})
        .exec(function(err, lists){
            if(err) console.log("User list Error : "+err);
            else {
                for(i=0; i<lists.length; i++){
                    bot.sendPhoto(lists[i].chatId, url, {caption: cap, parse_mode: "Markdown"},);
                }
            }
        });
}

정해진 시간마다 메시지를 보내는 것은 node-cron을 이용했다.

  • 1-5 : 평일에만
  • 9-17 : 9시부터 17시
  • 10 : 10분이 될 때마다

즉, 9:10, 10:10…17:10까지 물 알림을 보내는 Water01()을 호출한다.

node_cron.schedule('10 9-17 * * 1-5', () => {
    Bot.Msg.Water01()
},{
    scheduled: true,
    timezone: "Asia/Seoul"
});

처음엔 아무 생각없이 9-18로 입력했는데 18시가 넘어서도 메시지가 오는 것을 보고, 9-17으로 고쳤다.

배포는 Heroku로 했으며, 카드 등록을 안해두어서 아마 달마다 마지막 주는 작동을 안할텐데 급한 사항은 아니니 나중에 해결하기로 했다.

코드는 공개 중이며, 첫 개시한 오늘은 알림이 올 때마다 물을 마시려고 노력 중이다.

https://github.com/MiryangJung/HealthyWorkerBot