DOCS/troubleshooting/250908_slack_interactive_gateway_proxy.md

1.8 KiB

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 수정

@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)