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

سورس ربات پاسخ‌گوی خودکار (FAQ) بله

به سوال‌های پرتکرار مشتری‌ها (ساعت کاری، قیمت، آدرس) به‌صورت خودکار و با کیبورد دکمه‌ای پاسخ می‌دهد. سوال‌ها را در یک دیکشنری عوض می‌کنی، تمام.

طراحی و کدنویسی: به‌روزرسانی: زبان: Python 3حجم کد: حدود ۱۲۰ خطمجوز: آزاد (CC0)

پاسخ کوتاه

ربات پاسخ‌گوی خودکار بله یک اسکریپت پایتون است که فهرست سوال‌های پرتکرار را در یک دیکشنری نگه می‌دارد، آن‌ها را به‌شکل کیبورد دکمه‌ای (reply keyboard) به کاربر نشان می‌دهد و با تطبیق دقیق یا جزئی متن، پاسخ آماده می‌فرستد. برای شخصی‌سازی فقط دیکشنری FAQ عوض می‌شود.

ربات پاسخ‌گوی خودکار بله چه کاری انجام می‌دهد؟

به‌جای این‌که هر روز ده بار به «ساعت کاری‌تون چنده؟» جواب بدهید، ربات یک کیبورد با سوال‌های پرتکرار به مشتری نشان می‌دهد و با زدن هر دکمه، جواب آماده می‌فرستد. اگر مشتری سوال را تایپ کند هم ربات با جست‌وجوی کلمهٔ کلیدی جواب درست را پیدا می‌کند. مناسب فروشگاه، مطب، آموزشگاه و هر کسب‌وکاری که پشتیبانی تکراری دارد.

زبان: پایتون ۳
وابستگی: فقط requests
اجرا: long polling (بدون دامنه و SSL)
هزینه: رایگان

آموزش راه‌اندازی ربات پاسخ‌گوی خودکار سوالات بله در ۵ قدم

این مراحل را به‌ترتیب انجام بده تا ربات روی سیستم خودت یا سرور بالا بیاید. زمان تقریبی: ۱۵ دقیقه.

از BotFather در بله توکن ربات را بگیر.
پایتون را نصب کن و pip install requests را اجرا کن.
فایل bot.py را باز کن و مقدار TOKEN را جایگزین کن.
دیکشنری FAQ و KEYBOARD را با سوال‌ها و جواب‌های کسب‌وکار خودت پر کن.
python bot.py را اجرا کن و در بله دکمه‌ها را امتحان کن.

کل سورس ربات پاسخ‌گوی خودکار سوالات بله (کپی یا دانلود کن)

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

bot.py
# -*- coding: utf-8 -*-
# ------------------------------------------------------------
#  ربات پاسخ‌گوی خودکار سوالات پرتکرار (FAQ) بله
#  طراحی و کدنویسی: سروش مقدمی — فیلتور (filtori.com)
# ------------------------------------------------------------
#  این ربات برای کسب‌وکارهاست: به‌جای اینکه خودت مدام جواب
#  سوال‌های تکراری مشتری‌ها رو بدی، ربات جواب آماده می‌فرسته.
#   - یک کیبورد با دکمه‌های سوال‌های پرتکرار نشون می‌ده
#   - روی هر کلمهٔ کلیدی که تنظیم کنی، جواب آماده می‌فرسته
#
#  آموزش کامل:
#     https://filtori.com/bale-bot-source/faq-bot/
#  نسخهٔ اختصاصی برای کسب‌وکارت می‌خوای؟  09122874862
#  تلگرام ما: https://t.me/filtori
# ------------------------------------------------------------

import time
import requests

# توکن ربات از @BotFather
TOKEN = "توکن_ربات_خودت_را_اینجا_بگذار"
BASE = f"https://tapi.bale.ai/bot{TOKEN}"

# ------------------------------------------------------------
#  اینجا سوال‌های پرتکرار و جواب‌هاشون رو تنظیم کن.
#  کلید = متن دکمه (و همون چیزی که کاربر می‌فرسته)
#  مقدار = جوابی که ربات می‌ده
#  کافیه این دیکشنری رو با اطلاعات کسب‌وکار خودت عوض کنی.
# ------------------------------------------------------------
FAQ = {
    "ساعت کاری": "ساعت کاری ما هر روز از ۹ صبح تا ۶ عصر است (به‌جز جمعه‌ها).",
    "قیمت‌ها": "برای دریافت لیست قیمت، لطفاً شمارهٔ تماس بگذارید تا کارشناس ما تماس بگیرد.",
    "آدرس": "آدرس دقیق و مسیر روی گوگل‌مپ در سایت ما موجود است: filtori.com",
    "پشتیبانی": "برای پشتیبانی می‌توانید همین‌جا سوال خود را بنویسید یا با ما تماس بگیرید.",
}

# متن دکمه‌هایی که پایین صفحه به کاربر نشون داده می‌شه
KEYBOARD = {
    "keyboard": [
        [{"text": "ساعت کاری"}, {"text": "قیمت‌ها"}],
        [{"text": "آدرس"}, {"text": "پشتیبانی"}],
    ],
    "resize_keyboard": True,
}


def send_message(chat_id, text, reply_markup=None):
    """ارسال پیام؛ در صورت نیاز همراه با کیبورد."""
    url = f"{BASE}/sendMessage"
    data = {"chat_id": chat_id, "text": text}
    if reply_markup is not None:
        data["reply_markup"] = reply_markup
    try:
        requests.post(url, json=data, timeout=15)
    except requests.RequestException as error:
        print("خطا در ارسال پیام:", error)


