IT Study/슬랙연동하기

Nodejs 슬랙 연동 – 웹훅 !

ComputerScientist 2020. 11. 4. 10:58

 

이번 포스트에서는 Nodejs를 활용해서 슬랙 webhook을 연동해보자.

 

 

 

 

 

Nodejs에 슬랙을 연동하기 위해서는 슬랙 설정을 필수적으로 해야 한다.

 

Nodejs에 연동하기 전에 슬랙에 기본 설정하기

 

슬랙 자동 알림 기본 설정 방법 (웹훅)

슬랙 자동 알림 설정, 예전만 해도, 서버에 문제가 있거나 상태 메시지를 확인하기 위해서, 이메일을 주로 활용해 왔다. 이메일 활용을 하는 것의 단점은, 이메일 노티피케이션 항상 켜 두어야

blog-it.seongman.com

 

코딩하기에 앞서 어떤 순서로 webhook integration 이 이루어지는지 알아보자

 

순서

  1. Nodejs 서버 열기
  2. request 모듈 설치 (npm install request)
  3. slack hooks에 curl 요청

 

1. Nodejs 서버 열기

이 과정은 이미 웬만한 튜토리얼에서 다 다루고 있기 때문에 기본적인 코딩 설명은 생략하겠다.

// app.js

const express = require('express')
const http = require('http')
const app = express()
const server = http.createServer(app)

app.get('/', (req, res,) => {
	res.send("Hello World")
})

server.listen(3005, function() {
  console.log('Express Server Running on  ' + server.address().port)
})

3005번 포트에 서버를 열었다.

 

 

 

 

 

2. request 모듈 설치

$ npm install --save request

nodejs에서 cURL 요청을 날리기 위해서, request라는 모듈을 활용하여, cURL 요청을 진행하려 한다.

 

 

 

 

 

3. slack hooks에 curl 요청

Slack hook을 연동을 하기 위해서는 hooks의 url과 채널에 대해 알아야 한다.

슬랙 웹 훅 연동 과정에는 아래와 같은 내용이 있다. (cURL REQUEST)

$ curl -X POST -H 'Content-type: application/json' --data 
  '{"text":"Hello, World!"}' 
  //hooks.slack.com/services/AAAAAAAAA/BBBBBBBBBBB/CCCCCCCCCCCCCCCCCCCC

해당 url로 curl request를 날리기 위해 2번 과정에서 설치한 request 모듈을 통해서 hooks 에 요청을 날려야 한다.

// webhookUri 세팅
const webhookUri = "https://hooks.slack.com/services/A/B/C";
// option 설정
const options = {
	uri:webhookUri,
	method: 'POST', // POST method 로 요청
	body: {
		channel: "#alert_channel", // 알리고자 하는 채널
		username: "Alert Bot", // 채널 내에서 나오게 될 사용자 이름
		icon_emoji: ":ghost:", // 채널에 사용하고자 하는 아이콘
		text:'value' // 내용
	},
	json: true // request 를 json 형태로 보내고자 한다면 true 로 꼭 설정해야한다.
}

// request 발송
request.post(options, function(err,httpResponse,body){

})

 

uri 설정 후, curl request 를 request 모듈을 사용해 재현한다.

 

전체 코드는 아래와 같다

 

// app.js

const express = require('express')
const http = require('http')
const request = require('request')
const app = express()
const server = http.createServer(app)


app.get('/', function (req, res) {
    const webhookUri = "https://hooks.slack.com/services/A/B/C";
    const options = {
        uri:webhookUri,
        method: 'POST',
        body: {
            channel: "#alert_channel",
            username: "Alert Bot",
            icon_emoji: ":ghost:",
            text:'value'
        },
        json: true
    }
    request.post(options, function(err,httpResponse,body){
	    if(err) res.send("Webhook sent failed")
        else res.send("Hello, webhook sent succeeded")
    });
});

server.listen(3005, function() {
  console.log('Express server listening on port ' + server.address().port);
});

코드를 보면

server_domain:3005로 접속 시,  slack에 훅을 날리게 제작되어 있음을 알 수 있다.

따라서 server_domain:3005 (localhost:3005)로 접속 후 슬랙을 확인해보면 메시지가 도착해 있을 것이다.