kappa 0277f0539b fix: Reset session when user says "서버 추천" during active session
When user requests server recommendation while in an existing session
(e.g., selecting state), reset the session and start fresh instead of
continuing the old session context.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 11:59:44 +09:00

🤖 Cloudflare Workers 텔레그램 AI 봇

Cloudflare Workers + D1 + OpenAI를 활용한 서버리스 아키텍처 기반의 지능형 텔레그램 봇입니다. 사용자별 프로필을 자동으로 생성하고 기억하며, 예치금 관리 및 도메인 등록 등의 복잡한 작업을 수행할 수 있습니다.

License TypeScript Cloudflare Workers

📚 문서 안내


주요 기능

  • 🧠 AI 기반 개인화: 대화 내용을 분석하여 사용자의 관심사와 맥락을 기억하는 동적 프로필 시스템
  • 🛠 Function Calling: 날씨, 검색, 계산, 시간 등 다양한 도구를 자연어로 호출
  • 💰 예치금 시스템: 은행 SMS 자동 파싱(AI 폴백 지원) 및 양방향 매칭을 통한 자동 충전
  • 🌐 도메인 관리: 도메인 검색, 추천(AI), 가격 조회, 등록, DNS 관리 통합
  • 🤖 서버 추천 AI 상담: 30년 경력 전문가 페르소나 기반 대화형 서버 추천, 최신 트렌드 검색 지원 (KV 세션 관리)
  • 서버리스: Cloudflare Workers + KV로 긴 작업도 안정적 처리
  • 🌐 웹 채팅 UI: 브라우저와 API로 봇 테스트 가능 (telegram-cli)

🚀 성능 최적화

  • N+1 쿼리 제거: Cron 작업 99% 쿼리 감소 (100건: 101 → 1 쿼리)
  • 병렬 API 호출: 도메인 추천 80% 속도 향상
  • KV 캐싱: TLD 가격 1시간 캐싱으로 중복 조회 방지
  • Circuit Breaker: OpenAI API 장애 시 자동 차단 및 복구
  • Retry 로직: 15개 외부 API에 지수 백오프 + 지터 적용

🚀 빠른 시작 (배포 가이드)

1. 환경 설정

# 의존성 설치
npm install

# Wrangler 로그인
npx wrangler login

2. 데이터베이스 생성

npx wrangler d1 create telegram-conversations
npx wrangler d1 execute telegram-conversations --file=schema.sql

생성된 database_idwrangler.toml에 반영해야 합니다.

3. KV Namespace 생성

# Rate Limiting용 KV Namespace 생성 (필수)
npx wrangler kv:namespace create RATE_LIMIT_KV

# 서버 상담 세션 저장용 KV Namespace 생성 (서버 추천 기능 사용 시 필수)
npx wrangler kv:namespace create SESSION_KV

# 출력된 id를 wrangler.toml의 [[kv_namespaces]] 섹션에 입력

4. Queue 생성

# 서버 프로비저닝용 Queue 생성 (서버 기능 사용 시 필수)
npx wrangler queues create server-provision-queue
npx wrangler queues create provision-dlq

5. 환경변수 설정

필수 Secrets

# Telegram Bot 설정
npx wrangler secret put BOT_TOKEN        # @BotFather에서 발급
npx wrangler secret put WEBHOOK_SECRET   # 임의의 강력한 문자열 (필수!)

# OpenAI API
npx wrangler secret put OPENAI_API_KEY   # OpenAI API 키

선택적 Secrets (기능별)

# 도메인 관련 (도메인 기능 사용 시)
npx wrangler secret put NAMECHEAP_API_KEY          # namecheap-api 래퍼 인증
npx wrangler secret put NAMECHEAP_API_KEY_INTERNAL # Namecheap 실제 API 키

# 검색 (웹 검색 기능 사용 시)
npx wrangler secret put BRAVE_API_KEY    # Brave Search API 키

