رفتن به محتوای اصلی
🛍️ سطح: متوسط · رایگان

سورس ربات ثبت سفارش تلگرام

مرحله‌به‌مرحله از مشتری نام، محصول و شماره تماس می‌گیرد و سفارش را در فایلی ذخیره می‌کند که با اکسل باز می‌شود.

سوال یا راهنمایی لازم داری؟ از صفحهٔ تماس با ما بپرس.

طراحی و کدنویسی: زبان: Python 3وابستگی: requestsزمان راه‌اندازی: ۱۵ دقیقهمجوز: رایگان (CC0)به‌روزرسانی: ۲ مهر ۱۴۰۵

این ربات چه کاری انجام می‌دهد؟

این ربات یک گفتگوی مرحله‌ای با مشتری انجام می‌دهد: اول نام، بعد محصول یا خدمت، و در آخر شماره تماس را می‌پرسد و سفارش را داخل فایل orders.csv ذخیره می‌کند تا بتوانید با اکسل بازش کنید.

⚠️ نکتهٔ مهم: ربات تلگرام باید روی سروری اجرا شود که به api.telegram.org دسترسی دارد؛ روی خیلی از هاست‌های داخل ایران این آدرس مستقیم باز نیست. اگر ربات اجرا نشد، معمولاً مشکل از دسترسی سرور است نه از کد. اگر گیر کردی، از طریق صفحهٔ تماس با ما کمک بگیر.

آموزش راه‌اندازی قدم‌به‌قدم

این مراحل را به‌ترتیب انجام بده تا ربات روی سیستم خودت یا سرور بالا بیاید. داخل فایل ZIP یک راهنمای README هم هست.

از BotFather در تلگرام توکن ربات را بگیر.
پایتون را نصب کن و pip install requests را اجرا کن.
فایل bot.py را باز کن و مقدار TOKEN را جایگزین کن.
python bot.py را اجرا کن و در تلگرام /start را بزن تا گفتگوی ثبت سفارش شروع شود.
فایل orders.csv که کنار برنامه ساخته می‌شود را با اکسل باز کن و سفارش‌ها را ببین.

کل سورس ربات (کپی یا دانلود کن)

این همان کدی است که داخل فایل ZIP هم هست. فقط یادت باشد مقدار TOKEN را با توکن رباتت عوض کنی.

bot.py
# -*- coding: utf-8 -*-
# ------------------------------------------------------------
#  ربات ثبت سفارش تلگرام
#  طراحی و کدنویسی: سروش مقدمی — فیلتور (filtori.com)
# ------------------------------------------------------------
#  این ربات یک گفتگوی مرحله‌ای با مشتری انجام می‌ده و سفارش رو
#  می‌گیره و داخل فایل orders.csv ذخیره می‌کنه:
#     ۱) اسم مشتری
#     ۲) محصول یا خدمتی که می‌خواد
#     ۳) شمارهٔ تماس
#  در پایان یک خلاصهٔ سفارش برای مشتری می‌فرسته.
#
#  ⚠️ نکته: ربات تلگرام باید روی سروری اجرا بشه که به
#     api.telegram.org دسترسی داره.
#
#  آموزش کامل:
#     https://filtori.com/telegram-bot-source/order-bot/
#  نسخهٔ اختصاصی + اتصال به پنل و پرداخت؟  09122874862
#  تلگرام ما: https://t.me/filtori
# ------------------------------------------------------------

import csv
import time
from datetime import datetime

import requests

TOKEN = "توکن_ربات_خودت_را_اینجا_بگذار"
BASE = f"https://api.telegram.org/bot{TOKEN}"

# فایلی که سفارش‌ها توش ذخیره می‌شن (کنار همین فایل ساخته می‌شه)
ORDERS_FILE = "orders.csv"

# ------------------------------------------------------------
#  حافظهٔ موقت گفتگو:
#  برای هر کاربر نگه می‌داریم که در کدوم مرحله از ثبت سفارشه.
#  توجه: این حافظه در رم هست؛ اگر ربات ری‌استارت بشه پاک می‌شه.
#  برای پروژهٔ واقعی بهتره از دیتابیس استفاده بشه (تیم فیلتور کمکت می‌کنه).
# ------------------------------------------------------------
sessions = {}


def send_message(chat_id, text):
    url = f"{BASE}/sendMessage"
    try:
        requests.post(url, json={"chat_id": chat_id, "text": text}, timeout=15)
    except requests.RequestException as error:
        print("خطا در ارسال پیام:", error)


