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

كيفية نشر Python Telegram bot باستخدام Webhooks على Google Cloud Platform


بدلا من المقدمة


صورة

- اكتب روبوت البرقية. الآن حتى تلاميذ المدارس يكتبون.
"ولماذا لا ،" فكرت حينها ("حسنًا ، حسنًا" ، سأقول الآن).


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


أولاً وقبل كل شيء ، قمت بالزحف إلى Google ووجدت عددًا كبيرًا من الروابط "كيفية إنشاء روبوت في 30 دقيقة". لقد ألهمني ذلك كثيرًا لدرجة أنني لم أذهب إلى ما بعد الأسماء وبدأت في إنشاء نواة. في التقريب الأول ، اضطررت إلى كتابة نظام معالجة استعلام بحث باستخدام البرمجة اللغوية العصبية (معالجة اللغة الطبيعية). استغرقت كتابة النواة بعض الوقت ، وهو أمر معقول للغاية (ومع ذلك ، فإن تجربة كوكاكولا لا يمكن أن تكون في حالة سكر). وبعد بضعة أيام كنت مستعدًا للالتفاف على النسخة التجريبية الأولى من النواة في بضعة أوامر إرسال واستلام أخرى في غضون ساعتين ، مع تشغيل كل هذا في Telegram لصالح أصدقائي. ولكن كان هناك.


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


بدلا من الدخول. المكتبات


هناك العديد من مكتبات Python لبوتات البرقية. يشير Telegram نفسه إلى ثلاثة منهم: python-telegram-bot و pyTelegramBotAPI و AIOGram . يمكن العثور على روابط لهذه المكتبات والأمثلة بلغات أخرى على موقع Telegram على الويب هنا . بالطبع ، لا يزال هناك Telegram API نفسه . في أثناء تجاربي ، جربت نوعين مختلفين من واجهة برمجة تطبيقات Telegram و pyTelegramBotAPI. وبينما توقفت عند الثانية.


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


لن نعود إلى مسألة المكتبات في هذه المقالة.


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


  1. الروبوت برقية باستخدام الاقتراع .
  2. الروبوت برقية باستخدام webhook .

