مطالعه موردی مهندسی
بات تلگرام English Boss
تلگرام جایی است که این مخاطب از قبل هست، و همین بزرگترین مانع این دسته را حذف میکند — متقاعدکردن کسی به نصب و برگشتن به یک اپلیکیشن دیگر. تمرین در گفتوگویی میرسد که بیصدایش نکردهاند.
مسئله تجاری
یک اپلیکیشن تمرین باید نصب شود، باز شود و بهیاد آورده شود. هرکدام از اینها نقطهای است که زبانآموز میرود. تحویل همان تمرین از یک پلتفرم چت هر سه را حذف میکند، اما مسئله را جابهجا میکند: یک بات باید آپدیتها را قابل اتکا مدیریت کند، وضعیت هر زبانآموز را نگه دارد و بدون یک رابط کاربری برای تکیهکردن ارسال زمانبندی کند.
آنچه تحویل دادم
- یک سرویس FastAPI که آپدیتهای تلگرام را روی یک وبهوک دریافت میکند نه با polling، تا تحویل push-محور و ارزان باشد.
- یک لایهی بات جدا با handler، کیبورد و محتوای پیام خودش، نگهداشتهشده جدا از بکاندی که وضعیت و زمانبندی را نگه میدارد.
- یک یکپارچهسازی OpenAI برای بخش ارزیابی و بازخورد، جداشده پشت ماژول خودش نه فراخوانیشده از داخل handlerها.
- یادآوریها و جلسههای کوتاه زمانبندیشده، که سازوکاری است که کل سیستم به آن وابسته است.
- یک تعریف کانتینر و فرایند، تا سرویس بهعنوان یک واحد دیپلوی شود نه بهعنوان اسکریپتی که کسی اجرایش میکند.
رویکرد فنی
- وبهوک بهجای polling. پولینگ پیوسته منابع میسوزاند تا کشف کند هیچ اتفاقی نیفتاده، و برای چیزی که بیشتر وقت بیکار است بد مقیاس میگیرد.
- لایهی بات تلگرام را میشناسد و بکاند زبانآموزان را. نگهداشتن این مرز همان چیزی است که اجازه میدهد بدون بازنویسی منطق تمرین یک پلتفرم دوم اضافه شود.
- یکپارچهسازی مدل در یک ماژول جدا شده تا تغییر ارائهدهنده یا مدل یک ویرایش محدود باشد نه تغییری در هر handler.
- محتوای پیام از منطق handler جدا شده، چون متن مدام عوض میشود و منطق نباید موقع عوضشدنش دست بخورد.
نتیجه و شواهد
تمرین، یادآوری و بازخورد داخل تلگرام از طریق یک سرویس وبهوک تحویل میشوند، با لایهی پلتفرم، لایهی وضعیت و یکپارچهسازی مدل که جدا نگه داشته شدهاند.
اهمیت برای کارفرما
دیدن زبانآموزان در اپلیکیشنی که از قبل استفاده میکنند از هر فیچری که یک اپلیکیشن مستقل میتوانست ارائه دهد ارزشمندتر است، چون سختترین قدم قیف را حذف میکند.
خلاصه اجرایی خوانا
خلاصه_اجرایی {
پروژه: "English Boss Telegram Bot"
پشته: "Python، FastAPI، Telegram Bot API، OpenAI"
تحویل: "وبهوک، نه polling"
لایهها: "بات (handler/کیبورد/پیام) | بکاند
(وضعیت، زمانبندی) | یکپارچهسازی مدل"
جداسازی: "فراخوانهای OpenAI در یک ماژول، نه در handlerها"
متن: "محتوای پیام جدا از منطق handler"
دیپلوی: "کانتینری با یک تعریف فرایند"
}ارزش حرفهای این پروژه
لایهبندی همان چیزی است که دوست دارم بازبینی شود: جزئیات تلگرام، وضعیت زبانآموز و فراخوانهای مدل سه دغدغهی جدا هستند، و جدا نگهداشتنشان همان چیزی است که این را قابل گسترش میکند.
انتخاب یک پلتفرم چت بهجای یک اپلیکیشن مستقل یک تصمیم توزیع بود نه فنی، و توزیع معمولاً محدودیتی است که واقعاً اهمیت دارد.