
Danas ćemo od dostupnog materijala sastaviti u Telegram bota z uporabo (ali Yandex funkcije — skraćeno) i (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:
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 . Sada (nakon nekih izmena već nakon objavljivanja pomenutog članka) na pametnom telefonu ova veština će izgledati otprilike ovako:
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.

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.

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.

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.

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.

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.

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 , nato pa — . 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.

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.

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:

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.

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.

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

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.

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

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).

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:

Testiramo. Trebalo bi «odražavati».

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 . Dobro je komentiran i ima svega stotinjak redaka. Čitajte ga kao operska diva libretto!

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.

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.

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

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 , ali Twitter .
Povezave
Donacije
Izvor: habr.com
