سلام
توی این قسمت میخوایم در مورد نحوه ارتباط با کاربر در بازوی بله صحبت کنیم.
خب شما موفق شدین در قسمت قبل بازوی خودتون رو بسازید و به سرور بله متصل بشید.
الان وقتشه با بازوی خودتون ارتباط برقرار کنین و پیام های مورد نظرتون مثل :
رو هم براش بفرستید و هم ازش بگیرید.
در مورد اینکه چگونه بازو نسبت به این پیام ها حساسیت نشون میده و گوش میده به حرف های شما هم بحث خواهیم کرد.
در مثال اول فرض کنید میخوایم بازو هر چیزی رو که براش میفرستیم و رو صرفا برامون بازگو یا echo کنه.
چیکار کنیم؟
بازوی بله میتونه برای هر پیامی که دریافت میکنه، قسمت پردازشی متفاوتی داشته باشه، مثلا فرض کنین یه بازوی هوشمند دارید که بهش میگید برو سوسیس تخمرغ درست کن و اونم بعد از آماده شدن صداتون میکنه که بیا بزن بر بدن! ( آرزو بر جوانان عیب نیست).
بازوی بالا همیشه در حال شنیدن حرف های شما هست و اگر در قبال حرفی که میزنید، رفتاری رو در نظر داشته باشه، شروع به انجام کار میکنه.
بازوی بله هم چنین چیزی هست. اول که بهش میگید سلام! میتونه جواب سلام شما رو بده!
بهش بگید گزارش فلان روز رو بهم بده، در صورتی که از قبل نسبت به شنیدن این فرمان برنامه ریزی شده باشه، گزارش رو در قالب یک سند براتون ارسال میکنه.
اگر بهش بگید قیمت همه اجناس داخل سبد خرید رو جمع بزن و کد تخفیف رو بگیر و نسبت به خرید های مشتری و تعداد خرید های موفقی که داشته و درجه رطوبت هوا و بقیه عوامل، درخواست پول بفرست، همه این کار ها رو میکنه و براتون درخواست پول رو میفرسته! اگر پرداختتون صحیح بود بقیه کارهایی که بهش فکر میکنید رو براتون انجام میده! دیدم که میگم! :)
خب الان فهمیدیم که باید برای هر دستور، فرمان، درخواست، بیگاری، تقاضا و... هر چیزی باید برنامه ریزی بشه تا بتونه از شما فرمانبری کنه. پس اگر بازوی حرف گوش کنی میخواید باید اول خوب تربیتش کنین و ازش انتظار بی جا نداشته باشین.
برای اینکه بازو نسبت به یک پیام حساس بشه و در قبال شنیدن چنین پیامی کار یا مجموعه ای از کار ها رو انجام بده باید از handler ها استفاده کنیم.
نکته : الان خیلی به معماری بله کاری نداریم. فعلا کار شما رو برای راه اندازی یک فروشگاه دم دست راه میندازیم ان شاءالله و اگر دوست داشتین میتونیم در قسمت های اخر به معماری داخلی هم بپردازیم.
توی کدی که توی پست قبلی گذاشتم شما یک dispatcher دارید. این دیسپچر پیام ها رو میگیره اگر متناسب با پیام تابعی رو نوشته باشید کار رو شروع میکنه و پیام بعدی رو میگیره و.... یه جورایی گوش بازو هست. که میتونید برای هر پیامی کاری مشخص انجام بدین!
خب اولین مثالش رو اینجوری بالا گفتیم که هر چی بشنوه رو تکرار یا بازگو یا echo کنه:
dispatcher = updater.dispatcher
که ایشون از updater پیام ها رو میگیره.
میتونه روی هر پیام هندلری رو پیاده سازی کنه.
مثلا میخوایم بهش بگیم آقا هر چی شنیدی همونو بگو. برای این کار میتونیم یک message_handler بهش اضافه کنیم. علاوه بر این میتونید command_handler هم بهش اضافه کنین که در ادامه بهش میپردازیم.
یه نکته کوچیک که بعدا بازش میکنم ان شاءالله: message های مختلفی توی بله داریم. مثل متن و عکس و سند و درخواست پول و موقعیت و ... که میتونیم برای هر کدوم هندلرش رو بزاریم و باهاشون کار کنیم.
خب حالا بهش میگیم هر چی شنیدی، تابع پایینی رو اجرا کنه و اطلاعاتت رو بهش بفرست :
@dispatcher.message_handler(filters=DefaultFilter()) def echo(bot, update): message = TextMessage('*Hello*') # Send a message to client bot.reply(update, message, success_callback=success, failure_callback=failure)
خب در بالا فیلترش رو روی پیش فرض گذاشتیم. به صورتی که اگر هندلری برای پیام نداشت، از این هندلر استفاده میکنه.
توابعی که بعد از دیسپچر هست دوتا ورودی bot و update میگیرن که حاوی کلی اطلاعات هست که بعدا خیلی باهاش کار داریم ان شاءالله.
با این کار هر چیزی که به بازو بفرستید این تابع echo روش اجرا میشه.
نمونه های دیگه ای از هندلر ها رو میتونید در لینک های زیر ببینید :
@dispatcher.command_handler("start") def handle_start(bot, update): """ Some Code here """
که در صورتی که دستور start/ رو بزنین کاری رو که در تابع handle_start رو انجام میده.
یه مثال دیگه از کامند هندلر:
@dispatcher.command_handler(["/Register"])
اینم یه نمونه پیشرفته از هندلر هاست که وقتی انواع پیام رو بهتون بگم میتونید ازشون استفاده کنین و منو برای هر مرحله بزارید.
@dispatcher.message_handler(filters=TemplateResponseFilter(keywords="Newrequest"))
خب در این قسمت فهمیدیم چجوری برای بازو گوش درست کنیم که به حرفمون گوش بده.
سوالی بود در خدمتم.
ان شاءالله در مرحله بعد و پست بعدی با هم نحوه ایجاد یک گفتگو رو خواهیم داشت که چجوری بازو سلسله ای پیام ها رو گوش بده و کاری رو برامون انجام بده.
اینم کد کلی برای اجرا: لینک
"""Simple Bot to Reply to Bale messages.""" import asyncio from balebot.filters import DefaultFilter from balebot.models.messages import TextMessage from balebot.updater import Updater # Bale Bot Authorization Token updater = Updater(token="PUT YOUR TOKEN HERE", loop=asyncio.get_event_loop()) # Define dispatcher dispatcher = updater.dispatcher # Both of success and failure functions are optional def success(response, user_data): print("success : ", response) print(user_data) def failure(response, user_data): print("failure : ", response) print(user_data) @dispatcher.message_handler(filters=DefaultFilter()) def echo(bot, update): message = TextMessage('*Hello*') # Send a message to client bot.reply(update, message, success_callback=success, failure_callback=failure) # Run the bot! updater.run()