3.0 KiB
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. 테스트 시나리오
- Slack에서 "@로빙 네이버웍스 메일 확인해줘" 메시지 전송
- rb8001이 메시지 수신 및 키워드 감지
- skill-email
/mail-summary호출 - NAVER WORKS API로 최근 메일 5개 조회
- Gemini API로 요약 생성
- Slack 채널에 요약 블록 포스팅
5. 주의사항
- 토큰 관리: naverworks_token의 expires_at 확인 필수
- Rate Limit: NAVER WORKS API 제한 고려 (캐싱 권장)
- 프라이버시: 메일 내용 요약 시 민감정보 필터링
- 에러 폴백: API 실패 시 사용자에게 명확한 안내