일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- node js
- 주소
- python
- 이더리움
- 블록체인
- 스마트컨트랙트
- 블록체인개발
- 솔리디티
- 암호화폐
- 마스터링 이더리움
- 문자열
- js
- Ethereum
- 알고리즘
- pythonic
- 레디스
- DAPP
- 마스터링 비트코인
- keras
- 개인키
- javascript
- 파이썬
- 비트코인
- 공개키
- 마스터링비트코인
- smart contract
- 백서
- solidity
- Redis
- 개발
- Today
- Total
개발이야기
[ Node.js] Slack Webhook 오류 처리 방법 본문
안녕하세요. 이번 포스팅은 Slack Incoming Webhook을 사용해 Slack 봇을 제작하는 과정에서 발생한 오류 해결 방법을 공유하고자 합니다.
- Slack Incoming Webhook 셋팅
Webhook을 사용하기 전 슬랙에 Incoming Webhook을 추가해주어야 합니다.
Slack Api페이지에서 앱을 추가하거나 슬랙 워크스페이스 내에서 직접 추가하는 두 가지 방법이 있습니다.
Slack Api페이지에서 추가하는 방법 : https://api.slack.com/messaging/webhooks
Slack 워크스페이스 추가 : https://slack.com/intl/ko-kr/help/articles/115005265063-Slack%EC%9A%A9-%EC%88%98%EC%8B%A0-%EC%9B%B9%ED%9B%84%ED%81%AC
Incoming Webhook을 설치하는 방법은 간단하기도 하고 docs에 자세하게 설명이 나와있으니 자세한 설명은 생략하겠습니다.
- @slack/webhook 셋팅
이제 Node.js에서 webhook을 통해 쉽게 slack에 메시지를 보내주는 @slack/webhook모듈을 셋팅해줍니다.
@slack/webhook 셋팅 : https://slack.dev/node-slack-sdk/webhook
예제 코드
const { IncomingWebhook } = require('@slack/webhook');
const url = process.env.SLACK_WEBHOOK_URL;
const webhook = new IncomingWebhook(url);
// Send the notification
(async () => {
await webhook.send({
text: 'I\'ve got news for you...',
});
})();
- 오류 발생
저는 Incoming Webhook을 워크스페이스 내에서 셋팅한 후 수신 웹후크 UR을 통해 메시지를 보냈으나 계속 404에러가 났습니다.
구글링 중 slack api를 이용해 Incoming Webhook을 설치하니 오류가 해결되었다는 글을 보았고 똑같이 진행했으나 이번엔 403에러가 발생했습니다. 이렇다 할 솔루션을 찾지 못해 결국 slack에 문의 메일을 보내게됐습니다.
Slack 담당자는 노드 버전 및 패키지 사용을 권고 했습니다. 하지만 저의 node version은 16.x 였고 이미 @slack/webhook을 사용하고 있었습니다. 지속적으로 메일을 주고받았지만 확실한 해결책이 나오지 못했습니다. 메일을 주고받으면서도 계속 구글링을 했고 몇몇 예제에서 수신 웹후크 URL을 config 파일로 분리시킨 것을 보고 혹시나 하는 마음에 URL을 config 파일로 분리시켜 실행을 해봤습니다. 파일을 분리시키고 실행을 해보니 에러없이 메시지가 잘 가게 되었습니다. 하핫..
- slack webhook을 실행시키는 코드
import logger from '../util/logger';
import * as slackHook from '@slack/webhook';
import {returnbase} from './slackconfig';
export async function sendSlackWebHook(msg) {
try {
const url = returnBaseURL();
const webhook = new slackHook.IncomingWebhook(url);
await webhook.send({
text: msg,
});
} catch(err) {
logger.info(err);
}
}
- slackconfig.ts
let baseUrl = "수신웹후크 URL"
export function returnBaseURL() {
return baseUrl;
}
혹시나 저와 같은 문제를 겪고 계신 분이 있다면 위와 같이 config 파일로 분리시키면 잘 작동하실 겁니다!