diff --git a/troubleshooting/250908_slack_interactive_gateway_proxy.md b/troubleshooting/250908_slack_interactive_gateway_proxy.md index 8bfcccc..4c3f914 100644 --- a/troubleshooting/250908_slack_interactive_gateway_proxy.md +++ b/troubleshooting/250908_slack_interactive_gateway_proxy.md @@ -15,26 +15,19 @@ - rb8001/app/router/slack_handler.py:275 handle_interactive() 존재 - rb8001/main.py:289 `/api/slack/interactive` 엔드포인트 존재 -## 구현 필요사항 +## 최종 해결 (2025-09-08) -### 1. robeing-gateway/app/main.py 수정 -```python -@app.post("/slack/interactive") -async def slack_interactive_proxy(request: Request): - # URL encoded payload 파싱 - form_data = parse_qs((await request.body()).decode()) - payload = json.loads(form_data.get('payload', [''])[0]) - team_id = payload.get("team", {}).get("id") - - # DB에서 토큰 조회 - # 중요: FastAPI가 헤더를 소문자로 변환하므로 get("x-slack-signature") 사용 - # headers = {"X-Slack-Signature": get("x-slack-signature"), ...} -``` +### 1. robeing-gateway/app/main.py:552-587 +- /slack/interactive 엔드포인트 추가 +- request.headers.get("x-slack-signature") - 소문자 필수 +- request.headers.get("x-slack-request-timestamp") - 소문자 필수 +- content=body로 원본 전달 +- X-Slack-Bot-Token 헤더로 토큰 전달 -### 2. Slack App 설정 변경 +### 2. Slack App 설정 - Interactivity & Shortcuts → Request URL -- 현재: 미설정 또는 잘못 설정 -- 변경: `https://ro-being.com/gateway/slack/interactive` +- 설정값: `https://ro-being.com/gateway/slack/interactive` +- Signing Secret: 995cdf...92af22 (rb8001 .env와 일치) ## 예상 동작 1. 버튼 클릭 → Slack → Gateway `/slack/interactive`