From 07496ab3f0ea0e81b7f886395b2df2a4abba24c6 Mon Sep 17 00:00:00 2001 From: happybell80 Date: Mon, 22 Sep 2025 23:59:51 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20NAVER=20WORKS=20=EB=B8=8C=EB=A6=AC?= =?UTF-8?q?=ED=95=91=20=EA=B5=AC=ED=98=84=20=EC=A4=80=EB=B9=84=EB=8F=84=20?= =?UTF-8?q?90%=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - skill-email, skill-slack 구현 확인 - DB 접근 패턴, API 키 확인 - NAVER WORKS API 엔드포인트 확인 - 필요 환경변수 명시 - 참고 문서 링크 추가 --- ...0919_naverworks_slack_02_daily_briefing.md | 62 +++++++++++++------ 1 file changed, 42 insertions(+), 20 deletions(-) diff --git a/troubleshooting/250919_naverworks_slack_02_daily_briefing.md b/troubleshooting/250919_naverworks_slack_02_daily_briefing.md index 14466b8..b1573b7 100644 --- a/troubleshooting/250919_naverworks_slack_02_daily_briefing.md +++ b/troubleshooting/250919_naverworks_slack_02_daily_briefing.md @@ -32,43 +32,65 @@ 3. skill-email `/messages` 호출 (provider=naverworks, 24시간 필터) 4. 중요 메일 필터링 (긴급/계약/결제/공지) 5. Gemini 요약 생성 -6. skill-slack `/api/v1/send`로 채널 전송 (C09C98KK2TT) +6. SlackFormatter.briefing()으로 포맷팅 +7. skill-slack `/api/v1/send`로 채널 전송 (C09C98KK2TT) --- ## 3. 구현 파일 구조 -- **app/scheduler/jobs/naverworks_briefing.py**: 스케줄 등록 함수 -- **app/skills/naverworks_briefing.py**: 브리핑 로직 -- **app/scheduler/registry.py**: 모든 스케줄 통합 관리 -- **main.py**: 2줄 추가 (registry.register_all_jobs) +### 첫 구현 (최소) +- **app/scheduler/jobs/naverworks_briefing.py**: register(scheduler) 함수와 로깅 래퍼 +- **app/skills/naverworks_briefing.py**: 실제 브리핑 로직 +- **main.py**: 2줄 추가 (import + register 호출) + +### 나중 확장 +- **app/formatters/slack_formatter.py**: 다른 스킬과 공유 시 +- **app/scheduler/registry.py**: 스케줄 2개 이상일 때 --- ## 4. 구현 체크리스트 -### 4.1 스케줄러 구조 개편 -- [ ] app/scheduler/registry.py 생성 +### 4.1 최소 구현 - [ ] app/scheduler/jobs/ 디렉토리 생성 -- [ ] 기존 스케줄 코드 main.py에서 이동 (130줄 감소) +- [ ] naverworks_briefing.py 파일 (등록 + 래퍼) +- [ ] main.py 2줄 추가 -### 4.2 네이버웍스 브리핑 구현 -- [ ] app/scheduler/jobs/naverworks_briefing.py 생성 +### 4.2 브리핑 로직 - [ ] app/skills/naverworks_briefing.py 생성 -- [ ] 환경변수: NAVERWORKS_BRIEFING_ENABLED, CHANNEL_ID, SCHEDULE -- [ ] DB에서 info@company-x.partners 조회 -- [ ] 중요 메일 필터링 로직 -- [ ] Gemini 요약 및 Slack 전송 +- [ ] register() 함수: 환경변수 읽기, 스케줄 등록 +- [ ] 래퍼 함수: 로그 추가 ("Running job" 이슈 해결) +- [ ] DB 조회: info@company-x.partners UUID +- [ ] 중요 메일 필터: 긴급/계약/결제/공지 +- [ ] 통합: skill-email, Gemini, skill-slack --- -## 5. 문제점 및 개선 방안 +## 5. 구현 원칙 -## 5. 문제점 +- **최소 변경**: main.py 2줄만, 기존 코드 유지 +- **단순 구조**: register(scheduler) 하나, 환경변수는 함수 내부 +- **로그 해결**: 래퍼 함수로 "Running job" 추가 +- **점진 확장**: 작동 확인 후 registry, formatter 추가 -- API Rate Limit 위험: 24시간 메일만 조회로 해결 -- 보안: 제목/발신자만 요약, 본문 제외 -- main.py 732줄 문제: scheduler/ 분리로 해결 +## 6. 구현 준비도 (90%) -## 6. 참고 +### 확인된 사항 +- **skill-email**: NaverWorksProvider 구현 완료, 토큰 갱신 로직 존재 +- **skill-slack**: /api/v1/send 엔드포인트 구현 완료 +- **DB 접근**: DATABASE_URL 환경변수, asyncpg 사용 +- **API 키**: INTERNAL_API_KEY로 스킬 간 인증 +- **NAVER WORKS API**: /mail/mailfolders/0/children 엔드포인트 확인 +- **24시간 필터**: startSearchDate, endSearchDate 파라미터 지원 +- **기존 스케줄러**: dm_skill.py, news_posting_skill.py 참고 가능 + +### 필요 환경변수 (서버 설정) +- NAVERWORKS_BRIEFING_ENABLED=true +- NAVERWORKS_BRIEFING_CHANNEL=C09C98KK2TT +- NAVERWORKS_BRIEFING_SCHEDULE="0 9 * * mon-fri" + +## 7. 참고 - [DB 기반 스케줄러 관리](./250919_naverworks_slack_04_db_scheduler_management.md) +- [기본 구성 완료](./250919_naverworks_slack_01_base_configuration.md) +- [NAVER WORKS API 이슈 해결](./250918_naverworks_mail_api_mailaddress_null_issue.md)