인박스 혁신: Postmark와의 협업으로 탄생한 InboxNinja 🥷
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
DevOps
대상자
운영팀, 소프트웨어 개발자, DevOps 엔지니어
- 난이도: 중급~고급 (비동기 프로그래밍, API 통합, 실시간 워크플로우 구축)
핵심 요약
- Postmark의 Inbound Webhook을 활용한 실시간 이메일 전달 시스템 구축
- Quart(비동기 Flask 대체), Discord.py, Google Gemini을 사용한 실시간 요약 및 Discord 채널 자동 라우팅
- 비동기 서버와 Discord 봇의 통합을 통한 파일 처리, 버튼 상호작용, 쓰레드 관리 기능 구현
섹션별 세부 요약
1. **서론: InboxNinja의 목적과 기능**
- 이메일 워크플로우를 실시간 Discord 채팅으로 전환하여 팀 협업 효율성 향상
- Postmark → Webhook → Discord 파이프라인을 통해 이메일 내용 요약 및 채널 전달
- Careers, Support, Legal 등 특정 부서 이메일을 자동 분류 및 처리
2. **핵심 기능**
- 실시간 이메일 전달: Postmark의 Inbound Webhook을 통한 즉시 처리
- Gemini AI 기반 요약: 이메일 본문의 핵심 내용 자동 요약
- Discord 채널 자동 라우팅: 이메일 주소 기반으로 채널 자동 할당
- 파일 처리: Base64 인코딩된 첨부파일을 Discord File 객체로 변환
- 버튼 상호작용: "Show Full Email", "Mark as Resolved" 등의 버튼 제공
3. **기술 스택**
- Postmark API: 이메일 데이터 추출 및 전달
- Quart: 비동기 웹 서버로 Webhook 처리
- Discord.py: Discord 봇 구축 및 채팅 관리
- Google Gemini: 이메일 요약 및 분석
- Python Asyncio: 비동기 프로그래밍을 위한 핵심 라이브러리
4. **구현 과정**
- 비동기 서버와 봇의 통합: asyncio.run() 활용 및 이벤트 루프 관리
- 첨부파일 처리: Base64 문자열 디코딩 및 파일 메타데이터 보존
- Discord.py 버튼 관리: 커뮤니티 예제를 기반으로 커스텀 뷰 구현
5. **도전 과제**
- 비동기 충돌 문제: asyncio.run() 사용 시 발생한 이벤트 루프 간섭 해결
- Discord.py 문서 부족: 커뮤니티 자원을 통한 버튼 기능 구현
- 첨부파일 변환: Postmark의 Base64 데이터를 Discord File 객체로 재패키징
6. **결론 및 향후 계획**
- 현재 기능: 실시간 이메일 처리, 요약, 채널 라우팅, 파일 처리, 버튼 상호작용
- 향후 개선: 우선순위 감지 시스템 구축, Postmark Transactional Email을 통한 회신 처리
결론
- Postmark + Discord.py + Quart + Gemini 기반의 실시간 이메일-채팅 연동 시스템 구축을 통해 운영 워크플로우 효율화
- 비동기 처리 및 API 통합을 통해 운영팀의 협업 편의성 증대
- 향후 우선순위 감지 기능 추가로 이메일 관리의 자동화 수준 향상