المواضيع الأكثر إثارة للجدل مع روبوتات البرقية هي شهادات SSL ، و webhooks ، و diploing. حول هذا وتركيز اهتمامنا. أدناه ، سأقدم إرشادات خطوة بخطوة تسمح لك بوضع روبوت البرقية الخاص بك على واحدة من أفضل الخدمات السحابية في العالم بأبسط الطرق وأكثرها موثوقية في أقصر وقت (وحتى مجانًا (في السنة الأولى على الأقل). سيتم أيضًا إبراز إنشاء شهادات SSL وتسجيلها في Telegram والقضايا الأخرى ذات الصلة. إذا لزم الأمر ، سأقدم إيضاحات حول سبب استخدامنا لهذا الخيار أو ذاك ، هذه الفرق أو تلك الفرق.


الاقتراع مقابل Webhook


صورة

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


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


الأول هو استطلاع (ترجمة حرفية لكلمة الاقتراع) لخادم Telegram لرسائل الروبوت. والثاني هو "صندوق بريد" مع عنوان IP (يمكن ترجمة webhook كمصيدة ويب) ، والتي تصل إليها الرسائل من خادم Telegram.


أبسط تشبيه مع البريد الحقيقي. دع البريد (مكتب البريد) هو خادم Telegram ، وأنت الروبوت الخاص بك. ثم ، في الحالة الأولى (الاقتراع) ، عليك أن تذهب إلى مكتب البريد للمراسلات. وإذا كنت ترغب في تلقي الرسائل دون تأخير ، فلن تضطر إلى الذهاب ، ولكن حرفيًا ذهابًا وإيابًا دون راحة. كما نفهم ، ممنوع العيش في البريد في انتظار الرسائل! في الحالة الثانية ، أخبرت مكتب البريد عنوان منزلك وانتظر المراسلات بهدوء في المنزل ، وشرب الشاي أو تدخين البامبو.


بالطبع ، بالنسبة للشخص يبدو الخيار الأول هو الأكثر حدة. ولكن ، إذا تحدثنا بيننا ، إذا ركضنا بعد الرسائل ، فإننا نرسل قطعة من الحديد برمز ، فلا ينبغي لنا أن نهتم. وهكذا سيكون الأمر ، إن لم يكن لمشكلة واحدة. من وقت لآخر ، يغلق البريد (خادم Telegram) أحيانًا لتناول طعام الغداء ، ثم ينتقل. وفي الخيار الأول الخاص بك (الاقتراع) تحدث مأساة ، والتي في العالم الحقيقي للبوتات تنتهي بتحومها وفشلها.


في الحالة الثانية ، لا يحدث "صندوق البريد" مع العنوان (webhook). لأنه لا أنت ولا روبوتك ، لا تذهب إلى أي مكان ، ولكن ببساطة تنتظر. ولا يهمك أين انتقل مكتب البريد ، لأن ساعي البريد يجلب إليك البريد.


وبالتالي ، من حيث مقدار الكود (انظر الرابط أعلاه) ، يبدو الخيار الأول أكثر بساطة. والثاني هو أكثر منطقية ، ولكن أكثر صعوبة. لتنفيذه ، تحتاج إلى الحصول على عنوان ، وتأكيد صحته ورفع خادم الويب ، الذي ستأتي إليه الرسائل من Telegram.


بالطبع ، بالنسبة للخيار الأول ، يمكن إضافة معالجة الاستثناء إلى الكود. على سبيل المثال ، إذا تم إغلاق البريد ، فانتظر وانتظر. لكن الإنترنت يدعي أن كل برامج الروبوت التي تستخدم نفس الاقتراع مخصصة للعب فقط.


في البداية لم أصدق أن المشكلة خطيرة للغاية. وقد أجرى خيارًا مع الاقتراع ، مما يشير إلى أنه في يوم ما سأعيد كتابته على صفحات الويب. لكن هذا لم ينجح. على جهاز الكمبيوتر المنزلي الخاص بي مع نظام التشغيل macOS ، عمل الروبوت دون مشاكل لمدة ساعة وساعتين (بالطبع ، مع VPN) ولم يتعطل. ولكن بمجرد أن قمت بنقله إلى خادم السحاب على نظام Linux ، لم يكن بإمكانه العمل لمدة 20 دقيقة. حاولت حل هذه المشكلة بطرق وإعدادات مختلفة ، لكنني تلقيت رمز خطأ مختلفًا فقط. سيلاوي ، هذه برقية. بعد أن فقدت يومًا ، اضطررت إلى تناول خنفساء الويب دون تأخير. في النهاية ، أردت إطلاق الروبوت على الخادم الآن ، وليس خلال عام.


إعادة كتابة التعليمات البرمجية على webhook


لا يعد Webhook مخيفًا كما هو مرسوم.


إذا كان لديك بالفعل رمز روبوت مع اقتراع ، فلن يكون من الصعب نسخه. قارن الرموز من أمثلة مكتبة pyTelegramBotAPI. ستجد تقاطع الرمز. الأسطر 13-25 من المثال الأول هي نفس الأسطر 56-67 من المثال الثاني . هذه وحدة منطقية مسؤولة عن معالجة الأوامر والرسائل والاستجابات. في هذه الحالة ، يكون المثال بسيطًا للغاية ، لكنه يعكس الجوهر الرئيسي.


# Handle '/start' and '/help' @bot.message_handler(commands=['help', 'start']) def send_welcome(message): bot.reply_to(message, """\ Hi there, I am EchoBot. I am here to echo your kind words back to you. Just say anything nice and I'll say the exact same thing to you!\ """) # Handle all other messages with content_type 'text' (content_types defaults to ['text']) @bot.message_handler(func=lambda message: True) def echo_message(message): bot.reply_to(message, message.text) 

وبالتالي ، يجب ترك الكتلة المنطقية للبوت دون تغيير ، ويجب تغيير الباقي باستخدام الكود الماضي العادي خارج الكتل المنطقية من المثال الثاني (على سبيل المثال ، نسخ الأسطر 1-55 و 70-87). إذا نظرت إلى الكود الذي تقوم بنسخه ، يمكنك بسهولة معرفة أنه باستخدام مكتبة aiohttp ، يقوم الروبوت الخاص بك بتثبيت خادم http ويبدأ في الاستماع على المنفذ المخصص لهذا المنفذ ، في حين أن وحدة Python ssl مسؤولة عن التشفير والشهادات. بالإضافة إلى aiohttp ، هناك مكتبات أخرى مماثلة ، يمكن العثور على أمثلة منها هنا .


هكذا. لدينا روبوت مع webhook. يبقى تحميله على الخادم وتشغيله ، مع تلقي البيانات في وقت واحد لملء القيم الفارغة في الكود API_TOKEN ، WEBHOOK_HOST ، WEBHOOK_PORT ، WEBHOOK_SSL_CERT ، WEBHOOK_SSL_PRIV. وراء كل من هذه القيم هو إجراء معين مع معنى سري.


تسجيل بوت في برقية


دعنا نبدأ مع رمز الروبوت. للحصول عليه ، انتقل إلى Telegram messenger والاتصال بـ botFather @ bot. أدخل الأمر "/ newbot". استجابةً لذلك ، يطالبنا BotFather بإدخال اسم واسم مستخدم الروبوت الخاص بنا وإرسال رمز مميز مطبوع من النموذج "712308912: DLGSteczdUnPdnNYLzNikaGOhome7l9q3vova" (بالطبع ، سيكون لديك اسم مختلف). نحن نحفظ الرمز المميز ، لا نظهره لأي شخص. في الكود نخصصه للمتغير API_TOKEN.


حيث للنشر؟ Google Cloud Platform vs Heroku


بضع كلمات عن عذاب اختيار الخدمة السحابية. هناك العديد من الأمثلة على الإنترنت حيث يتم استضافة روبوتات البرق في Heroku. Heroku هي عبارة عن منصة PaaS (منصة كخدمة). يمكنك تحميل الرمز إلى GitHub ، ومن هناك إلى Heroku . ويبدأ الروبوت الخاص بك العمل على الفور. لا حاجة لتثبيت الخادم ، Python والمكتبات ، كل شيء تم بالفعل من أجلك. على الأقل ، من الناحية المثالية. هذا الحل أوصي به أيضًا أحد أصدقائي. لكنني رفضت ذلك.


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


بخلاف Heroku ، توفر منصة Google Cloud Platform (GCP) عامًا كاملاً من العمل المجاني على جميع الخدمات في حدود 300 دولار. لهذا المبلغ للسنة الكثير من الأشياء التي يمكنك تجربتها. في رأيي ، هذه هدية رائعة ، خاصة لأولئك الذين يشاركون في علم البيانات. وبالطبع ، يعد برنامج شركاء Google المعتمدون أيضًا PaaS ، وهناك قائمة كاملة بالخدمات هنا . هناك حلول بدون خادم ، كما هو الحال في Heroku. لقد اخترت مسارًا أكثر تحفظًا لمزيد من التحكم في المستقبل ، وهو حل خادم Compute Engine على برنامج "شركاء Google المعتمدون".


منصة جوجل السحابية


المشروع ، على سبيل المثال ، IP ثابت ، ميناء


إنشاء مشروع وخادم


نذهب إلى برنامج "شركاء Google المعتمدون" ، وحدد "البدء مجانًا" واتبع الإرشادات. إذا فعلنا كل شيء بشكل صحيح ، فسنحصل على حساب بمبلغ 300 دولار وحتى أول مشروع تم إنشاؤه. نختار هذا المشروع أو ننشئ مشروعًا آخر في القائمة العليا ، وهذا ليس بالأمر الصعب. ثم انتقل إلى علامة التبويب "حساب المحرك / VM مثيل" في القائمة الجانبية التي تفتح.


صورة

انقر فوق "CREATE INSTANCE" وحدد تكوين الخادم ، على سبيل المثال ، كما هو موضح في الصورة أدناه. يمكنك اختيار التكوين الجزئي ، وبعد ذلك سيكلف 4 دولارات فقط في الشهر. يمكنك أيضًا خلط ورق اللعب ، سيتم خصم الأموال من هدية من Google بمبلغ 300 دولار.


صورة

نتيجة لذلك ، نحصل عليه.


صورة


جعل عنوان IP ثابت


في عمود "IP الخارجي" ، نرى العنوان الذي نوجهه إلى المتغير WEBHOOK_HOST في روبوتنا (في هذا المثال ، 35.224.231.90). سوف نتلقى شهادة SSL لهذا العنوان لاحقًا. إذا كنت تنوي استخدام برنامج الروبوت لفترة طويلة (حتى إذا قمت بتغيير الخادم داخل برنامج "شركاء Google المعتمدون") ، فنوصيك بجعل عنوان IP ثابتًا لحفظه عند التبديل من مثيل إلى آخر. يتم ذلك في قسم "عناوين VPC / IP الخارجية".


صورة

نقوم بتغيير حقل "الكتابة" من "سريع الزوال" إلى "ثابت" ، مع إعطاء اسم لعنوان ثابت حتى لا تتشوش لاحقًا إذا كان لديك عشرات عناوين IP في وقت لاحق.


صورة

صورة

صورة


فتح ميناء


لكي يعمل webhook بشكل صحيح ، نحتاج إلى فتح المنفذ الذي ستقر عليه Telegram. حاليًا (يوليو 2019) يدعم Telegram المنافذ التالية: 443 ، 80 ، 88 ، 8443. مزيد من التفاصيل يمكنك رؤية دليل Telegram الكامل على webhooks هنا . سنفتح المنفذ 8443. في روبوتنا ، تم تعيين هذه القيمة بالفعل لمتغير WEBHOOK_PORT. يبقى تكوين قاعدة جدار الحماية في برنامج "شركاء Google المعتمدون" لمثيل webhook-bot الخاص بنا. كيف نفعل ذلك؟ انتقل إلى علامة التبويب "قواعد VPC / Firewall" وانقر على "CREATE FIREWALL RULE".


صورة

وإنشاء قاعدة ، كما هو موضح في الصورة أدناه.


صورة


نحن نتصل بالخادم ، ونثبت المكتبات


هذا يكمل إعداد الخادم الأساسي على Google Cloud Platform. حصلنا على حساب في برنامج "شركاء Google المعتمدون" ، وأنشأنا مشروعًا ، وأنشأنا خادمًا (مثيلًا) يستند إلى Ubuntu 19.04 كجزء من المشروع ، وحجز عنوان IP ، فتح المنفذ 8443.


هناك القليل من اليسار. نأمل أن نتمكن من الاستغناء عن وصف مفصل لجزء تثبيت Python والمكتبات. لذلك ، لفترة وجيزة.


انتقل إلى علامة التبويب GCP "حساب محرك / مثيل VM" وفي الحقل "اتصال" ، انقر فوق "SSH".


صورة

يجب أن تفتح المحطة الطرفية على الكمبيوتر المحلي الخاص بك مع إمكانية الوصول إلى المثيل على GCP. هذه بيئة أوبونتو طبيعية. قم بتثبيت conda أو virtualenv ، وإنشاء بيئة افتراضية وتثبيت Python 3 مع المكتبات الرئيسية. بالإضافة إلى ذلك ، نقوم بتثبيت المكتبات اللازمة لتشغيل الروبوت لدينا:
نقطة تثبيت pyTelegramBotAPI
نقطة تثبيت aiohttp


بعد التثبيت ، لا تغلق المحطة ، سنحتاج إليها.


الحصول على شهادة SSL موقعة ذاتيا لـ IP


يجب أن أقول أنه على شبكة الإنترنت حول موضوع شهادات SSL ل Telegram هو رعب قوي. كما قال ميخائيل ليرمونتوف في هذا الصدد:


"الخيول تختلط في كومة ، والناس ،
وكرات من ألف بندقية
اندمجت في عواء طويل ... "


إذا قرأت ما يكتبون على الإنترنت ، فقد تبيّن أنه إذا لم تعمل الروبوتات على صفحات الويب ، فإن اللوم يقع على الشهادات التي تم استلامها بشكل غير صحيح. وحتى الآن ، لا يمكن تسجيلها على الملكية الفكرية. بشكل عام ، لا يقبل Telegram الشهادات الموقعة ذاتياً. وحتى إذا قبل الشهادة ، فإن هذا لا يعني أن روبوتك سيعمل ، ولن يرسل Telegram خطأ.


هذه هي قصص الرعب. لماذا أكتب هذا؟ إلى جانب حقيقة أن قصص الرعب هذه كلفتني يومًا آخر ضائعًا ، اضطررت حتى لتخطي مشاهدة "الهوبيت". روبوتي رفض في البداية العمل على webhooks. حدث هذا بسبب أخطائي عند وضعه على الخادم (ثم لم أكن أعرف ذلك). ولكن بسبب قصص الرعب المذكورة أعلاه ، كنت أبحث عن مشكلة ليست هناك ، مع التركيز على حل المشاكل مع شهادات SSL التي لم تكن هناك. لكني اكتسبت خبرة لا تقدر بثمن. لقد سجلت شهادات للسنوات القادمة لكل من أسماء النطاقات والملكية الفكرية ، سواء الموقعة ذاتياً أو المدفوعة ، سواء في شكل ملفين أو في شكل أربعة. اكتشفت ما هي الشهادات التي تأتي فيها وكيفية صنع سلاسل منها. آمل أن يكون هذا مفيدًا.


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


في الوقت الحالي ، سوف نتلقى شهادة ssl بالطريقة الأكثر ملاءمة بالنسبة لنا ، أي على عنوان IP (وليس على اسم مجال) ، والموقع الذاتي (أي مجانًا) ويكلف سطرًا واحدًا فقط دون أي مواقع.


في الجهاز الطرفي (الذي لم نغلقه بعد) ، قم بإعداد دليل منفصل نقوم فيه بحفظ ملف الشهادة والمفتاح الخاص. انتقل إلى هذا الدليل واتصل بالأمر التالي منه.


 $ openssl req -newkey rsa:2048 -sha256 -nodes -keyout url_private.key -x509 -days 3560 -out url_cert.pem 

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


صورة

نتيجة لذلك ، ستحصل على ملفين في الدليل الذي قمت بتشغيل هذا الأمر منه. ملف url_cert.pem واحد هو شهادتك ، والمفتاح الخاص الثاني هو url_private.key. في رمز bot ، يتم تخصيص المتغيرات WEBHOOK_SSL_CERT و WEBHOOK_SSL_PRIV لهما ، على التوالي. لا تنسَ إدخال مسارات الوصول إلى هذه الملفات مع الأسماء. قم بتنزيل النسخ واحتفظ بها للرجوع إليها مستقبلاً.


لا تغلق المحطة.


سجل webhook في Telegram


تسجيل webhook مع شهادة موقعة ذاتيا


ربما هذا هو الجزء الأكثر إثارة في "ماذا سيقول Telegram؟". بدون أي ديباجات ، ما عليك سوى دفع الأمر التالي إلى جهازك. استبدل عنوان IP بعنوانك ؛ لا تلمس المنفذ 8443. أدخل الرمز المميز الذي تم استلامه من BotFather بين "/ bot" و "/ setWebhook") بدلاً من رمزك. قم بتشغيل الأمر من الدليل حيث يتم تخزين الشهادات.


 $ curl -F "url=https://35.224.231.90:8443" -F "certificate=@url_cert.pem" https://api.telegram.org/botYOUR-TOKEN/setWebhook 

