---
**[참고]** 이 문서는 로빙의 [대화형 점진적 의도 구축 시스템](../ideas/250819_대화형_점진적_의도_구축_시스템.md)의 일환으로, 네이버웍스 슬랙 브리핑 프로젝트(Phase 2+)에서 '의도분석 + 되묻기' 기능 구현 중 발생한 문제 해결 기록입니다.
---

# 네이버웍스 슬랙 브리핑 Phase 2+ 문제 해결: 의도분석 및 되묻기

## 작성일: 2025-09-19
## 작성자: happybell80
## 범위
- 본 문서는 02 문서(일일 브리핑 핵심 구현)를 완료한 뒤 진행할 추가 단계(프론트엔드/슬랙 UX/의도분석/관측·보안)와 관련 리스크·대응을 정리한다.
- 의사코드는 포함하지 않으며, 핵심 내용과 아이디어만 제시한다.

---

## Phase 2 — 의도분석 + 되묻기(Clarifying)
- 의도 라벨
  - email.daily_briefing, email.list, email.send (브리핑 우선)
- 슬롯(필수/선택)
  - source(메일 소스: naverworks/gmail), period(24h/48h/7d), destination(DM/channel), privacy(제목/발신자만 요약 동의)
- 전략
  - 이중 경로: 빈도 높은 명확 의도는 DecisionEngine(정규식), 롱테일/모호 발화는 IntentAnalyzer(LLM) 보조
  - 임계값: DecisionEngine 신뢰도 < 0.6 또는 충돌 시 1문장 되묻기 + 선택지, 필요 시 LLM 의도 분석 결과 채택
  - 폴백: LLM/네트워크 실패 시 키워드 기반 파서(EmailIntegration)로 안전 폴백
  - Slot-filling: 누락 슬롯만 질문, 답변은 컨텍스트에 저장 후 같은 스레드에서 실행
  - 안전 규칙: 의도 분석은 “사용자 원문 텍스트” 기준 처리(파일 내용은 제외). 파일만 업로드 시 DOCUMENT_ANALYSIS로 강제 분기
- Slack UX 지침
  - 버튼(예: [네이버웍스][24h][DM])과 드롭다운으로 빠르게 확정
  - 진행중 메시지 생략, 최종 결과만 스레드에 게시
- 리스크/대응
  - 과도한 질문 → 기본값(사용자 Preferences) 적용 후 1문장만 질문
  - 혼합 언어 입력 → 한국어 기준으로 처리하되 영어 키워드 맵핑 유지

---

## 리서치 통합 요약(의도분석)
- 병행 전략: 정규식 기반 DecisionEngine + LLM 기반 IntentAnalyzer를 병행해 정확도/속도 균형 확보
- 점진적 의도 구축: 멀티턴 대화에서 슬롯(필수/선택)을 순차적으로 채우고, 완성 시 자동 실행
- 시간·맥락 인식: 시간 관련 발화엔 KST 현재시각을 컨텍스트에 주입, “그때/어제”류 질의엔 최근 대화 일부를 회수하여 반영
- 스케줄 의도: 일회성/반복/상대시간(“N시간 후”)까지 포괄, APScheduler + DB JobStore로 영속 스케줄 관리
- 인터페이스 역할: Slack은 실시간 인터랙션(버튼/스레드 유지), Frontend는 기본값(Preferences)·상태 가시화·온디맨드 실행 담당

---

## Phase 3 — 프론트엔드 설정/온디맨드
- Preferences 저장 항목
  - 브리핑 소스(기본 naverworks), 기간(기본 24h), 전송 경로(기본 DM), 키워드(긴급/계약/결제/공지)
- 화면 포인트
  - 브리핑 설정 섹션: ON/OFF, 시간, 대상자 미리보기(등록 사용자 수)
  - 상태 패널: 마지막 실행 시각/성공·실패·무항목 카운트, 다음 실행 예정
  - 온디맨드 실행 버튼: 즉시 실행(같은 파이프라인 재사용)
- API 경로(현행 구성 활용)
  - Preferences: Gateway → robeing-monitor `/api/preferences/{user_uuid}`
  - 온디맨드: `POST /api/chat`로 “네이버웍스 브리핑” 트리거(의도분석 경유)
- 리스크/대응
  - 시간대/서머타임 혼선 → KST 고정 표기 + 서버 타임존 명시
  - 설정/실행 불일치 → 저장 성공 토스트 + 다음 실행 미리보기 업데이트

---

## Phase 4 — Slack UX 고도화
- 메시지 구성
  - 머리말: 날짜/타이틀, 실행 소스/기간 배지
  - 섹션: 🔴긴급, 🟡중요, 🟢일반 (각 3~5건 제한, 나머지는 “기타 X건” 집계)
  - 각 항목: 제목 · 발신자 · 수신일자 · 원본 링크(본문 미노출)
- 인터랙션
  - 버튼: “자세히”, “기간 변경(24h/48h/7d)”, “전송 경로 변경(DM/채널)”
  - thread_ts 유지로 결과만 교체
- 채널 브리핑 정책
  - 기본은 DM만, 채널 포스팅은 별도 옵션(민감도·레이트리밋 고려)
- 리스크/대응
  - 레이트리밋 → 사용자별 순차 전송 + 지연 삽입, 실패 재시도/백오프
  - 민감정보 노출 → 본문/첨부 미전송 원칙 유지, 제목·발신자·링크만 표기

---

## Phase 5 — 관측(Observability) · 보안(Compliance)
- 관측 지표
  - 단계별 처리 시간(수집/필터/요약/전송), 성공·실패·무항목 카운트, 재시도 횟수
  - 의도분석 정확도(되묻기 진입률/완료율), 사용자 취소율
- 로깅 정책
  - PII 제거된 구조화 로그(사용자 UUID, 건수, 상태코드)
  - 에러 시 원인 카테고리화(토큰/네트워크/레이트리밋/포맷)
- 보안
  - 본문/첨부 불수집(원본 링크만), 민감 키워드 사전 필터(금액/계좌 등)
  - 권한 경계 준수(네이버웍스 접근권은 원 시스템이 검증)

---

## 운영 상 고려사항
- 대상자 결정: `naverworks_token` 보유 사용자 기준(만료 자동 갱신 경로 확인)
- 재시작 복원: 스케줄/설정은 DB 기반, 프로세스 재시작 시 자동 로드
- 설정 충돌: 프론트 설정 vs 채팅 요청 충돌 시 채팅의 명시 선택을 우선 적용

---

## 예상 리스크와 완화
- 토큰 만료/갱신 실패
  - 사전 점검 잡(08:55)으로 토큰 상태 확인, 실패 시 DM 사전 안내
- 데이터 과다(메일 폭증)
  - 24h 윈도우 엄수 + 상한(limit) + “기타 N건” 요약
- 의도 오인식
  - 임계값 기반 되묻기, Preferences 기본값으로 무인입력 보정

---

## 단계별 마일스톤(핵심 산출물)
- Phase 2: 의도·슬롯 정의, 되묻기 메시지 세트, 성공률 80%↑
- Phase 3: 설정 화면/온디맨드, 다음 실행 미리보기, 실패 알림
- Phase 4: Block Kit 통일, 액션 버튼, thread 일관성
- Phase 5: 메트릭/알람 대시보드, PII 안전 로그

---

## 메모
- 02 핵심 구현(09:00 자동 브리핑 DM)이 안정화되면 본 문서의 단계별 항목을 순서대로 적용한다.
