بناء أول روبوت Telegram: دليل خطوة بخطوة
نشرت: 2022-03-11غالبًا ما توصف روبوتات الدردشة على أنها ثورة في طريقة تفاعل المستخدمين مع التكنولوجيا والشركات. لديهم واجهة بسيطة إلى حد ما مقارنة بالتطبيقات التقليدية ، لأنها تتطلب فقط من المستخدمين الدردشة ، ومن المفترض أن تفهم روبوتات المحادثة وتفعل ما يطلبه المستخدم منهم ، على الأقل من الناحية النظرية.
تقوم العديد من الصناعات بتحويل خدمة العملاء إلى أنظمة chatbot. هذا بسبب الانخفاض الكبير في التكلفة مقارنة بالبشر الفعليين ، وأيضًا بسبب المتانة والتوافر المستمر. تقدم روبوتات الدردشة درجة من دعم المستخدم دون تكلفة إضافية كبيرة.
اليوم ، تُستخدم روبوتات المحادثة في العديد من السيناريوهات ، بدءًا من المهام الوضيعة مثل عرض بيانات الوقت والطقس إلى العمليات الأكثر تعقيدًا مثل التشخيص الطبي الأولي والتواصل / دعم العملاء. يمكنك ابتكار روبوت محادثة يساعد عملائك عندما يطرحون أسئلة معينة حول منتجك ، أو يمكنك إنشاء روبوت محادثة مساعد شخصي يمكنه التعامل مع المهام الأساسية وتذكيرك عندما يحين وقت التوجه إلى اجتماع أو صالة ألعاب رياضية.
هناك الكثير من الخيارات عندما يتعلق الأمر بالمكان الذي يمكنك فيه نشر chatbot الخاص بك ، ومن أكثر الاستخدامات شيوعًا منصات الوسائط الاجتماعية ، حيث يستخدمها معظم الأشخاص بشكل منتظم. يمكن قول الشيء نفسه عن تطبيقات المراسلة الفورية ، ولكن مع بعض المحاذير.
Telegram هي واحدة من أكثر منصات المراسلة الفورية شيوعًا اليوم ، حيث تتيح لك تخزين الرسائل على السحابة بدلاً من جهازك فقط ، كما أنها تفتخر بدعم جيد متعدد الأنظمة الأساسية ، حيث يمكنك الحصول على Telegram على Android و iOS و Windows وما يقرب من أي نظام أساسي آخر يمكنه دعم إصدار الويب. يعد إنشاء روبوت محادثة على Telegram أمرًا بسيطًا إلى حد ما ويتطلب خطوات قليلة لا تستغرق وقتًا طويلاً لإكمالها. يمكن دمج chatbot في مجموعات وقنوات Telegram ، كما أنه يعمل بمفرده.
في هذا البرنامج التعليمي ، سننشئ روبوت Telegram الذي يمنحك صورة أفاتار من Adorable Avatars. سيتضمن مثالنا بناء روبوت باستخدام Flask ونشره على خادم Heroku مجاني.
لإكمال هذا البرنامج التعليمي ، ستحتاج إلى تثبيت Python 3 على نظامك بالإضافة إلى مهارات تشفير Python. أيضًا ، سيكون الفهم الجيد لكيفية عمل التطبيقات إضافة جيدة ، ولكن ليس أمرًا ضروريًا ، حيث سنستعرض معظم الأشياء التي نقدمها بالتفصيل. تحتاج أيضًا إلى تثبيت Git على نظامك.
بالطبع ، يتطلب البرنامج التعليمي أيضًا حساب Telegram ، وهو مجاني. يمكنك التسجيل هنا. مطلوب حساب Heroku أيضًا ، ويمكنك الحصول عليه مجانًا هنا.
إضفاء الحيوية على Telegram Bot
لإنشاء روبوت محادثة على Telegram ، تحتاج إلى الاتصال بـ BotFather ، وهو أساسًا روبوت يستخدم لإنشاء روبوتات أخرى.
الأمر الذي تحتاجه هو /newbot
الذي يقودك إلى الخطوات التالية لإنشاء الروبوت الخاص بك:
يجب أن يحتوي الروبوت الخاص بك على سمتين: الاسم واسم المستخدم. سيظهر الاسم للبوت الخاص بك ، بينما سيتم استخدام اسم المستخدم للإشارة والمشاركة.
بعد اختيار اسم الروبوت واسم المستخدم - والذي يجب أن ينتهي بـ "الروبوت" - ستصلك رسالة تحتوي على رمز الوصول الخاص بك ، ومن الواضح أنك ستحتاج إلى حفظ رمز الوصول واسم المستخدم الخاصين بك في وقت لاحق ، لأنك ستحتاجهما.
كود منطق Chatbot
سنستخدم Ubuntu في هذا البرنامج التعليمي. بالنسبة لمستخدمي Windows ، ستعمل معظم الأوامر هنا دون أي مشاكل ، ولكن إذا واجهت أي مشاكل في إعداد البيئة الافتراضية ، يرجى الرجوع إلى هذا الرابط. بالنسبة لمستخدمي Mac ، يجب أن يعمل هذا البرنامج التعليمي بشكل جيد.
أولاً ، لنقم بإنشاء بيئة افتراضية. يساعد في عزل متطلبات مشروعك عن بيئة بايثون العالمية.
$ python -m venv botenv/
الآن سيكون لدينا دليل botenv/
الذي سيحتوي على جميع مكتبات Python التي سنستخدمها. انطلق وقم بتنشيط virtualenv
باستخدام الأمر التالي:
$ source botenv/bin/activate
المكتبات التي نحتاجها لروبوتنا هي:
- Flask: إطار عمل ويب صغير تم إنشاؤه في Python.
- Python-telegram-bot: غلاف Telegram في Python.
- الطلبات: مكتبة Python http مشهورة.
يمكنك تثبيتها في البيئة الافتراضية باستخدام أمر pip كما يلي:
(telebot) $ pip install flask (telebot) $ pip install python-telegram-bot (telebot) $ pip install requests
الآن دعنا نتصفح دليل مشروعنا.
. ├── app.py ├── telebot │ ├── credentials.py │ | . │ | you can build your engine here │ | . │ └── __init__.py └── botenv
سنحتاج في ملف credentials.py
. py إلى ثلاثة متغيرات:
bot_token = "here goes your access token from BotFather" bot_user_name = "the username you entered" URL = "the heroku app link that we will create later"
الآن دعنا نعود إلى app.py وننتقل إلى الكود خطوة بخطوة:
# import everything from flask import Flask, request import telegram from telebot.credentials import bot_token, bot_user_name,URL
global bot global TOKEN TOKEN = bot_token bot = telegram.Bot(token=TOKEN)
الآن لدينا كائن bot الذي سيتم استخدامه لأي إجراء نطلب من الروبوت تنفيذه.
# start the flask app app = Flask(__name__)
نحتاج أيضًا إلى ربط الدوال بمسارات محددة. بعبارة أخرى ، نحتاج إلى إخبار Flask بما يجب فعله عند استدعاء عنوان معين. يمكن العثور على مزيد من المعلومات التفصيلية حول Flask والطرق هنا.
في مثالنا ، تستجيب وظيفة المسار لعنوان URL وهو في الأساس /{token}
، وهذا هو عنوان URL الذي ستستدعيه Telegram للحصول على استجابات للرسائل المرسلة إلى الروبوت.
@app.route('/{}'.format(TOKEN), methods=['POST']) def respond(): # retrieve the message in JSON and then transform it to Telegram object update = telegram.Update.de_json(request.get_json(force=True), bot) chat_id = update.message.chat.id msg_id = update.message.message_id # Telegram understands UTF-8, so encode text for unicode compatibility text = update.message.text.encode('utf-8').decode() # for debugging purposes only print("got text message :", text) # the first time you chat with the bot AKA the welcoming message if text == "/start": # print the welcoming message bot_welcome = """ Welcome to coolAvatar bot, the bot is using the service from http://avatars.adorable.io/ to generate cool looking avatars based on the name you enter so please enter a name and the bot will reply with an avatar for your name. """ # send the welcoming message bot.sendMessage(chat_id=chat_id, text=bot_welcome, reply_to_message_id=msg_id) else: try: # clear the message we got from any non alphabets text = re.sub(r"\W", "_", text) # create the api link for the avatar based on http://avatars.adorable.io/ url = "https://api.adorable.io/avatars/285/{}.png".format(text.strip()) # reply with a photo to the name the user sent, # note that you can send photos by url and telegram will fetch it for you bot.sendPhoto(chat_id=chat_id, photo=url, reply_to_message_id=msg_id) except Exception: # if things went wrong bot.sendMessage(chat_id=chat_id, text="There was a problem in the name you used, please enter different name", reply_to_message_id=msg_id) return 'ok'
الطريقة البديهية لجعل هذه الوظيفة تعمل هي أننا سوف نسميها كل ثانية ، بحيث تتحقق مما إذا كانت رسالة جديدة قد وصلت ، لكننا لن نفعل ذلك. بدلاً من ذلك ، سنستخدم Webhook الذي يوفر لنا طريقة للسماح للبوت بالاتصال بخادمنا متى تم استدعاء رسالة ، حتى لا نحتاج إلى جعل خادمنا يعاني في حلقة انتظار في انتظار وصول رسالة.
لذلك ، سنقوم بعمل وظيفة نحتاجها بأنفسنا لتفعيل Webhook الخاص بـ Telegram ، ونخبر Telegram بشكل أساسي بالاتصال برابط محدد عند وصول رسالة جديدة. سوف نسمي هذه الوظيفة مرة واحدة فقط ، عندما ننشئ الروبوت لأول مرة. إذا قمت بتغيير رابط التطبيق ، فستحتاج إلى تشغيل هذه الوظيفة مرة أخرى باستخدام الرابط الجديد الذي لديك.
الطريق هنا يمكن أن يكون أي شيء. أنت من ستسميها:
@app.route('/setwebhook', methods=['GET', 'POST']) def set_webhook(): # we use the bot object to link the bot to our app which live # in the link provided by URL s = bot.setWebhook('{URL}{HOOK}'.format(URL=URL, HOOK=TOKEN)) # something to let us know things work if s: return "webhook setup ok" else: return "webhook setup failed"
الآن بعد أن تم تعيين كل شيء ، فلنقم فقط بإنشاء صفحة رئيسية رائعة حتى نعرف أن المحرك يعمل.
@app.route('/') def index(): return '.' if __name__ == '__main__': # note the threaded arg which allow # your app to have more than one thread app.run(threaded=True)
دعنا نلقي نظرة على الإصدار الكامل من app.py:
import re from flask import Flask, request import telegram from telebot.credentials import bot_token, bot_user_name,URL global bot global TOKEN TOKEN = bot_token bot = telegram.Bot(token=TOKEN) app = Flask(__name__) @app.route('/{}'.format(TOKEN), methods=['POST']) def respond(): # retrieve the message in JSON and then transform it to Telegram object update = telegram.Update.de_json(request.get_json(force=True), bot) chat_id = update.message.chat.id msg_id = update.message.message_id # Telegram understands UTF-8, so encode text for unicode compatibility text = update.message.text.encode('utf-8').decode() # for debugging purposes only print("got text message :", text) # the first time you chat with the bot AKA the welcoming message if text == "/start": # print the welcoming message bot_welcome = """ Welcome to coolAvatar bot, the bot is using the service from http://avatars.adorable.io/ to generate cool looking avatars based on the name you enter so please enter a name and the bot will reply with an avatar for your name. """ # send the welcoming message bot.sendMessage(chat_id=chat_id, text=bot_welcome, reply_to_message_id=msg_id) else: try: # clear the message we got from any non alphabets text = re.sub(r"\W", "_", text) # create the api link for the avatar based on http://avatars.adorable.io/ url = "https://api.adorable.io/avatars/285/{}.png".format(text.strip()) # reply with a photo to the name the user sent, # note that you can send photos by url and telegram will fetch it for you bot.sendPhoto(chat_id=chat_id, photo=url, reply_to_message_id=msg_id) except Exception: # if things went wrong bot.sendMessage(chat_id=chat_id, text="There was a problem in the name you used, please enter different name", reply_to_message_id=msg_id) return 'ok' @app.route('/set_webhook', methods=['GET', 'POST']) def set_webhook(): s = bot.setWebhook('{URL}{HOOK}'.format(URL=URL, HOOK=TOKEN)) if s: return "webhook setup ok" else: return "webhook setup failed" @app.route('/') def index(): return '.' if __name__ == '__main__': app.run(threaded=True)
هذا هو الجزء الأخير من الكود الذي ستكتبه في برنامجنا التعليمي. الآن يمكننا التقدم إلى الخطوة الأخيرة ، إطلاق تطبيقنا على Heroku.