إذا كان كل شيء صحيحًا ، فستتلقى في المحطة رسالة موجزة من Telegram مفادها أنه تم تثبيت webhook.


تسجيل webhook مع الشهادة "الصحيحة"


إذا لم يكن لديك شهادة موقعة ذاتيًا ، فيمكنك تثبيت webhook باستخدام الأمر التالي مباشرةً من المستعرض.


 https://api.telegram.org/botYOUR-TOKEN/setWebhook?url=https://YOUR.DOMAIN:8443/YOUR-TOKEN/ 

يرجى ملاحظة أن الرمز المميز يشار مرتين. بالإضافة إلى ذلك ، من المهم تحديد YOUR.DOMAIN كما هو موضح في الشهادة. على سبيل المثال لقد سجلت نطاق mydreem.com ، أصدرني المسجل شهادة SSL للنطاق www.mydreem.com. بدلاً من YOUR.DOMAIN ، يلزمك تحديد www.mydreem.com الأخير.


كيفية التحقق من تثبيت webhook؟


يمكنك التحقق من تثبيت webhook من المستعرض باستخدام الأمر التالي:


 https://api.telegram.org/botYOUR-TOKEN/getWebhookInfo 

هذا يعمل لجميع الحالات. استجابةً لذلك ، يجب أن تحصل على شيء مثل هذا في حالة تثبيت webhook وتشغيل الروبوت:


 {"ok":true,"result":{"url":"https://35.224.231.90:8443/712308912:DLGSteczdUnPdnNYLzNikaGOhome7l9q3vova/","has_custom_certificate":true,"pending_update_count":0,"max_connections":40}} 

