[Slack] Slack API 를 이용한 생산성 향상 #2 API 개발
- Document
- Slack API 연동
파이썬(python) 및 파이참(pycharm) 설치
- 파이썬 설치 : https://www.python.org/downloads/
- 파이참 설치 : https://www.jetbrains.com/pycharm/download/?section=windows
파이썬 가상 환경 이란
파이썬을 처음 접해봤기 때문에 가상 환경이 왜 필요한지 알 수 없었다.
검색 해보고 스스로 이해 한 내용을 바탕으로 설명한다.
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 를 입력한다.
Leave a comment