التطور التفاعلي لبوت Telegram

يوم جيد ، هابروفشان.

بحثًا عن معلومات مختلفة حول تطوير روبوت لدردشة Telegram على الإنترنت ، وجدت أن جميع البرامج التعليمية مليئة تمامًا بآليات مختلفة للتفاعل مع مكتبة telegram-bot-api ، لم يخلص أحد إلى أن حياة الرفاق يجب دائمًا تحسينها جانب من تسهيل العمل (المبرمجون كسولون بطبيعتهم) ، لذلك قررت أن أكتب تعليمي الخاص باستخدام مكتبة التجميع الخاصة بي ، والتي في الوقت الحالي لا يمكنها قراءة الرسائل إلا وإرسال إجابة إليهم ، ولكن أولاً وقبل كل شيء.

لماذا هناك حاجة إلى chatbots؟



موضوع تطوير chatbots في عصرنا لمختلف الشبكات الاجتماعية هو مسألة حساسة ، منذ إدخال chatbot:

  1. يقلل من وقت استجابة المستخدم للسؤال الذي يهتم به (وفي اهتماماتك ، التواصل السريع معه)
  2. يقلل من العبء على محفظة الشركة N للحفاظ على موظف معالجة التطبيقات اليدوية

لا يعني إدخال chatbot على الإطلاق أنه لا حاجة إلى أي شخص على الإطلاق ، حيث توجد دائمًا بعض المواقف التي تتطلب مشاركة الشخص المسؤول عن حل مشكلة معينة ، ولكنه يبسط ويؤدي تلقائيًا إلى حل مشكلة حل المشكلات المنزلية ، ومعالجة الطلبات ، وكذلك تقديم المعلومات إلى الأشخاص المسؤولين ، إحصائيات وأشياء أخرى تريدها الروح.

نظرًا لأن إدخال المساعدين الظاهري ليس نشطًا للغاية ، ونحن ندخل بالفعل العقد الثاني من القرن الحادي والعشرين ، أعتقد أنه من الضروري تخفيض الحد الأدنى لإدخال هذا الموضوع.

لنبدأ.

اهتمام

لا يستخدم المشروع الذي يستخدم مكتبة المجمّعة المنفذة webhook ، بل يستخدم التجميع الطويل ، لأنه ليس لديه هدف للنشر على خدمات محددة مثل heroku (ومع ذلك ، فإن له وظيفة أساسية بحيث يكون عمر المشروع أطول أو أقل ولا ينام على المكالمة الأولى للموزع وقت التشغيل من الخدمات المختلفة للمستخدمين الآخرين heroku). كانت الفكرة الرئيسية للمشروع هي تبسيط التطوير وتقليل عدد "الإيماءات" عند تطوير chatbot مع الوظيفة الأساسية - معالجة طلبات المستخدم الواردة.

كيف تعمل في هذه المكتبة؟




مصدر البيانات الرئيسي هو القاموس الذي يستند إليه chatbot (موجود في ملف JSON بالتنسيق) ، ولكنه يتضمن أيضًا معالجة رسائل المستخدم عن طريق كتابة منطق البرنامج الخاص بهم.

تحتاج أولاً إلى إنشاء روبوت في BotFather (سنفترض أيضًا أنك أنشأت الروبوت واستلمت الرمز المميز). أنت الآن بحاجة إلى "التقاط" المكتبة لنفسك عن طريق تنفيذ الأمر
go get "github.com/liquiddeath13/reactivetgbot" .

