Slack Bolt를 활용한 Python Chatbot 가이드

안녕하세요, 오늘은 베스핀글로벌 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 페이지로 이동합니다.

https://api.slack.com/apps/

1-2. Slack App 생성

Slack Api 페이지에서 신규 Slack App을 생성합니다.

  1. ‘Create New App’을 클릭
  2. Create an app 팝업이 뜨면 ‘From scratch’ 선택
  3. App Name에 chatbot으로 사용할 App명을 지정
  4. Chatbot을 활용하려고 하는 Workspace를 선택
  5. Create App을 클릭하여 신규 Slack App을 생성

1-3. App/Bot Token 생성

Python에서 신규 생성한 Bot을 사용하기 위해서는 인가된 접근임을 증명할 Token이 필요합니다.
Token은 신규 생성한 Bot Page에서 생성 할 수 있습니다. Token을 신규 생성한 후 유출되지 않도록 주의 해야합니다.

1-3-1. App Token 생성

  1. Slack API 페이지에서 신규 생성한 App을 선택합니다.
  1. Setting > Basic Information > App-Level-Tokens 에서 App Token을 생성합니다.
    생성하려는 App Token의 Scope는 ‘connections:write’를 선택합니다.

3. 생성된 Token을 안전한 곳에 저장합니다.

1-3-2. Bot Token 생성

  1. Features > OAuth & Permissions > Scopes > Bot Token Scopes에서 ‘chat:write’ 권한을 추가해 줍니다.
  1. 추가한 Scopes를 Workspace에 적용시키려면 Install이 필요합니다.
    Features > OAuth & Permissions > OAuth Tokens for Your Workspace 에서 ‘Install to Workspace’ 버튼을 클릭, 권한을 허가 해줍니다.
  1. 권한을 허용하면 Features > OAuth & Permissions > OAuth Tokens for Your Workspace 에서 신규 생성된 Bot Token을 확인 할 수 있습니다.
    해당 토큰을 안전한 곳에 저장합니다.

1-4. Slack App Socket mode 활성화

Slack에서 보내는 메시지를 신규로 만든 Slack App이 실시간으로 체크해서 반응 할 수 있도록 구성하기 위해서는 여러 방법이 있지만 이 가이드에서는 SocketMode를 사용합니다.

  1. 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 파일 작성

  1. app.py 파일을 생성합니다.
  2. 아래의 테스트 코드를 작성합니다.
    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 되게 됩니다.

  1. 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를 클릭합니다.

  1. 변경한 내용을 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이 응답하는 처리를 진행해 보겠습니다.

  1. Slack App을 만든 Workspace에서 임의의 채널에 Chatbot App을 초대 합니다.

2. Python Chatbot Code를 아래와 같이 수정합니다.

python3로 app.py를 실행합니다.

  1. Chatbot을 초대한 채널에 ‘hello’ 메시지를 보냅니다.
  2. 정상적으로 Chatbot이 응답하는지 확인합니다.

감사합니다 🙂

Written by 차 예진 / Yejin Cha

Cloud Engineer

Leave a Comment