أو هكذا ، عند تثبيت webhook ، ولكن لا يعمل الروبوت (لا يعمل):


 {"ok":true,"result":{"url":"https://35.224.231.90:8443/712308912:DLGSteczdUnPdnNYLzNikaGOhome7l9q3vova/","has_custom_certificate":true,"pending_update_count":2,"last_error_date":1564506964,"last_error_message":"Connection refused","max_connections":40}} 

كيفية إعادة تعيين webhook؟


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


 https://api.telegram.org/botYOUR-TOKEN/setWebhook 

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


سحابة قذيفة أو "إسقاط الميت جميلة"


كشخص بعيد عن إدارة النظام ، من الصعب علي أن أفهم لماذا ، في عصر انتصار الذكاء الاصطناعي ، ما زلنا نتواصل مع خوادم سطر الأوامر كما في الأيام الخوالي على جهاز كمبيوتر الاتحاد الأوروبي / SM. لنفترض أن هناك أسبابًا غير معروفة لمجرد البشر. ثم يجب قبول ظاهرة مثل Cloud Shell في برنامج شركاء Google المعتمدين بفرح عظيم. تسمح هذه الأداة ، على الرغم من العكازات ، ولكن إلى حد ما تسهيل عمل غير مستهل. على الرغم من أنه قد يضر إذا كنت لا تعرف بعض الفروق الدقيقة.


