قدم به قدم چت بات کرونا؛ چه شد که باتر؟

خروجی نهایی چت بات کرونایی

حدودا 2 سال پیش، نیاز داشتم یک چت بات تلگرام درست کنم تا توی یک پروژه کمکم کنه و برای ساختش PHP رو انتخاب کردم. من اغلب دوست دارم در یک چهارچوب مشخص کد بزنم و حالا یا از یک کتابخونه/فریم ورک آماده کمک بگیرم تا نظم توسعه رو ببینم.

به همین دلیل در اولین قدم در گیت هاب برای یه فریم ورک یا کتابخونه ساخت ربات تلگرام جستجو کردم و یک سری نتایج رسیدم که قانعم نکرد؛ رویکرد این کتابخونه ها اغلب به شیوه یک رپر (Wrapper) برای متد های تلگرام بود و این نیاز من نبود.

تصمیم گرفتم یک کتابخونه کوچیک با امکاناتی که نیاز دارم در کوتاه ترین زمان درست کنم؛ بعد مدتی تصمیم گرفتم تا یه خورده سر و سامون بدم به این کتابخونه و به صورت اپن سورس در گیت هاب منتشر کنم و این شد که باتر!

شروع کنیم؛ چت بات کرونایی

تو این پست میخوایم قدم به قدم یک ربات تلگرام درست کنیم که آمار کرونا کشور های مختلف رو در اختیارمون بذاره. برای ساخت این ربات از باتر استفاده میکنیم و برای آمار هم از وب سرویس Covid API کمک میگیریم.

از مراحل راه اندازی اولیه باتر گذر میکنیم؛ مراحل کوتاهی هستش و میتونید از این لینک در 1 دقیقه یک ربات تلگرام رو به سرور / هاست خودتون و باتر وصل کنید.

اسکلت کرونا بات

طبق یک قاعده کلی، همه ربات ها باید یک دستور به اسم /start داشته باشند؛ پس ما هم این دستور رو پیاده سازی میکنیم و بهش یک کیبورد اضافه میکنیم که چت بات حرفه ای تری به نظر بیاد.

دستور /start برای چت بات کرونایی

بد نیست همین اول خروجی چت باتی که داریم میسازیم رو ببینیم:

خروجی چت بات کرونایی در اولین مرحله

خب به نظر همه چیز طبق برنامه پیش رفت. حالا باید دستور Statistic رو که به کیبورد در مرحله قبل تعریف کردیم رو به چت بات اضافه کنیم.

اضافه کردن بخش آمار

توی سناریویی که الان توی ذهن من میگذره، قراره وقتی کاربر روی دکمه Statistic کلیک کرد ما لیست کشور های درگیر کرونا جهان رو از وب سرویس مون بگیریم و بهش نشون بدیم و ازش درخواست کنیم تا کشور مد نظرش رو انتخاب کنه.

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

در باتر وقتی یک کانورسشن برای اولین بار شروع میشه، متد start از کلاس کانورسیشن مد نظر صدا زده میشه و مابقی فرآیند رو به عهده کلاس مکالمه ما میسپاره. پس این متد رو هم اینجا پیاده سازی میکنیم. در اولین قدم هدف این هستش که لیست از کشور های درگیر کرونا رو به صورت دکمه در چت بات در بیاره و به کاربر نشون بده و ازش بخواد که کشورش رو انتخاب کنه تا ما بتونیم آمار رو به کاربر نشون بدیم.

با تشکر از باتر، میتونیم کیبورد های چت باتمون رو به سادگی بسازیم و از متد withKeyboard باتر کمک بگیریم تا به پیام خروجی یک کیبورد بچسبونیم (توضیحات بیشتر در مورد کیبورد ها)

پیاده سازی دستور آمار ویروس کرونا / بخش اول

در اینجا همینطور که مشخصه لیستی از کشور های مختلف درگیر کرونا (از جمله ایران) رو به کاربر نشون میدیم و ازش میخوایم انتخاب کنه؛ سپس مرحله بعدی مکالمه رو متد showStatistic مشخص کردیم. پس نیازه که این متد رو هم پیاده سازی کنیم.

قبل از پیاده سازی مرحله بعد بهتره یک نگاه به خروجی کارمون هم داشته باشیم:

خروجی چت بات کرونایی تا به اینجا

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

پیاده سازی بخش دوم آمار کرونا

پیاده سازی چت بات کرونایی تقریبا به اتمام رسید. الان میتونیم خروجی چیزی که ساختیم رو ببینیم:

خروجی نهایی بخش آمار


تموم کنیم؛ چند کلمه

هدف این پست نمایش روند ساخت یک ربات ساده با کمک باتر بود؛ همون طور که دیدیم باتر بهمون کمک میکنه تا درگیر چیزای جزئی مثل پیاده سازی دستی مکالمات نشیم و یک نظم کلی به ساختار نوشتن چت بات بدیم. این پست صرفا Conversation های باتر رو به صورت اولیه و مقدماتی پوشش داد و سایر امکانات موجود در کانورسیشن و سایر موارد رو میتونید در Wiki پروژه در گیت هاب ببینید (هنوز پروژه کامل نشده و یک سری بخش ها بدون داکیومنت مونده؛ و داکیومنت هم نیاز به یک بازنویسی کلی داره در کل!)

این پروژه نیاز به یک سری بهبود داره تا تبدیل بشه به یک چت بات که بتونید به همه معرفی کنید. برای مثال نیازه که دائما به API ریکوئست نزنید و از یک سیستم کش استفاده کنید. در باتر دو نوع کش سرویس به صورت پیشفرض در اختیار شما قرار داره (FileSystem, Redis) و میتونید بدون درگیری با زیرساخت پیچیده تر، اطلاعاتتون رو کش کنید. در حد ما، همین مقدار به نظرم کافی بود.

سورس این پروژه با کمی تغییرات بیشتر و تکمیل تر در گیت هاب من قابل مشاهده و دانلود هستش:

wwCoronaBot: https://github.com/ffb255/wwCorona

Botter: https://github.com/ffb255/botter

و خروجی نیمه کامل ربات رو میتونید اینجا ببینید (فعلا فعاله!): @wwCoronaBot

نوشته قدم به قدم چت بات کرونا؛ چه شد که باتر؟ اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

پاسخی بگذارید