Veidojam Telegram robotu Yandex.Mākoņos

Veidojam Telegram robotu Yandex.Mākoņos

Šodien mēs no pieejamajiem materiāliem savāksim Yandex.Mākonī Telegram-botu izmantojot Yandex Cloud Functions (vai Yandex funkcijas — īsumā) un Yandex Object Storage (vai Objektu glabātuve — skaidrības labad). Kods būs uz Node.js. Tomēr ir viens sakarīgs apstāklis — kāda organizācija, kuru nosauksim par Roskomcenzūra (cenzūra ir aizliegta ar Krievijas Federācijas Satversmes 29. pantu), neļauj Krievijas interneta pakalpojumu sniedzējiem pārsūtīt pieprasījumus uz Telegram API adresē: https://api.telegram.org/. Nu, mēs to nedarīsim — ja nav, tad nav. Galu galā mūsu braucienā ir tā sauktie webhooki — ar to palīdzību mēs neveicam pieprasījumus uz konkrētu adresi, bet vienkārši sūtām savu pieprasījumu kā atbildi uz jebkuru pieprasījumu uz mums. Tas nozīmē, kā Odessā — atbildam ar jautājumu uz jautājumu. Tāpēc Telegram API mūsu kodā tas nebūs.

AtskaiteŠajā rakstā minētās valstiskās organizācijas nosaukumi ir izdomāti, un iespējamie sakritības ar reāli esošu organizāciju nosaukumiem ir nejauši.

Tātad, mēs izveidosim botu, kas mūs apgādās ar gudrām domām. Tieši tādu, kā attēlā:

Veidojam Telegram robotu Yandex.Mākoņos

Varat to izmēģināt darbībā — lūk, vārds: @SmartThoughtsBot. Pamanījāt pogu «Alises prasme»? Это потому, что бот является своеобразным «компаньоном» для одноименного Alises prasmes, t.i., tas veic tās pašas funkcijas, ko Alises prasme un, iespējams, viņi varēs mīlīgi līdzpastāvēt, reklamējot viens otru. Par to, kā izveidot prasmju Gudrās Domas stāstīts rakstā Alise apgūst prasmi. Tagad (pēc dažām izmaiņām, kas veiktas pēc minētā raksta publicēšanas) šī prasme izskatīsies aptuveni tā:

Veidojam Telegram robotu Yandex.Mākoņos

Bota izveidošana

Es vēlos, lai šis norādījums būtu noderīgs visiem, tostarp arī iesācējiem 'botu veidotājiem'. Tāpēc šajā nodaļā es diezgan detalizēti aprakstīšu, kā vispār izveidot Telegram‘e botu. Ja jums šī informācija nav nepieciešama — pārejiet uz nākamajiem jums sadaļām.

Atveram lietotni Telegaram, izsaucam visu botu tēvu (viņiem viss kā cilvēkiem) — @BotFather — un vispirms dodam viņam komandu /help, lai atsvaidzinātu atmiņā, ko mēs varam darīt. Tagad mūs interesēs komanda /newbot.

Veidojam Telegram robotu Yandex.Mākoņos

Jo šeit aprakstītais bots jau ir izveidots, demonstrācijas nolūkos es uz īsu laiku izveidošu citu botu (pēc tam to dzēsīšu). Nosaukšu to par DemoHabrBot. Vārdi (username) visiem Telegram botiem jāpabeidz ar vārdu bot, piemēram: MyCoolBot vai my_cool_bot — tas ir priekš botiem. Bet vispirms dodam botam nosaukumu (name) — un tas ir cilvēkiem. Nosaukums var būt jebkurā valodā, saturēt atstarpi, nav jābeidzas ar vārdu bot, un pat nav jābūt unikālam. Šajā piemērā es nosaucu šo robotu Demo Habr.

Veidojam Telegram robotu Yandex.Mākoņos

