Add NaverWorks date filtering troubleshooting documentation

This commit is contained in:
happybell80 2025-09-26 02:23:41 +09:00
parent 5f1002fcf8
commit a1ee567f54
5 changed files with 78 additions and 14 deletions

View File

@ -154,6 +154,8 @@ GET /v1.0/users/{userId}/mail/messages?folderId=INBOX
# 올바른 방식 (200 성공)
GET /v1.0/users/{userId}/mail/mailfolders/0/children?limit=3
# folderId=0은 받은메일함
Note: 목록 API는 날짜 파라미터(startSearchDate 등)를 지원하지 않으므로, 기간 제한은 응답의 receivedTime을 기준으로 클라이언트에서 필터링합니다.
```
### 8.3 테스트 결과

View File

@ -154,8 +154,7 @@ Gateway → rb8001 전달 정보:
### 코드 분석 결과 (2025-01-09)
- **skill-slack**: 8502 포트 엔드포인트 구현됨, rb8001은 직접 WebClient 사용 중 (미연동)
- **provider 구분**: 미구현, 기본 Gmail만 동작 (rb8001/app/skills/email_integration.py:260-266)
- **24시간 필터**: 미구현, orderBy만 있음 (skill-email/services/naverworks_provider.py:167)
- NaverWorks API는 searchDateType, startSearchDate, endSearchDate 파라미터 지원
- **24시간 필터**: 목록 API는 날짜 파라미터 미지원 → 클라이언트(receivedTime) 기준 필터 적용
- **토큰 갱신**: NaverWorks는 auth-server 위임, 자동 호출 없음
- **UUID 변환**: list 경로에서 변환 없음 (263행 user_id는 입력 그대로 전달)
@ -167,7 +166,7 @@ Gateway → rb8001 전달 정보:
**P1 (완료)**:
- ✅ Gateway X-Source 헤더 추가 (main.py:552, 240)
- ✅ rb8001 provider 로직 구현 (email_integration.py:70-130)
- ✅ skill-email 24시간 필터 (naverworks_provider.py:173-179)
- ✅ skill-email 24시간 로컬 필터(응답 후 receivedTime 비교)
- ✅ skill-email DEFAULT_USER_ID 제거 (31행 삭제)
- ✅ skill-email 401 에러 시 토큰 갱신 (194-210행)
@ -213,9 +212,8 @@ Gateway → rb8001 전달 정보:
### 구현 결정
1. **Provider 선택**: 키워드 우선 → DB 조회 → 둘 다 있으면 질문
2. **24시간 필터**: skill-email에서 API 파라미터 처리 (startSearchDate, endSearchDate)
2. **24시간 필터**: skill-email에서 응답 후 receivedTime 기준 클라이언트 필터 처리
3. **토큰 갱신**: 401 에러 후 재시도 (1회)
4. **UUID 변환**: Gateway에서 모두 변환
5. **skill-slack 전환**: 단계적 (새 기능부터)
6. **메일 표시**: 5개 요약 + "더보기" 버튼

View File

@ -29,7 +29,7 @@
### 2.2 처리 흐름
1. 09:00 스케줄러 트리거
2. DB에서 info@company-x.partners 계정 UUID 조회
3. skill-email `/messages` 호출 (provider=naverworks, 24시간 필터)
3. skill-email `/messages` 호출 (provider=naverworks), 응답을 24시간(receivedTime) 기준 클라이언트 필터
4. 중요 메일 필터링 (긴급/계약/결제/공지)
5. Gemini 요약 생성
6. SlackFormatter.briefing()으로 포맷팅
@ -82,7 +82,7 @@
- **DB 접근**: DATABASE_URL 환경변수, asyncpg 사용
- **DB 데이터**: naverworks_token 테이블에 user_id, account_id 저장됨
- **NAVER WORKS API**: /mail/mailfolders/0/children 엔드포인트 확인
- **24시간 필터**: startSearchDate, endSearchDate 파라미터 지원
- **24시간 필터**: 목록 API는 날짜 파라미터 미지원 → 클라이언트(receivedTime) 기준 필터 필요
- **LLM 서비스**: process_request() 메서드, model="gemini-2.5-flash-lite", 필수 필드: message, user_id, robeing_id
- **skill-slack**: X-API-Key 헤더로 SERVICE_API_KEY 필요
@ -124,4 +124,3 @@
# 24서버에서 실행
python test_naverworks_briefing.py --test all
```

View File