# 예치금 API (namecheap-api 연동 시)
npx wrangler secret put DEPOSIT_API_SECRET # 외부 서비스 연동용

# 서버 관리 (VPS/클라우드 기능 사용 시)
npx wrangler secret put LINODE_API_KEY   # Linode API 키
npx wrangler secret put VULTR_API_KEY    # Vultr API 키
npx wrangler secret put SERVER_ADMIN_ID  # 서버 관리 알림 Telegram ID

환경별 설정 (선택)

wrangler.toml의 환경변수는 기본값이 설정되어 있어 생략 가능합니다. 환경별로 다른 엔드포인트를 사용하려면 override하세요:

[vars]
OPENAI_API_BASE = "https://your-custom-gateway.com/openai"
NAMECHEAP_API_URL = "https://your-api.example.com"

사용 가능한 환경변수:

  • OPENAI_API_BASE - OpenAI API Gateway
  • NAMECHEAP_API_URL - Namecheap API 래퍼
  • WHOIS_API_URL - WHOIS 조회 서비스
  • CONTEXT7_API_BASE - 문서 조회 API
  • BRAVE_API_BASE - 검색 API
  • WTTR_IN_URL - 날씨 API
  • HOSTING_SITE_URL - 공식 웹사이트

6. 배포

배포 전 체크리스트

# 1. 로컬 테스트
npm run dev

# 2. TypeScript 컴파일 확인
npx tsc --noEmit

# 3. 환경변수 확인
npx wrangler secret list

# 4. KV Namespace 확인
npx wrangler kv:namespace list

배포 실행

npm run deploy

배포 후 확인

# Health check
curl https://telegram-summary-bot.kappa-d8e.workers.dev/health

# Webhook 상태 (token + secret 필요)
curl "https://telegram-summary-bot.kappa-d8e.workers.dev/webhook-info?token=${BOT_TOKEN}&secret=${WEBHOOK_SECRET}"

# 실시간 로그
npm run tail

7. Webhook 연결

# 웹훅 설정 (token + secret 필요)
curl "https://<YOUR_WORKER_URL>/setup-webhook?token=${BOT_TOKEN}&secret=${WEBHOOK_SECRET}"

⚠️ 주의사항

  • WEBHOOK_SECRET 필수: 미설정 시 모든 webhook 요청이 거부됩니다.
  • RATE_LIMIT_KV 필수: 미생성 시 Rate Limiting이 비활성화되어 DoS 공격에 취약합니다.
  • SESSION_KV 필수 (서버 추천 기능 사용 시): 미생성 시 서버 상담 세션 관리가 동작하지 않습니다.
  • 환경변수 기본값: 대부분의 외부 API URL은 기본값이 설정되어 있습니다. 프로덕션 환경에서는 기본값을 그대로 사용하거나, 필요시에만 override하세요.

📡 API Documentation

본 프로젝트는 외부 서비스 연동을 위한 REST API를 제공합니다.

완전한 OpenAPI 문서: openapi.yaml

주요 엔드포인트

엔드포인트 메서드 인증 용도
/health GET None Health check
/api/contact POST CORS 웹사이트 문의 폼
/api/deposit/balance GET API Key 잔액 조회 (Internal)
/api/deposit/deduct POST API Key 잔액 차감 (Internal)
/api/metrics GET Bearer 시스템 모니터링

인증 방식

  • API Key: X-API-Key 헤더 (Deposit API)
  • Bearer Token: Authorization: Bearer {token} (Metrics API)
  • CORS: hosting.anvil.it.com만 허용 (Contact Form)

문서 보기

# Swagger UI (로컬)
npx swagger-ui-watcher openapi.yaml

# HTML 문서 생성
npx redoc-cli bundle openapi.yaml -o docs/api.html

# 스펙 검증
npx @apidevtools/swagger-cli validate openapi.yaml

