slach command
기능을 이용해서 랜덤 출력 봇을 만들어보도록 한다.slash command
명령을 통해 봇기능 구현슬렉에서 Browse App Directory 를 클릭하면 브라우저가 열리는데 여기서 slash command 를 검색 후 노출되는 해당 항목을 클릭하면 된다.
Add to Slack
버튼을 클릭하여 명령어를 추가하자.로니로니마수리
로 일단 해본다. ㅋngrok
이라는 프로그램이다.ngrok
를 입력해 설치가 정상적으로 되었는지 확이한다.요렇게 명령어 리스트가 나온다면 정상적으로 설치가 완료되었다.
명령은 다음과 같이 입력하면 된다
ngrok http 포트번호
우리는 express 로 서버를 띄울것이기 떄문에 익스프레스의 기본 포트인 3000 포트를 입력해준다.
ngrok http 3000
위의 명령을 실행시 아래와 같이 http, https 주소가 반환되는데 우리는 이중 http 주소를 사용하면 된다.
즉 http://248bee703aae.ngrok.io
주소를 호출하게 되면 내가 로컬에 띄운 3000 포트의 서버가 호출되는 것이다.
npm start
명령어를 통해 서버를 실행해준다.이제 슬렉에서 호출할 api 를 서버에 셋팅하도록 한다.
selectOne
라는 명령어를 통해 api 를 호출할것이기 때문에 routes 에 selectOne.js 파일을 생성 후 post 호출이 들어왔을때 처리를 넣어준다.
// selectOne.js
var express = require('express');
var router = express.Router();
router.post('/', function(req, res, next) {
const retrunData = {
text: '누가 날 호출하였는가....'
};
res.send(retrunData);
});
module.exports = router;
( 간단한 텍스트를 리턴하는 코드 )
실행할 파일을 만들었으니 해당 파일을 app.js 에 추가해 주어야 한다.
var selectRouter = require('./routes/selectOne');
를 통해 파일을 불러와서
app.use('/selectOne', selectRouter);
로 호출해준다.
( 기본 설치시 users 나 index 를 호출하고 있을텐데 그부분을 참고해서 넣어주면 된다 )
이제 http://localhost:3000/selectOne
호출시 출력하기로한 텍스트 문구가 정상적으로 출력되는지 확인하면 된다.
GET 으로 호출인경우 브라우저에서 바로 호출해 볼 수 있지만 POST 방식으로의 호출이기 떄문에 postman 을 이용해서 호출 테스트를 진행하면 된다.
원하는 값이 정상적으로 출력되었다면 이제 슬렉에서 보내주는 값을 가공하여 원하는 정보로 리턴해주는 처리를 붙이기만 하면 된다.
슬렉에서 slash command 를 이용한 api 호출시 다음의 값이 서버로 전송된다.
{
token: '5JbvJif70mWS.....',
team_id: 'T2XB....',
team_domain: 'whiteIceCream',
channel_id: 'GEPJ8N...',
channel_name: 'privategroup',
user_id: 'U7T8Y...',
user_name: 'blue03183',
command: '/로니로니마수리',
text: '명령은 잘 호출되고있나???',
response_url:
'https://hooks.slack.com/commands/......'
}
위의 값중 우리가 필요한 값은 명령어와 함께 입력된 텍스트인데 그 값은 text 에 들어있으니 이 정보를 뽑아서 사용해보자.
랜덤 출력을 위해 출력 대상을 콤마를 붙여 여러건을 전송한다고 했을때 (ex> 돈까스, 피자, 햄버거, 초밥) 아래와 같이 코드를 짜게 되면 입력받은 값중 하나의 값을 랜덤하게 돌려준다.
const arr = req.body.text.split(',');
const idx = Math.floor(Math.random() * arr.length);
const retrunData = {
text: arr[idx].trim(),
response_type: 'in_channel'
};
이제 슬렉에서 명령어와 함께 출력 대상을 넣어주었을때 랜덤한 결과값이 나오는지 확인하면 된다.