Tagad izvēlamies robotam vārdu (username, tādu, kas ir robotiem). Nosauksim to par DemoHabrBot. Viss, kas attiecās uz robota nosaukumu (name) vispār nepieder pie tā vārda — username (vai attiecas, bet ar precizitāti līdz pretējai pusi). Pēc tam, kad esam veiksmīgi izveidojuši unikālo robota vārdu, mums ir jākopē un jāsaglabā (stingrā slepenībā!) tokens, kas parādīts ekrānuzņēmumā ar sarkano bultu. Ar tā palīdzību mēs drīzumā iestatīsim iebūvēto Telegram‘a webhook uz mūsu Yandex funkciju.

Veidojam Telegram robotu Yandex.Mākoņos

Un tagad dosim komandu visu robotu tēvam: /mybots, un viņš parādīs mums visu mūsu izveidoto robotu sarakstu. Atstāsim pagaidām novārtā neseno robotu Demo Habr (tas tika izveidots, lai parādītu, kā izveidot robotus, bet mēs to vēl izmantosim šodien citām demonstrācijas vajadzībām), un apskatīsim robotu Gudrās Domas (@SmartThoughtsBot). Noklikšķinām sarakstā uz robota vārda pogas.

Veidojam Telegram robotu Yandex.Mākoņos