@ -36,7 +36,7 @@
### 2.2 처리 흐름 (현행 기준 + 계획)
1. 새 메일 수신 이벤트 발생 (또는 주기적 체크)
2. rb8001이 skill-email 호출
- 현행: GET `/messages?provider=naverworks&user_id={UUID}&startSearchDate={T-24h}&endSearchDate={T}`
- 현행: GET `/messages?provider=naverworks&user_id={UUID}&limit=100` 후 클라이언트(receivedTime) 기준 24시간 필터
- 계획: POST `/cold-mail-list` (필터·구조화까지 일괄 처리)
3. 콜드메일 필터링/구조화
- 현행: rb8001에서 키워드/도메인 기반 필터 후 목록 구성
@ -73,7 +73,7 @@ COLD_MAIL_KEYWORDS = [
## 4. 구현 파일 구조
### skill-email 현황/계획
- 현행: GET `/messages`로 NAVER WORKS 메일 조회, 날짜 파라미터 지원
- 현행: GET `/messages`로 NAVER WORKS 메일 조회 (날짜 파라미터 지원 → 클라이언트 필터 필요)
- 계획:
- `routers/naverworks_mail.py`: POST `/cold-mail-list` 엔드포인트
- `services/naverworks_mail_service.py`: `filter_cold_mails()`
@ -93,14 +93,13 @@ COLD_MAIL_KEYWORDS = [
## 5. 구현 체크리스트
### 5.1 skill-email 구현
- [ ] 날짜 필터 파라미터 표준화(startSearchDate/endSearchDate) 및 검증
- [ ] 응답 후 receivedTime 기준 클라이언트 필터 구현(타임존/RFC3339 주의)
- [ ] 콜드메일 필터링/패턴 매칭 알고리즘 (`filter_cold_mails()`)
- [ ] 메일 정보 구조화(회사/담당/제안/첨부)
- [ ] (선택) POST `/cold-mail-list` 일괄 처리 엔드포인트
### 5.2 rb8001 구현
- [ ] 네이버웍스 등록 사용자 조회(DB)로 대상자 결정
- [ ] skill-email `/messages` 호출 시 provider=naverworks 및 날짜 파라미터 포함
- [ ] skill-email `/messages` 호출 시 provider=naverworks만 전달(날짜 파라미터 제거), 클라이언트 필터 적용
- [ ] Block Kit 포맷/전송 (현행) 또는 skill-slack 포맷터 연계(계획)
- [ ] 라우팅 정책: DM 기본, 채널 옵션 지원

View File

@ -0,0 +1,66 @@
# NaverWorks 일일 브리핑 날짜 필터링 문제 해결
## 날짜: 2025-09-26
## 작성자: happybell80
## 관련 서비스: skill-email, rb8001
---
## 1. 문제
- NaverWorks 일일 브리핑이 매일 같은 메일 반복
- 9/25 요청에 9/23, 9/24 메일도 포함됨
## 2. 원인
- NaverWorks Mail API는 날짜 필터 파라미터 지원 안 함
- 클라이언트 측 필터링 코드 없었음
- timezone-aware와 naive datetime 비교 불가 문제
## 3. 수정 내역
### 3.1. 잘못된 테이블명 수정
**수정 파일들:**
- auth-server/app/api/slack_router.py
- auth-server/app/api/gmail_refresh.py
- auth-server/scripts/run_migration.py
- skill-email/services/db_credentials_provider.py
- DOCS 문서 78개 파일
**변경 내용:**
- `users``user`
- `gmail_tokens``gmail_token`
- `conversation_logs``conversation_log`
- `workspace_members``workspace_member`
- `companies``company`
- `slack_workspaces``slack_workspace`
### 3.2. NaverWorks 토큰 컬럼명 수정
**수정 파일:**
- skill-email/services/naverworks_provider.py
- auth-server/app/providers/naverworks_passport.py
**변경 내용:**
- `expiry``expires_at` (naverworks_token 테이블)
- gmail_token은 `expiry` 유지 (다른 테이블)
### 3.3. NaverWorks 날짜 필터링 구현
**파일:** skill-email/services/naverworks_provider.py
**수정 내용 (212-265줄):**
1. 클라이언트 측 날짜 필터링 로직 추가
2. pytz 모듈 추가 (requirements.txt)
3. timezone-aware datetime 비교 구현
4. 두 가지 날짜 형식 지원:
- ISO datetime 형식 (naverworks_briefing.py: `yesterday.isoformat()`)
- 날짜만 형식 (email_integration.py: `strftime("%Y-%m-%d")`)
5. 날짜만 받으면 현재 시점 기준 정확한 24시간 전 계산
### 3.4. 로그 추가
- 163줄: 날짜 파라미터 수신 로그
- 215줄: 각 메일 필터링 과정 로그
## 4. 검증 결과
- 정확한 24시간 범위로 12개 메일 정상 필터링 확인
---
**문서 끝**