fix: Email Routing MIME 파싱 개선 + 레거시 코드 정리
- Email Routing에서 수신한 이메일 파싱 수정 - Quoted-Printable UTF-8 디코딩 함수 추가 - HTML <br/> 태그를 줄바꿈으로 변환 - SMS 키워드 위치 기반 본문 추출 - 레거시 코드 삭제 - /api/bank-notification 엔드포인트 제거 (Email Routing으로 대체) - BANK_API_SECRET 관련 코드 및 문서 제거 - DEPOSIT_AGENT_ID 제거 (Assistants API → 코드 직접 처리) - CLI 테스트 클라이언트 개선 - .env 파일 자동 로드 지원 - WEBHOOK_SECRET 환경변수 불필요 - 문서 업데이트 - NAMECHEAP_API_KEY 설명 명확화 (래퍼 인증 키) - CLI 테스트 섹션 추가 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
51
CLAUDE.md
51
CLAUDE.md
@@ -1,5 +1,8 @@
|
||||
# CLAUDE.md
|
||||
|
||||
> 🔧 **개발자용 문서**: 기술 상세, 코드 패턴, 트러블슈팅
|
||||
> 📖 **[README.md](./README.md)**: 기능 소개, 배포 가이드, 사용법
|
||||
|
||||
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||||
|
||||
## Auto-Read on Start
|
||||
@@ -69,8 +72,8 @@ npm run chat # CLI 테스트 클라이언트
|
||||
|
||||
**CLI 테스트 클라이언트:**
|
||||
```bash
|
||||
# 환경변수 설정
|
||||
export WEBHOOK_SECRET="..." # Vault: secret/data/telegram-bot
|
||||
# .env 파일 생성 (최초 1회)
|
||||
echo 'WEBHOOK_SECRET=...' > .env # Vault: secret/data/telegram-bot
|
||||
|
||||
# 대화형 모드
|
||||
npm run chat
|
||||
@@ -84,6 +87,7 @@ npm run chat "날씨 알려줘"
|
||||
wrangler secret put BOT_TOKEN # Telegram Bot Token
|
||||
wrangler secret put WEBHOOK_SECRET # Webhook 검증용
|
||||
wrangler secret put OPENAI_API_KEY # OpenAI API 키
|
||||
wrangler secret put NAMECHEAP_API_KEY # namecheap-api 래퍼 인증 키
|
||||
```
|
||||
|
||||
**Webhook 설정:**
|
||||
@@ -223,7 +227,7 @@ Telegram Webhook → Security Validation → Command/Message Router
|
||||
| 문서 | `lookup_docs` | Context7 | 문서, 사용법, API |
|
||||
| 도메인 | `manage_domain` | 코드 직접 처리 → Namecheap | 도메인, 네임서버, WHOIS |
|
||||
| 도메인 추천 | `suggest_domains` | GPT + Namecheap | **도메인 추천, 도메인 제안, 도메인 아이디어** |
|
||||
| 예치금 | `manage_deposit` | 코드 직접 처리 → D1 | **입금, 충전, 잔액, 계좌, 송금** |
|
||||
| 예치금 | `manage_deposit` | 코드 직접 처리 | **입금, 충전, 잔액, 계좌, 송금** |
|
||||
|
||||
**Data Layer (D1 SQLite):**
|
||||
| 테이블 | 용도 | 주요 컬럼 |
|
||||
@@ -351,18 +355,6 @@ case 'new_tool':
|
||||
|
||||
**로그:** `[search_web] 번역: "판골린 VPN" → "Pangolin VPN"`
|
||||
|
||||
### Deposit Agent 프롬프트 수정 방법
|
||||
```bash
|
||||
# Vault에서 API 키 조회
|
||||
curl -s -H "X-Vault-Token: hvs.xxx" https://vault.anvil.it.com/v1/secret/data/openai
|
||||
|
||||
# Assistant 프롬프트 업데이트
|
||||
curl -X POST 'https://api.openai.com/v1/assistants/asst_XMoVGU7ZwRpUPI6PHGvRNm8E' \
|
||||
-H 'Authorization: Bearer sk-xxx' \
|
||||
-H 'OpenAI-Beta: assistants=v2' \
|
||||
-d @update-agent.json
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Configuration
|
||||
@@ -375,7 +367,6 @@ curl -X POST 'https://api.openai.com/v1/assistants/asst_XMoVGU7ZwRpUPI6PHGvRNm8E
|
||||
| `DOMAIN_OWNER_ID` | - | 도메인 관리 권한 Telegram ID |
|
||||
| `DEPOSIT_ADMIN_ID` | - | 예치금 관리 권한 Telegram ID |
|
||||
| `WEBHOOK_SECRET` | - | Telegram Webhook 인증 (wrangler secret, Vault: telegram-bot) |
|
||||
| `BANK_API_SECRET` | - | 입금 알림 API 인증 키 (wrangler secret) |
|
||||
| `BRAVE_API_KEY` | - | Brave Search API 키 (wrangler secret) |
|
||||
| `DEPOSIT_API_SECRET` | - | Deposit API 인증 키 (namecheap-api용, wrangler secret) |
|
||||
|
||||
@@ -392,8 +383,7 @@ curl -X POST 'https://api.openai.com/v1/assistants/asst_XMoVGU7ZwRpUPI6PHGvRNm8E
|
||||
| wttr.in | 날씨 | wttr.in | - |
|
||||
| Brave Search | 검색 | api.search.brave.com | Free AI 플랜 (2,000/월) |
|
||||
| Vault | API 키 관리 | vault.anvil.it.com | - |
|
||||
| Gmail | 입금 SMS 수신 | deposit.anvil@gmail.com | Apps Script 연동 |
|
||||
| Apps Script | Gmail → Worker 연동 | script.google.com | 1분마다 실행, message_id 중복 방지 |
|
||||
| Email Routing | 입금 SMS 수신 | Cloudflare Email Routing | Worker email handler로 직접 처리 |
|
||||
|
||||
### Cloudflare AI Gateway
|
||||
|
||||
@@ -423,10 +413,8 @@ URL: gateway.ai.cloudflare.com/v1/{account_id}/telegram-bot/openai/...
|
||||
↓
|
||||
매칭 O → confirmed + 잔액↑ | 매칭 X → pending
|
||||
|
||||
[시나리오 2: SMS 먼저 - Gmail → Apps Script → Worker]
|
||||
은행 SMS → Gmail(deposit.anvil@gmail.com) → Apps Script (1분마다)
|
||||
↓
|
||||
POST /api/bank-notification
|
||||
[시나리오 2: SMS 먼저 - Email Routing]
|
||||
은행 SMS → 메일 전달 → Cloudflare Email Routing → Worker (email handler)
|
||||
↓
|
||||
파싱 → bank_notifications 저장
|
||||
↓
|
||||
@@ -442,22 +430,9 @@ URL: gateway.ai.cloudflare.com/v1/{account_id}/telegram-bot/openai/...
|
||||
| 자동 매칭 성공 | ✅ 입금액 + 현재 잔액 | ✅ 입금 정보 + 매칭 완료 |
|
||||
| 매칭 대기 (SMS만) | - | ✅ 입금 정보 + 대기 상태 |
|
||||
|
||||
**Gmail → Worker 연동:**
|
||||
- Gmail 계정: `deposit.anvil@gmail.com`
|
||||
- Apps Script: 1분마다 `is:unread 입금` 검색 → Worker API 호출
|
||||
- 중복 방지: Gmail message_id 기반
|
||||
|
||||
**API 엔드포인트:**
|
||||
```
|
||||
POST /api/bank-notification
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"content": "[Web발신]\n하나,01/16, 23:30\n427******27104\n입금5원\n황병하",
|
||||
"messageId": "19bc737b3415596a",
|
||||
"secret": "BANK_API_SECRET 값"
|
||||
}
|
||||
```
|
||||
**Email Routing 설정:**
|
||||
- Cloudflare Dashboard → Email → Email Routing → Routes
|
||||
- 수신 주소 → Worker: `telegram-summary-bot` 라우팅
|
||||
|
||||
**입금 계좌:** 하나은행 427-910018-27104 (주식회사 아이언클래드)
|
||||
- Vault 경로: `secret/companies/ironclad-corp`
|
||||
|
||||
Reference in New Issue
Block a user