diff --git a/troubleshooting/250919_naverworks_to_slack_mail_integration.md b/troubleshooting/250919_naverworks_to_slack_mail_integration.md new file mode 100644 index 0000000..f10e4f5 --- /dev/null +++ b/troubleshooting/250919_naverworks_to_slack_mail_integration.md @@ -0,0 +1,99 @@ +# NAVER WORKS 이메일 → Slack 전달 시스템 구현 + +## 날짜: 2025-09-19 +## 작성자: Claude (51123 서버 관리자) +## 관련 서비스: rb8001, skill-email, slack, robeing-gateway +## 상태: 구현 필요 + +--- + +## 1. 현황 분석 + +### 완료된 부분 +- **인증 시스템**: auth-server에 NAVER WORKS OAuth/Passport 구현 완료 +- **skill-email 멀티프로바이더**: Gmail/NaverWorks 프로바이더 통합 완료 (포트 8501) +- **API 접근**: `/send`, `/messages` 엔드포인트에 provider=naverworks 파라미터 지원 +- **토큰 관리**: naverworks_token 테이블, refresh 로직 구현 + +### 미구현 부분 +- **메일 요약 API**: POST `/mail-summary` 엔드포인트 +- **Slack 전달 로직**: rb8001 → skill-email → Slack 플로우 +- **사용자 매핑**: Slack user_id ↔ NAVER WORKS account_id + +--- + +## 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. 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 +); +``` + +--- + +## 3. 구현 체크리스트 + +- [ ] skill-email에 `/mail-summary` 엔드포인트 구현 +- [ ] NaverWorksProvider에 요약 용 메서드 추가 +- [ ] Gemini API 연동 (메일 내용 요약) +- [ ] Slack Block Kit 포맷터 구현 +- [ ] rb8001에 네이버웍스 메일 키워드 감지 로직 +- [ ] robeing-gateway를 통한 skill-email 호출 경로 확인 +- [ ] 사용자 매핑 로직 (OAuth ID 기반) +- [ ] 에러 처리 (토큰 만료, API 제한 등) + +--- + +## 4. 테스트 시나리오 + +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