2.8 KiB
2.8 KiB
Slack 멀티 워크스페이스 토큰 관리 문제
작성일: 2025-09-03
작성자: 51123 서버 관리자
상태: 🟡 해결 방안 확정 (구현 대기)
영향: Company-X, GoodGang Labs 워크스페이스 응답 실패
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 구현 단계
- nginx:
/api/location 추가 - Gateway: slack_proxy 함수 (get_verified_user 스킵)
- rb8001: 헤더 토큰 읽기 추가
- Slack App: Event URL 변경
5. 구현 필요 코드 (로컬 개발자)
5.1 Gateway (기존 proxy 패턴 활용)
# 기존 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 설정 추가
location /api/ {
proxy_pass http://localhost:8100;
proxy_set_header X-Real-IP $remote_addr;
}