Slack 문서 분리 - 봇 설치와 토큰 문제 구분

- 250902: Company-X 봇 설치 성공으로 마무리
- 250903: 멀티 워크스페이스 토큰 관리 문제로 분리
- 봇 토큰 노출 제거
This commit is contained in:
happybell80 2025-09-03 14:58:41 +09:00
parent 1c5c876608
commit 961baedfe8
2 changed files with 68 additions and 71 deletions

View File

@ -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 기반 토큰 동적 선택 로직 구현 필요
## 7. 후속 작업
- 멀티 워크스페이스 토큰 관리 문제는 별도 문서 참조
- 참고: [250903_slack_multi_workspace_token_issue.md](./250903_slack_multi_workspace_token_issue.md)

View File

@ -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
```