يوفر Cloud Shell الوصول إلى الموارد السحابية من سطر الأوامر مباشرة من المتصفح. يمكنك ذلك سهل قم بإدارة مشاريعك ومواردك دون تثبيت Google Cloud SDK أو أدوات أخرى في نظامك (يتم أخذ الجملتين الأخيرتين من صفحتهما ، لقد تم "شطبها" بسهولة من جانبي). كيفية إدارة المشاريع الخاصة بك من سطر الأوامر ويمكن الاطلاع هنا . لكن الشيء الرئيسي بالنسبة لنا ليس هذا. قم بتشغيل Cloud Shell (راجع gif أدناه ، مأخوذ من google).


صورة

قمت بتسجيل الدخول إلى Cloud Shell. الآن ، إذا قمت بالنقر فوق الزر في شكل قلم رصاص ، فسيتم فتح "محرر نصوص الإصدار التجريبي".


صورة

في قائمة "Help / About" ، يمكنك معرفة أنها "theia-editor-for-cloudshell-preview 0.0.1". في نهاية المقال ، لن أتطرق إلى ميزات العمل مع هذا المحرر. سأسلط الضوء على النقاط الرئيسية فقط. هذا ليس محررًا لعدة لغات فقط (تم التحقق منه فقط مع Python) ، ولكن أيضًا مدير ملفات. يمكنك بسهولة تنظيم مشاركة الملفات بين Cloud Shell وجهاز الكمبيوتر المحلي الخاص بك. يمكنك نقل الملفات والدلائل داخل مساحة Cloud Shell باستخدام الماوس.


