Gradimo Telegram-bota u Yandex.Cloudu

Gradimo Telegram-bota u Yandex.Cloudu

Danas ćemo od dostupnih materijala sastaviti Yandex.Cloud Telegram-bota s korištenjem Yandex Cloud Functions (ili Yandex-funkcije — radi sažetka) i Yandex Object Storage (ili Objektno skladište — radi jasnoće). Kod će biti na Node.js. Međutim, postoji jedan sočni detalj — neka organizacija pod nazivom, recimo, RosKomCenzor (cenzura je zabranjena članom 29. Ustava RF), ne dozvoljava internet-provajderima u Rusiji da šalju zahtjeve u Telegram API na adresu: https://api.telegram.org/. Pa, nećemo ni slati — ako ne može, ne može. Uostalom, u našem prtljagu imamo takozvane webhookove — s njihovom pomoći ne šaljemo zahtjeve na određenu adresu, već samo šaljemo naš zahtjev kao odgovor na bilo koji zahtjev upućen nama. Drugim riječima, kao u Odessi — odgovaramo pitanjem na pitanje. Stoga Telegram API neće biti u našem kodu.

OdricanjeNazivi državnih organizacija spomenutih u ovom članku su izmišljeni, a svaka podudarnost s nazivima stvarnih organizacija slučajna je.

Dakle, napravit ćemo bota koji će nas opskrbiti pametnim mislima. Točno takvog kakav je na slici:

Gradimo Telegram-bota u Yandex.Cloudu

Možete ga isprobati u akciji — evo imena: @SmartThoughtsBot. Primijetili ste gumb „Vještina Alise”? Это потому, что бот является своеобразным «компаньоном» для одноименного vještine Alise, tj. obavlja iste funkcije kao i vještina Alise i, moguće je da će oni moći mirno koegzistirati promovirajući jedan drugoga. O tome kako izraditi vještinu Pametne Misli govori se u članku Alisa stječe vještinu. Sada (nakon određenih izmjena nakon objave gore spomenutog članka) na pametnom telefonu ova vještina izgledat će otprilike ovako:

Gradimo Telegram-bota u Yandex.Cloudu

Izrada bota

Želio bih da ovaj tutorijal bude koristan svima, uključujući i početnicima u 'gradnji botova'. Stoga ću u ovom dijelu detaljno opisati kako uopće stvoriti b Telegramote. Za one kojima te informacije nisu potrebne — pređite na sljedeće dijelove.

Otvorite aplikaciju Telegram, pozivamo oca svih botova (kod njih je sve kao kod ljudi) — @BotFather — i za početak ćemo mu dati naredbu /help, kako bismo osvježili sjećanje na to što možemo raditi. Sada nas zanima naredba /newbot.

Gradimo Telegram-bota u Yandex.Cloudu

Budući da je bot opisan ovdje već stvoren, u svrhu demonstracije stvorit ću na kratko drugog bota (kasnije ću ga obrisati). Nazvat ću ga DemoHabrBot. Imena (korisničko_ime) svih Telegram-botova moraju završavati na riječ bot, na primjer: MyCoolBot ili my_cool_bot — to je za botove. Ali prvo, dajemo botu ime (ime) — a ovo je za ljude. Ime može biti na bilo kojem jeziku, može sadržavati razmake, ne mora završavati na riječ bot, i čak ne mora biti jedinstveno. U ovom primjeru nazvao sam ovog bota Demo Habr.

Gradimo Telegram-bota u Yandex.Cloudu

Sada biramo ime bota (korisničko_ime, ono koje je za botove). Nazovimo ga DemoHabrBot. Sve što se odnosi na naziv bota (ime) potpuno se ne odnosi na njegovo ime — korisničko_ime (ili se odnosi, ali s točnošću do obratnog). Nakon uspješnog stvaranja jedinstvenog imena bota, moramo kopirati i sačuvati (u strogoj tajnosti!) token prikazan na ekranu crvenom strelicom. S njegove pomoći ćemo malo kasnije postaviti izlazni Telegram‘a webhook na našu Yandex funkciju.

Gradimo Telegram-bota u Yandex.Cloudu

A sada dajemo naredbu ocu svih botova: /mybots, i on će nam prikazati popis svih stvorenih bota. Za sada ćemo se zadržati na svježe izrađenom botu Demo Habr (stvoren je da pokaže kako se stvaraju botovi, ali ćemo ga i danas koristiti za druge demo svrhe), i razmotriti bota Pametne Misli (@SmartThoughtsBot). Kliknemo na dugme s njegovim imenom na popisu bota.

