# Slack 멀티 워크스페이스 토큰 관리 문제 ## 작성일: 2025-09-03 ## 작성자: 51123 서버 관리자 ## 상태: 🟢 해결 방안 확정 (98% 구현 가능) ## 영향: Company-X, GoodGang Labs 워크스페이스 응답 실패 ## 필요 작업: Gateway 1개 함수, rb8001 2줄 수정 --- ## 1. 문제 상황 - **현상**: Company-X에서 메시지 수신은 정상, 응답 전송 실패 - **원인**: rb8001이 단일 SLACK_BOT_TOKEN 환경변수만 사용 - **에러**: `channel_not_found` - 잘못된 토큰으로 채널 접근 ## 2. 토큰 현황 (2025-09-03 DB 확인) - **Robeing (T0925SXPS4D)**: xoxb-9073915808149-9107868204992-... (DB 등록) - **Company-X (T097FCTDVEX)**: xoxb-9253435471507-... (DB 등록) - **GoodGang Labs (T035VFRKCN6)**: xoxb-3199535658754-... (DB 등록) - **문제**: rb8001이 환경변수 토큰만 사용, DB 토큰 미조회 - **DB 구조**: 모든 팀이 container_port 8001 (rb8001 공유) ## 3. 상세 분석 ### 3.1 이벤트 수신 (✅ 정상) - U09BQSN72UT(김종태) 봇 멘션: `<@U09DWLARFQQ> 하이` - app_mention 이벤트 정상 수신 ### 3.2 처리 과정 (✅ 정상) - UUID 변환 성공 - 응답 생성 성공: "김종태님, 안녕하세요! 로빙입니다." - ChromaDB/PostgreSQL 저장 성공 ### 3.3 응답 전송 (❌ 실패) ``` ERROR: Failed to send final response: The request to the Slack API failed. The server responded with: {'ok': False, 'error': 'channel_not_found'} ``` ## 4. 해결 방안 (2025-09-03 확정) ### 4.1 기존 코드 활용 - **Gateway**: items_proxy, chat_proxy 패턴 재사용 - **rb8001**: 최소 수정 (라인 21, 98만) - **skill-slack**: 제거 (8/12 이후 미사용) ### 4.2 구현 단계 1. **nginx**: ✅ 완료 (`/api/` → 8100 설정 확인됨) 2. **Gateway**: slack_proxy 함수 추가 (get_verified_user 스킵) 3. **rb8001**: 2줄 수정 (라인 21, 98) 4. **Slack App**: Event URL 변경 ## 5. 구현 필요 코드 (로컬 개발자) ### 5.1 Gateway (기존 proxy 패턴 활용) ```python # 기존 items_proxy, chat_proxy와 동일 패턴 async def slack_proxy(request: Request): # get_verified_user() 스킵 (/api/slack/* 경로) body = await request.json() team_id = body.get("team_id") # DB 조회 (team_id 인덱스 활용) token = await db.fetch_one( "SELECT bot_token FROM slack_workspaces WHERE team_id = ?", team_id ) headers = {"X-Slack-Bot-Token": token["bot_token"]} return await httpx.post("http://192.168.219.52:8001/api/slack/events", json=body, headers=headers) ``` ### 5.2 rb8001 수정 위치 - **slack_handler.py:21**: `settings.SLACK_BOT_TOKEN` → `request.headers.get("X-Slack-Bot-Token", settings.SLACK_BOT_TOKEN)` - **dm_skill.py:98**: WebClient 초기화 시 헤더 토큰 우선 사용 ### 5.3 nginx 설정 ✅ **확인 완료** - nginx-infra/server-nginx-default - HTTP(80): 라인 55-101 - HTTPS(443): 라인 191-237 - `/api/*` → `http://localhost:8100/` 프록시 설정됨