Šeit mēs varam konfigurēt mūsu robotu. Nospiežot pogu Rediģēt… mēs pāriesim uz kādas opcijas rediģēšanu. Piemēram, noklikšķinot uz pogas Edit Name mēs varam mainīt robota nosaukumu, sakot, vietā Gudrās Domas, uzrakstīt Trakās Idejas. Botpic — tas ir robota avatar, tam jābūt ne mazāk kā 150 x 150 px. Apraksts — tas ir īss apraksts, ko lietotājs redz, kad pirmo reizi palaiž robotu, kā atbildi uz jautājumu: Ko šis robots var darīt? Par — vēl īsāks apraksts, kas tiek nosūtīts kopā ar saiti uz robotu (https://t.me/SmartThoughtsBot) vai skatoties informāciju par to.

Veidojam Telegram robotu Yandex.Mākoņos

Mums palikuši tikai jāsakārto komandas. Tāpēc nospiežam pogu Edit Commands. Lai standartizētu lietotāju praksi Telegram ieteicams vienmēr izmantot divas komandas: /start un /help, bet ja robotam ir nepieciešami iestatījumi — papildu komandu /settings. Mūsu robots ir vienkāršs kā bumba, tāpēc viņam pagaidām iestatījumi nav nepieciešami. Ierakstām divas pirmās komandas, kuras mēs vēlāk apstrādāsim kodā. Tagad, ja ievades laukā lietotājs ievadīs slīpsvītru (slīpos simbolu: /), parādīsies komandu saraksts ātrai izvēlei. Viss kā attēlā: pa kreisi — iestatām komandas caur robotu tēvu; pa labi šīs komandas jau ir pieejamas lietotājiem mūsu robotā.

Veidojam Telegram robotu Yandex.Mākoņos

Yandex funkcija

Tagad, kad mūsu robots izveidots, pārejam uz Yandex. Mākoņi, lai izveidotu funkciju, kas izpildīs mūsu bota kodu. Ja vēl neesat strādājis ar Yandex.Cloud , iepazīstieties ar materiālu Alisa Bitrix zemē, tad — Yandex funkcijas sūta e-pastu. Es esmu gandrīz drošs, ka šie divi relativi īsie raksti jums pilnīgi pietiks, lai pamatos izprastu tēmu.

Tātad, konsolē Yandex.Cloud kreisajā navigācijas izvēlnē izvēlamies punktu Cloud Functions, un pēc tam nospiežam pogu Izveidot funkciju. Piešķiram tam nosaukumu un sev – īsu aprakstu.

Veidojam Telegram robotu Yandex.Mākoņos

Pēc pogas nospiešanas Izveidot un pēc dažām sekundēm, jaunā funkcija parādīsies visu funkciju sarakstā. Nospiediet uz tās nosaukuma – tas mūs aizvedīs uz Pārskats mūsu funkcijas lapu. Šeit jāieslēdz (Ieslēgts) pārslēgs Publiskā funkcija, lai tā būtu pieejama no ārējā (no Yandex.Cloud) pasaules, un lauku vērtības Aicinājuma saite un Identifikators — glabāt dziļā noslēpumā no visiem, izņemot sevi un Telegram’a, lai jūsu funkciju nevarētu izsaukt dažādi krāpnieki.

Veidojam Telegram robotu Yandex.Mākoņos

Tagad, izmantojot kreiso izvēlni, pārejam uz Redaktors funkcijām. Lai pagaidām atliekam malā mūsu Gudrās Domas, un izveidosim minimālu šablona funkciju, lai pārbaudītu mūsu bota darbību... Tomēr šajā kontekstā šī funkcija ir mūsu bots... Īsāk sakot, tagad un tieši šeit mēs izveidosim vienkāršāko botu, kas "atspoguļos" (t.i., atgriezīs) lietotāju pieprasījumus. Šo šablonu var izmantot vienmēr, izveidojot jaunus Telegram botus, lai pārliecinātos, ka savienojums ar Telegram’darbojas normāli. Nospiediet Izveidot failu, nosaucam to par index.js, un tiešsaistes Koda redaktorā ielīmējam šajā failā sekojošo kodu:

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

Konsole Yandex.Cloud tas izskatīsies aptuveni tā:

Veidojam Telegram robotu Yandex.Mākoņos

Tālāk nedaudz zemāk norādām Ieiešanas punkts — index.bot, kur index tas ir faila nosaukums (index.js), un bot — funkcijas nosaukums (module.exports.bot). Visas pārējās jomas atstājam «kā ir», un labajā augšējā stūrī nospiežam pogu Izveidot versiju. Pēc dažām sekundēm šī funkcija versija tiks izveidota. Drīz, pēc tīmekļa atgriezeniskās saites testēšanas , mēs izveidosim jaunu versiju —Tagad, kad mums ir izveidota Gudrās Domas.

Veidojam Telegram robotu Yandex.Mākoņos

Objektu glabātuve

, ļaujiet, kamēr mēs esam konsolē Yandex funkcija, izveidot tā dēvēto baķet ( Yandex.Cloud, izveidosim t.s. bucket (bucket, proti tam, kur iemēram, nav pušķis) attēlu failu glabāšanai, kas tiks izmantoti mūsu botā Gudrās Domas. Kreisajā navigācijas izvēlnē izvēlamies punktu Object Storage, nospiežam pogu Izveidot tvertni, izdomājam nosaukumu, piemēram, attēlu-tvertne, un, galvenais, Piekļuve objektu lasīšanai padarām publisku — citādi Telegram’ā mūsu attēlus neredzēs. Visus pārējos laukus atstājam bez izmaiņām. Nospiežam pogu Izveidot tvertni.

Veidojam Telegram robotu Yandex.Mākoņos

Pēc tam visu tvertņu saraksts var izskatīties apmēram tā (ja tā ir jūsu vienīgā tvertne):

Veidojam Telegram robotu Yandex.Mākoņos

Tagad es piedāvāju nospiest uz tvertnes nosaukuma un iekšā izveidot mapīti, lai kārtotu attēlu glabāšanu dažādiem saviem lietojumiem. Piemēram, Telegram botam Gudrās Domas es izveidoju mapīti ar nosaukumu tg-bot-izspertās-domas (nerunājiet, es sapratīšu šo šifru). Izveidojiet arī kādu.

Veidojam Telegram robotu Yandex.Mākoņos

Tagad var nospiest uz mapes nosaukuma, ieiet tajā un augšupielādēt failus:

Veidojam Telegram robotu Yandex.Mākoņos

Un nospiežot uz faila nosaukuma — iegūt to URL lietošanai mūsu botā un vispār — kaut kur citur (bet, nepārpublicējiet šo URL pavisam lieki, jo datplūsma no Objektu krātuves tiek maksāta).

Veidojam Telegram robotu Yandex.Mākoņos

Tātad, tas arī viss par Objektu krātuvi. Tagad jūs zināsiet, ko darīt, kad redzēsiet aicinājumu augšupielādēt tur failus.

Webhooks

Tagad mēs uzstādīsim webhook — t.i., kad bots saņems atjauninājumu (piemēram, ziņojumu no lietotāja), no servera Telegram mūsu Yandex funkciju tiks nosūtīta pieprasījuma (request) ar datiem. Šī ir rindiņa, ko var vienkārši ielikt pārlūkprogrammas adreses laukā un pēc tam atjaunināt lapu (to jādara tikai vienu reizi): https://api.telegram.org/bot{bot_token}/setWebHook?url={webhook_url}
Vienīgais, ko nomainām {bot_token} uz tokenu, ko saņēmām no bota-vecāka, izveidojot mūsu botu, bet {webhook_url} uz URL mūsu Yandex funkcijas. Minūti! Bet vai Roskomcenzūra aizliedz pakalpojumu sniedzējiem Krievijā apkalpot adresi https://api.telegram.org. Jā, tas ir taisnība. Bet izdomājiet kaut ko. Galu galā varbūt lūgt savam vecmammai Ukrainā, Izraēlā vai Kanādā — tur nav nekādu «krievu cenzoru», un viens Dievs zina, kā cilvēki dzīvo bez tā. Galu galā, pieprasījuma-atbildes procesā instalējot webhook, tam jāizskatās tā:

Veidojam Telegram robotu Yandex.Mākoņos

Testējam. Tam jābūt «spoguļojamiem».

Veidojam Telegram robotu Yandex.Mākoņos

Tā arī ir. Mūsu apsveikumi — tagad Yandex funkcija ir kļuvis Telegram-botu!

Gudrās Domas

Tagad darām Gudrās Domas. Kods ir atvērts un atrodas GitHub. Tas ir labi komentēts, un tam ir tikai simts rindiņu. Lasiet to kā operas dižinieces libreto!

Veidojam Telegram robotu Yandex.Mākoņos

Klonējiet projektu un instalējiet atkarības:

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

Veiciet nepieciešamās izmaiņas failā index.js (pēc izvēles; varat neko nemainīt). Izveidojiet zip-arhīvu ar failu index.js un mapi node_modules iekšpusē, piemēram, ar nosaukumu smart.zip.

Veidojam Telegram robotu Yandex.Mākoņos

Tagad pārejiet uz mūsu Yandex funkcijas, izvēlieties cilni ZIP-arhīvs, nospiediet pogu Izvēlēties failu, un augšupielādējiet mūsu arhīvu smart.zip. Beigās, augšējā labajā stūrī nospiediet pogu Izveidot versiju.

Veidojam Telegram robotu Yandex.Mākoņos

Pēc dažām sekundēm, kad funkcija tiks atjaunināta, pārbaudīsim mūsu robotu vēlreiz. Tagad tas jau neliekas kā "spogulis", bet sniedz gudras domas!

Veidojam Telegram robotu Yandex.Mākoņos

Uz šo brīdi viss. Citas raksti sekos. Kam līdzīgs ir interesants — pierakstieties jaunumu paziņojumiem. Pierakstīties var šeit, vai uz Telegram-kanālu IT Tutorial Zahars, vai Twitter @mikezaharov.

Saites

Kods GitHub
Yandex Cloud Functions
Yandex Object Storage
Bots: Ievads izstrādātājiem
Telegram Bot API

Ziedojumi

Veidojam Telegram robotu Yandex.Mākoņos

Avots: habr.com

Iegādājieties uzticamu tīmekļa hostingu ar DDoS aizsardzību, VPS VDS serveriem 🔥 Iegādājieties uzticamu tīmekļa hostingu ar DDoS aizsardzību, VPS VDS serveriem | ProHoster