External Consumers

  • namecheap-api: 도메인 등록 시 예치금 조회/차감
  • hosting.anvil.it.com: 웹사이트 문의 폼 제출
  • Monitoring Tools: Circuit Breaker 상태 조회

자세한 내용은 OpenAPI Specification을 참조하세요.


🌐 웹 채팅 인터페이스 (telegram-cli)

별도 Cloudflare Worker로 배포된 웹 채팅 UI 및 JSON API입니다.

엔드포인트

배포 URL: https://telegram-cli-web.kappa-d8e.workers.dev

엔드포인트 메서드 설명
/ GET 웹 채팅 UI (브라우저 인터페이스)
/api/chat POST JSON API (프로그래밍 방식 접근)
/health GET Health check

사용 예시

웹 브라우저

https://telegram-cli-web.kappa-d8e.workers.dev

브라우저에서 접속하여 봇과 실시간 대화

JSON API (curl)

curl -s -X POST 'https://telegram-cli-web.kappa-d8e.workers.dev/api/chat' \
  -H 'Content-Type: application/json' \
  -d '{"message": "안녕"}'

응답:

{
  "response": "안녕하세요! 무엇을 도와드릴까요?",
  "time_ms": 1234
}

Claude Code 사용

Claude는 이 API를 사용하여 봇과 대화하고 기능을 테스트할 수 있습니다.

# 예치금 기능 테스트
curl -X POST 'https://telegram-cli-web.kappa-d8e.workers.dev/api/chat' \
  -H 'Content-Type: application/json' \
  -d '{"message": "잔액 조회"}'

# 도메인 기능 테스트
curl -X POST 'https://telegram-cli-web.kappa-d8e.workers.dev/api/chat' \
  -H 'Content-Type: application/json' \
  -d '{"message": "example.com 조회"}'

배포 방법

자세한 내용은 telegram-cli/README.md를 참조하세요.


🧪 테스트

자동화된 단위 테스트

프로젝트는 VitestMiniflare를 사용하여 Cloudflare Workers 환경에서 단위 테스트를 실행합니다.

테스트 실행

# 의존성 설치
npm install

# 모든 테스트 실행
npm test

# Watch 모드 (개발 중)
npm run test:watch

# 커버리지 리포트
npm run test:coverage

테스트 범위

deposit-agent.ts (예치금 시스템):

  • 음수/0원 금액 거부
  • 동시성 처리 안전성
  • Batch 부분 실패 처리
  • 입금자명 7글자 매칭 로직
  • 관리자 권한 검증
  • 거래 상태 검증

테스트 파일 위치:

  • tests/deposit-agent.test.ts - 예치금 시스템 테스트 (50+ test cases)
  • vitest.config.ts - Vitest 설정 (Miniflare 환경)
  • tests/setup.ts - D1 Database 초기화 및 헬퍼 함수

테스트 아키텍처

  • 환경: Miniflare (in-memory SQLite)
  • 모킹: D1 Database, KV Namespace, 환경 변수
  • 커버리지: V8 Coverage Provider
  • 실행 시간: <10초 (전체 테스트 스위트)

수동 테스트

자동화되지 않은 기능의 수동 테스트 예제:

  • src/services/__test__/notification.test.ts - 관리자 알림 시스템
  • src/utils/__test__/logger.test.ts - 구조화된 로깅

🛠 기술 스택

분류 기술 비고
Runtime Cloudflare Workers Serverless
DB Cloudflare D1 SQLite
Cache Cloudflare KV Rate Limiting
AI OpenAI GPT-4o-mini Logic & Tools
Fallback Workers AI (Llama 3) Backup AI
Testing Vitest + Miniflare Unit Tests

🤝 기여 및 문의

버그 신고나 기능 제안은 Issue를 등록해주세요. 소스 코드는 **Gitea**에서 관리됩니다.

Description
Telegram bot with Cloudflare Workers + D1 + OpenAI
Readme MIT 1.1 MiB
Languages
TypeScript 99.7%
Shell 0.3%