يرجى ملاحظة أنني لم أكتب في أي مكان أعلاه أنه باستخدام المحرر ، يمكنك تحرير وإدارة الملفات على الخادم الخاص بك (على سبيل المثال). ولكن حتى هذا يكفي لجعل حياتنا أسهل. وأكثر عن ذلك أدناه. والآن سوف أخبرك بشيء مهم عن Cloud Shell. يجب فهم هذا حتى لا نقع في الفوضى ، كما حدث لي.


Cloud Shell هو خادم يستند إلى دبيان ، ولديه 5 جيجابايت من مساحة القرص و 1.7 جيجابايت من ذاكرة الوصول العشوائي. تم بالفعل تثبيت بعض البرامج عليه (بما في ذلك Python). يمكن بسهولة أن تكون مخطئًا على Cloud Shell على سبيل المثال ، وتثبيت كوندا عليه ، وإنشاء env وتشغيل الروبوت. وإذا كان الروبوت يقوم بالاقتراع ، فسوف ينجح. إذا كان ذلك على webhook ، فلن يعمل ، لأن جميع المنافذ على Cloud Shell مغلقة! وكم لا تفتح المنافذ في المثيل ، فلن تظهر على Cloud Shell.


بسبب قلة شبابي وإهمالهم ، فقد وقعت في هذا الفخ وحاولت أن أفهم لوقت طويل لماذا Telegram لا ترى روبوتي مع webhook. ثم كنت مستاء جدا. لكن الزوجة تحسنت ، وطمأن الأبناء ، وظهرت هذه المقالة.


