diff --git a/troubleshooting/250919_naverworks_to_slack_mail_integration.md b/troubleshooting/250919_naverworks_to_slack_mail_integration.md index f10e4f5..d35b6f3 100644 --- a/troubleshooting/250919_naverworks_to_slack_mail_integration.md +++ b/troubleshooting/250919_naverworks_to_slack_mail_integration.md @@ -2,98 +2,77 @@ ## 날짜: 2025-09-19 ## 작성자: Claude (51123 서버 관리자) -## 관련 서비스: rb8001, skill-email, slack, robeing-gateway -## 상태: 구현 필요 +## 관련 서비스: rb8001, skill-email +## 상태: 부분 구현 --- -## 1. 현황 분석 +## 1. 현재 구현 상태 -### 완료된 부분 -- **인증 시스템**: auth-server에 NAVER WORKS OAuth/Passport 구현 완료 -- **skill-email 멀티프로바이더**: Gmail/NaverWorks 프로바이더 통합 완료 (포트 8501) -- **API 접근**: `/send`, `/messages` 엔드포인트에 provider=naverworks 파라미터 지원 -- **토큰 관리**: naverworks_token 테이블, refresh 로직 구현 +### 구현 완료 +- **auth-server**: + - `naverworks.py`, `naverworks_passport.py` 파일 존재 + - NAVER WORKS OAuth 환경변수 설정 (CLIENT_ID, CLIENT_SECRET, REDIRECT_URI, TENANT_ID) +- **skill-email (포트 8501)**: + - `services/naverworks_provider.py` NaverWorksProvider 클래스 구현 + - GET `/messages` 엔드포인트 (provider 파라미터 지원) + - POST `/send` 엔드포인트 +- **rb8001**: + - `app/skills/email_integration.py` EmailIntegration 클래스 존재 + - skill-email 포트 8501 호출 구조 -### 미구현 부분 -- **메일 요약 API**: POST `/mail-summary` 엔드포인트 -- **Slack 전달 로직**: rb8001 → skill-email → Slack 플로우 -- **사용자 매핑**: Slack user_id ↔ NAVER WORKS account_id +### 미구현 +- POST `/mail-summary` 엔드포인트 없음 +- rb8001 EmailIntegration 클래스는 Gmail만 처리 +- 네이버웍스 메일 키워드 감지 로직 없음 +- Slack Block Kit 포맷터 없음 --- -## 2. 구현 방안 +## 2. 필요 구현 사항 -### 2.1 skill-email에 /mail-summary 엔드포인트 추가 -```python -# skill-email/main.py -@app.post("/mail-summary") -async def mail_summary( - user_id: str, - provider: str = "naverworks", - limit: int = 5 -): - # 1. 최근 메일 조회 - messages = await provider.get_messages(user_id, limit=limit) +### 2.1 skill-email 수정 사항 +- POST `/mail-summary` 엔드포인트 추가 필요 +- 메일 요약 생성 로직 구현 필요 +- Slack 블록 포맷 변환 기능 필요 - # 2. Gemini로 요약 생성 - summary = await generate_summary(messages) - - # 3. Slack 블록 포맷 변환 - return {"summary": summary, "blocks": format_slack_blocks(summary)} -``` - -### 2.2 rb8001 라우팅 로직 추가 -```python -# rb8001에서 skill-email 호출 -if "네이버웍스" in message and "메일" in message: - # X-User-Id 헤더로 사용자 식별 - response = await call_skill( - url="http://skill-email:8501/mail-summary", - params={"user_id": slack_user_id, "provider": "naverworks"} - ) - # Slack으로 전달 - await send_to_slack(channel, response["blocks"]) -``` - -### 2.3 사용자 매핑 테이블 (선택사항) -```sql -CREATE TABLE slack_naverworks_mapping ( - slack_user_id VARCHAR(50) PRIMARY KEY, - naverworks_account_id VARCHAR(100), - created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP -); -``` +### 2.2 rb8001 수정 사항 +- EmailIntegration 클래스에 NaverWorks 지원 추가 필요 +- 네이버웍스 메일 키워드 감지 로직 추가 필요 +- provider=naverworks 파라미터 전달 로직 필요 --- -## 3. 구현 체크리스트 +## 3. 파일 위치 -- [ ] skill-email에 `/mail-summary` 엔드포인트 구현 -- [ ] NaverWorksProvider에 요약 용 메서드 추가 -- [ ] Gemini API 연동 (메일 내용 요약) +### skill-email +- `main.py`: API 엔드포인트 정의 +- `services/naverworks_provider.py`: NAVER WORKS API 연동 +- `services/gmail_provider.py`: Gmail API 연동 +- `services/email_provider.py`: Provider 인터페이스 + +### rb8001 +- `app/skills/email_integration.py`: 이메일 스킬 통합 +- `app/main.py`: 메시지 라우팅 + +### auth-server +- `app/providers/naverworks.py`: OAuth 로그인 +- `app/providers/naverworks_passport.py`: Passport 시스템 + +--- + +## 4. 구현 체크리스트 + +- [ ] skill-email `/mail-summary` 엔드포인트 구현 +- [ ] rb8001 EmailIntegration에 NaverWorks 지원 추가 +- [ ] 네이버웍스 메일 키워드 감지 로직 추가 - [ ] Slack Block Kit 포맷터 구현 -- [ ] rb8001에 네이버웍스 메일 키워드 감지 로직 -- [ ] robeing-gateway를 통한 skill-email 호출 경로 확인 -- [ ] 사용자 매핑 로직 (OAuth ID 기반) -- [ ] 에러 처리 (토큰 만료, API 제한 등) +- [ ] provider 파라미터 전달 로직 구현 --- -## 4. 테스트 시나리오 +## 5. 환경 설정 확인 사항 -1. Slack에서 "@로빙 네이버웍스 메일 확인해줘" 메시지 전송 -2. rb8001이 메시지 수신 및 키워드 감지 -3. skill-email `/mail-summary` 호출 -4. NAVER WORKS API로 최근 메일 5개 조회 -5. Gemini API로 요약 생성 -6. Slack 채널에 요약 블록 포스팅 - ---- - -## 5. 주의사항 - -- **토큰 관리**: naverworks_token의 expires_at 확인 필수 -- **Rate Limit**: NAVER WORKS API 제한 고려 (캐싱 권장) -- **프라이버시**: 메일 내용 요약 시 민감정보 필터링 -- **에러 폴백**: API 실패 시 사용자에게 명확한 안내 \ No newline at end of file +- skill-email .env 파일에 NAVER WORKS 관련 설정 확인 +- rb8001에서 skill-email 호출 시 포트 8501 사용 +- auth-server의 NAVER WORKS OAuth 설정 확인 \ No newline at end of file