قم بتشغيل تطبيقنا على Heroku
نحتاج إلى شيئين قبل أن نصنع تطبيقنا.
لا تستطيع Heroku معرفة المكتبات التي يستخدمها مشروعك ، لذلك علينا إخبارها باستخدام ملف requirements.txt
- والمشكلة الشائعة هي أنك أخطأت في كتابة المتطلبات ، لذا كن حذرًا - لإنشاء ملف المتطلبات باستخدام النقطة:
pip freeze > requirements.txt
الآن لديك ملف متطلباتك جاهز للعمل.
أنت الآن بحاجة إلى Procfile
الذي يخبر Heroku بمكان بدء تطبيقنا ، لذا قم بإنشاء ملف Procfile
وأضف ما يلي:
web: gunicorn app:app
خطوة ارتداد: يمكنك إضافة ملف .gitignore
إلى مشروعك بحيث لا يتم تحميل ملفات عدم الاستخدام إلى المستودع.
من لوحة معلومات Heroku ، قم بإنشاء تطبيق جديد. بمجرد القيام بذلك ، سيوجهك إلى صفحة النشر . بعد ذلك ، افتح علامة التبويب " الإعدادات " في نافذة جديدة وانسخ مجال التطبيق الذي سيكون مثل https://appname.herokuapp.com/
والصقه في متغير عنوان URL داخل credentials.py
.
الآن ، ارجع إلى علامة التبويب Deploy وتابع الخطوات:
ملاحظة: يمكن لمستخدمي نظامي التشغيل Windows و macOS اتباع الخطوات الموضحة هنا.
سجّل الدخول إلى Heroku:
$ heroku login
يرجى ملاحظة أن هذه الطريقة تتعطل أحيانًا في waiting for login
، إذا حدث هذا لك ، فحاول تسجيل الدخول باستخدام:
$ heroku login -i
قم بتهيئة مستودع Git في دليلنا:
$ git init $ heroku git:remote -a {heroku-project-name}
نشر التطبيق:
$ git add . $ git commit -m "first commit" $ git push heroku master
في هذه المرحلة ، سترى تقدم البناء في المحطة الخاصة بك. إذا سارت الأمور على ما يرام ، فسترى شيئًا كهذا:
remote: -----> Launching... remote: Released v6 remote: https://project-name.herokuapp.com/ deployed to Heroku remote: remote: Verifying deploy... done.
انتقل الآن إلى صفحة التطبيق (رابط المجال الذي نسخته من قبل) وأضفه إلى نهاية الرابط /setwebhook
بحيث يكون العنوان مثل https://appname.herokuapp.com/setwebhook
. إذا رأيت webhook setup ok
، فهذا يعني أنك جاهز للانطلاق!
اذهب الآن وتحدث إلى الروبوت الخاص بك
اللمسات الأخيرة والنصائح والحيل
لديك الآن روبوت Telegram الخاص بك وتشغيله ، على مدار الساعة طوال أيام الأسبوع ، دون الحاجة إلى تدخلك. يمكنك إضافة أي منطق تريده إلى الروبوت ، لذلك ، على سبيل المثال ، يمكنك جعل الروبوت الخاص بك أكثر واقعية عن طريق إضافة حالة "كتابة" وإرسال حالة الصورة على النحو التالي:
مقتطف الكود التالي من وظيفة respond()
:
if text == "/start": # print the welcoming message bot_welcome = """ Welcome to coolAvatar bot, the bot is using the service from http://avatars.adorable.io/ to generate cool looking avatars based on the name you enter so please enter a name and the bot will reply with an avatar for your name. """ # send the welcoming message bot.sendChatAction(chat_id=chat_id, action="typing") sleep(1.5) bot.sendMessage(chat_id=chat_id, text=bot_welcome, reply_to_message_id=msg_id) else: try: # clear the message we got from any non alphabets text = re.sub(r"\W", "_", text) # create the api link for the avatar based on http://avatars.adorable.io/ url = "https://api.adorable.io/avatars/285/{}.png".format(text.strip()) # reply with a photo to the name the user sent, # note that you can send photos by url and telegram will fetch it for you bot.sendChatAction(chat_id=chat_id, action="upload_photo") sleep(2) bot.sendPhoto(chat_id=chat_id, photo=url, reply_to_message_id=msg_id) except Exception: # if things went wrong bot.sendMessage(chat_id=chat_id, text="There was a problem in the name you used, please enter different name", reply_to_message_id=msg_id)
كما ترى في المقتطف ، أضفنا إجراءً كتابيًا عندما نكون على وشك إرسال معلومات حول الروبوت بتنسيق نصي ، وأضفنا إجراء تحميل الصورة عندما نكون على وشك إرسال صورة لجعل الروبوت أكثر واقعية. . يمكن العثور على المزيد من الإجراءات هنا.
يمكنك أيضًا تغيير صورة الروبوت والوصف من قناة BotFather لجعلها أكثر ودية.
يمكن العثور على العديد من الأمثلة البسيطة لروبوتات التلغرام على صفحة python-telegram-bot على GitHub.
يمكنك البناء على الروبوت الخاص بنا وجعله الروبوت الفائق التالي للذكاء الاصطناعي - كل ما عليك فعله هو دمج منطقك في وظيفة respond()
. على سبيل المثال ، يمكن أن يكون منطقك في وحدة منفصلة ويمكن استدعاؤه داخل دالة respond()
على النحو التالي:
. ├── app.py ├── telebot │ ├── credentials.py │ ├──ai.py │ | . │ | you can build your engine here │ | . │ └── __init__.py └── botenv
وداخل ai .py:
def generate_smart_reply(text): # here we can do all our work return "this is a smart reply from the ai!"
قم باستيراده الآن في التطبيق .py:
import re from time import sleep from flask import Flask, request import telegram From telebot.ai import generate_smart_reply from telebot.credentials import bot_token, bot_user_name,URL
ثم اتصل به داخل رمز respond()
.
def respond(): # retrieve the message in JSON and then transform it to Telegram object update = telegram.Update.de_json(request.get_json(force=True), bot) chat_id = update.message.chat.id msg_id = update.message.message_id # Telegram understands UTF-8, so encode text for unicode compatibility text = update.message.text.encode('utf-8').decode() # for debugging purposes only print("got text message :", text) # here call your smart reply message reply = generate_smart_reply(text) bot.sendMessage(chat_id=chat_id, text=reply, reply_to_message_id=msg_id)
يمكنك الآن تشغيل الروبوت بالطريقة التي تريدها - فابدأ وابتكار الشيء الكبير التالي!
أتمنى أن تكون قد استمتعت ببناء أول روبوت على Telegram.
مصادر إضافية
- بناء Chatbot باستخدام Telegram و Python
- إعداد Telegram Bot WebHook بالطريقة السهلة
- مستودع Python-telegram-bot
- النشر مع Git على Heroku
- توثيق Python Telegram Bot