def get_updates(offset):
    url = f"{BASE}/getUpdates"
    params = {"offset": offset, "timeout": 30}
    try:
        return requests.get(url, params=params, timeout=40).json()
    except requests.RequestException as error:
        print("خطا در دریافت پیام‌ها:", error)
        return {"ok": False, "result": []}


def save_order(data):
    """ذخیرهٔ یک سفارش کامل در فایل CSV."""
    is_new_file = False
    try:
        with open(ORDERS_FILE, "r", encoding="utf-8"):
            pass
    except FileNotFoundError:
        is_new_file = True

    with open(ORDERS_FILE, "a", newline="", encoding="utf-8") as file:
        writer = csv.writer(file)
        if is_new_file:
            writer.writerow(["تاریخ", "نام", "محصول", "تلفن"])
        writer.writerow(
            [
                datetime.now().strftime("%Y-%m-%d %H:%M"),
                data["name"],
                data["product"],
                data["phone"],
            ]
        )


def handle(chat_id, text):
    """منطق گفتگوی مرحله‌ای ثبت سفارش."""
    if text == "/start":
        sessions[chat_id] = {"step": "name", "data": {}}
        send_message(chat_id, "سلام 👋 برای ثبت سفارش، لطفاً «نام و نام خانوادگی» خود را بنویسید:")
        return

    if chat_id not in sessions:
        send_message(chat_id, "برای شروع ثبت سفارش، دستور /start را بفرستید.")
        return

    session = sessions[chat_id]
    step = session["step"]

    if step == "name":
        session["data"]["name"] = text
        session["step"] = "product"
        send_message(chat_id, "ممنون ✅ حالا بنویس چه محصول یا خدمتی می‌خوای؟")

    elif step == "product":
        session["data"]["product"] = text
        session["step"] = "phone"
        send_message(chat_id, "عالیه 👌 در آخر شمارهٔ تماست رو بنویس تا باهات هماهنگ کنیم:")

    elif step == "phone":
        session["data"]["phone"] = text
        data = session["data"]
        save_order(data)

        send_message(
            chat_id,
            "سفارشت با موفقیت ثبت شد ✅\n\n"
            f"👤 نام: {data['name']}\n"
            f"🛍️ محصول: {data['product']}\n"
            f"📞 تلفن: {data['phone']}\n\n"
            "به‌زودی باهات تماس می‌گیریم. ممنون که فیلتور رو انتخاب کردی 🙏",
        )
        del sessions[chat_id]


def main():
    print("ربات ثبت سفارش فیلتور روشن شد... (Ctrl+C برای خاموش‌کردن)")
    offset = 0
    while True:
        updates = get_updates(offset)
        if not updates.get("ok"):
            time.sleep(2)
            continue

        for update in updates.get("result", []):
            offset = update["update_id"] + 1
            message = update.get("message")
            if not message:
                continue
            chat_id = message["chat"]["id"]
            text = message.get("text", "")
            if text:
                handle(chat_id, text)

        time.sleep(0.5)


if __name__ == "__main__":
    main()
کل سورس این ربات ↑

⬇ دانلود فایل ZIP این ربات

شخصی‌سازی سریع

با چند تغییر کوچک، ربات را مخصوص کسب‌وکار خودت کن.

سوال‌های فرم

برای افزودن مرحلهٔ جدید (مثلاً آدرس)، در تابع handle یک elif step == "address" اضافه کن و ستونش را در save_order بنویس.

اطلاع به مدیر

اگر می‌خواهی هر سفارش برای خودت هم ارسال شود، ایدهٔ ADMIN_CHAT_ID را از ربات تیکت بردار.

نمایش محصولات

برای نمایش لیست محصولات با دکمهٔ شیشه‌ای، ربات کاتالوگ محصولات را ببین.

خطاهای رایج و راه‌حل

اگر ربات اجرا نشد، اول پیام خطای ترمینال را با این جدول مقایسه کن. اگر خطایت اینجا نبود، از صفحهٔ تماس با ما بپرس.

پیام خطاعلتراه‌حل
401 Unauthorizedتوکن اشتباه است یا فاصلهٔ اضافه دارد.توکن را دوباره از BotFather کپی کن و بین دو علامت نقل‌قول بگذار.
409 Conflictیک نسخهٔ دیگر از ربات در حال اجراست یا روی ربات وب‌هوک تنظیم شده.نسخهٔ دیگر را خاموش کن. اگر قبلاً وب‌هوک گذاشته‌ای، آدرس api.telegram.org/bot<TOKEN>/deleteWebhook را یک بار باز کن.
Timeout یا ConnectionErrorسرور به api.telegram.org دسترسی ندارد.ربات را روی سروری اجرا کن که به تلگرام دسترسی دارد؛ روی بیشتر هاست‌های داخل ایران این آدرس باز نیست.
ModuleNotFoundError: requestsکتابخانهٔ requests نصب نشده.دستور pip install -r requirements.txt یا pip install requests را اجرا کن.
429 Too Many Requestsدر زمان کوتاه پیام زیادی ارسال شده.بین ارسال‌ها مکث بگذار؛ تلگرام حدود ۳۰ پیام در ثانیه اجازه می‌دهد.
ربات در گروه جواب نمی‌دهدPrivacy Mode ربات روشن است.در BotFather دستور /setprivacy را بزن و آن را Disable کن، یا ربات را ادمین گروه کن.

