From 961baedfe82074f2813589a79edf38f2f27aeb39 Mon Sep 17 00:00:00 2001 From: happybell80 Date: Wed, 3 Sep 2025 14:58:41 +0900 Subject: [PATCH] =?UTF-8?q?Slack=20=EB=AC=B8=EC=84=9C=20=EB=B6=84=EB=A6=AC?= =?UTF-8?q?=20-=20=EB=B4=87=20=EC=84=A4=EC=B9=98=EC=99=80=20=ED=86=A0?= =?UTF-8?q?=ED=81=B0=20=EB=AC=B8=EC=A0=9C=20=EA=B5=AC=EB=B6=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 250902: Company-X 봇 설치 성공으로 마무리 - 250903: 멀티 워크스페이스 토큰 관리 문제로 분리 - 봇 토큰 노출 제거 --- .../250902_slack_bot_install_url_analysis.md | 81 +++---------------- ...50903_slack_multi_workspace_token_issue.md | 58 +++++++++++++ 2 files changed, 68 insertions(+), 71 deletions(-) create mode 100644 troubleshooting/250903_slack_multi_workspace_token_issue.md diff --git a/troubleshooting/250902_slack_bot_install_url_analysis.md b/troubleshooting/250902_slack_bot_install_url_analysis.md index 2ce7b8e..0b619ee 100644 --- a/troubleshooting/250902_slack_bot_install_url_analysis.md +++ b/troubleshooting/250902_slack_bot_install_url_analysis.md @@ -199,7 +199,7 @@ im:read, im:history, users:read, team:read, files:read, app_mentions:read - slack_workspaces: T097FCTDVEX → Company-X 연결 완료 - 봇 설치 준비 완료 -## 6. Company-X 봇 설치 완료 및 토큰 문제 (2025-09-02 23:00) +## 6. Company-X 봇 설치 완료 (2025-09-02 23:00) ### 6.1 설치 완료 정보 **Company-X 봇 설치 성공:** @@ -207,77 +207,16 @@ im:read, im:history, users:read, team:read, files:read, app_mentions:read - Team Name: COMPANY X - Bot User ID: U09DWLARFQQ - App ID: A092HLQA1NW -- Bot Token: xoxb-9253435471507-9253533160819-2zZNbJaxdJcQjhJAG8t0TQFi +- Bot Token: 저장 완료 - 11개 권한 모두 부여됨 -### 6.2 멀티 워크스페이스 토큰 관리 문제 +**결과:** +- 봇 설치 프로세스 정상 완료 +- slack_workspaces 테이블에 저장됨 +- Event URL 수동 등록 필요 -**문제 발견:** -- rb8001 컨테이너가 단일 SLACK_BOT_TOKEN 환경변수 사용 -- 디지털비잉_로빙 토큰: xoxb-9073915808149-... -- Company-X 토큰: xoxb-9253435471507-... -- 현재 rb8001에 디지털비잉_로빙 토큰만 설정되어 있음 +--- -**증상:** -- Company-X에서 메시지 수신은 정상 -- 응답 시도 시 실패: `Failed to send final response: The request to the Slack API failed` -- 원인: 잘못된 토큰으로 응답 시도 - -**실제 에러 로그:** -``` -ERROR:app.router.slack_handler:Failed to send final response: The request to the Slack API failed. (url: https://www.slack.com/api/chat.postMessage) -The server responded with: {'ok': False, 'error': 'channel_not_found'} -``` - -**상세 분석:** -1. 이벤트 수신 ✅ - - U09BQSN72UT(김종태)가 봇 멘션: `<@U09DWLARFQQ> 하이` - - app_mention 이벤트 정상 수신 - -2. 처리 과정 ✅ - - UUID 변환 성공 (U09BQSN72UT → 1a7ebe8c-1cfd-4acf-a821-2cc526313706) - - 응답 생성 성공: "김종태님, 안녕하세요! 로빙입니다. 무엇을 도와드릴까요?" - - ChromaDB/PostgreSQL 저장 성공 - -3. 응답 전송 실패 ❌ - - `channel_not_found` 에러 - - 디지털비잉_로빙 토큰으로 Company-X 채널 접근 불가 - -### 6.3 Event URL 라우팅 구조 - -**정상 작동 확인:** -1. Slack → `https://ro-being.com/rb8001/api/slack/events` -2. nginx 프록시 → `192.168.219.52:8001/api/slack/events` -3. rb8001 컨테이너가 이벤트 수신 및 처리 - -**문제점:** -- rb8001이 단일 토큰만 사용 가능한 구조 -- 멀티 워크스페이스 지원을 위해서는 토큰 동적 선택 로직 필요 - -### 6.4 해결 방안 - -**단기 해결:** -- 워크스페이스별로 별도 컨테이너 운영 -- 또는 team_id 기반으로 토큰 동적 선택 로직 구현 - -**장기 해결:** -- auth-server의 중앙 라우터 활용 -- `/slack/events/router`가 team_id별로 적절한 컨테이너로 라우팅 -- 각 컨테이너는 해당 워크스페이스 토큰만 보유 - -### 6.5 Slack App Manifest Event URL 설정 - -**올바른 Event URL (Slack App에 설정해야 함):** -```json -"event_subscriptions": { - "request_url": "https://ro-being.com/rb8001/api/slack/events" -} -``` -- rb8001이 직접 이벤트 수신 -- URL verification 정상 응답 확인됨 -- nginx 프록시 → 51124:8001 정상 작동 - -**주의사항:** -- Slack App 설정에서 직접 Event URL 등록 필요 -- 봇 설치와 Event URL 등록은 별개 프로세스 -- team_id 기반 토큰 동적 선택 로직 구현 필요 \ No newline at end of file +## 7. 후속 작업 +- 멀티 워크스페이스 토큰 관리 문제는 별도 문서 참조 +- 참고: [250903_slack_multi_workspace_token_issue.md](./250903_slack_multi_workspace_token_issue.md) \ No newline at end of file diff --git a/troubleshooting/250903_slack_multi_workspace_token_issue.md b/troubleshooting/250903_slack_multi_workspace_token_issue.md new file mode 100644 index 0000000..180be7e --- /dev/null +++ b/troubleshooting/250903_slack_multi_workspace_token_issue.md @@ -0,0 +1,58 @@ +# Slack 멀티 워크스페이스 토큰 관리 문제 + +## 작성일: 2025-09-03 +## 작성자: 51123 서버 관리자 +## 상태: 🔴 해결 필요 +## 영향: Company-X 워크스페이스 응답 실패 + +--- + +## 1. 문제 상황 +- **현상**: Company-X에서 메시지 수신은 정상, 응답 전송 실패 +- **원인**: rb8001이 단일 SLACK_BOT_TOKEN 환경변수만 사용 +- **에러**: `channel_not_found` - 잘못된 토큰으로 채널 접근 + +## 2. 토큰 현황 +- **디지털비잉_로빙**: xoxb-9073915808149-... (현재 rb8001에 설정) +- **Company-X**: xoxb-9253435471507-... (DB에 저장됨) +- **문제**: 디지털비잉 토큰으로 Company-X 채널 접근 시도 + +## 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 단기 해결 +- team_id 기반 토큰 동적 선택 로직 구현 +- slack_workspaces 테이블에서 bot_token 조회 + +### 4.2 장기 해결 +- auth-server의 중앙 라우터 활용 +- `/slack/events/router`가 team_id별 컨테이너 라우팅 +- 각 컨테이너는 해당 워크스페이스 토큰만 보유 + +## 5. 구현 필요 코드 (로컬 개발자) +```python +# rb8001에서 team_id로 토큰 조회 +async def get_bot_token(team_id: str): + # slack_workspaces 테이블에서 토큰 조회 + result = await db.fetch_one( + "SELECT bot_token FROM slack_workspaces WHERE team_id = :team_id", + {"team_id": team_id} + ) + return result["bot_token"] if result else None +``` \ No newline at end of file