
دخلت Chatbots بإحكام في حياتنا المعلوماتية ، وجميع الشبكات الاجتماعية التي تحترم نفسها والمراسلين الفوريين تدعم الروبوتات ، وهي توفر واجهة برمجة تطبيقات مناسبة لتطويرها واستخدامها ، وكل ذلك من أجل راحة المستخدمين والمبرمجين. الآن ، لإنشاء روبوت في Telegram ليس من الضروري حتى معرفة أي لغة برمجة. هناك خدمات تسمح لك بتصميم بوت باستخدام واجهة الويب. وهذا أمر جيد حقًا ، لكنني واجهت مشكلة مؤخرًا وفوجئت أنه في هذه الموجة من شعبية روبوتات الدردشة ، والتي بالإضافة إلى أنها ليست الآن ميزة رائعة فحسب ، بل هي أيضًا أداة مدرة للدخل - لا توجد أي إجابة.
والسؤال هو: ماذا لو كنت أرغب في إنشاء أكثر من روبوت لخدمة واحدة؟ على سبيل المثال ، أعلم أن CA تجلس في فكونتاكتي و Telegram ، كيف يمكنني كتابة الروبوتات بأقل جهد للعمل مع الناس هناك وهناك؟ إذا كنت فجأة (على سبيل المثال ، بصفتي مالك متجر على الإنترنت) ، أرغب أيضًا في العمل مع الجمهور على Facebook باستخدام برامج الروبوت ، فهل أحتاج حقًا إلى تطوير روبوت جديد من البداية وإعادة كتابة كل منطق له أو محاولة الخوض في واجهة برمجة تطبيقات أو مكتبة جديدة. وحاولت أن أجد الجواب تحت القطع ، أطلب إلى الطاولة.
في الواقع ، هناك حلول ، والعديد من الحلول ، ولكن جميعها تتلخص في حقيقة أنه يجب عليك استضافة برنامج الروبوت الخاص بك مع خدمة توفر أيضًا منصة. أي أنه على هذا النحو ، لا يمكنك الحصول على حل محاصر. ربما أكون مخطئا ولم أدرس بالكامل ما هو موجود بالفعل ، ولكن حقيقة أن الرابط الأول في Google لا يؤدي إلى حل مثير للقلق بالفعل. يوجد أيضا
Botman . هذه مكتبة قوية مفتوحة المصدر ومتطورة للغاية مع مجموعة من الرقائق والوثائق الشاملة. وهو مكتوب
بلغة PHP. ليس لدي أي شيء ضد
PHP ، على أي حال أنا لا أعترف به علنًا ، حتى لا أقوم بتربية عجول غير ضروري ، لكني لا أشعر برغبة في تطويره. قررت البحث عن شيء مشابه لـ Python ، بالإضافة إلى Python ، هناك الكثير من المكتبات التي تسمح لك بالعمل مع Telegram Bot API. ولم أجد شيئًا ، لذلك سرعان ما توصلت إلى استنتاج مفاده أن الأمر يستحق الكتابة بنفسي.
(ربما يعرف شخص ما الحلول المناسبة للبوتات متعددة المنصات بنظام مفتوح ، سأكون سعيدًا بأي معلومات)هنا ، بالمناسبة ، هناك مشكلة أخرى هي تختمر. ليس لدي أي فكرة على الإطلاق عن مكان آخر يمكنك فيه مشاركة العمل مع الجمهور في شكل مقال بخلاف حبري. سأكون سعيدًا جدًا للمساعدة في هذا الأمر.
جاء اسم
Botovod من تلقاء نفسه.
بشكل عام ، سأقدم رمزًا صغيرًا باستخدام Botovod وشرحه باختصار.
عنوان المفسدfrom botovod import Botovod, Message, utils @utils.convert_to_text def handler_message(agent, chat, text): message = Message() message.text = " " agent.send_message(chat, message) @utils.convert_to_images def handler_images(agent, chat, images): message = Message() message.text = " " agent.send_message(chat, message) def handler_echo(agent, chat, message): agent.send_message(chat, message) settings = [ { "name": "telegram", "agent": "botovod.agents.telegram", "settings": {"token": "462755273:AzBZBQ7AAnqFEXqZ_P8Z-qvCddmjqTVAYPI", "method": "polling"} }, ] botovod = Botovod(settings) botovod.add_handler(handler_message) botovod.add_handler(handler_images) botovod.add_handler(handler_echo) botovod.start()
نحدد هنا 3 معالجات للرسائل الواردة ، يرسل كل منها شيئًا ردًا. الأول: "تلقيت رسالة" ، والثاني: "أرى صورة" ، والثالث سيعيد ببساطة ما تلقيته. ثم نقوم بإنشاء مدير برنامج بوت (Botovod) ونمرره إعدادات الروبوتات ، في هذا البرنامج للبوت في Telegram. بعد ذلك ، نضيف معالجات الرسائل بالتسلسل. إذا وصلت رسالة إلى برنامج التتبُّع ، ستنتقل إلى المعالج الأول الذي يوافق على قبولها. على سبيل المثال ، إذا تم إرسال صوت إلينا ، فسيحاول المعالج الأول قبوله أولاً ، ولكن يرفض ، لأن هذا ليس نصًا. ثم سيقبل الصورة الثانية ، لكنه سيرفض أيضًا ، نظرًا لأن هذه ليست صورة ، ثم سيقبل الصورة الثالثة ، التي ليس لها قيود - وبهذه الطريقة ستقوم بإعادة توجيه الصوت بشكل متعامد. يتم فرض القيود كديكور من وحدة الأدوات.
الآن سأحاول أن أقول بالتفصيل ما هو:
يوجد مدير بوت - كائن من فئة Botovod - اسم البوت (لكل منها اسم فريد خاص به) ، وفئة الوكيل التي ستعالجها ويتم تمرير إعدادات البوت إليها في المنشئ. أيضا ، تتم إضافة معالجات إلى مدير البوت بدوره. إذا وصلت رسالة إلى برنامج التتبُّع ، فسيقوم المدير بفحصها بدورها حتى يجد المعالج الذي يطرح استثناء NotPassed. يتم فحص المعالج الأول المضاف أولاً ، الأخير ، على التوالي ، الأخير. إذا كنت تنوي استخدام الرد التلقائي على الويب ، فيمكن حينئذٍ توصيل مدير الروبوت بخادم الويب. لإجراء ذلك ، يمتلك مدير برنامج التتبّع طريقة استماع تقبل اسم برنامج التتبّع ورؤوسه ونص الطلب. ثم يقوم بتمرير هذه البيانات إلى المحلل اللغوي الوكيل ، الذي يعيد الرسالة التي تم إنشاؤها ، بعد دفع هذه الرسالة من خلال المعالجات. ردًا على ذلك ، تُرجع طريقة الاستماع القاموس {"status": any_code و "headers": dict () و "body": "any_text"} ، حيث تكون رؤوس الاستجابة في النص ، وفي النص نص الاستجابة. في بعض الأحيان تتطلب شبكة المراسلة / الشبكة الاجتماعية من الخادم إعادة كائن ما ، لذلك أعتقد أن هذا السلوك مناسب.
سأعطي مثالاً عن برنامج Vkontakte bot تحت اسم "vk-bot" ، وسيتصل Botovod بخادم Django
def view(request): response = manager.listen("vk-bot", request.headers, request.text) return HttpResponse(status = response["status"], headers = response["headers"], response["body"])
الرسالة المشكلة هي كائن من فئة الرسالة. ويشمل الحقول التالية: نص - نص رسالة ؛ الصور - قائمة بالصور ؛ صوتيات - قائمة بالملفات الصوتية ؛ مقاطع الفيديو - قائمة مقاطع الفيديو ؛ المستندات - قائمة بالوثائق ؛ المواقع - قائمة بالأماكن على الخريطة ؛ raw - نص الرسالة الأولية أو معلومات إضافية لها (القاموس).
بالإضافة إلى ذلك ، تحتوي كل قائمة لكائن الرسالة (الصور والتسجيلات الصوتية ومقاطع الفيديو والمستندات) على كائنات خاصة تكون فئاتها موروثة من المرفق. تحتوي فئة المرفقات بشكل افتراضي على طرق url و file_path التي عادة ما يضع محللو الوكيل فيها معلومات حول الملف المستلم. تحتوي قائمة المواقع على كائنات الموقع ، والتي تحتاج إلى مُنشئها لتمرير خط الطول وخط العرض (خط الطول وخط العرض).
فيما يلي مثال على إنشاء الرسائل في معالجات
def handler(agent, chat, message): out = botovod.Message() image = botovod.Image() image.file_path = "/tmp/1.png" location = botovod.Location() out.images.append(image) out.text = " , " agent.send_message(chat, out)
هذا كل ما في الأمر الآن ، ولكن آمل أن يهتم شخص ما بمثل هذا الحل ويريد شخص ما أن يساعد في تقديم المشورة والتعليق والفكرة وربما مشاركته الخاصة في التطوير. شكرا لكم جميعا على القراءة!
رابط جيثب