بالمناسبة ، توجد Cloud Cloud خارج المكان والزمان (نكتة قريبة من الحقيقة). إذا قمت بحذف جميع الحالات وجميع المشاريع من منزلك ، فستظل خدمة Cloud Shell موجودة لمدة 120 يومًا أخرى مع كل ما قمت بتحميله إليها. لا تخلط بين هذا مع النسخ الاحتياطي للخوادم الخاصة بك.


هكذا. حذر ، ثم المسلحة. والآن يمكننا التحدث عن وسائل الراحة والتعرف على بعض الأوامر المفيدة.


على سبيل المثال ، إذا كنت تريد استخدام Cloud Shell كمحطة للوصول إلى الخادم الخاص بك (على سبيل المثال ، webhook-bot) ، فأنت بحاجة إلى تنشيط مثيلك في سطر الأوامر:


 $ gcloud compute ssh webhook-bot --zone us-central1-a 

بعد ذلك ، ستجد نفسك في سطر أوامر الخادم الخاص بك. يمكنك العودة إلى Cloud Shell باستخدام الأمر "exit". افترض أنك تريد نسخ بعض الملفات من Cloud Shell إلى مثيل. للقيام بذلك ، في موجه أوامر Cloud Shell (وليس مثيلًا) ، اكتب الأمر التالي:


 $ gcloud compute scp --recurse ~/telebot/my_favorite_robot.py webhook-bot:~/telebot --zone us-central1-a 

