[Slack] Slack API 를 이용한 생산성 향상 #2 API 개발

파이썬(python) 및 파이참(pycharm) 설치

파이썬 가상 환경 이란

파이썬을 처음 접해봤기 때문에 가상 환경이 왜 필요한지 알 수 없었다.
검색 해보고 스스로 이해 한 내용을 바탕으로 설명한다.

Node, Java, React 등은 프로젝트 안에서 패키지 관리 하고 있다.(package.json, pom.xml, build.gradle)
그래서 노드, 자바 버전 정도만 신경쓰면 프로젝트 클론따고 패키지 인스톨(빌드) 후 런까지 대체로 문제가 발생하지 않는다.

하지만 파이썬 프로젝트는 프로젝트 별로 관리되지 않는듯하다. 하나의 프로젝트를 하면 문제 없지만, N개 이상을 하는 경우 매우 답답한 상황이 생길 수 있으니, 배워두는 겸 가상환경을 생성하자.


가상 환경 생성

1
2
3
4
5
python -m venv 가상환경이름

# 특정 경로에 venv 이름의 가상 환경 생성
cd C:\workspace
python -m venv venv

가상 환경 활성화

1
.\venv\Scripts\activate

가상 환경 명령어

다른 명령어가 필요하면 아래 링크에서 Readme 파일을 참고

  • https://github.com/ymkmoon/slack-bot

flask 설치

1
2
3
cd C:\workspace\myproject
python -m pip install --upgrade pip
pip install flask

ngrok 설치

ngrok 를 설치하는 이유는 Slack API 에서 이모지를 감지하여 메세지를 보낼 때 Request URL 에 입력 할 도메인을 할당하기 위함이다.

1
2
cd C:\workspace\myproject
pip install ngrok

파이썬 코드

위와 동일한 코드는 아래 링크에 존재한다.

  • https://github.com/ymkmoon/slack-bot
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
from flask import Flask, request, jsonify
import requests

app = Flask(__name__)

SLACK_BOT_TOKEN = 'SLACK_BOT_TOKEN'
USER_ID = 'USER_ID' 

@app.route("/slack/events", methods=["POST"])
def slack_events():
    data = request.json

    # URL 검증 처리
    if "challenge" in data:
        return jsonify({"challenge": data["challenge"]})

    # reaction_added 이벤트 처리
    if data.get("event", {}).get("type") == "reaction_added":
        event = data["event"]
        item_user = event.get("item_user")  # 반응이 추가된 메시지 작성자
        if item_user == USER_ID:  # 본인의 메시지인지 확인
            reaction = event["reaction"]
            send_message(f"스레드에 '{reaction}' 반응이 추가되었습니다!")

    return jsonify({"status": "ok"})

def send_message(text):
    url = "https://slack.com/api/chat.postMessage"
    headers = {"Authorization": f"Bearer {SLACK_BOT_TOKEN}"}
    payload = {"channel": USER_ID, "text": text}
    requests.post(url, headers=headers, json=payload)

if __name__ == "__main__":
    app.run(port=3000)

서버 런

파이썬 코드 실행

위에서 작성 한 파이썬 코드를 실행 후 아래 명령어를 이용해 DNS 를 할당한다

1
ngrok http 3000

Slack APP 연동

Token 과 User ID 입력

파이썬 코드에 #1 Slack 설정 에서 확인 한 값을 입력해준다.

1
2
SLACK_BOT_TOKEN = 'SLACK_BOT_TOKEN'
USER_ID = 'USER_ID' 



Event Subscriptions 설정

여기에서 ngrok 으로 할당 된 주소와 서버의 Enpoint 를 입력한다.

Slack Bot Slack Bot Slack Bot



동작 테스트

Slack Bot

Leave a comment