사내 메신저 봇 - 가드너(Gardener)

Youngwan Cho·2021년 2월 23일
0

개요

  • 구내식당의 메뉴를 웹사이트를 통해 확인해야하는데 여간 성가신게 아니었습니다. "오늘의 점심 메뉴를 무엇일까?", "어떻게 하면 간편하게 알 수 있을까?"에서 시작된 메신저 봇 프로그램입니다
  • 점심 메뉴 알림을 시작으로, 자동 빌드, 새로운 유튜브 콘텐츠 알림 기능도 추가했습니다

왜 가드너 인가요?

  • 사내 메신저로 잔디를 사용중이어서, 어울릴만한 이름이 무엇이있을까 고민해봤는데 잔디를 관리하는 정원사를 생각하여 이름을 가드너(Gardener)로 지었습니다

주요 기능

  • 구내식당의 오늘의 메뉴를 직원들에게 알려줍니다
  • 개발중인 프로젝트의 자동 빌드 정보를 알려줍니다
  • 사내에서 운영중인 유튜브 채널의 새로운 콘텐츠 업데이트시 알려줍니다

스크린샷

잔디에 가드너가 연동된 모습


웹페이지를 통해 볼 수 있는 국내 식당 메뉴


점심 메뉴를 알려주는 모습


자동 빌드 시작과 결과를 알려주는 모습


유튜브에 새로운 콘텐츠를 알려주는 모습


개발스택

  • Node.js
    • express
    • cheerio
    • node-schedule

점심 메뉴 알림

  • 구내 식당 웹페이지에 기재되어 있는 점심메뉴를 읽어 올 수 있어야합니다, 데이터베이스를 공유받거나 API를 제공받을 수 있으면 좋겠지만 구내식당에 협조를 요청해야하고 받을 수 있다는 보장이 없어서, 웹 페이지를 파싱하도록 방향을 잡았습니다
  • 개발 편의를 위해 HTML파싱에 유용한 npm 라이브러리인 cheerio를 사용하여, 해당 요일의 점심 메뉴를 불러 옵니다
  • 매일 같은 시간에 점심 메뉴를 알려주기 위해 node-schedule을 사용합니다
  • 토요일 및 공휴일에는 알림을 보내지 않기 위해, SK텔레콤의 API를 사용하여 공휴일 정보를 가져옵니다
  • 메신저의 인커밍웹훅 기능을 이용하여 메신저에 메시지를 보냅니다

자동 빌드 알림

  • 사내에서 자동 빌드 시스템을 구축했지만, 빌드를 공유하기 위한 솔루션이 없었습니다. 직접 메신저에 파일을 첨부하거나, 공유 폴더에 올려 링크를 전달해야했는데, 메신저의 파일 용량 제한과 매번 신경쓰며시간을 뺏기는게 너무 비효율 적이어서, 빌드가 완료되면 자동으로 파일을 받을 수 있는 메시지를 알려주도록 개발계획을 잡았습니다.
  • 개발중인 프로젝트의 Git 원격 저장소 develop브랜치에 새로운 커밋이 작성되면 젠킨스에서는 자동으로 빌드를 시작합니다
  • 젠킨스의 이벤트 트리거 및 웹훅기능을 활용해서 가드너는 메신저에 메시지를 알려줍니다
  • 빌드가 완료 되었을 때는 사내 파일 서버의 다운로드 링크를 메신저로 전달해고, 직원들은 링크를 통해 빌드파일을 간단하게 공유 받을 수 있습니다.

새로운 유튜브 콘텐츠 알림

  • 대표님이 사내에서 운영중인 유튜브에 새로운 콘텐츠가 올라오면 구독, 좋아요, 댓글좀 달아 달라고 직원들에게 부탁하고, 시간이 지나면서 점차 직원들의 유튜브 관심이 끊어지는걸 보게 되었습니다.
  • 사내에서 운영중인 유튜브에 새로운 콘텐츠가 올라오면 메신저를 통해 알림을 줍니다
  • 사람들이 언제 가장 좋아요와 댓글을 달아주기 편할까? 점심시간이라고 생각했고, 점심시간에 새로운 콘텐츠가 있으면 알려주도록 했습니다
  • 콘텐츠의 고유아이디를 사용해, 알림을 준 목록을 파일에 저장하고, 비교하여 새로운 콘텐츠만 알림을 주도록 했습니다

0개의 댓글