diff --git a/troubleshooting/250919_naverworks_slack_02_daily_briefing.md b/troubleshooting/250919_naverworks_slack_02_daily_briefing.md index ba1a812..852a144 100644 --- a/troubleshooting/250919_naverworks_slack_02_daily_briefing.md +++ b/troubleshooting/250919_naverworks_slack_02_daily_briefing.md @@ -14,13 +14,13 @@ ## 1. 일일 브리핑 개요 ### 목적 -회사 대표메일 중요사항을 매일 아침 자동으로 요약하여 Slack 전체 채널에 브리핑 +회사 대표메일 중요사항을 매일 아침 자동으로 요약하여 Slack 지정 채널에 브리핑 ### 핵심 기능 - 최근 24시간 메일 중 중요 메일 필터링 - AI 요약 생성 - 우선순위별 정렬 -- Slack 전체 채널 자동 포스팅 +- Slack 지정 채널 자동 포스팅 --- @@ -28,35 +28,34 @@ ### 2.1 트리거 방식 - **스케줄러**: 매일 09:00 KST 자동 실행 -- **위치(현행)**: rb8001/main.py 내 APScheduler 초기화 및 잡 등록 -- **도구**: APScheduler (환경변수 기반 자동 등록 패턴 사용, **주의: Monday=0 체계 사용, 평일은 'mon-fri' 권장**) +- **위치(계획)**: rb8001/main.py 내 APScheduler 잡 등록 +- **도구**: APScheduler (환경변수 기반 자동 등록 패턴 사용) +- **로그 이슈**: APScheduler 잡 실행 시 "Running job" 로그 누락, 래퍼 함수 필요 -### 2.2 처리 흐름 (현행 코드 기준 + 계획) +### 2.2 처리 흐름 (계획) 1. 스케줄러가 09:00에 rb8001 트리거 (main.py) 2. rb8001이 skill-email GET `/messages` 호출 - - 쿼리 파라미터: `provider=naverworks&user_id={UUID}&startSearchDate={T-24h}&endSearchDate={T}` + - 쿼리 파라미터: `provider=naverworks&user_id={회사 대표메일 UUID}&startSearchDate={T-24h}&endSearchDate={T}` 3. skill-email이 NAVER WORKS API로 24시간 메일 조회 -4. 중요도 필터링 적용 (긴급/계약/결제/공지) [미구현 → 구현 필요] +4. 중요도 필터링 적용 (긴급/계약/결제/공지) 5. Gemini API로 요약 생성 (rb8001 내부 LLM 서비스 사용) 6. Slack 포맷팅 후 전송 - - 현행: rb8001이 WebClient로 직접 Block Kit 조립 및 전송 - - 계획: skill-slack `/format-briefing`(미구현)로 포맷 위임 후 전송 -7. 전송 대상: 네이버웍스 등록 사용자에게 개별 DM 전송 (전체 채널 브리핑 아님) + - skill-slack POST `/api/v1/send` 활용 +7. 전송 대상: 환경변수로 지정된 채널 (NAVERWORKS_BRIEFING_CHANNEL_ID) --- ## 3. 구현 파일 구조 -### skill-email 현황/계획 -- 현황: GET `/messages`에서 `provider=naverworks` 및 날짜 파라미터 지원 -- 계획(선택): `POST /daily-briefing` 엔드포인트 추가, 내부에서 조회/필터/요약까지 처리 +### skill-email +- GET `/messages`에서 `provider=naverworks` 및 날짜 파라미터 활용 -### skill-slack 현황/계획 -- 현황: 포맷 전용 엔드포인트 없음, rb8001이 직접 포맷 후 전송 -- 계획: POST `/format-briefing` 추가(미구현) — Section/Divider/Context 조합, 우선순위별 색상 코딩 +### skill-slack +- POST `/api/v1/send` 활용하여 메시지 전송 -### rb8001 현황 -- 스케줄러: main.py에서 APScheduler 설정/잡 등록 +### rb8001 +- 새 파일: app/skills/naverworks_briefing_skill.py 생성 +- 스케줄러: main.py에서 APScheduler 잡 등록 - 오케스트레이션: skill-email에서 데이터 조회 → 내부 LLM 요약 → Slack 전송 --- @@ -69,11 +68,16 @@ - [ ] (선택) `POST /daily-briefing`로 일괄 처리 엔드포인트 제공 ### 4.2 rb8001 구현 +- [ ] naverworks_briefing_skill.py 파일 생성 - [ ] APScheduler 잡 등록 (09:00 KST, main.py) -- [ ] 네이버웍스 등록 사용자 조회(DB): `naverworks_token` ↔ 사용자 매핑으로 대상자 결정 +- [ ] 환경변수 설정: + - NAVERWORKS_BRIEFING_ENABLED=true + - NAVERWORKS_BRIEFING_CHANNEL_ID=C09C98KK2TT + - NAVERWORKS_BRIEFING_SCHEDULE=0 9 * * 1-5 + - NAVERWORKS_BRIEFING_ACCOUNT_ID={회사 대표메일 UUID} - [ ] skill-email `/messages` 호출 시 `provider=naverworks` 및 24시간 파라미터 포함 - [ ] Gemini 기반 요약 생성(내부 LLM 서비스) -- [ ] Slack DM 전송 (현행 WebClient, 추후 skill-slack 포맷터 연계) +- [ ] Slack 채널 전송 (skill-slack 활용) --- @@ -116,6 +120,7 @@ • 기타 일반 메일 5건 ━━━━━━━━━━━━━━━━━━━━━━━━━━━ ``` -### 5.4 현행 코드 상 주의사항 -- rb8001 EmailIntegration 내 Slack→UUID 매핑에 하드코딩된 내부 URL 존재 — 환경변수/게이트웨이 경유로 정리 필요 -- provider 전달 누락 구간 점검 필요 (특히 목록 조회 경로) +### 5.4 구현 시 주의사항 +- 회사 대표메일 계정 UUID 확인 필요 +- 환경변수로 모든 설정 관리 (하드코딩 금지) +- skill-email의 기존 API 최대한 활용