From 6eadba0f893a082c898fbba7536e4d3beb277392 Mon Sep 17 00:00:00 2001 From: happybell80 Date: Wed, 3 Sep 2025 21:34:24 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20Company-X=20Slack=20=ED=86=A0=ED=81=B0?= =?UTF-8?q?=20=EB=AC=B8=EC=A0=9C=20=EC=B5=9C=EC=A2=85=20=ED=95=B4=EA=B2=B0?= =?UTF-8?q?=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 봇 재설치로 새 토큰 발급 (xoxb-9417291383105-...) - Gateway 재시작 후 정상 작동 확인 - 멀티 워크스페이스 토큰 관리 문제 해결 --- ...50903_slack_multi_workspace_token_issue.md | 114 +++++++++++++++--- 1 file changed, 98 insertions(+), 16 deletions(-) diff --git a/troubleshooting/250903_slack_multi_workspace_token_issue.md b/troubleshooting/250903_slack_multi_workspace_token_issue.md index d7eb9a1..9d07e67 100644 --- a/troubleshooting/250903_slack_multi_workspace_token_issue.md +++ b/troubleshooting/250903_slack_multi_workspace_token_issue.md @@ -2,9 +2,9 @@ ## 작성일: 2025-09-03 ## 작성자: 51123 서버 관리자 -## 상태: 🟢 해결 방안 확정 (98% 구현 가능) -## 영향: Company-X, GoodGang Labs 워크스페이스 응답 실패 -## 필요 작업: Gateway 1개 함수, rb8001 2줄 수정 +## 상태: ✅ 해결 완료 +## 영향: Company-X, GoodGang Labs 워크스페이스 정상 작동 +## 최종 URL: https://ro-being.com/gateway/slack/events --- @@ -37,18 +37,18 @@ 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. 해결 과정 -### 4.1 기존 코드 활용 -- **Gateway**: items_proxy, chat_proxy 패턴 재사용 -- **rb8001**: 최소 수정 (라인 21, 98만) -- **skill-slack**: 제거 (8/12 이후 미사용) +### 4.1 문제 진단 +- Gateway `/api/slack/events` 엔드포인트 미구현 발견 +- nginx `/api/` 경로가 8000(frontend)으로 잘못 프록시됨 +- `/gateway/` 경로가 8100(Gateway)으로 올바르게 설정됨 -### 4.2 구현 단계 -1. **nginx**: ✅ 완료 (`/api/` → 8100 설정 확인됨) -2. **Gateway**: slack_proxy 함수 추가 (get_verified_user 스킵) -3. **rb8001**: 2줄 수정 (라인 21, 98) -4. **Slack App**: Event URL 변경 +### 4.2 구현 완료 +1. ✅ **Gateway**: `/slack/events` 엔드포인트 추가 +2. ✅ **DB import**: AsyncSessionLocal, text 추가 +3. ✅ **Slack App**: Event URL을 `/gateway/slack/events`로 설정 +4. ✅ **검증**: URL verification challenge 응답 성공 ## 5. 구현 필요 코드 (로컬 개발자) @@ -77,6 +77,88 @@ async def slack_proxy(request: Request): ### 5.3 nginx 설정 ✅ **확인 완료** - nginx-infra/server-nginx-default -- HTTP(80): 라인 55-101 -- HTTPS(443): 라인 191-237 -- `/api/*` → `http://localhost:8100/` 프록시 설정됨 \ No newline at end of file +- `/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 작동 상태 +1. Gateway → rb8001 이벤트 전달 성공 (200 OK) **(100%)** +2. Slack User ID → UUID 변환 정상 작동 **(100%)** +3. 메모리/DB 저장 모두 성공 **(100%)** +4. LLM 응답 생성 완료 **(100%)** +5. Slack 전송 실패: channel_not_found **(100%)** + +### 6.2 문제 원인 +6. 원인: Company-X 토큰 대신 기본 토큰 사용 **(100%)** +7. Gateway가 X-Slack-Bot-Token 헤더 전달 중 **(100%)** +8. rb8001이 헤더 토큰 무시하고 환경변수만 사용 **(100%)** +9. rb8001 코드 수정 필요 (라인 21, 98) **(100%)** +10. 로컬 개발자가 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 해결 과정 +1. **봇 재설치 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 자동 조회 + +2. **새 토큰 발급 완료**: + - 이전: xoxb-9253435471507-92535331608... + - 새로운: xoxb-9417291383105-94726908658... + - 발급 시간: 2025-09-03 12:11:45 + +3. **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 파라미터로 특정 워크스페이스 봇 재설치 가능 \ No newline at end of file