diff --git a/troubleshooting/250908_slack_interactive_gateway_proxy.md b/troubleshooting/250908_slack_interactive_gateway_proxy.md new file mode 100644 index 0000000..8bfcccc --- /dev/null +++ b/troubleshooting/250908_slack_interactive_gateway_proxy.md @@ -0,0 +1,48 @@ +# Slack Interactive Gateway 프록시 구현 + +**작성일**: 2025-09-08 +**작성자**: happybell80 +**상태**: 구현 필요 + +## 문제 상황 +- CompanyX 뉴스 "홈페이지 게시" 버튼 클릭 시 응답 없음 +- Slack이 버튼 클릭을 `/api/slack/events`로 잘못 전송 (Interactive URL 미설정) +- robeing-gateway에 `/slack/interactive` 프록시 없음 + +## 현재 구조 +- `/slack/events` → rb8001:8001/api/slack/events (구현됨) +- `/slack/interactive` → 404 (미구현) +- rb8001/app/router/slack_handler.py:275 handle_interactive() 존재 +- rb8001/main.py:289 `/api/slack/interactive` 엔드포인트 존재 + +## 구현 필요사항 + +### 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"), ...} +``` + +### 2. Slack App 설정 변경 +- Interactivity & Shortcuts → Request URL +- 현재: 미설정 또는 잘못 설정 +- 변경: `https://ro-being.com/gateway/slack/interactive` + +## 예상 동작 +1. 버튼 클릭 → Slack → Gateway `/slack/interactive` +2. Gateway가 team_id로 DB 토큰 조회 +3. rb8001 `/api/slack/interactive`로 전달 +4. rb8001이 skill-publish 호출해서 홈페이지 게시 + +## 관련 파일 +- robeing-gateway/app/main.py:508 (slack_proxy 참고) +- rb8001/app/router/slack_handler.py:334 (publish_news_ 처리) +- rb8001/app/skills/news_posting_skill.py:268 (handle_publish_action) \ No newline at end of file