DOCS/troubleshooting/250919_naverworks_to_slack_mail_integration.md

3.0 KiB

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 엔드포인트 추가

# 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 라우팅 로직 추가

# 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 사용자 매핑 테이블 (선택사항)

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 실패 시 사용자에게 명확한 안내