اجرای ۲۴ ساعته روی سرور لینوکس

با python bot.py ربات تا وقتی ترمینال باز است کار می‌کند. برای اجرای دائمی روی سرور لینوکس (Ubuntu/Debian)، فایل‌ها را در پوشهٔ /opt/mybot بگذار و یک سرویس systemd بساز تا ربات بعد از خطا یا ری‌استارت سرور خودش دوباره روشن شود.

/etc/systemd/system/mybot.service
[Unit]
Description=Filtori Telegram Bot
After=network-online.target

[Service]
WorkingDirectory=/opt/mybot
ExecStart=/usr/bin/python3 /opt/mybot/bot.py
Environment=PYTHONUNBUFFERED=1
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
فایل سرویس
terminal
sudo nano /etc/systemd/system/mybot.service   # متن بالا را اینجا بگذار
sudo systemctl daemon-reload
sudo systemctl enable --now mybot             # روشن‌کردن + اجرای خودکار بعد از ری‌استارت
journalctl -u mybot -f                        # دیدن لاگ‌ها
دستورها

راه‌اندازی روی سرور برایت سخت است؟ نصب و راه‌اندازی را به ما بسپار.

درخواست راه‌اندازی

از سورس رایگان تا ربات حرفه‌ای کسب‌وکار

این سورس برای یادگیری و شروع کار عالی است. وقتی ربات قرار است هر روز با مشتری واقعی کار کند، معمولاً به دیتابیس، پنل مدیریت، امنیت بیشتر و پشتیبانی نیاز دارد. تیم فیلتور همین ربات ثبت سفارش تلگرام را اختصاصی و متناسب با فرآیند کسب‌وکارت می‌سازد.

امکانسورس رایگاننسخهٔ اختصاصی
ذخیره‌سازیفایل CSV/TXTدیتابیس
پنل مدیریت—✓
پرداخت آنلاین—✓
اتصال به سایت / CRM—✓
نصب و پشتیبانیخودتتیم فیلتور

سوال‌های پرتکرار دربارهٔ این ربات

سفارش‌ها کجا ذخیره می‌شوند؟

در فایلی به نام orders.csv کنار برنامه ذخیره می‌شوند که با اکسل هم باز می‌شود.

اگر ربات ری‌استارت شود اطلاعات نیمه‌کاره می‌پرد؟

بله، گفتگوی نیمه‌تمام در حافظهٔ موقت است؛ برای نسخهٔ واقعی بهتر است از دیتابیس استفاده شود که فیلتور می‌تواند برایتان پیاده‌سازی کند.

می‌شود درگاه پرداخت به آن وصل کرد؟

بله، در نسخهٔ اختصاصی می‌توان پرداخت آنلاین، پنل مدیریت و پیامک را اضافه کرد.

سوال یا مشکلی داشتم از کجا راهنمایی بگیرم؟

از صفحهٔ تماس با ما در filtori.com/contact پیام بدهید یا با شمارهٔ ۰۹۱۲۲۸۷۴۸۶۲ تماس بگیرید؛ اگر نسخهٔ اختصاصی همین ربات را برای کسب‌وکارتان بخواهید هم همین مسیر را استفاده کنید.

طراح و برنامه‌نویس این سورس‌ها · بنیان‌گذار فیلتور

مدیر بخش دیتابیس همراه اول و فعال در توسعهٔ نرم‌افزار از سال ۱۳۹۱؛ با سابقهٔ کار روی سامانه‌های بانکی و پرتراکنش. این سورس‌ها را طوری نوشته که ساده، خوانا و قابل توسعه باشند و مستقیم در کسب‌وکار واقعی استفاده شوند.

سوالی داری یا راهنمایی می‌خواهی؟

اگر در راه‌اندازی گیر کردی، یا می‌خواهی همین ربات برای کسب‌وکارت نصب و شخصی‌سازی شود، از صفحهٔ تماس با ما پیام بده.

سورس‌های دیگر ربات تلگرام