await slack.slack("제목");
await slack.slack("내용");
서버에 요청이 갈때마다 해당 요청정보를 slack 채널에 bot이 메시지를 보내는것을 구현하고자 함
우선 새 워크스페이스를 개설한다
Slack은 미래의 업무가 이루어지는 곳입니다
Slack은 여러분의 팀과 소통할 새로운 방법입니다. 이메일보다 빠르고, 더 조직적이며, 훨씬 안전합니다.
slack.com
에 접속하여 새 워크스페이스 개설을 누르고 워크스페이스를 생성한다
그 후에 새 app을 만든다
Slack API: Applications | Slack
Your Apps Don't see an app you're looking for? Sign in to another workspace.
api.slack.com
로 접속해서 Create New App을 누른다음
App Name을 지정해주고 방금 생성한 워크스페이스와 연동시켜준다
그리고 Bots을 선택한다
그 후에 Features-OAuth & Permissions로 간다
Scopes의 Bot Token Scopes에서
scope들을 허용해줘야하는데
공식문서에서 무엇을 허용해줘야하는지 나와있지만 최신화가 안되어있어서 스코프이름들이 다른게 많다
대체로 아래와 같은것들을 허용해준다
channel:read,
chat:write,
chat:write.public,
users:write
하지만 log기록용이라는 본래 취지에 맞게 남이 볼 수 없도록 나머지는 건드리지않고
chat:write만 허용해준다
허용해도 정상적으로 채널에 메시지가 가지 않는데
chat:write.public이 아니기에 현재 글쓸 권한이없기 때문이다
그러므로 해당 슬랙의 앱을 오른쪽 버튼으로 클릭해서 세부정보를 열어보면
이 앱을 채널에 추가가있는데 원하는 채널에 추가하면 된다
OAuth Tokens for Your Workspace에서 Bot User OAuth Token을 발행받는다 (권한 변경시마다 토큰 refresh해줘야함)
이제 만들어놓은 Slack에서 원하는 채널에 들어간 뒤 url을 보면 마지막에 C로 시작하는 문자열이있는데 그것이 채널의 아이디값이다
코드
구글링해보면 보이는 아래와 같은 코드는
const Slack = require("slack-node");
const API_TOKEN = "Bot User OAuth Access Token";
const slack = new Slack(API_TOKEN);
const send = async (sender, message) => {
slack.api(
"chat.postMessage",
{
text: `${sender}:\n${message}`,
channel: "#test",
icon_emoji: "slack",
},
(error, response) => {
if (error) {
console.log(error);
return;
}
console.log(response);
}
);
};
send("user1", "send message");
2021.2.24 이후로 Slack의 정책업데이트로 인해 라이브러리를 사용할 수 없어서 invalid_auth에러가 난다
그러므로 Slack 공식문서인
Web API methods | Slack
api.slack.com
여기서 원하는 메소드의 사용법을 숙지해서 사용하자
단순 메시지를 보내는 chat.postMessage메소드의 경우에는
const { WebClient, LogLevel } = require("@slack/web-api");
const client = new WebClient("xoxb-your-token", {
logLevel: LogLevel.DEBUG
});
const channelId = "C12345";
try {
const result = await client.chat.postMessage({
channel: channelId,
text: "Hello world"
});
console.log(result);
}
catch (error) {
console.error(error);
}
위의 코드처럼
npm install @slack/web-api
해당 명령어로 설치후에 사용하면된다
저같은 경우에는
const { WebClient, LogLevel } = require("@slack/web-api");
const client = new WebClient(process.env.SLACK_BOT_API, {
logLevel: LogLevel.DEBUG,
});
const channelId = process.env.SLACK_CHANNEL;
exports.slack = async (message) => {
try {
const result = await client.chat.postMessage({
channel: channelId,
text: message,
});
console.log(result);
} catch (error) {
console.error(error);
}
};
해당 코드처럼 따로 파일을 만들어서 exports해주고
slack에 메시지 보낼곳에서 slack(message)로 호출해서 사용했다
사용할때 2줄 이상을 쓴다면
await slack.slack("제목");
await slack.slack("내용");
처럼 비동기요청을 해줘야지 제목 내용순으로 나온다 (안해주면 제목이 빨랐다가 내용이 빨랐다가...)
slack 적용
7일차 / Slack Bot
한 것 환경변수들 추가 develoment와 production 데이터베이스 이분화 코드 간결화 전체적인 refactory가 끝났다 이제 기본 골자는 잡혔으니까 백엔드팀원과 서로 구현하고 싶은것을 각자구현하고 merge
fullfish.tistory.com
'코딩 공부 > 공부' 카테고리의 다른 글
Sequelize N : M (다대다)관계에 대한 고찰 (0) | 2022.05.05 |
---|---|
Sequelize 관계 설정 1 : N, N : M(1대다, 다대다) (1) | 2022.05.04 |
Sequelize와 Migration 기본 설정 (0) | 2022.05.04 |
포스트맨 자동화 (0) | 2022.04.26 |
정규표현식 (Regular Expression: Regex) (2) | 2022.04.21 |