Cara menggunakan bot Python Telegram menggunakan Webhooks di Google Cloud Platform
Alih-alih kata pengantar

- Tulis bot telegram. Sekarang bahkan anak sekolah pun menulis, ”katanya.
“Dan mengapa tidak,” pikir saya saat itu (“Baiklah, ya,” saya akan katakan sekarang).
Kami duduk bersama Bean dan menikmati secangkir kopi, kami mendiskusikan kemungkinan menguji ide dengan model kecerdasan buatan pada teman yang dekat dan tidak terlalu akrab. Lena, mantan kolega saya, dan dalam segala hal bukan seorang pirang yang baru saja lulus dari magistrasi, beralasan sebagai berikut. Dengan membuat bot, Anda dapat menghemat waktu dan energi pada antarmuka dengan berfokus pada inti dengan pembelajaran mesin. Anda harus mengakui bahwa tidak mungkin untuk menolak logika "olahragawan, anggota Komsomol dan cantik hanya" pada hari Minggu pagi yang indah itu. Itu diselesaikan. Telegram bot berarti bot telegram.
Pertama-tama, saya merangkak ke Google dan menemukan sejumlah besar tautan "cara membuat bot dalam 30 menit". Itu sangat menginspirasi saya sehingga saya tidak melampaui nama-nama itu dan mulai membuat kernel. Pada perkiraan pertama, saya harus menulis sistem pemrosesan permintaan pencarian menggunakan NLP (pemrosesan bahasa alami). Menulis kernel membutuhkan waktu, cukup masuk akal, (meskipun demikian, pengalaman Coca-Cola tidak dapat diminum). Dan beberapa hari kemudian saya siap untuk membungkus versi uji kernel pertama dalam beberapa perintah kirim-terima lainnya dalam beberapa jam, menjalankan semua ini di Telegram untuk keuntungan teman-teman saya. Tapi itu dia.
Tiba-tiba banyak masalah muncul. Setelah menghabiskan beberapa hari mencari di internet dan berbicara dengan kolega di toko, saya menyadari bahwa yang jelas tidak jelas, dan "instruksi" lain tidak akan sakit. Jadi artikel ini muncul.
Alih-alih masuk. Perpustakaan
Ada beberapa pustaka Python untuk bot telegram. Telegram sendiri mengacu pada tiga di antaranya: python-telegram-bot , pyTelegramBotAPI , AIOGram . Tautan ke perpustakaan ini dan contoh-contoh dalam bahasa lain dapat ditemukan di situs web Telegram di sini . Tentu saja, masih ada API Telegram itu sendiri . Dalam percobaan saya, saya mencoba dua varian API Telegram dan pyTelegramBotAPI. Dan sementara berhenti di yang kedua.
Secara umum, tayangan perpustakaan adalah sebagai berikut. Semua sangat mirip, yang tidak mengejutkan. Python-telegram-bot, menurut saya, memiliki dokumentasi terbaik dari semuanya, meskipun pekerjaan di atasnya telah berhenti (saya harap saya salah). Dapat dilihat bahwa pekerjaan berlanjut pada pyTelegramBotAPI, sebuah fungsionalitas baru muncul. AIOGram tampak lebih muda dan lebih hijau. Pada yang terakhir saya tidak suka bahwa alih-alih dokumentasi di webhooks ada tautan ke situs web Telegram. Tapi semuanya mengalir, semuanya berubah. Dan pilihan terakhir masih harus dibuat.
Kami tidak akan kembali ke masalah perpustakaan di artikel ini.
Adapun kode bot itu sendiri, seperti yang telah saya catat, ada banyak manual di Internet yang ditujukan untuk membuat program yang sederhana dan lebih kompleks. Untuk keperluan artikel ini, ini tidak berprinsip. Mari kita ambil kepastian dua contoh dari github resmi pyTelegramBotAPI:
- Telegram bot menggunakan polling ;
- Telegram bot menggunakan webhook .
Topik paling kontroversial dengan bot telegram adalah sertifikat ssl, webhook, dan diploing. Di sekitar ini dan fokuskan perhatian kita. Di bawah ini saya akan memberikan Anda petunjuk langkah demi langkah yang akan memungkinkan Anda untuk menempatkan bot telegram Anda di salah satu layanan cloud terbaik di dunia dalam cara yang paling sederhana dan paling dapat diandalkan dalam waktu singkat (setidaknya di tahun pertama). Pembuatan sertifikat ssl, pendaftarannya di Telegram dan masalah terkait lainnya juga akan disorot. Jika perlu, saya akan memberikan penjelasan mengapa kami menggunakan opsi ini atau itu, ini atau tim-tim itu.
Polling vs Webhook

