Amir Hossine
Amir Hossine
خواندن ۷ دقیقه·۶ سال پیش

راه اندازی یک بازو ( بات ) با قابلیت پرداخت در پیام رسان بله - قسمت چهارم

سلام دوباره

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

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


خب، بعد از انتخاب عسل باید یک درخواست پول با تصویر یک قهوه عسلی برای کاربر بفرستیم و قیمتش رو هم تعیین کنیم. پس دست به کار خواهیم شد:

خب، احتمالا درخواست پول های پیام رسان بله رو دیدین:

قهو عسلی
قهو عسلی

همون طور که میبینید، این پیام یک عکس وزین همراه با توضیحات و قیمت داره که در ادامه میخوایم همه رو اینا رو سر هم کنیم تا یه درخواست پول رو بسازیم:

purchase_message = PurchaseMessage(msg=photo_message, account_number="6037991889250159", amount=amount, money_request_type=normal)

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

اون متن توضیح ( قهوه عسلی) یک پیام متنی هست که در پیام تصویری باید بهش بدیم:

v_message = PhotoMessage(file_id=file_id, access_hash=access_hash, name="Bale", file_size=file_size, mime_type="image/jpeg", caption_text=TextMessage(text="قهوه عسلی"), file_storage_version=1, thumb=thumb)

برای ساخت پیام تصویری نیاز داریم یک عکس رو از روی سرور ها بله ادرس دهی کنیم تا برای کاربر ارسال بشه. برای اینکه اطلاعات یک عکس رو از سرور بله دریافت کنین یک عکس برای بات بفرستید و در لاگی که براتون میندازه میتونید تمامی اطلاعاتش رو ببینید:

"[transport] receiving : WSMessage(type=<WSMsgType.TEXT: 1>, data='{"$type":"FatSeqUpdate","seq":150,"body":{"$type":"Message","peer":{"$type":"User","id":463989315,"accessHash":"7224971076189921109"},"sender":{"$type":"User","id":463989315,"accessHash":"7224971076189921109"},"date":"1550752496695","randomId":"4257268464820720381","message":{"$type":"Document","fileId":"5774371186290462464","accessHash":"463989315","fileSize":"369438","name":"latte-xxlarge.jpg","mimeType":"image/jpeg","thumb":{"width":90,"height":56,"thumb":"/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA4KCw0LCQ4NDA0QDw4RFiQXFhQUFiwgIRokNC43NjMuMjI6QVNGOj1OPjIySGJJTlZYXV5dOEVmbWVabFNbXVn/2wBDAQ8QEBYTFioXFypZOzI7WVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVn/wAARCAA4AFoDASIAAhEBAxEB/8QAGgAAAgMBAQAAAAAAAAAAAAAABAUAAgMGAf/EADcQAAEDAgQDBQUGBwAAAAAAAAEAAgMEEQUSITETQVEGFDJh0SIjQoGxcXORk6HBJTRDUmJy8f/EABgBAAMBAQAAAAAAAAAAAAAAAAECAwAE/8QAHREAAwADAQEBAQAAAAAAAAAAAAECAxEhEjEiMv/aAAwDAQACEQMRAD8AfhwuraHQICOUm3REsebqI2ja4BsdbqwZfYBUHtPAF7lbZc+gNmDc9UyWwN6Mi5rTYAvPkP3QlVXS08rGCiLy7oCbJVifaCQyupsLaAG6GUj6JUW4hMc8lZMXH/MotzI84rrp1sNS2obZ0L4yN7ehRBjGQlpzNXI02I4nQvB4pnjG7X6rrMNrIcRg4sIyPGj2Hkt+a+AqKj6ZPYDrf5LBzOWYomqj4ZzAWaf0QT5Bmtf9VNmXSj4svxuv9qOivwme2fCOaXZy4nUBMYr8Jm3hHJBGYvheSfL7UdFm/wClK6cbWAt0IRkdyDfQFEwzhBs489kLj0j4cMEMJtJO7JfoOaKoGe7N98yzxuEvFO8C4Y5O35jYJW7SYoo8Op4YBGGku5usrR4dPM5zYmXDTum+GNaW+0OeqbMhY3wtFjquSJd9OqsvjhycmETMYXyNuBvY6he4Uzulc0t8L9CujrHiJpv0SmlhD3sJGxug9xSSCr9w9jGsjz07wN7XCQudYEkFbxdoIjWT0tTaMgkMcdig45C+Lc/iuzIjjgmfXd3zCPid7pmnwhLHOcGn2vndHwvdwY/aPhH0U0OwWN2XZw/EIpsmmw080MxwaSLgHzJKuJbHVwP4+qIBlh9R74seRZ226OrpIBEGSO8Rtouee9uUkOs47Wv6qlPL3q8cbjxB4sxu4qk6fGJW11DZokpH5hqw8+qLbiLcu2vkUpNTUUEdgwSs5scsT2jom341BK13lYhQeC5f4fCqyzX9IazvNY4ZR8lazaduQkGV3LoFz1R2te4cOgoxFf436kfJTDqlzA+oq5dd3OcU+PA0/VfRbyc8ye9qMPo2UDqlxLJrgMtzKTYNiTy/us+p+EqYtXPxmqGUOFPHowdfNXw+nkhN8rr9dFW2vgsp6GwsbjS6ZRRDhM28ISzMGeMub/sB6JlEW8FmrfCOQUkMwR1FWNbmbQTud5xOP7K7KWvyh3c5w7pwiFFE3kGz19LXOP8AK1Nvu3eiX1GG4jn4kVNWNeNQRE70UURSMbRVeMNGSswermH97IXX+itIzii5wnEmnp3V/oooqpiOUAyRVMV+74HiDz1dTuA+iXVGH45WO97h9a1g2YIHgfRRRZsKSCKfBsSZb+HVYH3bvRGxYdiDHX7lV/lO9FFFJrY+wp1LiDmWNFVfklMIqWrELAaWYENH9IqKIJG2f//Z"},"ext":{"$type":"Photo","width":1500,"height":938},"caption":{"$type":"Text","text":""},"checkSum":"checksum","algorithm":"algorithm","fileStorageVersion":1}},"users":[[463989315,{"id":463989315,"accessHash":"7224971076189921109","name":"Amirio","sex":1,"about":"موجیم که آسودگی ما عدم ماست...\\nDeveloper @ Bale","avatar":{"smallImage":{"fileLocation":{"fileId":"-2408282308550062334","accessHash":"463989315","fileStorageVersion":1},"width":100,"height":100,"fileSize":3480},"largeImage":{"fileLocation":{"fileId":"-8461560012386398719","accessHash":"463989315","fileStorageVersion":1},"width":200,"height":200,"fileSize":7942},"fullImage":{"fileLocation":{"fileId":"7223562696070663683","accessHash":"463989315","fileStorageVersion":1},"width":970,"height":970,"fileSize":117086}},"username":"Amirio","isBot":false,"contactRecords":[],"timeZone":"Asia/Tehran","preferredLanguages":["fa-IR","fa"],"botCommands":[]}]],"groups":[]}', extra='')"