Gradimo Telegram-bota u Yandex.Cloudu

Ovde možemo postaviti našeg bota. Klikom na dugme Edit… preći ćemo na uređivanje određenih opcija. Na primjer, klikom na dugme Edit Name možemo promijeniti naziv bota, recimo umjesto Pametne Misli, napisati Besmislene Ideje. Botpic — to je avatar bota, treba biti najmanje 150 x 150 px. Opis — to je kratki opis koji korisnik vidi prilikom prvog pokretanja bota, kao odgovor na pitanje: Što može raditi ovaj bot? O — još kraći opis koji se šalje s vezom na bota (https://t.me/SmartThoughtsBot) ili prilikom pregleda informacija o njemu.

Gradimo Telegram-bota u Yandex.Cloudu

Ostalo nam je samo postaviti komande. Za to kliknemo dugme Edit Commands. Za standardizaciju korisničke prakse Telegram preporučuje da se uvijek koriste dvije komande: /start i /help, a ako su bota potrebne postavke — dodatna komanda /settings. Naš bot je jednostavan kao lopta, stoga mu postavke za sada nisu potrebne. Unosimo prve dvije komande, koje ćemo zatim obraditi u kodu. Sada, ako korisnik u polju za unos unese kosu crtu (znak /: /), pojavit će se popis komandi za brzi odabir. Sve kao na slici: lijevo — postavljamo komande preko oca bota; desno su te komande već dostupne korisnicima u našem botu.

Gradimo Telegram-bota u Yandex.Cloudu

Yandex funkcija

Sada, kada je naš bot stvoren, prelazimo na Yandex.Cloud, da bismo stvorili funkciju koja će izvršavati kod našeg bota. Ako još niste radili s Yandex.Cloud , pročitajte materijal Alisa u zemlji Bitrix, a zatim — Yandex funkcije šalju e-poštu. Gotovo sam siguran da će vam ove dvije relativno kratke članke biti dovoljni za osnovno razumijevanje teme.

Dakle, u konzoli Yandex.Cloud u lijevom navigacijskom izborniku odabiremo stavku Cloud Functions, a zatim pritisnite gumb Kreirati funkciju. Dajte joj ime, a za sebe — kratak opis.

Gradimo Telegram-bota u Yandex.Cloudu

Nakon pritiska na gumb Stvori i nakon nekoliko sekundi, nova funkcija će se pojaviti na popisu svih funkcija. Pritisnite njeno ime — to će nas odvesti na stranicu Pregled naše funkcije. Ovdje treba uključiti (On) prekidač Javna funkcija, da bi bila dostupna iz vanjskog (za Yandex.Cloud) svijeta, a vrijednosti polja Link za poziv i Identifikator — čuvati u dubokoj tajnosti od svih osim sebe i Telegram-a, kako vašu funkciju ne bi mogli pozivati razni prevaranti.

Gradimo Telegram-bota u Yandex.Cloudu

Sada s lijevog izbornika odlazimo u Urednik funkcije. Odložimo za sada naše Pametne Misli, i stvorimo minimalnu funkciju-sablon za provjeru funkcionalnosti našeg bota… U svakom slučaju, u ovom kontekstu ova funkcija je naš bot… Ukratko, sada i ovdje ćemo napraviti najjednostavnijeg bota koji će „zrcaliti“ (tj. vraćati) zahtjeve korisnika. Ova sablona može se koristiti uvijek pri kreiranju novih telegram-bota, da se uvjerimo da veza s Telegram-omradi normalno. Kliknite Kreiraj datoteku, nazovite je index.js, i u online uredniku koda zalijepite u ovu datoteku sljedeći kod:

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
  };
};

U konzoli Yandex.Cloud to bi trebalo izgledati otprilike ovako:

Gradimo Telegram-bota u Yandex.Cloudu

Dalje, malo niže, navodimo Ulaznu tačku — index.bot, gdje index to je ime datoteke (index.js), a bot — ime funkcije (module.exports.bot). Sva ostala polja ostavljamo „kako jesu“, a u gornjem desnom kutu pritisnite gumb Kreiraj verziju. Za nekoliko sekundi ova verzija funkcije će biti stvorena. Ubrzo, nakon testiranja webhook-a, stvorit ćemo novu verziju — Pametne Misli.

Gradimo Telegram-bota u Yandex.Cloudu

Objektno skladište

