Gradimo Telegram bota u Yandex Cloud-u

Gradimo Telegram bota u Yandex Cloud-u

Danas ćemo od dostupnog materijala sastaviti u Yandex Cloud-u Telegram bota z uporabo Yandex Cloud Functions (ali Yandex funkcije — skraćeno) i Yandex Object Storage (ali Objektno skladište — radi jasnoće). Kod će biti na Node.js. Međutim, postoji jedan pikantan detalj — neka organizacija zvan RosKomCenzor (cenzura je zabranjena članom 29. Ustava RF), ne dozvoljava internet provajderima u Rusiji da šalju upite ka Telegram API-ju na adresu: https://api.telegram.org/. Pa mi tako i nećemo — ako nema, nema. U našem koferu imamo tzv. webhook-ove — pomoću njih ne šaljemo zahteve na konkretnu adresu, već samo šaljemo svoj zahtev kao odgovor na bilo koji zahtev ka nama. Drugim rečima, kao u Odesi — odgovaramo pitanjem na pitanje. Zbog toga Telegram API-ju u našem kodu neće biti.

Omejitev odgovornostiPomenuta imena državnih organizacija u ovom članku su izmišljena, a eventualne sličnosti sa imenima stvarnih organizacija su slučajne.

Dakle, napravićemo bota koji će nas snabdevati pametnim mislima. Tačno onakvog kao na slici:

Gradimo Telegram bota u Yandex Cloud-u

Možete ga isprobati u akciji — evo imena: @SmartThoughtsBot. Primetili ste dugme „Veština Alise”? Это потому, что бот является своеобразным «компаньоном» для одноименного veštine Alise, tj. on obavlja iste funkcije kao i veština Alise i, možda, oni mogu mirno koegzistirati reklamirajući jedni druge. O tome kako stvoriti veštinu Pametne Misli govori se u članku Alisa stiče veštinu. Sada (nakon nekih izmena već nakon objavljivanja pomenutog članka) na pametnom telefonu ova veština će izgledati otprilike ovako:

Gradimo Telegram bota u Yandex Cloud-u

Kreiranje bota

Voleo bih da ovaj vodič bude koristan svima, uključujući i početnike u „gradnji botova”. Zato ću u ovom odeljku prilično detaljno opisati kako zapravo praviti u Telegram‘e botove. Za one kojima ova informacija nije potrebna — pređite na sledeće odeljke.

Otvorimo aplikaciju Telegaram, pozivamo oca svih botova (kod njih je sve kao kod ljudi) — @BotFather — i za početak daćemo mu komandu /help, kako bismo osvežili sećanje na to šta možemo raditi. Sada će nas zanimati komanda /newbot.

Gradimo Telegram bota u Yandex Cloud-u

Pošto je opisani bot već napravljen, radi demonstrativnih svrha napravit ću na kratko drugog bota (kasnije ću ga obrisati). Nazvaću ga DemoHabrBot. Imena (username) svih telegram botova moraju se završavati rečju bot, na primer: MyCoolBot ili my_cool_bot — to je za robote. Najprej damo robotu ime (name) — to pa je za ljudi. Ime je lahko v katerem koli jeziku, lahko vsebuje presledke in ne rabi končati z besedo bot, in celo ni potrebno, da je edinstveno. V tem primeru sem temu robotu dal ime Demo Habr.

Gradimo Telegram bota u Yandex Cloud-u

Zdaj izberemo ime robota (username, tisto, ki je za robote). Imenujmo ga DemoHabrBot. Vse, kar se je nanašalo na ime robota (name) se sploh ne nanaša na njegovo ime — username (ali se nanaša, vendar ravno nasprotno). Po uspešnem ustvarjanju edinstvenega imena robota, moramo kopirati in shraniti (v strogi tajnosti!) žeton, ki je prikazan na posnetku zaslona z rdečo puščico. Z njegovo pomočjo bomo malo kasneje nastavili izhodni Telegramwebhook na našo Yandex funkcijo.

Gradimo Telegram bota u Yandex Cloud-u

Zdaj pa damo ukaz očetu vseh robotov: /mybots, in pokazal bo seznam vseh robotov, ki smo jih ustvarili. Pustimo za zdaj na miru sveže ustvarjenega robota Demo Habr (ustanovljen je bil, da pokaže, kako ustvariti robote, a ga bomo danes še uporabili za druge demonstracijske namene), in let's take a look at robot Pametne Misli (@SmartThoughtsBot). Kliknemo gumb z njegovim imenom na seznamu robotov.

Gradimo Telegram bota u Yandex Cloud-u