حالا هر اطلاعاتی از قبیل

file_id

access_hash,

name,

file_size,

mime_type,

thumb

رو از قست Document که در قطعه لاگ بالا هست رو بردارید و پیام تصویری خودتون رو بسازید.

مثلا من یه عکس برای بازو فرستادم و این پیام رو از لاگ ها برداشتم و پیامم رو درست کردم.

p_message = PhotoMessage(file_id="5774371186290462464", access_hash="463989315", name="name", file_size="369438", mime_type="image/jpeg", caption_text=TextMessage( text="قهوه عسلی مخصوص عمو حسن با گوشت گوسفندی"), file_storage_version=1, thumb="/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA4KCw0LCQ4NDA0QDw4RFiQXFhQUFiwgIRokNC43NjMuMjI6QVNGOj1OPjIySGJJTlZYXV5dOEVmbWVabFNbXVn/2wBDAQ8QEBYTFioXFypZOzI7WVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVn/wAARCAA4AFoDASIAAhEBAxEB/8QAGgAAAgMBAQAAAAAAAAAAAAAABAUAAgMGAf/EADcQAAEDAgQDBQUGBwAAAAAAAAEAAgMEEQUSITETQVEGFDJh0SIjQoGxcXORk6HBJTRDUmJy8f/EABgBAAMBAQAAAAAAAAAAAAAAAAECAwAE/8QAHREAAwADAQEBAQAAAAAAAAAAAAECAxEhEjEiMv/aAAwDAQACEQMRAD8AfhwuraHQICOUm3REsebqI2ja4BsdbqwZfYBUHtPAF7lbZc+gNmDc9UyWwN6Mi5rTYAvPkP3QlVXS08rGCiLy7oCbJVifaCQyupsLaAG6GUj6JUW4hMc8lZMXH/MotzI84rrp1sNS2obZ0L4yN7ehRBjGQlpzNXI02I4nQvB4pnjG7X6rrMNrIcRg4sIyPGj2Hkt+a+AqKj6ZPYDrf5LBzOWYomqj4ZzAWaf0QT5Bmtf9VNmXSj4svxuv9qOivwme2fCOaXZy4nUBMYr8Jm3hHJBGYvheSfL7UdFm/wClK6cbWAt0IRkdyDfQFEwzhBs489kLj0j4cMEMJtJO7JfoOaKoGe7N98yzxuEvFO8C4Y5O35jYJW7SYoo8Op4YBGGku5usrR4dPM5zYmXDTum+GNaW+0OeqbMhY3wtFjquSJd9OqsvjhycmETMYXyNuBvY6he4Uzulc0t8L9CujrHiJpv0SmlhD3sJGxug9xSSCr9w9jGsjz07wN7XCQudYEkFbxdoIjWT0tTaMgkMcdig45C+Lc/iuzIjjgmfXd3zCPid7pmnwhLHOcGn2vndHwvdwY/aPhH0U0OwWN2XZw/EIpsmmw080MxwaSLgHzJKuJbHVwP4+qIBlh9R74seRZ226OrpIBEGSO8Rtouee9uUkOs47Wv6qlPL3q8cbjxB4sxu4qk6fGJW11DZokpH5hqw8+qLbiLcu2vkUpNTUUEdgwSs5scsT2jom341BK13lYhQeC5f4fCqyzX9IazvNY4ZR8lazaduQkGV3LoFz1R2te4cOgoxFf436kfJTDqlzA+oq5dd3OcU+PA0/VfRbyc8ye9qMPo2UDqlxLJrgMtzKTYNiTy/us+p+EqYtXPxmqGUOFPHowdfNXw+nkhN8rr9dFW2vgsp6GwsbjS6ZRRDhM28ISzMGeMub/sB6JlEW8FmrfCOQUkMwR1FWNbmbQTud5xOP7K7KWvyh3c5w7pwiFFE3kGz19LXOP8AK1Nvu3eiX1GG4jn4kVNWNeNQRE70UURSMbRVeMNGSswermH97IXX+itIzii5wnEmnp3V/oooqpiOUAyRVMV+74HiDz1dTuA+iXVGH45WO97h9a1g2YIHgfRRRZsKSCKfBsSZb+HVYH3bvRGxYdiDHX7lV/lO9FFFJrY+wp1LiDmWNFVfklMIqWrELAaWYENH9IqKIJG2f//Z" )

حالا این پیام تصویری رو با یک پیام درخواست پول ترکیب میکنیم و برای کاربر میفرستیم و منتظر میمونمی تا پرداخت کنه.

به این صورت:

purchase_message = PurchaseMessage(msg=p_message, account_number="6037991889250159", amount="100000", money_request_type=MoneyRequestType.normal) bot.send_message(purchase_message, update.get_effective_user(), success_callback=success, failure_callback=failure)

که در اینجا شماره کارت و مقدار پول و نوع درخواست پول که normal هست رو میزاریم.

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

به این صورت.

اینم کد کلی :

"""Simple Bot to Reply to Bale messages.""" import asyncio from balebot.filters import DefaultFilter, TemplateResponseFilter, BankMessageFilter from balebot.handlers import MessageHandler from balebot.models.messages import TextMessage, TemplateMessageButton, TemplateMessage, PhotoMessage, PurchaseMessage from balebot.models.messages.banking.money_request_type import MoneyRequestType from balebot.updater import Updater # Bale Bot Authorization Token updater = Updater(token="token", 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) # @dispatcher.command_handler(["get_latte_coffee"]) def coffee_request_starter(bot, update): user = update.get_effective_user() text_message = TextMessage("قهوه شما دارای چه افزودنی باشد سرورم؟") btn = [ TemplateMessageButton(text="عسل", value="عسل", action=0), TemplateMessageButton(text="شهد خرما", value="شهد خرما", action=0) ] template_message = TemplateMessage(general_message=text_message, btn_list=btn) bot.send_message(template_message, user,success_callback=success, failure_callback=failure) dispatcher.register_conversation_next_step_handler(update, [ MessageHandler(TemplateResponseFilter(keywords="عسل"), add_assal), MessageHandler(TemplateResponseFilter(keywords="شهد خرما"), add_shahd_khorma), ]) def add_assal(bot, update): p_message = PhotoMessage(file_id="5774371186290462464", access_hash="463989315", name="name", file_size="369438", mime_type="image/jpeg", caption_text=TextMessage( text="قهوه عسلی مخصوص عمو حسن با گوشت گوسفندی"), file_storage_version=1, thumb="/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA4KCw0LCQ4NDA0QDw4RFiQXFhQUFiwgIRokNC43NjMuMjI6QVNGOj1OPjIySGJJTlZYXV5dOEVmbWVabFNbXVn/2wBDAQ8QEBYTFioXFypZOzI7WVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVn/wAARCAA4AFoDASIAAhEBAxEB/8QAGgAAAgMBAQAAAAAAAAAAAAAABAUAAgMGAf/EADcQAAEDAgQDBQUGBwAAAAAAAAEAAgMEEQUSITETQVEGFDJh0SIjQoGxcXORk6HBJTRDUmJy8f/EABgBAAMBAQAAAAAAAAAAAAAAAAECAwAE/8QAHREAAwADAQEBAQAAAAAAAAAAAAECAxEhEjEiMv/aAAwDAQACEQMRAD8AfhwuraHQICOUm3REsebqI2ja4BsdbqwZfYBUHtPAF7lbZc+gNmDc9UyWwN6Mi5rTYAvPkP3QlVXS08rGCiLy7oCbJVifaCQyupsLaAG6GUj6JUW4hMc8lZMXH/MotzI84rrp1sNS2obZ0L4yN7ehRBjGQlpzNXI02I4nQvB4pnjG7X6rrMNrIcRg4sIyPGj2Hkt+a+AqKj6ZPYDrf5LBzOWYomqj4ZzAWaf0QT5Bmtf9VNmXSj4svxuv9qOivwme2fCOaXZy4nUBMYr8Jm3hHJBGYvheSfL7UdFm/wClK6cbWAt0IRkdyDfQFEwzhBs489kLj0j4cMEMJtJO7JfoOaKoGe7N98yzxuEvFO8C4Y5O35jYJW7SYoo8Op4YBGGku5usrR4dPM5zYmXDTum+GNaW+0OeqbMhY3wtFjquSJd9OqsvjhycmETMYXyNuBvY6he4Uzulc0t8L9CujrHiJpv0SmlhD3sJGxug9xSSCr9w9jGsjz07wN7XCQudYEkFbxdoIjWT0tTaMgkMcdig45C+Lc/iuzIjjgmfXd3zCPid7pmnwhLHOcGn2vndHwvdwY/aPhH0U0OwWN2XZw/EIpsmmw080MxwaSLgHzJKuJbHVwP4+qIBlh9R74seRZ226OrpIBEGSO8Rtouee9uUkOs47Wv6qlPL3q8cbjxB4sxu4qk6fGJW11DZokpH5hqw8+qLbiLcu2vkUpNTUUEdgwSs5scsT2jom341BK13lYhQeC5f4fCqyzX9IazvNY4ZR8lazaduQkGV3LoFz1R2te4cOgoxFf436kfJTDqlzA+oq5dd3OcU+PA0/VfRbyc8ye9qMPo2UDqlxLJrgMtzKTYNiTy/us+p+EqYtXPxmqGUOFPHowdfNXw+nkhN8rr9dFW2vgsp6GwsbjS6ZRRDhM28ISzMGeMub/sB6JlEW8FmrfCOQUkMwR1FWNbmbQTud5xOP7K7KWvyh3c5w7pwiFFE3kGz19LXOP8AK1Nvu3eiX1GG4jn4kVNWNeNQRE70UURSMbRVeMNGSswermH97IXX+itIzii5wnEmnp3V/oooqpiOUAyRVMV+74HiDz1dTuA+iXVGH45WO97h9a1g2YIHgfRRRZsKSCKfBsSZb+HVYH3bvRGxYdiDHX7lV/lO9FFFJrY+wp1LiDmWNFVfklMIqWrELAaWYENH9IqKIJG2f//Z" ) purchase_message = PurchaseMessage(msg=p_message, account_number="693799746648000", amount="1", money_request_type=MoneyRequestType.normal) bot.send_message(purchase_message, update.get_effective_user(), success_callback=success, failure_callback=failure) dispatcher.register_conversation_next_step_handler(update, [MessageHandler(BankMessageFilter(), payment_done), MessageHandler(DefaultFilter(), coffee_request_starter)]) def payment_done(bot, update): text_msg = TextMessage("پرداخت شما مورد تایید قرار گرفت و به زودی قهوه به شما تحویل خواهد گردید.") bot.send_message(text_msg, update.get_effective_user(), success_callback=success, failure_callback=failure) dispatcher.finish_conversation(update) def add_shahd_khorma(bot, update): text_msg = TextMessage("شهد توت به قهوه حضرت والا اضافه گردید.") bot.send_message(text_msg, update.get_effective_user(), success_callback=success, failure_callback=failure) dispatcher.finish_conversation(update) # Run the bot! updater.run()

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

ربات بلهبات بلهپیام رسان بلهفروشگاه سازی در پیام رسان داخلی
شاید از این پست‌ها خوشتان بیاید