Jika bukan karena konfrontasi antara polling vs webhook dan beberapa kesulitan (sebagian dibuat-buat) dengan webhook, artikel ini tidak akan diperlukan. Karena ini sangat penting, mari kita lihat lebih detail.
Apa itu bot dan bagaimana cara berkomunikasi dengan Telegram? Jelas, bot adalah program yang berjalan di komputer atau server Anda. Dan komunikasi dengan Telegram terjadi dengan mengirim dan menerima pesan. Dan jika semuanya jelas dengan mengirim pesan, satu opsi adalah mengirim (alamat "di mana" kita tahu). Ada dua opsi untuk menerima pesan bot dari Telegram.
Yang pertama adalah polling (terjemahan harfiah dari polling kata) dari server Telegram untuk pesan untuk bot. Yang kedua adalah "kotak surat" dengan alamat IP (webhook dapat diterjemahkan sebagai perangkap web), di mana pesan dari server Telegram tiba.
Analogi paling sederhana dengan surat asli. Biarkan mail (kantor pos) adalah server Telegram, dan Anda adalah bot Anda. Kemudian, dalam kasus pertama (pemungutan suara) Anda harus pergi ke kantor pos untuk korespondensi. Dan jika Anda ingin menerima pesan tanpa penundaan, Anda tidak harus pergi, tetapi benar-benar berlari bolak-balik tanpa jeda. Seperti yang kami pahami, tinggal di pos menunggu pesan dilarang! Dalam kasus kedua, Anda memberi tahu kantor pos alamat rumah Anda dan menunggu korespondensi dengan tenang di rumah, minum teh atau merokok bambu.
Tentu saja, bagi seseorang pilihan pertama tampaknya paling parah. Tapi, berbicara di antara kita, jika kita mengejar pesan kita mengirim sepotong besi dengan kode, maka kita seharusnya tidak peduli. Dan itu akan menjadi, jika bukan karena satu masalah. Dari waktu ke waktu, surat (server Telegram) terkadang ditutup untuk makan siang, lalu bergerak. Dan dalam opsi pertama Anda (polling) terjadi tragedi, yang di dunia bot yang sebenarnya berakhir dengan melayang dan gagal.
Dalam kasus kedua, "kotak surat" dengan alamat (webhook) tidak terjadi. Karena Anda, atau bot Anda, tidak pergi ke mana pun, tetapi hanya menunggu. Dan Anda tidak peduli ke mana kantor pos pindah, karena tukang pos membawa surat kepada Anda.
Jadi, dalam hal jumlah kode (lihat tautan di atas), opsi pertama tampaknya lebih sederhana. Dan yang kedua lebih logis, tetapi lebih sulit. Untuk implementasinya, Anda perlu mendapatkan alamat, mengonfirmasi keasliannya dan menaikkan server web, ke mana pesan dari Telegram akan datang.
Tentu saja, untuk opsi pertama dimungkinkan untuk menambahkan penanganan pengecualian ke kode. Misalnya, jika surat ditutup, tunggu dan tunggu. Namun Internet mengklaim bahwa semua bot yang sama dengan polling hanya untuk bermain.
Awalnya saya tidak percaya bahwa masalahnya sangat serius. Dan dia membuat pilihan dengan polling, menyarankan bahwa suatu hari nanti saya akan menulis ulang di webhooks. Tetapi itu tidak berhasil. Di komputer rumah saya dengan macOS, bot bekerja tanpa masalah selama satu jam dan dua (tentu saja, dengan VPN) dan tidak macet. Tetapi begitu saya mentransfernya ke server cloud di Linux, itu tidak bisa berfungsi selama 20 menit. Saya mencoba menyelesaikan masalah ini dengan berbagai cara dan pengaturan, tetapi hanya menerima kode kesalahan yang berbeda. Selawy, ini Telegram. Setelah kehilangan satu hari, saya harus mengambil webhook, tanpa penundaan. Pada akhirnya, saya ingin meluncurkan bot di server sekarang, dan tidak dalam setahun.
Kode penulisan ulang di webhook
The webhook tidak seram seperti yang dilukis.
Jika Anda sudah memiliki kode bot dengan polling, maka menyalinnya ke webhook tidak akan sulit. Bandingkan kode-kode dari contoh pustaka pyTelegramBotAPI. Anda akan menemukan persimpangan kode. Baris 13-25 dari contoh pertama sama dengan baris 56-67 dari contoh kedua . Ini adalah unit logis yang bertanggung jawab untuk memproses perintah, pesan, dan respons. Dalam hal ini, contohnya terlalu sederhana, tetapi mencerminkan esensi utama.
Dengan demikian, blok logis dari bot harus dibiarkan tidak berubah, dan sisanya harus diubah menggunakan kode salin-lalu dangkal di luar blok logis dari contoh kedua (mis., Salin baris 1-55 dan 70-87). Jika Anda melihat kode yang Anda salin, Anda dapat dengan mudah mengetahui bahwa menggunakan perpustakaan aiohttp, bot Anda menginstal server http dan mulai mendengarkan pada port yang dialokasikan untuk port ini, sedangkan modul Python ssl bertanggung jawab untuk enkripsi dan sertifikat. Selain aiohttp, ada perpustakaan lain yang serupa, contohnya dapat ditemukan di sini .
Jadi Kami punya bot dengan webhook. Tetap mengunggahnya ke server dan menjalankan, secara bersamaan menerima data untuk mengisi nilai kosong dalam kode API_TOKEN, WEBHOOK_HOST, WEBHOOK_PORT, WEBHOOK_SSL_CERT, WEBHOOK_SSL_PRIV. Di belakang masing-masing nilai-nilai ini adalah prosedur tertentu dengan makna rahasia.
Daftarkan bot di Telegram
Mari kita mulai dengan token bot. Untuk mendapatkannya, buka messenger Telegram dan sambungkan ke bot @BotFather. Masukkan perintah "/ newbot". Sebagai tanggapan, BotFather meminta kami untuk memasukkan nama dan nama pengguna bot kami dan mengirimkan token yang didambakan dari formulir "712308912: DLGSteczdUnPdnNYLzNikaGOhome7l9q3vova" (tentu saja, Anda akan memiliki yang berbeda). Kami menyimpan token, jangan tampilkan ke siapa pun. Dalam kode, kami menetapkannya ke variabel API_TOKEN.
Kemana memposting? Google Cloud Platform vs Heroku
Beberapa kata tentang siksaan memilih layanan cloud. Ada banyak contoh di Internet di mana bot telegram di-host di Heroku. Heroku adalah platform PaaS (platform sebagai layanan). Anda mengunggah kode ke GitHub, dan dari sana ke Heroku . Dan bot Anda mulai bekerja segera. Tidak perlu menginstal server, Python dan perpustakaan, semuanya sudah dilakukan untuk Anda. Setidaknya, idealnya. Solusi ini juga direkomendasikan kepada saya oleh salah satu teman saya. Tapi saya menolaknya.
Seperti yang saya pahami, pesan utama untuk rekomendasi Heroku di banyak manual “bot dalam 30 menit” adalah ketersediaan paket tarif gratis di Heroku. Tetapi, jika Anda perhatikan dengan seksama, ternyata paket ini sangat terbatas dan tidak akan memungkinkan Anda untuk menggunakan bot gratis yang bisa digunakan siang dan malam.
Tidak seperti Heroku, Google Cloud Platform (GCP) menawarkan pekerjaan gratis setahun penuh untuk semua layanan dalam $ 300. Untuk jumlah ini untuk tahun ini banyak hal yang bisa Anda coba. Menurut pendapat saya ini adalah hadiah yang indah, terutama bagi mereka yang terlibat dalam ilmu data. Dan, tentu saja, GCP juga PaaS, daftar layanan lengkap ada di sini . Ada solusi tanpa server, seperti pada Heroku. Saya memilih jalur yang lebih konservatif untuk kontrol yang lebih besar di masa depan, yaitu solusi server Compute Engine di GCP.
Platform cloud Google
Proyek, misalnya, ip statis, port
Buat proyek dan server
Kami pergi ke GCP, pilih "Mulai gratis" dan ikuti instruksi. Jika kita melakukan segalanya dengan benar, maka kita akan memiliki akun dengan jumlah $ 300 dan bahkan proyek pertama dibuat. Kami memilih proyek ini atau membuat yang lain di menu atas, yang tidak sulit. Dan kemudian pergi ke tab "Mesin Hitung / Instance VM" di menu samping yang terbuka.
Klik "CREATE INSTANCE" dan pilih konfigurasi server, misalnya, seperti yang ditunjukkan pada gambar di bawah. Anda dapat memilih konfigurasi mikro dan biayanya hanya $ 4 per bulan. Anda juga dapat mengacak, dana akan didebit dari hadiah dari Google seharga $ 300.
Hasilnya, kita dapatkan.
Membuat alamat ip statis
Di kolom "IP Eksternal", kami melihat alamat yang kami kendarai ke variabel WEBHOOK_HOST di bot kami (dalam contoh ini, 35.224.231.90). Kami akan menerima sertifikat ssl ke alamat ini nanti. Jika Anda berniat menggunakan bot untuk waktu yang lama (bahkan jika Anda mengubah server dalam GCP), maka saya sarankan untuk membuat alamat ip ini statis agar dapat menyimpannya saat beralih dari satu contoh ke yang lain. Ini dilakukan di bagian "VPC / alamat IP eksternal".
Kami mengubah bidang "Jenis" dari "Ephemeral" ke "Static", memberikan nama ke alamat statis sehingga Anda tidak akan bingung nanti jika Anda memiliki selusin alamat IP nanti.
Buka port
Agar webhook berfungsi dengan benar, kita perlu membuka port yang akan di ketuk Telegram. Saat ini (Juli 2019) Telegram mendukung port berikut: 443, 80, 88, 8443. Detail lebih lanjut Anda dapat melihat panduan Telegram lengkap di webhooks di sini . Kami akan membuka port 8443. Di bot kami, nilai ini sudah ditetapkan ke variabel WEBHOOK_PORT. Tetap mengkonfigurasi aturan firewall di GCP untuk instance webhook-bot kami. Bagaimana cara melakukannya? Buka tab "Aturan VPC / Firewall" dan klik "CREATE FIREWALL ATURAN".
Dan buat aturan, seperti yang ditunjukkan pada gambar di bawah.
Kami terhubung ke server, instal perpustakaan
Ini menyelesaikan pengaturan server dasar pada Google Cloud Platform. Kami membuat akun di GCP, membuat proyek, membuat server (contoh) berdasarkan Ubuntu 19.04 sebagai bagian dari proyek, memesan alamat IP, membuka port 8443.
Ada sedikit yang tersisa. Semoga kita bisa melakukannya tanpa penjelasan rinci tentang bagian instal dari Python dan perpustakaan. Karena itu, sebentar saja.
Buka tab GCP "Mesin Hitung / Instance VM" dan di bidang "Hubungkan" klik "SSH".
Terminal harus terbuka di komputer lokal Anda dengan akses ke instance di GCP. Ini adalah lingkungan Ubuntu yang normal. Instal conda atau virtualenv , buat lingkungan virtual dan instal Python 3 dengan perpustakaan utama. Selain itu, kami menginstal perpustakaan yang diperlukan untuk pengoperasian bot kami:
pip instal pyTelegramBotAPI
pip install aiohttp
Setelah instalasi, jangan tutup terminal, kami akan membutuhkannya.
Memperoleh sertifikat SSL yang ditandatangani sendiri untuk IP
Saya harus mengatakan bahwa di Internet sekitar topik sertifikat ssl untuk Telegram adalah horor yang kuat. Seperti yang dikatakan Mikhail Lermontov dalam hal ini:
"Kuda-kuda tercampur dalam tumpukan, orang-orang,
Dan tembakan seribu senjata
Digabung menjadi lolongan panjang ... "
Jika Anda membaca apa yang mereka tulis di Internet, ternyata jika bot tidak berfungsi di webhooks, maka sertifikat yang salah diterima adalah yang harus disalahkan. Namun, mereka tidak dapat didaftarkan di ip. Secara umum, Telegram tidak menerima sertifikat yang ditandatangani sendiri. Dan bahkan jika dia menerima sertifikat, ini tidak berarti bahwa bot Anda akan berfungsi, dan Telegram bahkan tidak akan mengirim kesalahan.
Ini adalah kisah horor. Mengapa saya menulis ini? Selain fakta bahwa kisah-kisah horor ini membuat saya kehilangan satu hari lagi, saya bahkan harus melewatkan menonton "The Hobbit". Bot saya awalnya menolak untuk bekerja di webhooks. Ini terjadi karena kesalahan saya ketika menempatkannya di server (maka saya tidak tahu ini). Tetapi karena kisah-kisah horor di atas, saya mencari masalah yang tidak ada, berfokus pada penyelesaian masalah dengan sertifikat ssl yang tidak ada. Tapi saya mendapatkan pengalaman yang sangat berharga. Saya mendaftarkan sertifikat untuk tahun-tahun mendatang baik untuk nama domain dan untuk ip, baik yang ditandatangani sendiri maupun berbayar, baik dalam bentuk dua file, dan dalam bentuk empat. Saya menemukan sertifikat apa yang masuk dan bagaimana membuat rantai mereka. Saya harap ini berguna.
Satu hal yang baik, Anda tidak perlu menginjak menyapu ini, saya sudah melakukannya untuk Anda. Saya sepenuhnya mengakui bahwa karena tidak ada "asap tanpa api", ada alasan untuk cerita-cerita horor seperti itu. Tetapi untuk hari ini situasinya tampaknya telah tenang.
Saat ini, kami akan menerima sertifikat ssl dengan cara yang paling nyaman bagi kami, yaitu di ip (dan bukan pada nama domain), ditandatangani sendiri (mis. Gratis) dan biaya hanya satu baris tanpa situs apa pun.
Di terminal (yang belum ditutup), siapkan direktori terpisah untuk menyimpan file sertifikat dan kunci pribadi. Pergilah ke direktori ini dan panggil perintah berikut dari situ.
$ openssl req -newkey rsa:2048 -sha256 -nodes -keyout url_private.key -x509 -days 3560 -out url_cert.pem
Sebagai tanggapan, Anda akan menerima permintaan untuk mengisi sejumlah bidang sederhana. Isi mereka dalam contoh di bawah ini. Tetapi, tentu saja, dengan benar menunjukkan kode negara, wilayah, kota, nama perusahaan Anda (jika ada), gantikan ip Anda dan email Anda.
Akibatnya, Anda akan mendapatkan dua file di direktori tempat Anda menjalankan perintah ini. Satu file url_cert.pem adalah sertifikat Anda, dan kunci pribadi kedua adalah url_private.key. Dalam kode bot, masing-masing variabel WEBHOOK_SSL_CERT dan WEBHOOK_SSL_PRIV dialokasikan untuk mereka. Jangan lupa untuk memasukkan jalur akses ke file-file ini bersama dengan namanya. Unduh salinan dan simpan untuk referensi di masa mendatang.
Jangan tutup terminal.
Daftarkan webhook di Telegram
Mendaftarkan webhook dengan sertifikat yang ditandatangani sendiri
Mungkin ini adalah bagian paling menarik dari “Apa yang akan dikatakan Telegram?”. Tanpa pembukaan, cukup gerakkan perintah berikut ke terminal Anda. Ganti alamat IP dengan milik Anda, jangan sentuh port 8443. Masukkan token yang diterima dari BotFather antara "/ bot" dan "/ setWebhook") sebagai ganti ANDA-TOKEN. Jalankan perintah dari direktori tempat sertifikat disimpan.
$ curl -F "url=https://35.224.231.90:8443" -F "certificate=@url_cert.pem" https://api.telegram.org/botYOUR-TOKEN/setWebhook
Jika semuanya benar, Anda akan menerima pesan singkat di terminal dari Telegram bahwa webhook diinstal.
Mendaftarkan webhook dengan sertifikat "benar"
Jika Anda tidak memiliki sertifikat yang ditandatangani sendiri, maka Anda dapat menginstal webhook dengan perintah berikut langsung dari browser.
https://api.telegram.org/botYOUR-TOKEN/setWebhook?url=https://YOUR.DOMAIN:8443/YOUR-TOKEN/
Harap perhatikan bahwa token Anda ditunjukkan dua kali. Selain itu, penting agar ANDA. DOMAIN ditentukan seperti yang ditunjukkan dalam sertifikat. Sebagai contoh. Saya mendaftarkan domain mydreem.com, pendaftar mengeluarkan sertifikat ssl untuk domain www.mydreem.com. Alih-alih ANDA. DOMAIN Anda perlu menentukan www.mydreem.com terakhir.
Bagaimana cara memeriksa apakah webhook diinstal?
Anda dapat memeriksa apakah webhook diinstal dari browser dengan perintah berikut:
https://api.telegram.org/botYOUR-TOKEN/getWebhookInfo
Ini berfungsi untuk semua kasus. Sebagai tanggapan, Anda harus mendapatkan sesuatu seperti ini jika webhook diinstal dan bot sedang berjalan:
{"ok":true,"result":{"url":"https://35.224.231.90:8443/712308912:DLGSteczdUnPdnNYLzNikaGOhome7l9q3vova/","has_custom_certificate":true,"pending_update_count":0,"max_connections":40}}
Atau seperti ini, ketika webhook diinstal, tetapi bot tidak berfungsi (tidak berjalan):
{"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}}
Bagaimana cara mereset webhook?
Terkadang Anda mungkin perlu mengubah sertifikat bot, misalnya, jika berpindah ke server lain (domain). Kemudian token tetap, dan sertifikat berubah (webhook diinstal ulang). Atau menjadi perlu untuk menjalankan bot bukan pada webhook, tetapi pada polling (jika webhook diinstal, polling tidak akan berfungsi). Dalam kedua kasus, perintah yang "me-reset" webhook berguna:
https://api.telegram.org/botYOUR-TOKEN/setWebhook
Sekarang semuanya siap untuk mengunggah kode ke server dan meluncurkan bot. Jika Anda adalah master game di baris perintah dengan sepuluh jari, maka itu tidak akan sulit bagi Anda. Dan sebentar lagi bot Anda akan bekerja. Jika tidak, bagian selanjutnya akan membantu meringankan tugas mengunggah / mengunduh file ke server Anda dan mengelolanya.
Cloud Shell atau “Drop Dead Beautiful”
Sebagai orang yang jauh dari administrasi sistem, sulit bagi saya untuk memahami mengapa, di era kejayaan kecerdasan buatan, kami masih berkomunikasi dengan server baris perintah seperti di masa lalu di komputer EU / SM -. Misalkan ada alasan yang tidak diketahui oleh manusia biasa. Maka fenomena seperti Cloud Shell di GCP harus diterima dengan penuh sukacita. Alat ini memungkinkan, meskipun dengan kruk, tetapi agak memudahkan pekerjaan yang belum tahu. Meskipun mungkin membahayakan jika Anda tidak tahu beberapa nuansa.
Cloud Shell menyediakan akses ke sumber daya cloud dari baris perintah langsung dari browser. Kamu bisa mudah kelola proyek dan sumber daya Anda tanpa menginstal Google Cloud SDK atau alat lain di sistem Anda (dua kalimat terakhir diambil dari halaman mereka, "mudah" dicoret oleh saya). Cara mengelola proyek Anda dari baris perintah dapat ditemukan di sini . Tetapi hal utama bagi kita bukanlah ini. Luncurkan Cloud Shell (lihat gif di bawah, diambil dari google).
Anda masuk ke Cloud Shell. Sekarang, jika Anda mengklik tombol dalam bentuk pensil, "editor teks versi beta" akan terbuka.
Di menu "Bantuan / Tentang", Anda dapat mengetahui bahwa itu adalah "theia-editor-for-cloudshell-preview 0.0.1". Di akhir artikel saya tidak akan membahas fitur bekerja dengan editor ini. Saya hanya akan menyoroti poin-poin penting. Ini bukan hanya editor untuk beberapa bahasa (hanya diperiksa dengan Python), tetapi juga manajer file. Anda dapat dengan mudah mengatur berbagi file antara Cloud Shell dan komputer lokal Anda. Anda dapat mentransfer file dan direktori dalam ruang Cloud Shell dengan mouse Anda.
Harap dicatat bahwa saya belum menulis di mana pun di atas yang menggunakan editor Anda dapat mengedit dan mengelola file di server Anda (misalnya). Tetapi bahkan ini sudah cukup untuk membuat hidup kita lebih mudah. Dan lebih lanjut tentang itu di bawah ini. Dan sekarang saya akan memberi tahu Anda sesuatu yang penting tentang Cloud Shell. Ini harus dipahami agar tidak masuk ke dalam kekacauan, seperti yang terjadi pada saya.
Cloud Shell adalah server berbasis Debian dengan ruang disk 5GB dan RAM 1,7GB. Beberapa perangkat lunak sudah diinstal sebelumnya di dalamnya (termasuk Python). Cloud Shell dapat dengan mudah dikira sebagai contoh Anda, instal conda di atasnya, buat env dan jalankan bot. Dan, jika bot itu polling, maka itu akan berhasil. Jika di webhook, maka tidak akan berfungsi, karena semua porta di Cloud Shell ditutup! Dan berapa banyak yang tidak membuka port pada instance, mereka tidak akan muncul di Cloud Shell.
Karena pengalaman muda dan kecerobohan saya yang masih muda, saya jatuh ke dalam perangkap ini dan mencoba untuk memahami sejak lama mengapa Telegram tidak melihat bot saya dengan pengait web. Kemudian saya sangat sedih. Tetapi sang istri merasa hangat, dan para putra meyakinkan, dan artikel ini muncul.
Ngomong-ngomong, Cloud Shell ada di luar ruang dan waktu (lelucon yang mendekati kebenaran). Jika Anda menghapus semua mesin virtual dan semua proyek dari rumah Anda, Cloud Shell Anda akan terus ada selama 120 hari dengan semua yang Anda unggah ke sana. Jangan bingung ini dengan membuat cadangan server Anda.
Jadi Diperingatkan, lalu dipersenjatai. Dan sekarang kita dapat berbicara tentang fasilitas dan mengenal beberapa perintah yang berguna.
Misalnya, jika Anda ingin menggunakan Cloud Shell sebagai terminal untuk mengakses server Anda (misalnya, webhook-bot), maka Anda perlu mengaktifkan instance Anda di baris perintah:
$ gcloud compute ssh webhook-bot --zone us-central1-a
Setelah itu, Anda menemukan diri Anda di baris perintah server Anda. Anda dapat kembali ke Cloud Shell dengan perintah "keluar". Misalkan Anda ingin menyalin beberapa file dari Cloud Shell ke instance. Untuk melakukan ini, pada prompt perintah Cloud Shell (bukan sebuah instance), ketikkan perintah berikut:
$ gcloud compute scp --recurse ~/telebot/my_favorite_robot.py webhook-bot:~/telebot --zone us-central1-a
Jika Anda mengubah sumber dengan tujuan, maka penyalinan dari mesin virtual ke Cloud Shell akan terjadi. Dalam contoh di bawah ini, kami menyalin file "ex1.py" dari direktori "/ contoh" dari server "webhook-bot" ke direktori "/ telebot2" dari Cloud Shell:
$ gcloud compute scp --recurse webhook-bot:~/examples/ex1.py --zone us-central1-a ~/telebot2
Ini dan perintah berbagi file lainnya dapat ditemukan di sini . Anda dapat bertukar tidak hanya file, tetapi juga seluruh direktori. Sebagai hasilnya, kita mendapatkan skema berikut yang membuat hidup kita lebih mudah. Dari komputer lokal, kami menyalin file dengan mengklik beberapa tombol pada mouse di Cloud Shell melalui manajer file editor "theia-editor-for-cloudshell-preview 0.0.1". Dan kemudian kita mengarahkan ini ke server kita (contoh) dengan baris perintah. Jika kita perlu mengedit sesuatu dengan cepat, kita dapat melakukannya di editor yang sama di Cloud Shell dan mengunggah file dengan perintah yang sama ke server. Ternyata cukup cepat.
Saya percaya bahwa ada cara yang lebih elegan dan nyaman untuk bertukar dan mengelola file untuk server cloud di GCP dalam segala hal (tanpa menginstal program tambahan di komputer lokal). Mungkin melalui Cloud Storage . Terus terang, saya hanya menghabiskan beberapa jam mencari dan bereksperimen tentang masalah ini. Oleh karena itu, saya akan berterima kasih jika Anda membagikan ide atau solusi kerja Anda di komentar.
Jadi Kami mengunggah file ke server (contoh). Dan, jika Anda belum meluncurkan bot, maka saatnya untuk melakukan ini dengan pergi ke terminal server, mengaktifkan lingkungan virtual yang diperlukan dan mengetik perintah seperti "python my_webhook_bot.py". Semuanya harus bekerja. Agar bot terus bekerja ketika terminal ditutup, bot harus diluncurkan di latar belakang. Misalnya, "nohup python my_webhook_bot.py &". Pencarian bagaimana cara mengeluarkan proses dari latar belakang dan menyelesaikannya, saya serahkan kepada Anda, kecuali, tentu saja, Anda sudah tahu.
Kesimpulan
Saya harap artikel ini bermanfaat bagi Anda, ini membantu menghemat waktu dan menghindari kesalahan yang saya buat saat menulis bot telegram dengan webhooks dan meletakkannya di server. Segala sesuatu yang dijelaskan dalam artikel itu, saya teliti sendiri, dan pada saat penulisan, Juli-Agustus 2019, itu bekerja seperti itu. Saya ingin mengucapkan terima kasih khusus kepada Mikhail Krutikov untuk berselancar bersama di hamparan layanan GCP dan untuk membantu merealisasikan sejumlah kebenaran penting. Saya terbuka untuk pertanyaan, diskusi, dan saya akan berterima kasih atas saran dalam komentar untuk artikel ini. Atau jangan ragu untuk menulis surat kepada saya di Telegram @Eduard_Lanchev .
Sampai saat terakhir, pertanyaan terbuka bagi saya apakah akan memberikan tautan ke bot telegram saya. Teman-teman meyakinkan saya bahwa itu sepadan. Anda dapat mengobrol dengan bot saya di @AelitaSoccerBot . Bot berada di awal perjalanan, dan masih banyak pekerjaan yang harus dilakukan di sana. Karena itu, tulis, jika ada yang salah, tulis jika Anda ingin berbagi pengalaman atau memberikan saran. Terima kasih saya tidak akan memiliki batas dalam batas yang wajar. Catatan Pada akhir 2019, bot dinonaktifkan karena kurangnya waktu untuk dukungan dan pengembangannya.
Dan pada akhirnya, saya ingin mengucapkan selamat kepada semua botovod dan kolega saya, datacientists!
Tautan yang bermanfaat
- API Telegram Bot
- Contoh Kode Bot
- python-telegram-bot
- pyTelegramBotAPI
- AIOGram
- ssl - TLS / SSL wrapper untuk objek socket
- Heroku
- Platform cloud Google
- Mesin hitung Google
- Panduan Luar Biasa Marvin untuk Semua Hal Webhook
- Kondominium
- Virtualenv
- Kulit awan
- Alat baris perintah komputasi gcloud
- Mentransfer file menggunakan alat baris perintah gcloud
- Penyimpanan cloud Google