def get_updates(offset):
    """دریافت پیام‌های جدید با long polling."""
    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 answer(chat_id, text):
    """منطق اصلی: تصمیم می‌گیره چه جوابی بده."""
    if text == "/start":
        send_message(
            chat_id,
            "سلام 👋 من ربات پاسخ‌گوی خودکار هستم.\n"
            "یکی از دکمه‌های پایین رو بزن یا سوالت رو بنویس.",
            reply_markup=KEYBOARD,
        )
        return

    # اگر متن کاربر دقیقاً یکی از سوال‌های پرتکرار بود، جواب آماده بده
    if text in FAQ:
        send_message(chat_id, FAQ[text], reply_markup=KEYBOARD)
        return

    # اگر بخشی از کلمهٔ کلیدی داخل پیام کاربر بود هم جواب بده
    for keyword, reply in FAQ.items():
        if keyword in text:
            send_message(chat_id, reply, reply_markup=KEYBOARD)
            return

    # اگر هیچ‌کدوم نبود، پیام پیش‌فرض
    send_message(
        chat_id,
        "سوالت رو نفهمیدم 🤔 یکی از دکمه‌های پایین رو انتخاب کن،\n"
        "یا برای گفتگو با کارشناس با ما تماس بگیر.",
        reply_markup=KEYBOARD,
    )


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:
                answer(chat_id, text)

        time.sleep(0.5)  # رعایت محدودیت نرخ ارسال بله


if __name__ == "__main__":
    main()
کل سورس این ربات ↑ — همین حالا کپی یا دانلود کن

کد را خط‌به‌خط بفهم

کپی‌کردن کافی نیست؛ اگر بدانی هر بخش چرا آن‌جاست، می‌توانی ربات را برای کسب‌وکار خودت تغییر بدهی. مهم‌ترین قطعه‌های ربات پاسخ‌گوی خودکار سوالات بله:

۱دیکشنری FAQ: تنها جایی که باید دست بزنی

FAQ = {
    "ساعت کاری": "ساعت کاری ما ...",
    "قیمت‌ها": "...",
}

کلید = متن دکمه، مقدار = جواب. کل منطق ربات از روی همین دیکشنری کار می‌کند؛ سوال جدید یعنی یک خط جدید. اگر بیش از ۸ سوال داری، بهتر است آن‌ها را دسته‌بندی کنی تا کیبورد شلوغ نشود.

۲کیبورد دکمه‌ای (reply keyboard)

KEYBOARD = {"keyboard": [[{"text": "ساعت کاری"}, ...]], "resize_keyboard": True}

هر لیست داخلی یک ردیف دکمه است. resize_keyboard باعث می‌شود دکمه‌ها به اندازهٔ متن‌شان کوچک شوند و نصف صفحهٔ گوشی را نگیرند. این ساختار دقیقاً همان ReplyKeyboardMarkup تلگرام است.

۳فرستادن کیبورد همراه پیام

data["reply_markup"] = reply_markup

کیبورد یک فیلد اختیاری در sendMessage است. چون هر بار آن را دوباره می‌فرستیم، کاربر بعد از هر جواب هم دکمه‌ها را می‌بیند و گم نمی‌شود.

۴تطبیق دقیق، بعد تطبیق جزئی

if text in FAQ: ...
for keyword, reply in FAQ.items():
    if keyword in text: ...

اول چک می‌کنیم متن کاربر عیناً یکی از دکمه‌ها باشد (سریع و دقیق). اگر نبود، دنبال کلمهٔ کلیدی داخل جمله می‌گردیم تا «آدرستون کجاست؟» هم به جواب «آدرس» برسد. ترتیب مهم است: تطبیق دقیق باید اول باشد.

۵پیام پیش‌فرض: هیچ‌وقت سکوت نکن

send_message(chat_id, "سوالت رو نفهمیدم 🤔 ...", reply_markup=KEYBOARD)

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

۶ایدهٔ توسعه: حذف کیبورد

{"remove_keyboard": True}

اگر خواستی در مرحله‌ای کیبورد پاک شود (مثلاً وقتی از کاربر شماره می‌گیری)، همین شیء را به‌جای KEYBOARD بفرست. در ربات منوی کافه از همین ترفند استفاده شده.

🔁 همین کد روی تلگرام هم اجرا می‌شود: فقط BASE را به https://api.telegram.org/bot{TOKEN} تغییر بده. جدول تفاوت API بله و تلگرام را ببین.

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

چطور سوال و جواب‌ها را عوض کنم؟

در فایل bot.py دیکشنری FAQ را ویرایش کنید: کلید همان متن دکمه است و مقدار، جوابی که ربات می‌دهد. متن دکمه‌ها را در KEYBOARD هم به‌روز کنید. یا بدون کدنویسی از ربات‌ساز آنلاین خروجی بگیرید.

ربات فقط با دکمه کار می‌کند؟

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

می‌شود جواب سوال‌های ناشناخته را هوش مصنوعی بدهد؟

بله. در نسخهٔ اختصاصی، شاخهٔ «پیام پیش‌فرض» به یک مدل زبانی وصل می‌شود تا سوال‌های خارج از فهرست را هم با اطلاعات کسب‌وکار شما جواب بدهد. برای این کار با فیلتور تماس بگیرید.

برای فروشگاه یا شرکت خودم نسخهٔ کامل‌تر می‌خواهم؛ چه کنم؟

تیم فیلتور نسخهٔ اختصاصی با پنل مدیریت سوال‌ها، دیتابیس و اتصال به هوش مصنوعی می‌سازد؛ صفحهٔ سفارش ربات بله را ببینید یا با ۰۹۱۲۲۸۷۴۸۶۲ تماس بگیرید.

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

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

راه‌اندازی این ربات برایت سخت شد؟

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