안녕하세요, 오늘은 베스핀글로벌 SRE실 차예진님이 작성해 주신 Elasticsearch 시작 가이드에 대해 알아봅니다.
궁금한 부분이 있으시면 편하게 댓글을 달아주세요 🙂
Slack Bolt 란?
Bolt는 Slack 고유의 SDK로서 여러 최신 API들을 담고 있는 라이브러리를 제공합니다.
왜 Slack bolt를 사용하는지?
Slack bolt는 기존에 사용하던 slack_sdk를 기반으로 만들어진 SDK로 slack_sdk의 기능을 모두 사용할 수 있고, 기존에 코드로 구현하기 복잡했던
event 트래깅 혹은 websocket mode들을 간단하게 구현 할 수 있다는 장점이 있습니다. 또한 Slack에서 직접 개발 업데이트를 제공해주어 신규 API에 대한 빠른 대응을 준비할 수 있습니다.
1. Slack App 생성
📌Slack Bolt를 활용하여 Python Chatbot을 개발하기에 앞서 Slack에 메세지를 보내거나 읽어오는 역할을 수행할 Slack App을 생성해야 합니다.
1-1. Slack Workspace 로그인
Chatbot을 연동하려고 하는 Slack WorkSpace에 로그인 한 후 Slack API 페이지로 이동합니다.
1-2. Slack App 생성
Slack Api 페이지에서 신규 Slack App을 생성합니다.
- ‘Create New App’을 클릭
- Create an app 팝업이 뜨면 ‘From scratch’ 선택
- App Name에 chatbot으로 사용할 App명을 지정
- Chatbot을 활용하려고 하는 Workspace를 선택
- Create App을 클릭하여 신규 Slack App을 생성
1-3. App/Bot Token 생성
Python에서 신규 생성한 Bot을 사용하기 위해서는 인가된 접근임을 증명할 Token이 필요합니다.
Token은 신규 생성한 Bot Page에서 생성 할 수 있습니다. Token을 신규 생성한 후 유출되지 않도록 주의 해야합니다.
1-3-1. App Token 생성
- Slack API 페이지에서 신규 생성한 App을 선택합니다.
- Setting > Basic Information > App-Level-Tokens 에서 App Token을 생성합니다.
생성하려는 App Token의 Scope는 ‘connections:write’를 선택합니다.
3. 생성된 Token을 안전한 곳에 저장합니다.
1-3-2. Bot Token 생성
- Features > OAuth & Permissions > Scopes > Bot Token Scopes에서 ‘chat:write’ 권한을 추가해 줍니다.
- 추가한 Scopes를 Workspace에 적용시키려면 Install이 필요합니다.
Features > OAuth & Permissions > OAuth Tokens for Your Workspace 에서 ‘Install to Workspace’ 버튼을 클릭, 권한을 허가 해줍니다.
- 권한을 허용하면 Features > OAuth & Permissions > OAuth Tokens for Your Workspace 에서 신규 생성된 Bot Token을 확인 할 수 있습니다.
해당 토큰을 안전한 곳에 저장합니다.
1-4. Slack App Socket mode 활성화
Slack에서 보내는 메시지를 신규로 만든 Slack App이 실시간으로 체크해서 반응 할 수 있도록 구성하기 위해서는 여러 방법이 있지만 이 가이드에서는 SocketMode를 사용합니다.
- Settings > Socket Mode > Connect using Socket Mode 에서 Enable Socket Mode 버튼을 활성화 합니다.
2. Python Slack Chatbot 작성
2-1. Python 환경 구성
Python3와 pip가 설치 되어 있다는 가정하에 설명 하겠습니다.
만약 설치가 되어 있지 않다면 OS 환경에 맞춰서 python3 최신버전과 그와 연동되는 pip를 설치해주세요.
2-1-1. slack_bolt SDK 설치
pip를 사용하여 slack chatbot을 구성할 서버에 slack_bolt 라이브러리를 설치하여 줍니다.
(문서작성 기준 최신버전 사용 slack_bolt v1.18.0)
2-1-2. Chatbot python 파일 작성
- app.py 파일을 생성합니다.
- 아래의 테스트 코드를 작성합니다.
SLACK_BOT_TOKEN 과 SLACK_APP_TOKEN 에 위에서 저장했던 Token 값을 넣어줍니다.
3. python3 로 app.py를 실행합니다.
4. Bolt App이 실행되고 있다는 문구가 뜨면 성공적으로 연동 된 것 입니다.
3. Slack Chatbot 테스트
이제 생성한 Slack App과 Python Chatbot을 활용하여 여러 Event를 처리할 수 있습니다.
Slack API에는 많은 Event들이 존재하는데, 다양한 Event에 대한 정보는 Slack 공식 Document를 참고하여 주세요. https://api.slack.com/apis/connections/events-api
3-1. Chatbot Event Subscriptions 등록
Slack App에서 Event에 대한 정보를 Python Chatbot으로 Route 하기 위해서는, 어떤 Event를 Route 할 것인지에 대한 설정이 필요합니다.
Slack에서 Event에 대한 구독을 등록함으로써 Python으로 작성한 Chatbot에 Event가 Route 되게 됩니다.
- Slack API 페이지에서 생성한 Slack App을 선택합니다.
2. Features > Event Subscriptions 에서 Enable Event를 활성화 합니다.
3. Subscribe to bot events에 Add Bot User Event를 선택하여 아래의 event들을 구독합니다.
- message.channels : 해당 App 이 추가된 public channel의 메시지를 Listen 합니다.
- message.groups : 해당 App 이 추가된 private channel의 메시지를 Listen 합니다.
- message.im : 해당 App 이 추가된 DM의 메시지를 Listen 합니다.
- message.mpim : 해당 App 이 추가된 Multi-person DM의 메시지를 Listen 합니다.
4. 변경사항 저장을 위해 Save Change를 클릭합니다.
- 변경한 내용을 WorkSpace에 반영하기 위해서 Basic Information > Building Apps for Slack > Install your app 에서
‘Reinstall to Workspace’를 클릭해 Reinstall 작업을 진행합니다.
3-2. Python Chatbot Event Handler 작성
Event 구독을 완료 하였기 때문에 이제 Python으로 작성한 Chatbot의 Websocket을 실행 시키게되면 Event 발생 시 지정한 Handler가 호출 되게 됩니다. Chatbot을 활용할 채널에 추가하고 메시지를 보내 작성한 Chatbot이 동작하도록 코드를 작성하겠습니다.
3-2-1. Message Event Route Handler
Message Event는 Chatbot이 속한 Channel에서 누군가 메시지를 보냈을 때 발생하는 이벤트 입니다.
테스트에서는 해당 이벤트를 Route하여 Chatbot이 응답하는 처리를 진행해 보겠습니다.
- Slack App을 만든 Workspace에서 임의의 채널에 Chatbot App을 초대 합니다.
2. Python Chatbot Code를 아래와 같이 수정합니다.
python3로 app.py를 실행합니다.
- Chatbot을 초대한 채널에 ‘hello’ 메시지를 보냅니다.
- 정상적으로 Chatbot이 응답하는지 확인합니다.
감사합니다 🙂
Written by 차 예진 / Yejin Cha
Cloud Engineer