Tukaj lahko nastavimo našega robota. S klikom na gumb Edit… gremo na urejanje ene od možnosti. Na primer, s klikom na gumb Edit Name lahko spremenimo ime robota, recimo namesto Pametne Misli, napišemo Bizarne Ideje. Botpic — to je avatar robota, mora biti najmanj 150 x 150 px. Opis — to je kratki opis, ki ga uporabnik vidi ob prvem zagonu robota, kot odgovor na vprašanje: Kaj lahko ta robot počne? O — še bolj kratek opis, ki se posreduje s povezavo na robota (https://t.me/SmartThoughtsBot) ali pri ogledu informacij o njem.

Gradimo Telegram bota u Yandex Cloud-u

Preostalo nam je le še nastaviti ukaze. Za to pritisnemo gumb Edit Commands. Za standardizacijo uporabniške prakse Telegram priporočamo, da vedno uporabite dva ukaza: /start in /help, in če robot potrebuje nastavitve — dodatni ukaz /settings. Naš robot je preprost kot krogla, zato nastavitve zaenkrat niso potrebne. Zapišemo dva prva ukaza, ki jih bomo nato obdelali v kodi. Zdaj, če uporabnik v vnosno polje vnese poševnico (znak poševnice: /), se prikaže seznam ukazov za hitro izbiro. Tako kot na sliki: levo — nastavljamo ukaze preko očeta robota; desno pa so ti ukazi že na voljo uporabnikom v našem robotu.

Gradimo Telegram bota u Yandex Cloud-u

Yandex funkcija

Zdaj, ko je naš robot ustvarjen, preidite na Yandex.Cloud, da ustvarimo funkcijo, ki bo izvajala kodo našega bota. Če še niste delali z Yandex.Cloud , preberite gradivo Alice in Bitrix Land, nato pa — Yandex funkcije pošiljajo e-pošto. Skoraj sem prepričan, da bosta ti dve relativno majhni članki dovolj za osnovno razumevanje teme.

Torej, v konzoli Yandex.Cloud v levem navigacijskem meniju izberemo točko Cloud Functions, nato pa pritisnite gumb Ustvari funkcijo. Dajte ji ime, in za sebe — kratko opisno besedilo.

Gradimo Telegram bota u Yandex Cloud-u

Po pritisku na gumb Kreirati in po nekaj sekundah se nova funkcija pojavi na seznamu vseh funkcij. Kliknite na njeno ime — to nas bo pripeljalo na stran Pregled naše funkcije. Tukaj moramo vklopiti (On) preklopnik Javna funkcija, da postane dostopna iz zunanjega (za Yandex.Cloud) sveta, ter vrednosti polj Povezava za klic in Identifikator — hranite v globoki skrivnosti pred vsemi, razen pred seboj in Telegramom, da vaša funkcija ne bi bila dostopna različnim prevarantom.

Gradimo Telegram bota u Yandex Cloud-u

Sedaj z levo ploščo preidimo v Urednik funkcije. Pustimo zaenkrat na kratko ob strani naše Pametne Misli, in ustvarimo minimalno funkcijo predloge za preverjanje delovanja našega bota… Kakor koli že, ta funkcija je v tem kontekstu naš bot… Skratka, zdaj in tukaj bomo ustvarili preprostega bota, ki bo 'zrcalil' (t.j. pošiljal nazaj) zahteve uporabnikov. To predlogo je mogoče vedno uporabiti pri ustvarjanju novih telegram botov, da se prepričamo, da je povezava z Telegramomv redu. Kliknite Ustvari datoteko, poimenujte jo index.js, in v spletnem Uredniku kode prilepite naslednjo kodo v to datoteko:

module.exports.bot = async (event) => {
  
  const body = JSON.parse(event.body);

  const msg = {
    'method': 'sendMessage',
    'chat_id': body.message.chat.id,
    'text': body.message.text
  };

  return {
    'statusCode': 200,
    'headers': {
      'Content-Type': 'application/json'
    },
    'body': JSON.stringify(msg),
    'isBase64Encoded': false
  };
};

V konzoli Yandex.Cloud bi to moralo izgledati nekako takole:

Gradimo Telegram bota u Yandex Cloud-u

Nato nekoliko nižje navedite Vhodno točko — index.bot, gde index je ime datoteke (index.js), medtem ko je bot — ime funkcije (module.exports.bot). Vsa ostala polja pustimo 'kot so', in v zgornjem desnem kotu pritisnite gumb Ustvari različico. Čez nekaj sekund bo ta različica funkcije ustvarjena. Kmalu po testiranju webhooka, bomo ustvarili novo različico — Pametne Misli.

Gradimo Telegram bota u Yandex Cloud-u

Objektno skladište

Zdaj, ko imamo ustvarjeno Yandex funkcija, dajmo, dok smo u konzoli Yandex.Cloud, napravimo takozvani spremnik (spremnik, tj. kanta na ruskom, nikako buket) za pohranu slikovnih datoteka koje će se koristiti u našem botu Pametne Misli. U lijevom navigacijskom izborniku odaberite stavku Object Storage, pritisnite gumb Kreiraj spremnik, dajte mu naziv, na primjer, img-spremnik, i, najvažnije, Pristup za čitanje objekata učinite javnim – inače Telegram ne može vidjeti naše slike. Sva ostala polja ostavite nepromijenjena. Pritisnite gumb Kreiraj spremnik.

Gradimo Telegram bota u Yandex Cloud-u

Nakon toga, popis svih spremnika mogao bi izgledati otprilike ovako (ako je to vaš jedini spremnik):

Gradimo Telegram bota u Yandex Cloud-u

Sada vam predlažem da pritisnete naziv spremnika i unutar njega kreirate mapu kako biste organizirali pohranu slika za različite svoje aplikacije. Na primjer, za Telegram bot Pametne Misli napravio sam mapu pod nazivom tg-bot-smart-thoughts (ništa, shvatit ću tu šifru). A napravite i vi neku.

Gradimo Telegram bota u Yandex Cloud-u

Sada možete pritisnuti ime mape, ući u nju i učitati datoteke:

Gradimo Telegram bota u Yandex Cloud-u

A pritiskom na ime datoteke – dobit ćete je URL za korištenje u našem botu, i uopće – bilo gdje (ali, nemojte objavljivati ovu URL bez potrebe, jer je promet s Objektnog spremišta naplaćen).

Gradimo Telegram bota u Yandex Cloud-u

Eto, to je sve s Objektnim spremištem. Sada ćete znati što učiniti kada vidite poziv za učitavanje datoteka.

Webhook

Sada ćemo postaviti webhook – tj. kada bot primi ažuriranje (na primjer, poruku od korisnika), s poslužitelja Telegram bit će poslan upit ( Yandex funkcijo ) s podacima u našrequest. Ovo je linija koju možete jednostavno umetnuti u adresnu traku preglednika, a zatim osvježiti stranicu (to treba učiniti samo jednom): https://api.telegram.org/bot{bot_token}/setWebHook?url={webhook_url}
Samo zamijenite {bot_token} s tokenom koji smo dobili od bota-pravitelja prilikom stvaranja našeg bota, a {webhook_url} – s URL našom Yandex funkcije. Čekajte malo! Ali RosKomCenzor zabranjuje pružateljima u RF da opslužuju adresu https://api.telegram.org. Da, točno. Ali smislite nešto. Možete, primjerice, zamoliti svoju baku u Ukrajini, Izraelu ili Kanadi – tamo nema nikakvih «ruskomcenzi», a bog zna kako ljudi žive bez toga. Na kraju, upit-odgovor prilikom postavljanja webhooka trebao bi izgledati ovako:

Gradimo Telegram bota u Yandex Cloud-u

Testiramo. Trebalo bi «odražavati».

Gradimo Telegram bota u Yandex Cloud-u

Tako je. Naše čestitke – sada ste Yandex funkcija je postala Telegram-botom!

Pametne Misli

A sada radimo Pametne Misli. Kod je otvoren i nalazi se na GitHub. Dobro je komentiran i ima svega stotinjak redaka. Čitajte ga kao operska diva libretto!

Gradimo Telegram bota u Yandex Cloud-u

Klonirajte projekt i instalirajte ovisnosti:

git clone https://github.com/stmike/tg-bot-smart-thoughts.git
cd tg-bot-smart-thoughts
npm i

Naredite potrebne spremembe v datoteki index.js (neobvezno; ničesar ni treba spreminjati). Ustvarite zip-arhiv z datoteko index.js in mapo node_modules znotraj, na primer pod imenom smart.zip.

Gradimo Telegram bota u Yandex Cloud-u

Zdaj pojdite v konzolo na naši Yandex funkcije, izberite zavihek ZIP-arhiv, kliknite gumb Izberi datoteko, in naložite naš arhiv smart.zip. Nazadnje, v zgornjem desnem kotu kliknite gumb Ustvari različico.

Gradimo Telegram bota u Yandex Cloud-u

Čez nekaj sekund, ko se funkcija posodobi, ponovno preizkusite našega bota. Sedaj ne 'zrcali' več, ampak dostavlja pametne misli!

Gradimo Telegram bota u Yandex Cloud-u

Za danes je to vse. Druge članke sledijo. Kdor si želi brati takšne stvari – prijavite se na obvestila o novih člankih. Prijavite se lahko tukaj ali na Telegram-kanalu IT Tutorial Zahar, ali Twitter @mikezaharov.

Povezave

Koda na GitHubu
Yandex Cloud Functions
Yandex Object Storage
Bots: An introduction for developers
Telegram Bot API

Donacije

Gradimo Telegram bota u Yandex Cloud-u

Izvor: habr.com

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster