سورس ربات ثبت سفارش بله
مرحلهبهمرحله از مشتری نام، محصول و شماره تماس میگیرد، سفارش را در فایل اکسل ذخیره میکند و خلاصهاش را برای مشتری میفرستد.
پاسخ کوتاه
ربات ثبت سفارش بله یک گفتگوی سهمرحلهای (نام → محصول → تلفن) را با یک ماشین حالت ساده در پایتون پیاده میکند: وضعیت هر کاربر در یک دیکشنری نگه داشته میشود و در پایان، سفارش با تاریخ در فایل orders.csv ذخیره میشود که مستقیماً با اکسل باز میشود.
ربات ثبت سفارش بله چطور کار میکند؟
این ربات یک گفتگوی مرحلهای با مشتری انجام میدهد: اول نام، بعد محصول یا خدمت، و در آخر شماره تماس را میپرسد و سفارش را داخل فایل orders.csv ذخیره میکند تا بتوانید با اکسل بازش کنید. الگوی «گفتگوی مرحلهای» که اینجا یاد میگیری، پایهٔ رباتهای رزرو نوبت، فرم ثبتنام و پشتیبانی هم هست.
آموزش راهاندازی ربات ثبت سفارش بله در ۵ قدم
این مراحل را بهترتیب انجام بده تا ربات روی سیستم خودت یا سرور بالا بیاید. زمان تقریبی: ۱۵ دقیقه.
pip install requests را اجرا کن.bot.py را باز کن و مقدار TOKEN را جایگزین کن.python bot.py را اجرا کن و در بله /start را بزن تا گفتگوی ثبت سفارش شروع شود.orders.csv که کنار برنامه ساخته میشود را با اکسل باز کن و سفارشها را ببین.کل سورس ربات ثبت سفارش بله (کپی یا دانلود کن)
این همان کدی است که داخل فایل ZIP هم هست. میتوانی مستقیم از اینجا کپی کنی. فقط یادت باشد مقدار TOKEN را با توکن رباتت عوض کنی.
# -*- coding: utf-8 -*-
# ------------------------------------------------------------
# ربات ثبت سفارش بله
# طراحی و کدنویسی: سروش مقدمی — فیلتور (filtori.com)
# ------------------------------------------------------------
# این ربات یک گفتگوی مرحلهای با مشتری انجام میده و سفارش رو
# میگیره و داخل فایل orders.csv ذخیره میکنه:
# ۱) اسم مشتری
# ۲) محصول یا خدمتی که میخواد
# ۳) شمارهٔ تماس
# در پایان یک خلاصهٔ سفارش برای مشتری میفرسته.
#
# آموزش کامل:
# https://filtori.com/bale-bot-source/order-bot/
# نسخهٔ اختصاصی + اتصال به پنل و پرداخت؟ 09122874862
# تلگرام ما: https://t.me/filtori
# ------------------------------------------------------------
import csv
import time
from datetime import datetime
import requests
TOKEN = "توکن_ربات_خودت_را_اینجا_بگذار"
BASE = f"https://tapi.bale.ai/bot{TOKEN}"
# فایلی که سفارشها توش ذخیره میشن (کنار همین فایل ساخته میشه)
ORDERS_FILE = "orders.csv"
# ------------------------------------------------------------
# حافظهٔ موقت گفتگو:
# برای هر کاربر نگه میداریم که در کدوم مرحله از ثبت سفارشه.
# کلید = chat_id | مقدار = {"step": ..., "data": {...}}
# توجه: این حافظه در رم هست؛ اگر ربات ریاستارت بشه پاک میشه.
# برای پروژهٔ واقعی بهتره از دیتابیس استفاده بشه (تیم فیلتور کمکت میکنه).
# ------------------------------------------------------------
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):
"""منطق گفتگوی مرحلهای ثبت سفارش."""
# شروع دوباره در هر لحظه با /start
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()
کد را خطبهخط بفهم
کپیکردن کافی نیست؛ اگر بدانی هر بخش چرا آنجاست، میتوانی ربات را برای کسبوکار خودت تغییر بدهی. مهمترین قطعههای ربات ثبت سفارش بله:
۱حافظهٔ گفتگو: یک دیکشنری ساده
sessions = {}
# chat_id -> {"step": "name", "data": {}}برای هر کاربر نگه میداریم «الان در کدام مرحله است» و «تا حالا چه گفته». این سادهترین شکل یک ماشین حالت (state machine) است. چون در رم است، با ریاستارت پاک میشود؛ در نسخهٔ واقعی جایش را SQLite یا Redis میگیرد.
۲/start همیشه گفتگو را از نو شروع میکند
if text == "/start":
sessions[chat_id] = {"step": "name", "data": {}}کاربر ممکن است وسط گفتگو پشیمان شود یا اشتباه بنویسد. با اینکه /start در هر لحظه وضعیت را ریست میکند، هیچوقت در حالت گیرکرده نمیماند.
۳زنجیرهٔ مراحل
if step == "name": ... session["step"] = "product" elif step == "product": ... session["step"] = "phone"
هر شاخه یک کار میکند: جواب فعلی را ذخیره میکند، مرحلهٔ بعد را تنظیم میکند و سوال بعدی را میپرسد. اضافهکردن مرحلهٔ جدید (مثلاً «آدرس») یعنی فقط یک elif دیگر.
۴ذخیره در CSV که اکسل بفهمد
with open(ORDERS_FILE, "a", newline="", encoding="utf-8") as file:
csv.writer(file).writerow([...])حالت a (append) یعنی سفارشهای قبلی پاک نمیشوند. newline="" از سطرهای خالی اضافه در ویندوز جلوگیری میکند. اگر اکسل فارسی را بههمریخته نشان داد، encoding را به utf-8-sig تغییر بده تا BOM اضافه شود.
۵خلاصهٔ سفارش برای مشتری
f"👤 نام: {data['name']}\n🛍️ محصول: {data['product']}..."بازخورد فوری اعتماد میسازد؛ مشتری مطمئن میشود سفارشش رسیده. همینجا میتوانی یک پیام هم به chat_id خودت بفرستی تا از هر سفارش جدید باخبر شوی (در ربات منوی کافه این کار انجام شده).
۶پاککردن حافظه بعد از پایان
del sessions[chat_id]
وقتی سفارش ذخیره شد، وضعیت کاربر را حذف میکنیم تا پیام بعدیاش بهعنوان ادامهٔ گفتگوی قبلی تعبیر نشود و رم ربات هم با هزاران کاربر پر نشود.
BASE را به https://api.telegram.org/bot{TOKEN} تغییر بده. جدول تفاوت API بله و تلگرام را ببین.سوالهای پرتکرار دربارهٔ ربات ثبت سفارش بله
سفارشها کجا ذخیره میشوند؟
در فایلی به نام orders.csv کنار برنامه ذخیره میشوند که با اکسل و گوگلشیت باز میشود. هر سطر: تاریخ، نام، محصول، تلفن.
اگر ربات ریاستارت شود اطلاعات نیمهکاره میپرد؟
بله، گفتگوی نیمهتمام در حافظهٔ موقت است؛ سفارشهای کاملشده در CSV میمانند. برای نسخهٔ واقعی بهتر است وضعیت گفتگو هم در دیتابیس ذخیره شود که فیلتور میتواند برایتان پیادهسازی کند.
چطور شمارهٔ تلفن را اعتبارسنجی کنم؟
در شاخهٔ step == "phone" قبل از ذخیره چک کنید متن با ۰۹ شروع شود و ۱۱ رقم باشد؛ اگر نبود، دوباره بپرسید و مرحله را تغییر ندهید.
میشود درگاه پرداخت به آن وصل کرد؟
بله، در نسخهٔ اختصاصی میتوان پرداخت آنلاین، پنل مدیریت سفارشها و پیامک تأیید را اضافه کرد. جزئیات در صفحهٔ سفارش ربات بله.
راهاندازی این ربات برایت سخت شد؟
لازم نیست خودت درگیر شوی. تیم فیلتور این ربات را نصب، شخصیسازی و به کسبوکارت وصل میکند.
سورسهای دیگر ربات بله
→ همهٔ سورسهای رایگان ربات بله رباتساز آنلاین (بدون کدنویسی)