إذا قمت بتغيير المصدر مع الوجهة ، فسيحدث النسخ من المثيل إلى Cloud Shell. في المثال أدناه ، نقوم بنسخ الملف "ex1.py" من دليل "/ أمثلة" خادم "webhook-bot" إلى الدليل "/ telebot2" في Cloud Shell:


 $ gcloud compute scp --recurse webhook-bot:~/examples/ex1.py --zone us-central1-a ~/telebot2 

يمكن العثور على هذه الأوامر وغيرها من أوامر مشاركة الملفات هنا . يمكنك تبادل الملفات ليس فقط ، ولكن أيضا الدلائل بأكملها. نتيجة لذلك ، نحصل على المخطط التالي الذي يجعل حياتنا أسهل. من الكمبيوتر المحلي ، نقوم بنسخ الملفات عن طريق النقر فوق اثنين من الأزرار الموجودة على الماوس في Cloud Shell من خلال مدير ملفات المحرر "theia-editor-for-cloudshell-preview 0.0.1". ثم نقوم بإعادة توجيه هذا إلى خادمنا (مثيل) باستخدام سطر الأوامر. إذا كنا بحاجة إلى تحرير شيء بسرعة ، فيمكننا القيام بذلك في نفس المحرر في Cloud Shell وتحميل الملفات بنفس الأمر إلى الخادم. اتضح بسرعة كبيرة.


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


هكذا. قمنا بتحميل الملفات إلى الخادم (مثيل). وإذا لم تكن قد قمت بتشغيل الروبوت بعد ، فقد حان الوقت للقيام بذلك عن طريق الانتقال إلى محطة الخادم وتفعيل البيئة الافتراضية اللازمة وكتابة أمر مثل "python my_webhook_bot.py". كل شيء يجب أن تعمل. لكي يستمر الروبوت في العمل عند إغلاق الجهاز ، يجب إطلاقه في الخلفية. على سبيل المثال ، "nohup python my_webhook_bot.py &". سعيا وراء كيفية إخراج العملية من الخلفية وإكمالها ، أتركك ، إلا إذا كنت تعرف بالفعل.


استنتاج


آمل أن يكون هذا المقال مفيدًا لك ، فقد ساعد في توفير الوقت وتجنب الأخطاء التي ارتكبتها عند كتابة روبوت برقية باستخدام webhooks ووضعه على الخادم. كل ما تم وصفه في المقال ، مررت بنفسي ، وفي وقت كتابة هذا التقرير ، من يوليو إلى أغسطس من عام 2019 ، كان الأمر كذلك تمامًا. أود أن أعرب عن امتناني الخاص لميخائيل كروتيكوف لتصفحه المشترك على امتداد خدمات برنامج "شركاء Google المعتمدون" وللمساعدة في إدراك عدد من الحقائق المهمة. أنا منفتح على الأسئلة والمناقشات ، وسأكون ممتناً للنصيحة الواردة في التعليقات على هذه المقالة. أو لا تتردد في الكتابة إلي في TelegramEduard_Lanchev.


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


وفي النهاية ، أود أن أتمنى النجاح لجميع botovods وزملائي ، مراكز البيانات!


روابط مفيدة


  1. Telegram Bot API
  2. أمثلة كود بوت
  3. الثعبان-برقية-بوت
  4. pyTelegramBotAPI
  5. AIOGram
  6. SSL - غلاف TLS / SSL لكائنات المقبس
  7. Heroku
  8. منصة جوجل السحابية
  9. محرك حساب جوجل
  10. دليل مارفن الرائع لجميع الأشياء Webhook
  11. كوندا
  12. Virtualenv
  13. سحابة قذيفة
  14. أداة سطر الأوامر gcloud حساب
  15. نقل الملفات باستخدام أداة سطر الأوامر gcloud
  16. جوجل سحابة التخزين

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


All Articles