Sada, kada imamo stvorenu Yandex funkcija, hajde, dok smo još u konzoli Yandex.Cloud, napravit ćemo tzv. bucket (bucket, tj. kanta na hrvatskom, a ne buket) za pohranu slikovnih datoteka koje će se koristiti u našem botu Pametne Misli. U lijevom navigacijskom izborniku odabiremo stavku Object Storage, kliknemo na gumb Izradi bucket, odabiremo naziv, na primjer, img-bucket, i, najvažnije, Pristup za čitanje objekata postavljamo na javno - inače Telegram neće moći vidjeti naše slike. Sve ostalo polje ostavljamo nepromijenjeno. Kliknemo na gumb Izradi bucket.

Gradimo Telegram-bota u Yandex.Cloudu

Nakon toga, popis svih bucketa može izgledati otprilike ovako (ako je to vaš jedini bucket):

Gradimo Telegram-bota u Yandex.Cloudu

Sada predlažem da kliknete na naziv bucketa 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 naziva tg-bot-smart-thoughts ((ništa, razumjet ću tu šifru). Napravite i vi neku.

Gradimo Telegram-bota u Yandex.Cloudu

Sada možete kliknuti na naziv mape, ući u nju i učitati datoteke:

Gradimo Telegram-bota u Yandex.Cloudu

A ako kliknete na naziv datoteke - dobit ćete je URL za korištenje u našem boku, i uopće - bilo gdje (ali, ne objavljujte tu URL bez potrebe, jer se promet s Objektnog spremišta naplaćuje).

Gradimo Telegram-bota u Yandex.Cloudu

Evo, to je to 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 zahtjev ( Yandex funkciju ) s podacima. Evo linije koju možete jednostavno zalijepiti u adresnu traku preglednika, a zatim osvježiti stranicu (to treba učiniti samo jednom):requestSamo ćemo zamijeniti https://api.telegram.org/bot{bot_token}/setWebHook?url={webhook_url}
{bot_token} sa tokenom koji smo dobili od bota-oca prilikom izrade našeg bota, a {webhook_url} sa našom URL . Čekajte! Ali zar Yandex-funkcijene dopušta pružateljima usluga u RF da opslužuju adresu RosKomCenzor . Da, točno. Ali smislite nešto. Možete, na primjer, zamoliti svoju baku u Ukrajini, Izraelu ili Kanadi - nema tamo nikakve 'ruske cenzure', a samo Bog zna kako ljudi žive bez toga. Na kraju, zahtjev-odgovor pri postavljanju webhooka trebao bi izgledati ovako: https://api.telegram.orgTestiramo. Trebalo bi 'odražavati'.

Gradimo Telegram-bota u Yandex.Cloudu

Tako je. Čestitamo - sada

Gradimo Telegram-bota u Yandex.Cloudu

-bot! Yandex funkcija postao je TelegramA sada radimo Pametne Misli. Kod je otvoren i nalazi se na

Pametne Misli

. Dobar je i dobro je komentiran, u njemu ima svega stotinjak redova. Čitajte ga kao operna diva libreto! GitHubKloni projekt i instaliraj ovisnosti:

Gradimo Telegram-bota u Yandex.Cloudu

Klonirajte projekt i instalirajte zavisnosti:

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

Unesite potrebne izmjene u datoteku index.js (opcionalno; možete ništa ne mijenjati). Stvorite zip-zip arhivu s datotekom index.js i mapom node_modules unutar, na primjer, pod nazivom smart.zip.

Gradimo Telegram-bota u Yandex.Cloudu

Sada se prebacite u konzolu do naših Yandex-funkcije, odaberite karticu ZIP arhiva, pritisnite gumb Odaberi datoteku, i učitajte našu arhivu smart.zip. Na kraju, u gornjem desnom kutu pritisnite gumb Kreiraj verziju.

Gradimo Telegram-bota u Yandex.Cloudu

Za nekoliko sekundi, kada se funkcija ažurira, ponovo testiramo našeg bota. Sada više ne 'zrcali', već isporučuje pametne misli!

Gradimo Telegram-bota u Yandex.Cloudu

To je to za danas. Drugi članci slijede. Onima kojima je ovo zanimljivo – pretplatite se na obavijesti o novim člancima. Možete se pretplatiti ovdje ili na Telegram-kanal IT Tutorial Zahar, ili Twitter @mikezaharov.

Linkovi

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

Donacije

Gradimo Telegram-bota u Yandex.Cloudu

Izvor: habr.com

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster