docs: Slack 멀티워크스페이스 해결책 - 실제 코드 위치 반영

This commit is contained in:
happybell80 2025-09-03 18:56:50 +09:00
parent 3e28ef2cab
commit 85434e54c6

View File

@ -38,50 +38,46 @@ The server responded with: {'ok': False, 'error': 'channel_not_found'}
## 4. 해결 방안 (2025-09-03 확정)
### 4.1 Gateway 경유 방식 채택
- Slack Event URL을 Gateway(8100)로 변경
- Gateway에서 team_id별 토큰 조회 및 주입
- rb8001은 헤더에서 토큰 읽어 사용
### 4.1 기존 코드 활용
- **Gateway**: items_proxy, chat_proxy 패턴 재사용
- **rb8001**: 최소 수정 (라인 21, 98만)
- **skill-slack**: 제거 (8/12 이후 미사용)
### 4.2 구현 상세
1. **nginx 설정**: `/api/*` → Gateway(8100) 프록시
2. **Slack App**: Event URL을 `https://ro-being.com/api/slack/events`로 변경
3. **Gateway**: team_id로 DB 조회, 헤더에 토큰 추가
4. **rb8001**: 헤더 우선, 환경변수 폴백
### 4.2 구현 단계
1. **nginx**: `/api/` location 추가
2. **Gateway**: slack_proxy 함수 (get_verified_user 스킵)
3. **rb8001**: 헤더 토큰 읽기 추가
4. **Slack App**: Event URL 변경
## 5. 구현 필요 코드 (로컬 개발자)
### 5.1 Gateway 추가 (robeing-gateway)
### 5.1 Gateway (기존 proxy 패턴 활용)
```python
@app.post("/api/slack/events")
async def handle_slack_event(request: Request):
# Slack 서명 검증
verify_slack_signature(request)
# team_id별 토큰 조회
# 기존 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")
result = await db.fetch_one(
"SELECT bot_token FROM slack_workspaces WHERE team_id = :team_id",
{"team_id": team_id}
# DB 조회 (team_id 인덱스 활용)
token = await db.fetch_one(
"SELECT bot_token FROM slack_workspaces WHERE team_id = ?",
team_id
)
# rb8001로 전달
headers = {
"X-Slack-Bot-Token": result["bot_token"] if result else None,
"Content-Type": "application/json"
}
return await forward_to_rb8001("/api/slack/events", body, headers)
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)
```python
# 기존: 환경변수만 사용
slack_token = os.environ.get("SLACK_BOT_TOKEN")
### 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 초기화 시 헤더 토큰 우선 사용
# 수정: 헤더 우선, 환경변수 폴백
slack_token = request.headers.get("X-Slack-Bot-Token") \
or os.environ.get("SLACK_BOT_TOKEN")
### 5.3 nginx 설정 추가
```nginx
location /api/ {
proxy_pass http://localhost:8100;
proxy_set_header X-Real-IP $remote_addr;
}
```