목차
[볼트란?]
슬랙 봇을 만들려고 공식 문서를 찾아다니던 중 볼트라는 게 있어서 이걸 활용해보기로 했습니다.
Slack Bolt는 Slack에서 개발한 프레임워크로, Slack 앱 개발을 보다 쉽고 빠르게 진행할 수 있게 도와줍니다. Bolt 프레임워크는 Python, JavaScript(Node.js), Java 등 다양한 프로그래밍 언어를 지원합니다. Slack 앱은 사용자와 상호작용하거나, 워크스페이스에서 자동화된 작업을 수행하는 데 사용할 수 있습니다.
Bolt는 다음과 같은 기능을 제공하여 Slack 앱 개발을 쉽게 만들어줍니다:
- 이벤트 리스너: Bolt는 Slack API에서 발생하는 이벤트를 감지하고 처리할 수 있는 이벤트 리스너를 제공합니다. 이를 통해 사용자와의 상호작용, 메시지 수신 및 전송, 버튼 클릭 등 다양한 이벤트를 처리할 수 있습니다.
- 블록 키트 지원: Bolt는 Slack에서 제공하는 블록 키트(Block Kit)를 사용하여, 간편하게 사용자 인터페이스(UI)를 구성할 수 있습니다. 이를 통해 대화식 메시지, 모달, 메뉴 등 다양한 UI 요소를 효과적으로 사용할 수 있습니다.
- 간편한 인증 및 권한 관리: Bolt는 OAuth 2.0을 사용하여 Slack 앱의 인증 및 권한 관리를 쉽게 처리할 수 있습니다. 이를 통해 사용자의 승인을 받아 워크스페이스에 앱을 설치하거나, 워크스페이스에서 필요한 정보에 액세스할 수 있습니다.
- 작업 간소화: Bolt 프레임워크는 개발자가 처리해야 할 라우팅, 에러 처리, 페이로드 검증 등의 작업을 대부분 처리해줍니다. 이로 인해 개발자는 앱의 핵심 기능에 집중할 수 있게 됩니다.
Slack Bolt를 사용하면, 워크스페이스에서 효율적으로 작업을 수행할 수 있는 다양한 Slack 앱을 개발할 수 있습니다. 이를 통해 팀원들과의 협업을 강화하거나, 작업 흐름을 자동화하여 생산성을 높일 수 있습니다.
[특정 단어로 봇 호출하기]
아래는 예시입니다. hello라는 단어가 들어오면 Hey there <사용자 이름>을 반환하도록 작성했습니다.
1. 앱 생성, 봇 권한 주기 - 이 부분은 이미 적어둔 글이 있어서 참고 부탁드립니다.
이 글대로 따라하고 봇 토큰을 받아두셔야 합니다.
2023.04.14 - [파이썬/파이썬 활용] - 파이썬 슬랙 봇 만들기(1): 봇 메세지 보내기
2. 앱 레벨 권한 주기, 소켓모드 설정하기
Basic Information > App-Level Tokens > Generate Token and Scopes 클릭
Token Name은 마음대로 적으시면 되고 권한은 connections:write으로 주시면 됩니다.
Socket Mode 에서 소켓모드 토글을 활성화시켜줍니다. (아래 이미지처럼 나오면 됩니다.)
3. 프로젝트 셋팅(폴더 생성, 가상환경 설정, 환경 변수 설정, 슬랙 볼트 설치)
# bolt_app이라는 폴더(경로)를 생성합니다.
mkdir bolt_app
# bolt_app 폴더(경로)로 이동합니다.
cd bolt_app
# 아나콘다를 사용하여 가상 환경을 생성합니다. 여기서 'myenv'는 원하는 가상 환경 이름입니다.
conda create --name myenv python=3.8
# 생성한 가상 환경을 활성화합니다.
conda activate myenv
# 사용하는 python3를 검색해봅니다.
which python3
# Output: /path/to/bolt_app/.venv/bin/python3
# 봇 토큰, 앱 토큰을 환경 변수로 설정해줌
export SLACK_BOT_TOKEN=xoxb-<your-bot-token>
export SLACK_APP_TOKEN=<your-app-level-token>
# 슬랙 볼트를 설치합니다.
pip3 install slack_bolt
4. 이벤트 셋팅
Event Subscriptions > Enable Events 토글을 켜줍니다.
Subscribe to bot events에서 message.channels 권한을 설정해줍니다.
5. 사용하려는 슬랙 채널에 봇 추가해주기
만드신 봇을 채널에서 호출하고 채널에 추가하기를 눌러줍니다.
추가해주는 이유는 현재 권한으로 인해, 봇이 추가된 곳에서만 특정 텍스트에 반응할 수 있기 때문입니다.
6. 실행해보기
import os
from slack_bolt import App
from slack_bolt.adapter.socket_mode import SocketModeHandler
# Initializes your app with your bot token and socket mode handler
app = App(token=os.environ.get("SLACK_BOT_TOKEN"))
# Listens to incoming messages that contain "hello"
# To learn available listener arguments,
# visit https://slack.dev/bolt-python/api-docs/slack_bolt/kwargs_injection/args.html
@app.message("hello")
def message_hello(message, say):
# say() sends a message to the channel where the event was triggered
say(f"Hey there <@{message['user']}>!")
# Start your app
if __name__ == "__main__":
SocketModeHandler(app, os.environ["SLACK_APP_TOKEN"]).start()
실행해보게 되면 맨 처음에 보셨던 이미지처럼 작동하는 걸 확인할 수 있습니다.
해석은 아래와 같습니다.
App 클래스를 사용하여 SLACK_BOT_TOKEN이라는 환경 변수에서 Slack 봇 토큰을 가져와 app 객체를 생성합니다.
@app.message("hello")는 hello라는 문자열이 포함된 Slack 메시지를 감지하면 message_hello() 함수를 실행합니다. message와 say라는 두 개의 매개 변수가 있습니다. message는 Slack 메시지에 대한 정보를 포함하는 딕셔너리입니다. say는 메시지를 전송하는 데 사용됩니다. 해당 코드에서는 message['user']의 값을 가져와 say()를 사용하여 Slack 채널에 메시지를 보냅니다.
if __name__ == "__main__":는 이 파일이 다른 파일에서 임포트되지 않았을 때만 코드를 실행한다는 것을 의미합니다. SocketModeHandler 클래스를 사용하여 SLACK_APP_TOKEN 환경 변수에서 Slack 앱 토큰을 가져와 SocketModeHandler 객체를 생성하고, start() 메소드를 호출하여 Slack Socket Mode를 시작합니다.
'실무 > 슬랙 봇 만들기' 카테고리의 다른 글
파이썬 슬랙 봇 만들기(3-4): 파일 전송하기 > 견적서 생성 모달 창 만들기 (0) | 2023.04.18 |
---|---|
파이썬 슬랙 봇 만들기(3-3): 파일 전송하기 > 모달 드롭다운 만들기 (0) | 2023.04.18 |
파이썬 슬랙 봇 만들기(3-2): 파일 전송하기 > 드롭다운 메뉴 만들기 (0) | 2023.04.18 |
파이썬 슬랙 봇 만들기(3-1): 파일 전송하기 (0) | 2023.04.16 |
파이썬 슬랙 봇 만들기(1): 봇 메세지 보내기 (0) | 2023.04.14 |
댓글