- users → user in SQL contexts (94 occurrences) - robeings → robeing in SQL contexts - user_preferences → user_preference (14 files) - slack_workspaces → slack_workspace in SQL contexts (17 files) All table names now correctly match PostgreSQL schema
6.1 KiB
6.1 KiB
Slack 멀티 워크스페이스 토큰 관리 문제
작성일: 2025-09-03
작성자: 51123 서버 관리자
상태: ✅ 해결 완료
영향: Company-X, GoodGang Labs 워크스페이스 정상 작동
최종 URL: https://ro-being.com/gateway/slack/events
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. 해결 과정
4.1 문제 진단
- Gateway
/api/slack/events엔드포인트 미구현 발견 - nginx
/api/경로가 8000(frontend)으로 잘못 프록시됨 /gateway/경로가 8100(Gateway)으로 올바르게 설정됨
4.2 구현 완료
- ✅ Gateway:
/slack/events엔드포인트 추가 - ✅ DB import: AsyncSessionLocal, text 추가
- ✅ Slack App: Event URL을
/gateway/slack/events로 설정 - ✅ 검증: URL verification challenge 응답 성공
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_workspace 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
/gateway/*→http://localhost:8100/(Gateway)/rb8001/*→http://192.168.219.52:8001/(rb8001 직접)/api/*→http://localhost:8000/(frontend-base)
6. 최종 분석 (2025-09-03 20:10)
6.1 작동 상태
- Gateway → rb8001 이벤트 전달 성공 (200 OK) (100%)
- Slack User ID → UUID 변환 정상 작동 (100%)
- 메모리/DB 저장 모두 성공 (100%)
- LLM 응답 생성 완료 (100%)
- Slack 전송 실패: channel_not_found (100%)
6.2 문제 원인
- 원인: Company-X 토큰 대신 기본 토큰 사용 (100%)
- Gateway가 X-Slack-Bot-Token 헤더 전달 중 (100%)
- rb8001이 헤더 토큰 무시하고 환경변수만 사용 (100%)
- rb8001 코드 수정 필요 (라인 21, 98) (100%)
- 로컬 개발자가 rb8001 수정해야 함 (100%)
6.3 테스트 데이터
- 발화자: U09C98KBGHX (Company-X 대표)
- Team ID: T097FCTDVEX (COMPANY X)
- UUID: 1a275625-1762-42ef-8398-ce743c478692
- Bot Token: xoxb-9253435471507-... (DB 등록됨)
- 메시지: "로빙 하이"
- 응답: "안녕하세요! 무엇을 도와드릴까요?" (생성됨, 전송 실패)
7. 부분 해결 (2025-09-03 21:00)
7.1 Team ID 수정
- 발견: Slack이 보내는 실제 team_id는 T09C98KB933
- 수정: DB의 team_id를 T09C98KB933으로 유지
- 결과: Gateway가 토큰 찾기 성공, rb8001 응답 200
7.2 남은 문제 - 토큰 불일치
- DB 토큰: xoxb-9253435471507-... (57자)
- Gateway 로그: xoxb-92534... (다른 토큰?)
- 봇 ID 문제:
- DB의 봇: U09DWLARFQQ
- 토큰의 봇: U097FFP4QQ3 (다른 봇)
- 증상: channel_not_found 에러 지속
7.3 작동 상태
- ✅ Robeing 워크스페이스: 정상 작동
- ✅ Gateway 토큰 전달: 정상
- ✅ rb8001 토큰 수신: 정상
- ❌ Company-X 메시지 전송: 실패 (잘못된 토큰)
7.4 필요 조치
- Company-X의 올바른 봇 토큰 확인 필요
- 현재 DB의 토큰이 실제 Company-X 봇 토큰과 다를 가능성
8. 최종 해결 완료 (2025-09-03 21:14)
8.1 근본 원인
- 잘못된 토큰: DB에 저장된 토큰이 유효하지 않음
- 이전 토큰: xoxb-9253435471507-... (2025-09-02에 저장, 권한 없음)
- 봇 재설치 필요: 새로운 토큰 발급 필요
8.2 해결 과정
-
봇 재설치 URL 생성:
https://auth.ro-being.com/auth/slack/passport/install?user_id=237494f7-061c-484c-a4f7-f500611e32f1- user_id: tjhong@company-x.partners의 UUID
- workspace_id: 99d22d6b-d327-4fa4-bd2f-d228c11056e2 자동 조회
-
새 토큰 발급 완료:
- 이전: xoxb-9253435471507-92535331608...
- 새로운: xoxb-9417291383105-94726908658...
- 발급 시간: 2025-09-03 12:11:45
-
Gateway 재시작:
docker compose down && up -d --build
8.3 최종 결과
- ✅ 21:13:49 - Company-X(T09C98KB933) 이벤트 수신
- ✅ 새 토큰 사용: xoxb-94172... (로그에 10자만 표시)
- ✅ rb8001 응답: 200 OK
- ✅ 메시지 전송 성공
8.4 교훈
- 토큰 문제 시 봇 재설치가 가장 확실한 해결책
- auth-server의
/passport/install엔드포인트 활용 - user_id 파라미터로 특정 워크스페이스 봇 재설치 가능