Dooray 슬래시 커맨드 추가하기 (Node.js, REST Api)
Express-generator 설치
npm i -g express-generator
Express 프로젝트 생성
express PROJECT_NAME --view=pug
Express 서버 관련 패키지 설치 PROJECT_NAME 폴더로 이동 후 npm i 명령어 실행
app.js 파일에 기본 주소세팅이 가능하다.
//라우터 객체
var indexRouter = require ( './routes/index' ) ;
var usersRouter = require ( './routes/users' ) ;
var timeRouter = require ( './routes/time' ) ;
var startRouter = require ( './routes/start' ) ;
//...
// 라우팅
app . use ( '/' , indexRouter ) ;
app . use ( '/users' , usersRouter ) ;
app . use ( '/time' , timeRouter ) ;
app . use ( '/start' , startRouter ) ;
GET, POST, DELETE, PULL 방식이 가능하지만 두레이 커맨드는 기본적으로 POST 방식을 사용.
퇴근시간을 전달하는 API 생성
var express = require ( 'express' ) ;
var router = express . Router ( ) ;
router . post ( '/' , function ( req , res , next ) { //POST 방식인 것이 중요.
var today = new Date ( ) ;
var end = new Date ( today . getFullYear ( ) , today . getMonth ( ) , today . getDate ( ) , 18 , 00 , 00 ) ;
var nt = today . getTime ( ) ;
var et = end . getTime ( ) ;
//console.log(nt);
//console.log(et);
var sec = parseInt ( et - nt ) / 1000 ;
var day = parseInt ( sec / 60 / 60 / 24 ) ;
sec = ( sec - ( day * 60 * 60 * 24 ) ) ;
var hour = parseInt ( sec / 60 / 60 ) ;
sec = ( sec - ( hour * 60 * 60 ) ) ;
var min = parseInt ( sec / 60 ) ;
sec = parseInt ( sec - ( min * 60 ) ) ;
if ( hour < 10 && hour >= 0 ) { hour = "0" + hour ; }
if ( min < 10 && min >= 0 ) { min = "0" + min ; }
if ( sec < 10 && sec >= 0 ) { sec = "0" + sec ; }
res . json ( { "text" : "금일 퇴근까지 " + hour + '시간 ' + min + '분 ' + sec + '초 남았습니다. ^^'
, "responseType" : "inChannel"
} ) ;
} ) ;
module . exports = router ;
routes 폴더 안에 time.js 파일을 넣어준다.(app.js파일에서 라우팅 설정했던 것과 연결.)
해당 프로젝트에서 package.json 파일이 있는 위치에서 npm start 입력
PostMan 설치 (그냥 URL로 테스트해도 되긴함.)
응답이 잘 오는 것을 확인 할 수 있다.
프로필 옆 메뉴바에서 슬래시 커맨드 연동으로 들어간다.
앱 생성 후 커맨드 추가 가능
REST URL에 위에서 만든 API 주소를 입력한다.
여기서 ngrok주소는 외부 ip (Dooray)에서 내 로컬 ip로 접근이 가능하게 하기 위한것
커맨드를 추가하고 싶은 대화방에서 슬래시 커맨드를 연동한다.
추가 버튼을 통해 내가 원하는 커맨드를 연동할 수 있다.
커맨드를 입력하면 다음과 같이 슬래시커맨드가 동작한다.
ngrok
위에서 언급했지만 Dooray에서 local ip로 요청을 보내는 부분에서 ngrok를 이용해 중계서버를 생성해야하는 점이 중요.
slack bot api, dooray command 등 외부에서 들어오는 api 개발 시 public ip를 가지고 있는 서버가 없다면 테스트하기 불편한 점을 해소해준다.
실시간 시간 갱신
var today = new Date(); 코드의 위치가 중요, api 호출 시점마다 해당 함수가 동작할 수 있게 한다.
javascript var, let, const에 대해서 확실히 하자.
var는 할당되는 값이 유동적으로 변한다.
let은 이미 선언되어있다면 다시 선언할 수 없다. 단, 재할당은 가능.
const는 변수 재선언, 재할당 모두 불가능하다.
해당 프로젝트를 실행하며 let으로 date를 할당했다가 api 반복호출시 시간이 갱신되지 않는 문제가 발생했었다. 하지만 var 타입으로 바꾸어 유동적으로 date를 할당할 수 있게 수정.