forked from hesabix/arc
52 KiB
Executable file
52 KiB
Executable file
سناریوی استفاده از هوش مصنوعی از طریق کانال تلگرام
📋 خلاصه اجرایی
این سند یک سناریو جامع برای یکپارچهسازی سیستم چت هوش مصنوعی با تلگرام ارائه میدهد. این یکپارچهسازی امکان استفاده از دستیار AI را از طریق تلگرام برای کاربران فراهم میکند و کاربردهای متنوعی در سطوح مختلف سیستم دارد.
🎯 اهداف و مزایا
اهداف اصلی:
- دسترسی آسان: امکان استفاده از AI بدون نیاز به باز کردن اپلیکیشن
- پاسخ سریع: دسترسی فوری به اطلاعات کسبوکار از طریق تلگرام
- پشتیبانی هوشمند: استفاده از AI برای پاسخ به تیکتهای پشتیبانی
- کاربری بهتر: تجربه کاربری یکپارچه در تمام کانالهای ارتباطی
مزایا:
- ✅ دسترسی 24/7 به دستیار AI
- ✅ استفاده از تلگرام به عنوان رابط کاربری
- ✅ یکپارچهسازی با سیستم موجود
- ✅ پشتیبانی از چندین کسبوکار
- ✅ امنیت و احراز هویت
🏗️ معماری پیشنهادی
1. جریان کلی ارتباط
کاربر تلگرام → Telegram Bot → Webhook → AI Service → Function Registry → Database
↓
Telegram Provider → پاسخ به کاربر
2. کامپوننتهای اصلی
2.1. Telegram Webhook Handler
- مسیر:
/api/v1/integrations/telegram/webhook/{secret} - وظیفه: دریافت پیامهای تلگرام و هدایت به AI Service
- امنیت: بررسی secret token و احراز هویت کاربر
2.2. Telegram AI Chat Service
- وظیفه: مدیریت جلسات چت AI از طریق تلگرام
- ویژگیها:
- ایجاد/مدیریت جلسات چت
- تبدیل پیامهای تلگرام به فرمت AI
- تبدیل پاسخهای AI به پیامهای تلگرام
- مدیریت context و تاریخچه
2.3. Session Management
- جلسات تلگرام: هر کاربر میتواند چندین جلسه چت داشته باشد
- ارتباط با جلسات وب: جلسات تلگرام میتوانند با جلسات وب یکپارچه شوند
- مدیریت Context: حفظ تاریخچه گفتوگو برای هر جلسه
📱 سناریوهای استفاده
سناریو 1: منوی اصلی و شروع کار
1.1. شروع کار با ربات
کاربر: /start [token]
ربات: "✅ اتصال تلگرام شما با موفقیت برقرار شد.
👋 خوش آمدید! من دستیار هوش مصنوعی شما هستم.
[دکمه: منوی اصلی]
1.2. منوی اصلی (بر اساس دسترسی کاربر)
برای کاربر عادی:
ربات: "منوی اصلی:
[دکمه: 💬 گفتوگو با AI]
[دکمه: 📊 گزارشهای سریع]
[دکمه: 🔍 جستجو]
[دکمه: 📋 جلسات من]
[دکمه: ⚙️ تنظیمات]
برای اپراتور پشتیبانی:
ربات: "منوی اصلی:
[دکمه: 💬 گفتوگو با AI]
[دکمه: 🎫 تیکتهای پشتیبانی] ← فقط برای اپراتورها
[دکمه: 📊 گزارشهای سریع]
[دکمه: 🔍 جستجو]
[دکمه: 📋 جلسات من]
[دکمه: ⚙️ تنظیمات]
برای مدیر سیستم (SuperAdmin):
ربات: "منوی اصلی:
[دکمه: 💬 گفتوگو با AI]
[دکمه: 🎫 تیکتهای پشتیبانی]
[دکمه: 👥 مدیریت سیستم] ← فقط برای SuperAdmin
[دکمه: 📊 گزارشهای سریع]
[دکمه: 🔍 جستجو]
[دکمه: 📋 جلسات من]
[دکمه: ⚙️ تنظیمات]
سناریو 2: گفتوگو با AI
2.1. شروع گفتوگوی جدید
کاربر: [فشار دادن دکمه: 💬 گفتوگو با AI]
ربات: "لطفاً کسبوکار خود را انتخاب کنید:"
[دکمه: 🏢 کسبوکار 1]
[دکمه: 🏢 کسبوکار 2]
[دکمه: ➕ ایجاد گفتوگوی جدید]
[دکمه: ⬅️ بازگشت]
2.2. انتخاب کسبوکار
کاربر: [فشار دادن دکمه: 🏢 کسبوکار 1]
ربات: "✅ گفتوگو با کسبوکار [نام] شروع شد.
چه کمکی میتونم بکنم؟
[دکمه: 📊 گزارش مالی]
[دکمه: 🔍 جستجوی محصول]
[دکمه: 📦 لیست فاکتورها]
[دکمه: 💬 سوال بپرس]
[دکمه: ⬅️ بازگشت]
2.3. پرسش از AI
کاربر: [فشار دادن دکمه: 💬 سوال بپرس]
ربات: "لطفاً سوال خود را بنویسید:"
کاربر: "چند فاکتور فروش در این ماه داشتم؟"
ربات: [در حال پردازش...]
[AI با استفاده از function search_invoices پاسخ میدهد]
"در این ماه شما [عدد] فاکتور فروش داشتهاید.
مجموع مبلغ: [مبلغ]
[دکمه: 📋 جزئیات بیشتر]
[دکمه: 💬 سوال دیگر]
[دکمه: ⬅️ بازگشت]"
2.4. جلسات قبلی
کاربر: [فشار دادن دکمه: 📋 جلسات من]
ربات: "جلسات فعال شما:
1️⃣ گفتوگوی مالی - 2 ساعت پیش
2️⃣ سوالات محصولات - 1 روز پیش
3️⃣ گزارش فروش - 3 روز پیش
[دکمه: 1️⃣] [دکمه: 2️⃣] [دکمه: 3️⃣]
[دکمه: ➕ گفتوگوی جدید]
[دکمه: ⬅️ بازگشت]"
سناریو 3: تیکتهای پشتیبانی (فقط برای اپراتورها)
3.1. منوی تیکتها
اپراتور: [فشار دادن دکمه: 🎫 تیکتهای پشتیبانی]
ربات: "تیکتهای باز:
🔴 #123 - مشکل در ورود - اولویت: بالا
🟡 #124 - سوال درباره فاکتور - اولویت: متوسط
🟢 #125 - درخواست گزارش - اولویت: پایین
[دکمه: 🔴 #123] [دکمه: 🟡 #124] [دکمه: 🟢 #125]
[دکمه: 🔄 بهروزرسانی]
[دکمه: ⬅️ بازگشت]"
3.2. مشاهده تیکت
اپراتور: [فشار دادن دکمه: 🔴 #123]
ربات: "تیکت #123:
👤 کاربر: [نام کاربر]
📌 موضوع: مشکل در ورود
⚠️ اولویت: بالا
📅 تاریخ: [تاریخ]
📝 توضیحات:
[متن تیکت]
[دکمه: 🤖 پیشنهاد پاسخ AI]
[دکمه: ✉️ پاسخ خودکار AI]
[دکمه: ✍️ پاسخ دستی]
[دکمه: 📋 تاریخچه]
[دکمه: ⬅️ بازگشت]"
3.3. پیشنهاد پاسخ AI
اپراتور: [فشار دادن دکمه: 🤖 پیشنهاد پاسخ AI]
ربات: "⏳ در حال دریافت پیشنهاد پاسخ AI...
✅ پیشنهاد پاسخ:
[پاسخ پیشنهادی AI]
[دکمه: ✅ استفاده از این پاسخ]
[دکمه: ✏️ ویرایش پاسخ]
[دکمه: 🔄 پیشنهاد جدید]
[دکمه: ❌ رد]
[دکمه: ⬅️ بازگشت]"
3.4. پاسخ خودکار
اپراتور: [فشار دادن دکمه: ✉️ پاسخ خودکار AI]
ربات: "⚠️ آیا مطمئن هستید که میخواهید پاسخ خودکار ارسال شود؟
[دکمه: ✅ بله، ارسال کن]
[دکمه: ❌ خیر، بازگشت]"
سناریو 4: گزارشهای سریع
4.1. منوی گزارشها
کاربر: [فشار دادن دکمه: 📊 گزارشهای سریع]
ربات: "گزارشهای در دسترس:
[دکمه: 📅 امروز]
[دکمه: 📆 این هفته]
[دکمه: 📆 این ماه]
[دکمه: 📆 این سال]
[دکمه: ⬅️ بازگشت]"
4.2. گزارش امروز
کاربر: [فشار دادن دکمه: 📅 امروز]
ربات: "📊 گزارش امروز:
💰 فروش: [مبلغ]
🛒 خرید: [مبلغ]
📦 موجودی: [تعداد محصول]
👥 مشتریان: [تعداد]
[دکمه: 📋 جزئیات بیشتر]
[دکمه: 📤 ارسال گزارش]
[دکمه: ⬅️ بازگشت]"
سناریو 5: جستجو
5.1. منوی جستجو
کاربر: [فشار دادن دکمه: 🔍 جستجو]
ربات: "جستجو در:
[دکمه: 📦 محصولات]
[دکمه: 📄 فاکتورها]
[دکمه: 👤 مشتریان]
[دکمه: 📋 اسناد]
[دکمه: ⬅️ بازگشت]"
5.2. جستجوی محصول
کاربر: [فشار دادن دکمه: 📦 محصولات]
ربات: "لطفاً نام یا کد محصول را وارد کنید:"
کاربر: "کالای X"
ربات: "🔍 نتایج جستجو:
1️⃣ [نام محصول] - کد: [کد] - موجودی: [تعداد]
2️⃣ [نام محصول] - کد: [کد] - موجودی: [تعداد]
[دکمه: 1️⃣] [دکمه: 2️⃣]
[دکمه: 🔄 جستجوی جدید]
[دکمه: ⬅️ بازگشت]"
سناریو 6: مدیریت سیستم (فقط برای SuperAdmin)
6.1. منوی مدیریت
SuperAdmin: [فشار دادن دکمه: 👥 مدیریت سیستم]
ربات: "مدیریت سیستم:
[دکمه: 📊 آمار سیستم]
[دکمه: 👥 مدیریت کاربران]
[دکمه: 🏢 مدیریت کسبوکارها]
[دکمه: ⚙️ تنظیمات سیستم]
[دکمه: 📈 گزارش استفاده AI]
[دکمه: ⬅️ بازگشت]"
6.2. آمار سیستم
SuperAdmin: [فشار دادن دکمه: 📊 آمار سیستم]
ربات: "📊 آمار سیستم:
👥 کاربران فعال: [عدد]
🎫 تیکتهای باز: [عدد]
🤖 استفاده AI: [تعداد توکن]
💰 درآمد: [مبلغ]
[دکمه: 📈 گزارش تفصیلی]
[دکمه: ⬅️ بازگشت]"
سناریو 7: اعلانها و هشدارها
7.1. هشدار موجودی کم
سیستم: [هشدار: موجودی کم]
ربات: "⚠️ هشدار: موجودی محصول [نام] به زیر حد مجاز رسید.
📦 موجودی فعلی: [تعداد]
⚠️ حد مجاز: [تعداد]
[دکمه: 📦 مشاهده محصول]
[دکمه: 🛒 سفارش]
[دکمه: ❌ بستن]"
7.2. تیکت جدید برای اپراتور
سیستم: [تیکت جدید]
ربات: "🔔 تیکت جدید دریافت شد:
#123 - [موضوع]
👤 کاربر: [نام]
⚠️ اولویت: [اولویت]
[دکمه: 👁️ مشاهده تیکت]
[دکمه: 🤖 پاسخ خودکار]
[دکمه: ❌ بستن]"
🔐 امنیت و احراز هویت
1. احراز هویت کاربر
- لینک اکانت: کاربر باید ابتدا اکانت خود را به تلگرام لینک کند
- بررسی chat_id: هر پیام و callback query با
chat_idکاربر مرتبط میشود - اعتبارسنجی: بررسی اینکه کاربر در سیستم وجود دارد و فعال است
- اعتبارسنجی callback: هر callback query قبل از پردازش اعتبارسنجی میشود
2. دسترسیها و نمایش دکمهها
2.1. بررسی دسترسی قبل از نمایش دکمهها
# منوی اصلی - فقط دکمههای مجاز نمایش داده میشوند
if user_context.can_access_support_operator():
# نمایش دکمه تیکتها
pass
if user_context.is_superadmin():
# نمایش دکمه مدیریت سیستم
pass
2.2. بررسی دسترسی در Callback Query
# قبل از پردازش callback query
if callback_data.startswith("ticket:") and not user_context.can_access_support_operator():
# رد درخواست
return error_response("دسترسی ندارید")
if callback_data.startswith("admin:") and not user_context.is_superadmin():
# رد درخواست
return error_response("دسترسی ندارید")
2.3. نقشهای کاربری و دکمههای مجاز
کاربر عادی:
- ✅ گفتوگو با AI
- ✅ گزارشهای سریع
- ✅ جستجو
- ✅ جلسات
- ❌ تیکتهای پشتیبانی
- ❌ مدیریت سیستم
اپراتور پشتیبانی:
- ✅ گفتوگو با AI
- ✅ تیکتهای پشتیبانی
- ✅ گزارشهای سریع
- ✅ جستجو
- ✅ جلسات
- ❌ مدیریت سیستم
SuperAdmin:
- ✅ گفتوگو با AI
- ✅ تیکتهای پشتیبانی
- ✅ مدیریت سیستم
- ✅ گزارشهای سریع
- ✅ جستجو
- ✅ جلسات
3. Business Context
- بررسی دسترسی کسبوکار: قبل از نمایش دکمههای کسبوکار، بررسی میشود که کاربر به آن دسترسی دارد
- فیلتر کسبوکارها: فقط کسبوکارهایی که کاربر دسترسی دارد نمایش داده میشوند
- اعتبارسنجی در callback: در callback query انتخاب کسبوکار، دوباره دسترسی بررسی میشود
4. محدودیتها
- Rate limiting: محدودیت تعداد درخواست در هر بازه زمانی
- Token quota: بررسی سهمیه استفاده از AI
- Session timeout: جلسات غیرفعال بعد از مدتی بسته میشوند
- Callback timeout: callback query ها بعد از مدت زمان مشخص منقضی میشوند
- Input validation: اعتبارسنجی تمام ورودیها قبل از پردازش
5. امنیت Callback Data
- عدم ذخیره اطلاعات حساس: callback_data فقط شامل شناسهها است
- رمزگذاری (اختیاری): برای اطلاعات حساس میتوان از رمزگذاری استفاده کرد
- اعتبارسنجی format: بررسی فرمت callback_data قبل از پردازش
- محدودیت طول: callback_data نباید از 64 بایت بیشتر باشد (محدودیت تلگرام)
📝 دستورات و دکمههای تلگرام
دستورات متنی (فقط برای شروع)
/start [token]- شروع کار با ربات و لینک اکانت/help- راهنمای استفاده/menu- نمایش منوی اصلی/unlink- قطع اتصال تلگرام
ساختار دکمهها (Inline Keyboards)
1. منوی اصلی (Main Menu)
دکمهها بر اساس نقش کاربر نمایش داده میشوند:
برای کاربر عادی:
[💬 گفتوگو با AI] [📊 گزارشهای سریع]
[🔍 جستجو] [📋 جلسات من]
[⚙️ تنظیمات]
برای اپراتور پشتیبانی:
[💬 گفتوگو با AI] [🎫 تیکتهای پشتیبانی]
[📊 گزارشهای سریع] [🔍 جستجو]
[📋 جلسات من] [⚙️ تنظیمات]
برای SuperAdmin:
[💬 گفتوگو با AI] [🎫 تیکتهای پشتیبانی]
[👥 مدیریت سیستم] [📊 گزارشهای سریع]
[🔍 جستجو] [📋 جلسات من]
[⚙️ تنظیمات]
2. منوی گفتوگو با AI
[🏢 کسبوکار 1] [🏢 کسبوکار 2]
[➕ گفتوگوی جدید] [⬅️ بازگشت]
3. منوی تیکتها (فقط برای اپراتورها)
[🔴 #123] [🟡 #124] [🟢 #125]
[🔄 بهروزرسانی] [⬅️ بازگشت]
4. منوی مدیریت سیستم (فقط برای SuperAdmin)
[📊 آمار سیستم] [👥 مدیریت کاربران]
[🏢 مدیریت کسبوکارها] [⚙️ تنظیمات سیستم]
[📈 گزارش استفاده AI] [⬅️ بازگشت]
Callback Query Format
دکمهها از callback_data استفاده میکنند:
menu:main → منوی اصلی
menu:chat → منوی گفتوگو
menu:reports → منوی گزارشها
menu:search → منوی جستجو
menu:sessions → منوی جلسات
menu:tickets → منوی تیکتها (اپراتور)
menu:admin → منوی مدیریت (SuperAdmin)
chat:business:{id} → انتخاب کسبوکار
chat:new → گفتوگوی جدید
chat:session:{id} → انتخاب جلسه
ticket:{id} → مشاهده تیکت
ticket:{id}:suggest_reply → پیشنهاد پاسخ AI
ticket:{id}:auto_reply → پاسخ خودکار AI
ticket:{id}:reply → پاسخ دستی
report:{period} → گزارش دوره
search:{type} → جستجو در نوع
admin:stats → آمار سیستم
admin:users → مدیریت کاربران
admin:businesses → مدیریت کسبوکارها
back:{menu} → بازگشت به منو
🔄 جریانهای کاری
جریان 1: گفتوگوی ساده با AI
1. کاربر: [فشار دادن دکمه: 💬 گفتوگو با AI]
2. سیستم:
- بررسی لینک بودن اکانت
- دریافت لیست کسبوکارهای کاربر
- ارسال منوی انتخاب کسبوکار با دکمهها
3. کاربر: [فشار دادن دکمه: 🏢 کسبوکار 1]
4. سیستم:
- ایجاد/انتخاب جلسه چت
- ارسال پیام خوشآمدگویی با دکمههای عملیات
5. کاربر: [فشار دادن دکمه: 💬 سوال بپرس]
6. کاربر: "چند فاکتور فروش داشتم؟"
7. سیستم:
- تبدیل پیام به فرمت AI
- ارسال به AI Service
- AI: استفاده از function search_invoices
- دریافت نتایج از دیتابیس
- تولید پاسخ توسط AI
8. سیستم: ارسال پاسخ با دکمههای عملیات
9. کاربر: دریافت پاسخ و دکمههای تعاملی
جریان 2: پاسخ به تیکت پشتیبانی
1. سیستم: دریافت تیکت جدید
2. سیستم:
- پیدا کردن اپراتورهای آنلاین
- بررسی دسترسی اپراتور (can_access_support_operator)
- ارسال اعلان با دکمههای عملیات
3. اپراتور: [فشار دادن دکمه: 🎫 تیکتهای پشتیبانی]
4. سیستم:
- بررسی دسترسی (فقط اپراتورها)
- دریافت لیست تیکتهای باز
- ارسال منوی تیکتها با دکمهها
5. اپراتور: [فشار دادن دکمه: 🔴 #123]
6. سیستم:
- دریافت جزئیات تیکت
- ارسال جزئیات با دکمههای عملیات
7. اپراتور: [فشار دادن دکمه: 🤖 پیشنهاد پاسخ AI]
8. سیستم:
- دریافت تیکت و تاریخچه
- ساخت context برای AI
- ارسال به AI Service
- دریافت پیشنهاد پاسخ
9. سیستم: ارسال پیشنهاد با دکمههای [✅ استفاده] [✏️ ویرایش] [❌ رد]
10. اپراتور: [فشار دادن دکمه: ✅ استفاده از این پاسخ]
11. سیستم:
- ذخیره پاسخ در تیکت
- ارسال ناتیفیکیشن به کاربر
- بهروزرسانی وضعیت تیکت
جریان 3: مدیریت جلسات
1. کاربر: [فشار دادن دکمه: 📋 جلسات من]
2. سیستم:
- دریافت جلسات از دیتابیس
- ساخت دکمهها برای هر جلسه
- ارسال لیست جلسات با دکمهها
3. کاربر: [فشار دادن دکمه: 1️⃣] (جلسه اول)
4. سیستم:
- بارگذاری تاریخچه جلسه
- ارسال آخرین پیامها
- ارسال دکمههای عملیات
5. کاربر: ادامه گفتوگو
جریان 4: دسترسی به منوی مدیریت (SuperAdmin)
1. SuperAdmin: [فشار دادن دکمه: 👥 مدیریت سیستم]
2. سیستم:
- بررسی is_superadmin()
- اگر دسترسی دارد: ارسال منوی مدیریت
- اگر دسترسی ندارد: پیام خطا
3. SuperAdmin: [فشار دادن دکمه: 📊 آمار سیستم]
4. سیستم:
- دریافت آمار از دیتابیس
- ارسال آمار با دکمههای عملیات
جریان 5: کاربر عادی بدون دسترسی اپراتور
1. کاربر عادی: [فشار دادن دکمه: منوی اصلی]
2. سیستم:
- بررسی can_access_support_operator() → False
- بررسی is_superadmin() → False
- ارسال منوی اصلی بدون دکمههای اپراتور و مدیریت
3. کاربر: فقط دکمههای عمومی را میبیند
- 💬 گفتوگو با AI
- 📊 گزارشهای سریع
- 🔍 جستجو
- 📋 جلسات من
- ⚙️ تنظیمات
🎨 ساختار دکمهها و مدیریت دسترسیها
1. ساختار کلی دکمهها
هر منو از یک آرایه دو بعدی دکمهها تشکیل شده است:
keyboard = {
"inline_keyboard": [
[{"text": "دکمه 1", "callback_data": "action:param"}],
[{"text": "دکمه 2", "callback_data": "action:param2"}],
[
{"text": "دکمه 3", "callback_data": "action:param3"},
{"text": "دکمه 4", "callback_data": "action:param4"}
]
]
}
2. ساختار Callback Data
فرمت کلی: {action}:{subaction}:{params}
مثالها:
menu:main- منوی اصلیchat:business:123- انتخاب کسبوکار با ID 123ticket:456:suggest_reply- پیشنهاد پاسخ برای تیکت 456admin:stats- آمار سیستمback:main- بازگشت به منوی اصلی
3. مدیریت دسترسیها در ساخت دکمهها
def build_main_menu(user_context: AuthContext) -> List[List[Dict]]:
"""ساخت منوی اصلی بر اساس دسترسی کاربر"""
buttons = []
# دکمههای عمومی (همه کاربران)
buttons.append([{
"text": "💬 گفتوگو با AI",
"callback_data": "menu:chat"
}])
# دکمه تیکتها (فقط اپراتورها)
if user_context.can_access_support_operator():
buttons.append([{
"text": "🎫 تیکتهای پشتیبانی",
"callback_data": "menu:tickets"
}])
# دکمه مدیریت (فقط SuperAdmin)
if user_context.is_superadmin():
buttons.append([{
"text": "👥 مدیریت سیستم",
"callback_data": "menu:admin"
}])
# دکمههای عمومی دیگر
buttons.append([
{"text": "📊 گزارشهای سریع", "callback_data": "menu:reports"},
{"text": "🔍 جستجو", "callback_data": "menu:search"}
])
buttons.append([{
"text": "📋 جلسات من",
"callback_data": "menu:sessions"
}])
buttons.append([{
"text": "⚙️ تنظیمات",
"callback_data": "menu:settings"
}])
return buttons
4. بررسی دسترسی در Callback Handler
async def handle_callback(callback_data: str, user_context: AuthContext):
"""پردازش callback با بررسی دسترسی"""
parts = callback_data.split(":")
# بررسی دسترسی برای تیکتها
if parts[0] == "ticket":
if not user_context.can_access_support_operator():
return await send_error("شما دسترسی به این بخش ندارید")
# بررسی دسترسی برای مدیریت
if parts[0] == "admin":
if not user_context.is_superadmin():
return await send_error("شما دسترسی به این بخش ندارید")
# بررسی دسترسی برای کسبوکار
if parts[0] == "chat" and parts[1] == "business":
business_id = int(parts[2])
if not user_context.has_business_access(business_id):
return await send_error("شما به این کسبوکار دسترسی ندارید")
# پردازش callback
await process_callback(callback_data, user_context)
5. بهروزرسانی دکمهها
برای بهروزرسانی دکمههای یک پیام:
await telegram_provider.edit_message_reply_markup(
chat_id=chat_id,
message_id=message_id,
reply_markup={"inline_keyboard": new_buttons}
)
6. محدودیتهای تلگرام
- حداکثر طول callback_data: 64 بایت
- حداکثر تعداد دکمه در ردیف: 3 دکمه (توصیه میشود)
- حداکثر تعداد ردیف: 10 ردیف
- حداکثر تعداد دکمه: 100 دکمه در کل
🗄️ ساختار دیتابیس
جدول جدید: telegram_ai_sessions
CREATE TABLE telegram_ai_sessions (
id SERIAL PRIMARY KEY,
user_id INTEGER NOT NULL REFERENCES users(id),
chat_id BIGINT NOT NULL,
session_id INTEGER REFERENCES ai_chat_sessions(id),
business_id INTEGER REFERENCES businesses(id),
is_active BOOLEAN DEFAULT TRUE,
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW(),
UNIQUE(user_id, chat_id, session_id)
);
استفاده از جداول موجود:
ai_chat_sessions- جلسات چت AIai_chat_messages- پیامهای چتusers- اطلاعات کاربران (telegram_chat_id)
🛠️ پیادهسازی فنی
1. Endpoint جدید
1.1. دریافت پیام و Callback Query از تلگرام
@router.post("/integrations/telegram/webhook/{secret}")
async def telegram_ai_webhook(
secret: str,
payload: Dict[str, Any] = Body(...),
db: Session = Depends(get_db),
):
# بررسی secret
# احراز هویت کاربر از chat_id
# بررسی نوع پیام
if "message" in payload:
# پردازش پیام متنی
await handle_message(payload["message"], db)
elif "callback_query" in payload:
# پردازش callback query (فشار دادن دکمه)
await handle_callback_query(payload["callback_query"], db)
return {"ok": True}
2. Service جدید: TelegramAIChatService
class TelegramAIChatService:
def __init__(self, db: Session, user_id: int, chat_id: int):
self.db = db
self.user_id = user_id
self.chat_id = chat_id
self.ai_service = AIService(db, user_context)
self.telegram_provider = TelegramProvider(...)
async def send_main_menu(self, user_context: AuthContext):
"""ارسال منوی اصلی بر اساس دسترسی کاربر"""
buttons = []
# دکمههای عمومی
buttons.append([{"text": "💬 گفتوگو با AI", "callback_data": "menu:chat"}])
buttons.append([{"text": "📊 گزارشهای سریع", "callback_data": "menu:reports"}])
buttons.append([{"text": "🔍 جستجو", "callback_data": "menu:search"}])
buttons.append([{"text": "📋 جلسات من", "callback_data": "menu:sessions"}])
# دکمههای اپراتور (فقط اگر دسترسی دارد)
if user_context.can_access_support_operator():
buttons.insert(1, [{"text": "🎫 تیکتهای پشتیبانی", "callback_data": "menu:tickets"}])
# دکمههای SuperAdmin (فقط اگر superadmin است)
if user_context.is_superadmin():
buttons.insert(1, [{"text": "👥 مدیریت سیستم", "callback_data": "menu:admin"}])
buttons.append([{"text": "⚙️ تنظیمات", "callback_data": "menu:settings"}])
keyboard = {"inline_keyboard": buttons}
await self.telegram_provider.send_message(
chat_id=self.chat_id,
text="منوی اصلی:",
reply_markup=keyboard
)
async def send_chat_menu(self, businesses: List[Business]):
"""ارسال منوی انتخاب کسبوکار"""
buttons = []
# دکمههای کسبوکارها (حداکثر 2 در هر ردیف)
for i in range(0, len(businesses), 2):
row = []
for j in range(2):
if i + j < len(businesses):
business = businesses[i + j]
row.append({
"text": f"🏢 {business.name}",
"callback_data": f"chat:business:{business.id}"
})
buttons.append(row)
buttons.append([{"text": "➕ گفتوگوی جدید", "callback_data": "chat:new"}])
buttons.append([{"text": "⬅️ بازگشت", "callback_data": "back:main"}])
keyboard = {"inline_keyboard": buttons}
await self.telegram_provider.send_message(
chat_id=self.chat_id,
text="لطفاً کسبوکار خود را انتخاب کنید:",
reply_markup=keyboard
)
async def send_tickets_menu(self, tickets: List[Ticket], user_context: AuthContext):
"""ارسال منوی تیکتها (فقط برای اپراتورها)"""
if not user_context.can_access_support_operator():
return # دسترسی ندارد
buttons = []
# دکمههای تیکتها (3 در هر ردیف)
for i in range(0, len(tickets), 3):
row = []
for j in range(3):
if i + j < len(tickets):
ticket = tickets[i + j]
priority_emoji = self._get_priority_emoji(ticket.priority)
row.append({
"text": f"{priority_emoji} #{ticket.id}",
"callback_data": f"ticket:{ticket.id}"
})
buttons.append(row)
buttons.append([{"text": "🔄 بهروزرسانی", "callback_data": "menu:tickets"}])
buttons.append([{"text": "⬅️ بازگشت", "callback_data": "back:main"}])
keyboard = {"inline_keyboard": buttons}
await self.telegram_provider.send_message(
chat_id=self.chat_id,
text="تیکتهای باز:",
reply_markup=keyboard
)
async def send_ticket_details(self, ticket: Ticket, user_context: AuthContext):
"""ارسال جزئیات تیکت با دکمههای عملیات"""
if not user_context.can_access_support_operator():
return
buttons = [
[{"text": "🤖 پیشنهاد پاسخ AI", "callback_data": f"ticket:{ticket.id}:suggest_reply"}],
[{"text": "✉️ پاسخ خودکار AI", "callback_data": f"ticket:{ticket.id}:auto_reply"}],
[{"text": "✍️ پاسخ دستی", "callback_data": f"ticket:{ticket.id}:reply"}],
[{"text": "📋 تاریخچه", "callback_data": f"ticket:{ticket.id}:history"}],
[{"text": "⬅️ بازگشت", "callback_data": "back:tickets"}]
]
keyboard = {"inline_keyboard": buttons}
text = f"""تیکت #{ticket.id}:
👤 کاربر: {ticket.user.name}
📌 موضوع: {ticket.title}
⚠️ اولویت: {ticket.priority}
📅 تاریخ: {ticket.created_at}
📝 توضیحات:
{ticket.description}"""
await self.telegram_provider.send_message(
chat_id=self.chat_id,
text=text,
reply_markup=keyboard
)
async def send_admin_menu(self, user_context: AuthContext):
"""ارسال منوی مدیریت (فقط برای SuperAdmin)"""
if not user_context.is_superadmin():
return
buttons = [
[{"text": "📊 آمار سیستم", "callback_data": "admin:stats"}],
[{"text": "👥 مدیریت کاربران", "callback_data": "admin:users"}],
[{"text": "🏢 مدیریت کسبوکارها", "callback_data": "admin:businesses"}],
[{"text": "⚙️ تنظیمات سیستم", "callback_data": "admin:settings"}],
[{"text": "📈 گزارش استفاده AI", "callback_data": "admin:ai_usage"}],
[{"text": "⬅️ بازگشت", "callback_data": "back:main"}]
]
keyboard = {"inline_keyboard": buttons}
await self.telegram_provider.send_message(
chat_id=self.chat_id,
text="مدیریت سیستم:",
reply_markup=keyboard
)
async def process_message(self, text: str, session_id: int) -> str:
"""پردازش پیام متنی و ارسال به AI"""
# ارسال به AI Service
response = await self.ai_service.chat_completion(...)
return response["message"]["content"]
async def process_callback_query(self, callback_data: str, user_context: AuthContext):
"""پردازش callback query از دکمهها"""
parts = callback_data.split(":")
if parts[0] == "menu":
await self._handle_menu(parts[1], user_context)
elif parts[0] == "chat":
await self._handle_chat(parts[1:], user_context)
elif parts[0] == "ticket":
await self._handle_ticket(parts[1:], user_context)
elif parts[0] == "admin":
await self._handle_admin(parts[1], user_context)
elif parts[0] == "back":
await self._handle_back(parts[1], user_context)
def _get_priority_emoji(self, priority: str) -> str:
"""تبدیل اولویت به emoji"""
priority_map = {
"high": "🔴",
"medium": "🟡",
"low": "🟢"
}
return priority_map.get(priority, "⚪")
3. Callback Query Handler
async def handle_callback_query(callback_query: Dict[str, Any], db: Session):
"""پردازش callback query از دکمهها"""
chat_id = callback_query["message"]["chat"]["id"]
callback_data = callback_query["data"]
query_id = callback_query["id"]
# پیدا کردن کاربر از chat_id
user = get_user_by_telegram_chat_id(db, chat_id)
if not user:
return
# ایجاد AuthContext
ctx = AuthContext(db=db, user=user)
# ایجاد service
service = TelegramAIChatService(db, user.id, chat_id)
# پردازش callback
await service.process_callback_query(callback_data, ctx)
# پاسخ به callback query (برای حذف loading)
await answer_callback_query(query_id)
4. Permission Checker
class TelegramPermissionChecker:
"""بررسی دسترسیها برای نمایش دکمهها"""
@staticmethod
def can_show_tickets_menu(user_context: AuthContext) -> bool:
"""بررسی دسترسی به منوی تیکتها"""
return user_context.can_access_support_operator()
@staticmethod
def can_show_admin_menu(user_context: AuthContext) -> bool:
"""بررسی دسترسی به منوی مدیریت"""
return user_context.is_superadmin()
@staticmethod
def can_show_business_menu(user_context: AuthContext, business_id: int) -> bool:
"""بررسی دسترسی به کسبوکار"""
# بررسی اینکه کاربر به این کسبوکار دسترسی دارد
return user_context.has_business_access(business_id)
📊 محدودیتها و ملاحظات
محدودیتهای تلگرام:
- طول پیام: حداکثر 4096 کاراکتر
- نرخ ارسال: محدودیت در ارسال پیامهای متوالی
- فرمت: پشتیبانی از Markdown و HTML
ملاحظات فنی:
- Timeout: مدیریت timeout برای درخواستهای AI
- Error handling: مدیریت خطاها و ارسال پیام مناسب
- Rate limiting: جلوگیری از سوء استفاده
- Context management: مدیریت context برای جلسات طولانی
امنیت:
- Secret token: بررسی secret در webhook
- User verification: تایید هویت کاربر
- Permission check: بررسی دسترسیها قبل از اجرای دستورات
- Input validation: اعتبارسنجی ورودیها
🚀 مراحل پیادهسازی
فاز 1: زیرساخت پایه
- ایجاد جدول
telegram_ai_sessions - پیادهسازی
TelegramAIChatService - ایجاد endpoint برای webhook
- پیادهسازی command parser
فاز 2: دکمهها و منوها
- پیادهسازی Inline Keyboard
- منوی اصلی با دکمههای role-based
- منوی گفتوگو با AI
- منوی جلسات
- مدیریت Callback Query
فاز 3: یکپارچهسازی AI
- اتصال به AI Service
- مدیریت context و تاریخچه
- پشتیبانی از function calling
- مدیریت streaming (تبدیل به پیامهای متوالی)
فاز 4: پشتیبانی
- منوی تیکتها (فقط برای اپراتورها)
- دکمه پیشنهاد پاسخ AI
- دکمه پاسخ خودکار AI
- اعلان تیکتهای جدید با دکمهها
- بررسی دسترسی قبل از نمایش دکمهها
فاز 5: ویژگیهای پیشرفته
- منوی گزارشها با دکمهها
- منوی جستجو با دکمهها
- هشدارها و اعلانها با دکمههای عملیات
- منوی مدیریت سیستم (فقط برای SuperAdmin)
- بررسی دسترسی برای هر دکمه
📈 معیارهای موفقیت
- سرعت پاسخ: پاسخها در کمتر از 5 ثانیه
- دقت: دقت پاسخهای AI بالای 90%
- رضایت کاربر: رضایت کاربران از تجربه استفاده
- استفاده: افزایش استفاده از AI از طریق تلگرام
🔮 آیندهنگری
این بخش شامل ویژگیها و بهبودهای پیشنهادی برای نسخههای آینده سیستم است.
1. ویژگیهای تعاملی پیشرفته
1.1. Voice Messages (پیامهای صوتی)
- تبدیل گفتار به متن: استفاده از Speech-to-Text API
- تبدیل متن به گفتار: پاسخهای AI به صورت صوتی
- پشتیبانی از زبان فارسی: تشخیص و تولید گفتار فارسی
- سناریو استفاده:
کاربر: [ارسال پیام صوتی] سیستم: تبدیل به متن → ارسال به AI → دریافت پاسخ → تبدیل به صوتی → ارسال
1.2. Rich Media (رسانههای غنی)
- ارسال تصاویر: تحلیل تصاویر فاکتورها، اسناد، محصولات
- ارسال فایلها: تحلیل فایلهای Excel، PDF، تصاویر
- استخراج اطلاعات: استخراج اطلاعات از تصاویر با OCR
- سناریو استفاده:
کاربر: [ارسال تصویر فاکتور] سیستم: تحلیل تصویر → استخراج اطلاعات → ذخیره در سیستم → پاسخ به کاربر
1.3. Inline Mode (جستجوی سریع)
- جستجو از هر چت: استفاده از
@botname queryدر هر چت تلگرام - نتایج فوری: نمایش نتایج بدون باز کردن ربات
- جستجو در: محصولات، فاکتورها، مشتریان
- سناریو استفاده:
کاربر در چت دیگر: @hesabix_bot محصول X ربات: نمایش نتایج جستجو به صورت inline
2. بهبودهای رابط کاربری
2.1. دکمههای پویا (Dynamic Buttons)
- تغییر بر اساس Context: دکمهها بر اساس وضعیت فعلی تغییر میکنند
- دکمههای هوشمند: پیشنهاد عملیات بعدی بر اساس تاریخچه
- مثال:
بعد از مشاهده فاکتور: [✅ تایید] [✏️ ویرایش] [📤 ارسال] [🗑️ حذف] بعد از تایید: [📤 ارسال] [📋 چاپ] [⬅️ بازگشت]
2.2. صفحهبندی (Pagination)
- لیستهای طولانی: برای تیکتها، فاکتورها، محصولات
- دکمههای ناوبری: [◀️ قبلی] [▶️ بعدی] [🔝 ابتدا] [🔚 انتها]
- نمایش اطلاعات: "صفحه 2 از 10"
- مثال:
تیکتها: [🔴 #123] [🟡 #124] [🟢 #125] [◀️ قبلی] [صفحه 1/5] [▶️ بعدی]
2.3. دکمههای فیلتر
- فیلتر سریع: فیلتر بر اساس تاریخ، نوع، وضعیت
- چند فیلتر همزمان: ترکیب چند فیلتر
- ذخیره فیلترها: ذخیره فیلترهای پرکاربرد
- مثال:
فیلتر تیکتها: [📅 امروز] [📅 این هفته] [📅 این ماه] [🔴 بالا] [🟡 متوسط] [🟢 پایین] [✅ باز] [❌ بسته] [⏳ در انتظار]
2.4. دکمههای پیشنهادی (Suggested Actions)
- پیشنهاد بر اساس تاریخچه: پیشنهاد عملیات بعدی
- یادگیری از رفتار کاربر: بهبود پیشنهادها با زمان
- مثال:
بعد از مشاهده محصول: [📦 موجودی] [💰 قیمت] [📊 فروش] [👤 مشتریان]
3. چندزبانهسازی (Multi-language)
3.1. پشتیبانی از زبانها
- زبانهای اولیه: فارسی، انگلیسی
- زبانهای آینده: عربی، ترکی
- انتخاب زبان: دکمه انتخاب زبان در تنظیمات
3.2. ترجمه خودکار
- ترجمه پاسخهای AI: ترجمه به زبان انتخابی کاربر
- ترجمه منوها: تمام منوها و دکمهها
- ذخیره ترجیحات: ذخیره زبان انتخابی کاربر
4. تحلیل و گزارشگیری (Analytics)
4.1. تحلیل استفاده
- آمار استفاده: تعداد پیامها، جلسات، استفاده از AI
- تحلیل رفتار: الگوهای استفاده کاربران
- گزارشهای تفصیلی: گزارشهای هفتگی و ماهانه
4.2. بهبود عملکرد
- بهینهسازی پاسخها: بهبود بر اساس بازخورد کاربران
- کاهش زمان پاسخ: بهینهسازی برای پاسخ سریعتر
- کاهش هزینه: بهینهسازی استفاده از توکنها
4.3. داشبورد مدیریتی
- داشبورد SuperAdmin: آمار کلی سیستم
- نمودارها: نمایش گرافیکی آمار
- هشدارها: هشدار برای مشکلات احتمالی
5. ویژگیهای امنیتی پیشرفته
5.1. احراز هویت دو مرحلهای
- 2FA: احراز هویت دو مرحلهای برای دسترسیهای حساس
- کد امنیتی: ارسال کد امنیتی برای عملیات مهم
- تایید عملیات: تایید عملیات حساس (حذف، تغییر تنظیمات)
5.2. لاگگیری پیشرفته
- لاگ تمام عملیات: ثبت تمام عملیات کاربران
- ردیابی تغییرات: ردیابی تغییرات در دادهها
- گزارشهای امنیتی: گزارش فعالیتهای مشکوک
5.3. محدودیتهای پیشرفته
- Rate limiting هوشمند: محدودیت بر اساس رفتار کاربر
- IP Whitelist: لیست سفید IP برای دسترسیهای حساس
- زمانبندی دسترسی: محدودیت دسترسی در ساعات خاص
6. یکپارچهسازی با سیستمهای دیگر
6.1. یکپارچهسازی با WhatsApp
- پشتیبانی از WhatsApp: استفاده از WhatsApp Business API
- همگامسازی: همگامسازی پیامها بین تلگرام و واتساپ
- انتخاب کانال: انتخاب کانال ارتباطی توسط کاربر
6.2. یکپارچهسازی با Email
- ارسال ایمیل از تلگرام: ارسال ایمیل از طریق ربات
- دریافت ایمیل: دریافت و پاسخ به ایمیلها
- همگامسازی: همگامسازی با سیستم ایمیل موجود
6.3. یکپارچهسازی با SMS
- ارسال SMS: ارسال SMS از طریق ربات
- دریافت SMS: دریافت و پردازش SMS
- اعلانها: ارسال اعلانها از طریق SMS
7. هوش مصنوعی پیشرفته
7.1. یادگیری از رفتار کاربر
- شخصیسازی: شخصیسازی پاسخها بر اساس رفتار کاربر
- پیشنهادهای هوشمند: پیشنهاد عملیات بر اساس تاریخچه
- بهبود مداوم: بهبود مداوم بر اساس بازخورد
7.2. پردازش زبان طبیعی پیشرفته
- درک بهتر: درک بهتر سوالات پیچیده
- پاسخهای دقیقتر: پاسخهای دقیقتر و مرتبطتر
- پشتیبانی از لهجهها: پشتیبانی از لهجههای مختلف فارسی
7.3. پیشبینی و پیشنهاد
- پیشبینی نیازها: پیشبینی نیازهای کاربر
- پیشنهاد عملیات: پیشنهاد عملیات مفید
- هشدارهای هوشمند: هشدار برای مشکلات احتمالی
8. ویژگیهای تعاملی
8.1. نظرسنجی و رایگیری
- نظرسنجی: ایجاد نظرسنجی برای کاربران
- رایگیری: رایگیری در مورد تصمیمات
- جمعآوری بازخورد: جمعآوری بازخورد از کاربران
8.2. بازیها و چالشها
- گیمیفیکیشن: اضافه کردن عناصر بازی
- چالشها: چالشهای آموزشی برای کاربران
- جوایز: سیستم پاداش برای استفاده
8.3. رباتهای کمکی
- رباتهای تخصصی: رباتهای تخصصی برای بخشهای مختلف
- دستیارهای مجازی: دستیارهای مجازی برای کارهای خاص
- اتوماسیون: اتوماسیون کارهای تکراری
9. بهبودهای عملکرد
9.1. بهینهسازی سرعت
- کشسازی: کشسازی پاسخهای متداول
- پردازش موازی: پردازش موازی درخواستها
- بهینهسازی کوئریها: بهینهسازی کوئریهای دیتابیس
9.2. مقیاسپذیری
- پشتیبانی از کاربران بیشتر: پشتیبانی از تعداد بیشتر کاربران
- توزیع بار: توزیع بار بین سرورها
- کلاسترینگ: کلاسترینگ برای دسترسی بالا
9.3. قابلیت اطمینان
- Backup خودکار: پشتیبانگیری خودکار
- Recovery: بازیابی سریع در صورت خطا
- Monitoring: مانیتورینگ مداوم سیستم
10. ویژگیهای تجاری
10.1. پرداخت از طریق تلگرام
- پرداخت درونبرنامهای: پرداخت از طریق Telegram Payments
- اشتراکها: مدیریت اشتراکها از طریق ربات
- صورتحساب: ارسال صورتحساب از طریق ربات
10.2. بازاریابی و تبلیغات
- ارسال کمپین: ارسال کمپینهای بازاریابی
- تبلیغات هدفمند: تبلیغات بر اساس علایق کاربر
- تحلیل کمپین: تحلیل عملکرد کمپینها
10.3. وفاداری مشتری
- برنامه وفاداری: برنامه وفاداری برای مشتریان
- امتیازدهی: سیستم امتیازدهی
- جوایز: جوایز برای مشتریان وفادار
11. دسترسیپذیری (Accessibility)
11.1. پشتیبانی از نابینایان
- Screen Reader: پشتیبانی از Screen Reader
- دستورات صوتی: دستورات صوتی برای نابینایان
- توضیحات صوتی: توضیحات صوتی برای دکمهها
11.2. پشتیبانی از ناشنوایان
- متن کامل: تمام اطلاعات به صورت متن
- زیرنویس: زیرنویس برای محتوای صوتی
- نشانههای بصری: نشانههای بصری برای اعلانها
12. مستندات و آموزش
12.1. راهنمای تعاملی
- آموزش گام به گام: آموزش گام به گام استفاده از ربات
- ویدیوهای آموزشی: ویدیوهای آموزشی در ربات
- FAQ تعاملی: FAQ تعاملی با AI
12.2. پشتیبانی زنده
- چت زنده: چت زنده با پشتیبانی
- ویدیو کال: ویدیو کال برای پشتیبانی
- اشتراک صفحه: اشتراک صفحه برای کمک
اولویتبندی پیادهسازی
فاز 1 (کوتاهمدت - 3-6 ماه):
- ✅ دکمههای صفحهبندی
- ✅ دکمههای فیلتر
- ✅ دکمههای پویا
- ✅ تحلیل استفاده پایه
فاز 2 (میانمدت - 6-12 ماه):
- ✅ Voice Messages
- ✅ Rich Media (تصاویر)
- ✅ چندزبانهسازی (فارسی/انگلیسی)
- ✅ Inline Mode
فاز 3 (بلندمدت - 12+ ماه):
- ✅ یکپارچهسازی با WhatsApp
- ✅ هوش مصنوعی پیشرفته
- ✅ ویژگیهای تجاری
- ✅ دسترسیپذیری کامل
📚 منابع و مراجع
- Telegram Bot API Documentation
- AI Chat Service Documentation
- Function Calling Analysis
- Streaming Implementation
تاریخ ایجاد: 2025-01-XX
نسخه: 1.0
نویسنده: AI Assistant