بعد ذلك ، تحتاج إلى إنشاء ملف بتنسيق .go ووضع الكود التالي هناك:

 package main import ( reactivetgbot "github.com/liquiddeath13/reactivetgbot" ) func main() { BotInstance := reactivetgbot.Init("YOUR_BOT_TOKEN", "PATH_TO_JSON_DICTIONARY") if BotInstance != nil { go BotInstance.Logic() //if we need host our application on Heroku and shouldn't think about uptime reactivetgbot.HerokuServiceUP("Telegram ChatBot by liquiddeath13") } } 

يحتوي المتغير BotInstance على ارتباط لمثيل chatbot مع الرمز المميز ومسار إلى قاموس يخزن الأسئلة والأجوبة.

مثال القاموس:

 [ { "Question" : "/about", "Answer" : "ChatBot created by liquiddeath13 in 2019 year" }, { "Question" : "Hello, how can i contact with your company?", "Answer" : "Hello, you can contact us by provided mail address. Email: coolnickname@hostname.domain" } ] 

بعد ذلك ، يبدأ chatbot العمل مع واجهة برمجة تطبيقات Telegram ويأخذ معلومات من هناك حول الأحداث التي تحدث في الدردشات حيث يوجد. إذا وصلت الرسالة الموضحة في القاموس في حقل السؤال إلى عنوان برنامج الروبوت ، فسترد على الرسالة بالإجابات التي تم إرفاقها في حقل الإجابة (أي ، الرسالة "مرحبًا ، كيف يمكنني الاتصال بشركتك؟" في هذا المثال ، سيرد الروبوت "مرحبًا ، يمكنك الاتصال بنا عن طريق عنوان البريد الإلكتروني المقدم. البريد الإلكتروني: coolnickname@hostname.domain").

كما ذكر سابقًا ، يمكن للرفاق المتقدمين تحديد سلوك الروبوت عندما يتلقى رسالة عن طريق إضافة معالج ، على سبيل المثال:

 package main import ( "fmt" reactivetgbot "github.com/liquiddeath13/reactivetgbot" ) func main() { BotInstance := reactivetgbot.Init("YOUR_BOT_TOKEN", "PATH_TO_JSON_DICTIONARY") AskCounter := 0 if BotInstance != nil { BotInstance.AppendHandler("how much time people asked you?", func(Msg reactivetgbot.TGMessage) string { AskCounter++ return fmt.Sprintf("Hello.\n%d - so many time people asked me", AskCounter) }) go BotInstance.Logic() reactivetgbot.HerokuServiceUP("Telegram ChatBot by liquiddeath13") } } 

يصف هذا المثال آلية معالجة السؤال "كم من الوقت طلب منك الناس؟". كإجابة ، سوف يعطي الروبوت للمستخدم قيمة تُظهر عدد المرات التي طرح فيها المستخدمون السؤال المحدد ، بعد زيادة العداد.

النشر على Heroku (بدون إعلانات)


Chatbots ، لسبب ما ، لا تشعر بالرضا تجاه الخدمات مثل heroku ، لأنه تمت كتابة القليل من الوظائف لمنع الخدمة من "النوم" مبكرًا ، أي محاكاة نشاط الشبكة (الوصول إلى مورد ويب مرة كل خمس دقائق)
لوضع المشروع على Heroku ، نحتاج إلى أداة godep ، والتي "ستحزم" التبعيات في المشروع. يمكنك " godep save " باستخدام الأمر go get github.com/tools/godep ، يمكنك حزم التبعيات عن طريق تشغيل الأمر godep save في مجلد المشروع.

بعد ذلك ، نحتاج إلى إنشاء حساب على Heroku والتعرف على دليل النشر الرسمي. إذا لم يكن لديك متسع من الوقت لقراءته ، أو إذا كنت تريد "كل شيء دفعة واحدة في مكان واحد" ، فكل هذا يرجع إلى سلسلة الأوامر التالية:

  1. إذن على مورد Heroku باستخدام CLI الخاصة بهم عن طريق تنفيذ أمر heroku login
  2. تشغيل الأمر git init في مجلد المشروع
  3. تشغيل الأمر git remote add heroku ** git' , Heroku**
  4. تشغيل الأمر git add . لإضافة جميع الملفات إلى المستودع المحلي
  5. تنفيذ الأمر git commit -m " , commit'"
  6. وضع مستودع محلي في مستودع heroku باستخدام git push heroku master

بعد الإجراءات التي تم القيام بها ، لا ينبغي القيام بأي شيء آخر - تقوم Heroku بتجميع المشروع في الوضع التلقائي ، وسوف يقوم الروبوت بجميع الأعمال الروتينية لك أو لمرؤوسيك.
لمراقبة دورة حياة إحدى خدمات الويب ، لدى heroku logs --tail ، والتي تتيح لك مراقبة سجل الإجراءات الحديثة.

مزيد من اعتبارات التنمية


من المخطط أن تقدم على الأقل دعمًا للمعالجات التي تعيد ليس فقط سلسلة ، ولكن رسالة تم إنشاؤها (تحسين لدعم المرفقات المختلفة في شكل ملفات).

محدث: لقد توصلت إلى استنتاج مفاده أن آلية المضاهاة المطبقة لا تعمل كما هو متوقع وأن الخدمة تظل مستيقظة لمدة 30 دقيقة فقط ، ثم "تغفو" حتى يتم طرقها مباشرةً (توجد رابط للمشروع في مكتب المشروع دائمًا على غرار Heroku) hosters) ، على الرغم من أنه ربما يستحق إعادة الكتابة على webhook . اترك رغباتي الخاصة ، وكذلك الكراهية والأفكار للتحسين بأي وسيلة مريحة - سأكون سعيدًا أن أسمع منك.

(ربما) روابط مفيدة


مشروع غلاف المكتبة
صفحة مشروع مكتبة API Telegram

Source: https://habr.com/ru/post/ar480296/


All Articles