Slack 구조 이해하기
Slack 은 하나의 작업공간(Workspace)에 여러개의 채널(channels)로 관리합니다.
예시로 작업공간은 기업 또는 팀이고 채널은 각 부서로 비유할 수 있습니다.
Slack API 다루기
Slack API 를 다루기 위해서는 기본적으로 Workspace 와 App 을 생성해야합니다.
Slack Workspace 생성
Slack 페이지에 접속하여 Workspace 를 생성합니다.
회원가입 없이 이메일 인증이 가능한 이메일을 기입하여 계속 진행 합니다.
몇가지 질문에 대답만 하면 쉽게 Workspace 를 생성 할 수 있습니다.
Slack App 생성
Slack API 페이지에 접속하여 App 을 생성합니다.
앱 생성이 끝난 후, 화면의 하단에 생성된 자신의 App을 클릭합니다.
App Webhook 생성
생성한 웹훅 주소는 메시지를 Slack 에 보내기 위한 주소입니다. 이 주소를 복사하여 다음 과정의 코드에 붙여 넣을 것입니다.
코드 작성하기
패키지 설치
간단히 2가지 패키지만 설치 합니다.
axios - http 전송 패키지
lodash - 데이터를 쉽게 다루기 위한 패키지
slack.js 코드 파일
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
| const axios = require('axios'); const _ = require('lodash');
class Slack {
static get Colors() { return { primary: '#007bff', info: '#17a2b8', success: '#28a745', warning: '#ffc107', danger: '#dc3545' }; }
static get Channels() { return { general: 'https://hooks.slack.com/services/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' }; }
static async sendMessage(message) { if (!message) { console.error('메시지 포멧이 없습니다.'); return; }
const data = { mrkdwn: true, text: '', attachments: [] };
if (_.isString(message)) { data.text = message; } else { if (!message.title && !message.text) { console.error('메시지 내용이 없습니다.'); return; }
message.ts = Math.floor(Date.now() / 1000); message.footer = `From 알림 서버 [${process.env.NODE_ENV}]`; data.attachments.push(message); }
axios({ url: this.Channels.general, method: 'POST', headers: { 'Content-Type': 'application/json' }, data }); } }
module.exports = Slack;
|
테스트 메시지 전송하기
Sample 1
1 2 3 4 5 6
| Slack.sendMessage( { color: Slack.Colors.success, title: '테스트 메시지 전송 success' } );
|
Sample 2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| Slack.sendMessage( { color: Slack.Colors.danger, title: '테스트 메시지 전송 danger', text: 'text를 기입하세요.', fields: [ { title: 'title1', value: 'value1' }, { title: 'title2', value: 'value2' }, { title: 'title3', value: 'value3' } ] } );
|
마무리
자신의 상황에 맞게 알림을 받을 채널을 생성하고 웹훅주소를 생성하여 쉽게 모니터링 알림을 받아 볼 수 있을 것입니다.
참고