مرجع رسمی پروژه ربات تلگرامی مدیریت گارانتی و امداد فنی — طراحی، توسعه، استقرار و پشتیبانی.
SafeGanjineh یک ربات مدیریت گارانتی و امداد فنی برای برندهای لوازم خانگی است که سناریوهای زیر را یکپارچه میکند:
پروژه به شکل یک اپلیکیشن Python روی cPanel (Passenger) اجرا میشود و منطق اصلی در فایل app/bot_ptb.py پیاده شده است.
.
├── app/
│ ├── bot_ptb.py # منطق اصلی ربات (PTB 20)
│ ├── db.py # لایه دسترسی به MySQL و ساخت جداول
│ ├── membership_guard.py # کنترل عضویت کانال
│ └── ... # فایلهای جانبی (bridges, handlers, views)
├── scripts/
│ ├── manage_webhook.py # مدیریت وبهوک
│ └── tools_init_db.py # راهاندازی/seed پایگاهداده
├── public/, storage/, logs/ # پوشههای موردنیاز cPanel / Passenger
├── passenger_wsgi.py # entry point برای Passenger
├── requirements.txt # وابستگیها
└── readme.md # همین مستند
.env)متغیرها
| نام | توضیح |
|---|---|
BOT_TOKEN | توکن ربات تلگرام |
WEBHOOK_SECRET_PATH | پَت وبهوک (برای مسیر /webhook/<secret>) |
MYSQL_HOST, MYSQL_PORT, MYSQL_DB, MYSQL_USER, MYSQL_PASSWORD | تنظیمات اتصال MySQL |
ADMIN_IDS | فهرست ID مدیریت (کاما جدا) |
TECHNICIAN_CHAT_IDS | فهرست ID تکنسینهای اولیه |
APP_LOG_FILE | مسیر فایل لاگ (پیشنهاد: /home/<user>/bots/safeganjineh/logs/app.log) |
TZ | منطقه زمانی (مانند Asia/Tehran) |
DEBUG | مقدار بولی برای شفافیت بیشتر لاگها |
CHANNEL_ID, CHANNEL_PUBLIC_URL | برای membership_guard.py درصورت نیاز |
نمونه .env:
BOT_TOKEN=123456:ABC...
WEBHOOK_SECRET_PATH=safeganjineh
MYSQL_HOST=localhost
MYSQL_DB=botnegar_safeganjineh
MYSQL_USER=botnegar_ganjinehadmin
MYSQL_PASSWORD=********
ADMIN_IDS=100970431,119119806
TECHNICIAN_CHAT_IDS=100970431,119119806,1372667993
APP_LOG_FILE=/home/botnegar/public_html/ganjine/logs/app.log
TZ=Asia/Tehran
DEBUG=False
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
.env با محتویات مناسب (میتوان از یک Bot Token تستی استفاده کرد).python -m scripts.tools_init_db
python -m app.bot_ptb
Ctrl+C یا kill <PID>.نکته: در محیط توسعه میتوانید وبهوک را غیرفعال نگهدارید و با polling تست کنید. برای اتصال به نسخه واقعی، باید Webhook را ست کنید (بخش عملیات).
/home/<user>/public_html/ganjine یا /home/<user>/bots/safeganjineh.passenger_wsgi.pyapplicationsource /home/<user>/virtualenv/public_html/ganjine/3.13/bin/activate
cd /home/<user>/public_html/ganjine
pip install -r requirements.txt
deactivate
.env (در root پروژه) و یا از UI cPanel.source /home/<user>/virtualenv/public_html/ganjine/3.13/bin/activate
cd /home/<user>/public_html/ganjine
python -m scripts.tools_init_db
deactivate
tmp/restart.txt یا دکمه Restart در cPanel:
cd /home/<user>/public_html/ganjine
touch tmp/restart.txt
مسیر وبهوک: https://<domain>/webhook/<WEBHOOK_SECRET_PATH>
برای ست کردن وبهوک:
curl "https://api.telegram.org/bot<token>/setWebhook?url=https://<domain>/webhook/<secret>"
برای حذف وبهوک (و استفاده از polling): deleteWebhook
توصیه: SSL فعال باشد و وبهوک در پنل تلگرام بهروز شود.
کد در db.py به صورت idempotent (با CREATE TABLE IF NOT EXISTS) اجرا میکند:
guarantees, stores, catalogs, catalog_filessupport_requests + ستونهای assignment و تقویم (scheduled_slot_date, scheduled_slot_part)technician_unavailable_slots برای ثبت روزهای استراحت/غیبت تکنسینهاsupport_reports, staff_rolespython -m scripts.tools_init_db: ساخت اولیه جداول و seed کردن admin/technician بر اساس .envreset_db در db.py: حذف و ساخت مجدد (مراقب از دستدادن دادهها باشید)mysqldump استفاده کنید.منوهای مربوطه در bot_ptb.py با ConversationHandler پیاده شدهاند. Admin میتواند فروشگاهها و کاتالوگهای مرتبط را اضافه/ویرایش/حذف کند.
technician_unavailable_slots).منوی «مدیریت تیم» امکان افزودن/حذف admin و technician را فراهم میکند. تکنسینها میتوانند گزارش فنی ارسال کرده یا درخواست را بپذیرند/رد کنند.
cd /home/<user>/public_html/ganjine
touch tmp/restart.txt
برای kill دستی (در صورت اجرا به صورت background):
ps -fu <user> | grep ganjine | grep -v grep
kill -9 <PID>
tail -f logs/app.log~/logs/<domain>-error.logpip install -r requirements.txt در صورت نیاز.python -m scripts.tools_init_db اگر جداول تغییر کردهاند.touch tmp/restart.txtlogs/app.log را چک کنید، معمولاً مرتبط با نبودن توکن یا env است.python -m py_compile app/bot_ptb.py app/db.py
ConversationHandler را با یک Bot Test انجام دهید (استفاده از گروه تست با ادمین/تکنسینهای واقعی)./health قرار گیرد.# فعالسازی virtualenv
source /home/<user>/virtualenv/public_html/ganjine/3.13/bin/activate
# نصب وابستگیها
pip install -r requirements.txt
# اجرای اسکریپت دیتابیس
python -m scripts.tools_init_db
# اجرای ربات در پسزمینه (در محیط تست)
python -m app.bot_ptb &
disown
# توقف همهی پردازههای مرتبط
ps -fu <user> | grep ganjine | grep -v grep | awk '{print $2}' | xargs kill -9
bot_ptb.py را گسترش دهید.با رعایت این مستند، هر توسعهدهنده یا مدیر سیستمی میتواند بهسادگی سرویس را نصب، بهروز و پشتیبانی کند. در صورت افزودن قابلیت جدید (بهخصوص در حوزه دیتابیس یا ConversationHandlerها) حتماً بخش مربوطه را در این سند بهروزرسانی کنید. موفق باشید! 🚀