Files
telegram-web-client/docs/plans/2026-02-05-telegram-web-client-design.md
kappa e610a45fcf Initial commit: Telegram Web Client with bot chat sync
- Backend: FastAPI + Telethon v2 WebSocket server
- Frontend: React + TypeScript + Vite + Zustand
- Features: Phone auth, 2FA, real-time bot chat
- Fix: Use chats= instead of from_users= to sync messages from all devices
- Config: BOT_USERNAME=AnvilForgeBot

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 13:55:22 +09:00

4.1 KiB

Telegram Web Client Design

Overview

웹소켓을 이용해 Telegram 봇(telegram-bot-workers)과 대화하는 웹 앱

Stack

  • Infrastructure: Incus 컨테이너 (Debian 13) on jp1/kr1
  • Backend: Python + Telethon v2 + FastAPI WebSocket
  • Frontend: React + TypeScript + Vite
  • State Management: Zustand

Architecture

┌─────────────────┐     WebSocket      ┌─────────────────────────────┐
│  React Frontend │◄──────────────────►│  FastAPI Backend (Debian)   │
│  (브라우저)      │                    │                             │
└─────────────────┘                    │  ┌─────────────────────┐    │
                                       │  │ Telethon v2 Client  │    │
                                       │  │ (MTProto)           │    │
                                       │  └──────────┬──────────┘    │
                                       └─────────────┼───────────────┘
                                                     │
                                                     ▼
                                       ┌─────────────────────────────┐
                                       │  Telegram API (MTProto)     │
                                       │  ↔ telegram-bot-workers 봇  │
                                       └─────────────────────────────┘

Backend Structure

backend/
├── main.py              # FastAPI 앱 진입점
├── config.py            # 설정 (API_ID, API_HASH, BOT_USERNAME)
├── auth/
│   ├── telegram_auth.py # Telethon 인증 로직
│   └── session_manager.py # 세션 저장/복원
├── websocket/
│   ├── handler.py       # WebSocket 연결 관리
│   └── events.py        # 메시지 송수신 이벤트
├── telegram/
│   ├── client.py        # Telethon 클라이언트 래퍼
│   └── bot_chat.py      # 봇과의 대화 전용 로직
└── models/
    └── schemas.py       # Pydantic 모델

Frontend Structure

frontend/
├── src/
│   ├── App.tsx
│   ├── main.tsx
│   ├── components/
│   │   ├── Auth/
│   │   │   ├── PhoneInput.tsx    # 전화번호 입력
│   │   │   └── CodeInput.tsx     # 인증 코드 입력
│   │   └── Chat/
│   │       ├── ChatContainer.tsx # 채팅 메인
│   │       ├── MessageList.tsx   # 메시지 목록
│   │       └── MessageInput.tsx  # 메시지 입력
│   ├── hooks/
│   │   └── useWebSocket.ts       # WebSocket 연결 훅
│   ├── stores/
│   │   └── chatStore.ts          # Zustand 상태 관리
│   └── types/
│       └── index.ts
├── package.json
└── vite.config.ts

Features

  • Authentication: Telegram 로그인 (전화번호 + 인증 코드)
  • Session Management: 로그인 후 세션 파일 저장, 재접속 시 자동 복원
  • Real-time Chat: WebSocket으로 실시간 메시지 송수신
  • Bot Filter: 특정 봇(telegram-bot-workers)과의 대화만 처리

User Flow

  1. 사용자가 웹에서 전화번호 입력
  2. 백엔드가 Telethon으로 Telegram에 인증 코드 요청
  3. 사용자가 코드 입력 → 세션 생성
  4. WebSocket 연결 유지, 봇과 실시간 대화

Configuration

환경 변수:

  • TELEGRAM_API_ID: Telegram API ID
  • TELEGRAM_API_HASH: Telegram API Hash
  • BOT_USERNAME: 대화할 봇 username (예: @telegram_summary_bot)

Deployment

  • Incus 컨테이너: Debian 13
  • systemd 서비스로 백엔드 실행
  • Caddy/Nginx로 리버스 프록시 + SSL