회사나 해커톤 등에서 팀원간 소통시 슬랙을 이용하면서 슬랙 앱을 통해 원하는 채널에 자유자재로 메시지를 전송할 수 있다는 것을 알게 되었습니다.
보통은 슬랙 Web API 를 통해 메시지 전송에 사용하는 것 같은데, 찾아보니까 멤버 정보의 목록을 불러오고 멤버의 상태 이모지 및 메시지도 변경이 가능해 보였습니다.
이번 글에서 테스트용 앱을 만들어서 간단하게 Web API 를 다뤄보는 방법을 설명하고자 합니다.
글은 1, 2편으로 나눠서 1편에서는 앱을 만들어보고, 채널에 메시지를 전송해보는 것으로 마무리를 하겠습니다.
슬랙 워크스페이스 생성 과정은 이미 되어있다는 가정하에 생략하도록 하겠습니다.
위의 링크를 접속하여 Create New App
을 클릭 후 뜨는 모달에서 From Scratch
를 선택합니다.
앱 이름을 입력하고 워크스페이스를 선택 후 Create App
버튼을 클릭합니다.
앱 권한을 설정합니다. 좌측 메뉴의 Features > OAuth & Permissions 를 클릭합니다. 앱 기능에 따라 필요한 권한이 달라지는데, 특정 채널에 메시지 보내는 기능을 위해서 incoming-webhook
, chat:write
권한이 필요합니다.
만일 비공개 채널에 메시지를 보내려면 groups:write
가 추가로 필요합니다.
아래 Scopes > Bot Token Scopes 에서 Add an OAuth Scope
를 클릭 후 나오는 검색 창에 위의 권한 이름들로 검색하여 추가해줍니다.
전체 메소드 별 필요한 앱 권한은 아래 링크에서 확인하실 수 있습니다.
슬랙의 봇 기능 사용을 위해 좌측 메뉴의 Settings > Basic Information > Add features and functionality 클릭 후 Bots
항목을 선택합니다.
Bots 선택 후 나오는 페이지에서 App Display Name 항목 옆에 Edit
버튼이 있는데, 이를 클릭하고 다음과 같이 이름을 등록해줍니다. 이 과정은 앱이 슬랙에 메시지를 보낼때 봇이 보내는 것이므로 그 봇에 대한 표시 이름과 봇 자체 이름을 등록하는 과정이라고 보시면 될 것 같습니다.
다시 좌측 메뉴의 Features > OAuth & Permissions 로 돌아와서 Install to Workspace
버튼을 클릭해서 워크스페이스에 앱을 연동해줍니다. 권한 요청 확인 페이지가 뜬다면 정상적으로 앱이 준비된 것이고, 게시할 채널 선택 후 허용 버튼을 클릭하면 앱이 설치됩니다.
다시 앱 구성 페이지로 돌아오면 다음과 같이 봇 유저 토큰이 발급되어 있는 것을 확인하실 수 있습니다. 이 토큰은 슬랙 web-api 연동 시 사용할 토큰입니다.
마지막으로 채널에 메시지를 보내려면 앱이 채널에 초대되어야 합니다. 아래와 같이 채널로 이동해서 앱 이름 클릭 후 채널에 추가해줍니다.
@slack/web-api 모듈을 설치합니다.
$ npm i @slack/web-api
자바스크립트 파일을 하나 만들고 다음과 같이 작성해줍니다.
const { WebClient } = require('@slack/web-api');
const botClient = new WebClient('위에서 발급 받은 봇 유저 토큰');
const channelId = '전송할 채널 아이디';
코드에 대해 설명드리면, 발급 받은 토큰으로 웹 클라이언트를 초기화 해 주고 메시지를 전송할 채널 아이디를 세팅해둡니다.
채널 아이디는 슬랙 채널 목록 우클릭 > 채널 세부정보 보기 선택 후 나오는 창 하단에서 확인 및 복사가 가능합니다.
이렇게 하면 정말 간단하게 모든 세팅이 끝났습니다 :)
채널에 메시지를 전송할 땐 chat.postMessage
메소드를 이용합니다.
위의 자바스크립트 코드에서 아래와 같이 추가해줍니다.
const { WebClient } = require('@slack/web-api');
const botClient = new WebClient('위에서 발급 받은 봇 유저 토큰');
const channelId = '전송할 채널 아이디';
botClient.chat
.postMessage({
channel: channelId,
text: '<@슬랙 멤버 아이디> 채널에 메시지를 보내는 예시입니다.',
})
.then(() => {
console.log('메시지 전송 완료');
})
.catch((error) => {
console.log('오류가 발생했습니다.');
console.error(error);
});
channel 에는 위에서 세팅한 메시지를 보낼 채널 아이디를, 텍스트에는 전송할 텍스트를 넣으면 끝입니다. 메시지 중간에 <@슬랙 멤버 아이디>
를 넣어서 특정 사용자를 멘션 할 수도 있습니다.
코드 작성이 완료되었다면 실행해봅시다.
$ node slackTest
아래와 같이 메시지가 잘 온다면 성공입니다.
감사합니다 :)