یک سرویس مستقل پایتون که:
- به تلگرام متصل میشود (با استفاده از Telethon یا Pyrogram)
- QR Code و کد تایید را مدیریت میکند
- پیامهای دریافتی از تلگرام را به Laravel Backend ارسال میکند
- Session های متعدد Agent ها را همزمان مدیریت میکند
- دریافت درخواست اتصال از Agent ها
- ایجاد Session جدید برای هر Agent
- تولید QR Code یا درخواست کد تایید
- ذخیره و مدیریت Session ها
- دریافت تمام پیامهای تلگرام برای هر Agent
- ارسال پیامهای تلگرام از طرف Agent
- Webhook به Laravel برای اطلاعرسانی پیام جدید
- نگهداری Session های فعال
- Reconnect خودکار در صورت قطع اتصال
- Logout و حذف Session
درخواست شروع فرآیند اتصال
Request:
{
"agent_id": 123
}Response:
{
"success": true,
"session_id": "uuid-v4-session-id",
"qr_code": "data:image/png;base64,iVBORw0KG...",
"expires_in": 300
}توضیحات:
- ایجاد یک Session جدید برای Agent
- تولید QR Code با استفاده از Telethon
- QR Code باید Base64 encoded باشه
- Session ID منحصر به فرد برای پیگیری
تایید کد دریافتی از تلگرام
Request:
{
"session_id": "uuid-v4-session-id",
"code": "12345"
}Response (موفق):
{
"success": true,
"connected": true,
"phone": "+989123456789",
"user_id": 123456789
}Response (نیاز به Password):
{
"success": true,
"connected": false,
"requires_password": true
}Response (خطا):
{
"success": false,
"error": "کد نامعتبر است"
}برای اکانتهایی که 2FA دارند
Request:
{
"session_id": "uuid-v4-session-id",
"password": "my-password"
}Response:
{
"success": true,
"connected": true,
"phone": "+989123456789",
"user_id": 123456789
}قطع اتصال و حذف Session
Request:
{
"session_id": "uuid-v4-session-id"
}Response:
{
"success": true,
"message": "اتصال با موفقیت قطع شد"
}بررسی وضعیت اتصال
Response:
{
"success": true,
"connected": true,
"phone": "+989123456789",
"user_id": 123456789,
"last_activity": "2025-12-20T10:30:00Z"
}ارسال پیام از طریق تلگرام
Request:
{
"session_id": "uuid-v4-session-id",
"chat_id": 123456789,
"message": "سلام، چطور میتونم کمکتون کنم؟",
"reply_to": null
}Response:
{
"success": true,
"message_id": 987654321,
"sent_at": "2025-12-20T10:30:00Z"
}سرویس پایتون باید وقتی پیام جدیدی دریافت میشه، به Laravel اطلاع بده.
Headers:
Authorization: Bearer {WEBHOOK_SECRET_TOKEN}
Content-Type: application/json
Request Body:
{
"event": "new_message",
"session_id": "uuid-v4-session-id",
"message": {
"id": 123456,
"from": {
"id": 987654321,
"first_name": "علی",
"last_name": "محمدی",
"username": "ali_m",
"phone": "+989123456789"
},
"chat": {
"id": 987654321,
"type": "private"
},
"text": "سلام، میخوام محصولتون رو بخرم",
"date": "2025-12-20T10:30:00Z",
"reply_to_message_id": null
}
}Event Types:
new_message: پیام جدیدmessage_edited: ویرایش پیامsession_expired: Session منقضی شدهconnection_lost: قطع اتصالconnection_restored: اتصال مجدد
- Python 3.11+
- FastAPI: برای REST API
- Telethon یا Pyrogram: برای اتصال به تلگرام
- PostgreSQL یا SQLite: ذخیره Session ها
- Redis: Cache و Queue مدیریت
- Docker: برای Deploy
telegram-service/
├── app/
│ ├── __init__.py
│ ├── main.py # FastAPI application
│ ├── config.py # تنظیمات
│ ├── models/
│ │ ├── __init__.py
│ │ └── session.py # Session model
│ ├── services/
│ │ ├── __init__.py
│ │ ├── telegram.py # Telegram client management
│ │ └── webhook.py # Laravel webhook sender
│ ├── api/
│ │ ├── __init__.py
│ │ ├── routes.py # API endpoints
│ │ └── schemas.py # Pydantic schemas
│ └── utils/
│ ├── __init__.py
│ ├── qr_generator.py # QR code generator
│ └── session_manager.py # Session management
├── tests/
├── sessions/ # Telegram session files
├── .env.example
├── docker-compose.yml
├── Dockerfile
├── requirements.txt
└── README.md
# Telegram API
TELEGRAM_API_ID=your_api_id
TELEGRAM_API_HASH=your_api_hash
# Server
HOST=0.0.0.0
PORT=8000
DEBUG=False
# Database
DATABASE_URL=sqlite:///./sessions.db
# یا برای PostgreSQL:
# DATABASE_URL=postgresql://user:pass@localhost/dbname
# Redis
REDIS_URL=redis://localhost:6379/0
# Laravel Backend
LARAVEL_BASE_URL=http://localhost:8000
WEBHOOK_SECRET_TOKEN=your-secret-token-here
# Security
API_SECRET_KEY=your-secret-key-for-api-auth- تمام API endpoints باید با API Key محافظت شوند
- Laravel Backend باید توکن معتبر داشته باشد
- Session files باید رمزنگاری شوند
- دسترسی به فایلهای Session محدود باشد
- استفاده از HTTPS برای Webhook ها
- امضای دیجیتال برای Webhook payloads
fastapi>=0.104.0
uvicorn[standard]>=0.24.0
telethon>=1.33.0
# یا
# pyrogram>=2.0.0
sqlalchemy>=2.0.0
alembic>=1.12.0
redis>=5.0.0
python-dotenv>=1.0.0
pydantic>=2.5.0
pydantic-settings>=2.1.0
httpx>=0.25.0
qrcode[pil]>=7.4.0
cryptography>=41.0.0
python-multipart>=0.0.6# کلون و نصب
git clone <repo>
cd telegram-service
python -m venv venv
source venv/bin/activate # یا venv\Scripts\activate در Windows
pip install -r requirements.txt
# تنظیم Environment Variables
cp .env.example .env
# ویرایش .env و تنظیم مقادیر- رفتن به https://my.telegram.org
- ساخت Application جدید
- کپی کردن API_ID و API_HASH
# Development
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
# Production با Docker
docker-compose up -d- ✅ اتصال به تلگرام با QR Code
- ✅ اتصال با Phone Code
- ✅ مدیریت چند Session همزمان
- ✅ دریافت و ارسال پیام
- ✅ Webhook به Laravel
- ✅ Reconnection خودکار
- ✅ Logout و حذف Session
- اتصالات جدید
- پیامهای ارسالی/دریافتی
- خطاها و Exceptions
- وضعیت Session ها
- تعداد Session های فعال
- تعداد پیامهای پردازش شده
- زمان پاسخدهی API
- میزان استفاده از منابع
- هر Agent یک Session منحصر به فرد دارد
- Session files باید پایدار باشند (در Volume ذخیره شوند)
- پس از Restart سرویس، Session ها باید بازیابی شوند
- Session های غیرفعال پس از N روز حذف شوند
class TelegramSession:
id: UUID
agent_id: int
session_id: str
phone: str
user_id: int
is_active: bool
connected_at: datetime
last_activity: datetime
session_file: str # path to session file
metadata: dict- FloodWaitError: محدودیت تعداد درخواست به تلگرام
- SessionExpiredError: Session منقضی شده
- PhoneCodeInvalidError: کد نامعتبر
- PasswordHashInvalidError: رمز نامعتبر
- NetworkError: مشکل اتصال به اینترنت
- Retry با Exponential Backoff
- اطلاعرسانی به Laravel از طریق Webhook
- Logging جامع
- پشتیبانی از ارسال فایل، عکس، ویدیو
- مدیریت گروهها و کانالها
- دریافت اطلاعات مخاطب
- جستجو در پیامها
- آرشیو پیامها
- استفاده از Celery برای پردازش Async
- Load Balancing برای چند Instance
- شاخت Cluster برای Session های زیاد
- Setup پروژه و ساختار اولیه
- پیادهسازی FastAPI endpoints
- اتصال به Telegram با Telethon
- مدیریت Session ها
- تولید QR Code
- مدیریت Phone Code و Password
- پیادهسازی Webhook به Laravel
- مدیریت پیامهای دریافتی
- ارسال پیام به تلگرام
- Error Handling و Retry Logic
- Logging و Monitoring
- تستهای Unit و Integration
- Dockerization
- مستندات API (Swagger/OpenAPI)
- Deploy و CI/CD
import httpx
# درخواست QR Code
response = httpx.post(
"http://localhost:8000/api/telegram/request-qr",
json={"agent_id": 123},
headers={"X-API-Key": "your-api-key"}
)
data = response.json()
print(f"QR Code: {data['qr_code']}")
print(f"Session ID: {data['session_id']}")
# تایید کد
response = httpx.post(
"http://localhost:8000/api/telegram/verify-code",
json={
"session_id": data['session_id'],
"code": "12345"
},
headers={"X-API-Key": "your-api-key"}
)
print(response.json())تاریخ ایجاد: 2025-12-20
نسخه: 1.0.0
وضعیت: در انتظار پیادهسازی