
Täna kogume valmis materjalidest Telegrami bot kasutades (või Yandexi funktsioonid — lühidalt) ja (või Objekti salvestamine — selguse huvides). Kood tuleb Node.js. Siiski on olemas üks põnev asjaolu — mingisugune organisatsioon, nimetame seda näiteks RossKomTsenzur (tsensuur on keelatud Venemaa Põhiseaduse artikli 29 järgi), ei luba Venemaa Interneti-teenuse pakkujatel edastada päringuid Telegram API-le aadressil: https://api.telegram.org/. Noh, me ei tee seda — kui ei, siis ei. Lõppude lõpuks on meie käsipagasis nn. veebihooked — nende abil me ei tee päringuid kindlale aadressile, vaid saadame lihtsalt oma päringu vastusena igasugustele päringutele, mis meile saadetakse. Teisisõnu, nagu Odessas — vastame küsimusele küsimusega. Seega Telegram API-le meie koodis ei figureeri.
Vastutusest loobumineKäesolevas artiklis mainitud riiklike organisatsioonide nimed on väljamõeldised ning igasugused kokkulangevused reaalselt eksisteerivate organisatsioonide nimedega on juhuslikud.
Nii et me teeme boti, mis varustab meid nutikate mõtetega. Täpselt sellise, nagu pildil:
Saate seda praktikas proovida — siin on nimi: @SmartThoughtsBot. Kas tähele panite nuppu «Alisa oskus»? Это потому, что бот является своеобразным «компаньоном» для одноименного Alisa oskuse, st see täidab samu funktsioone, nagu Alise oskus ja võib-olla suudavad nad rahulikult koos eksisteerida, reklaamides üksteist. Kuidas luua Nutikaid Mõtteid on artiklis kirjeldatud . Praegu (pärast teatud muudatusi, mis tehti pärast artikli avaldamist) näeb see nutitelefonis umbes selline välja: oskus näeb välja umbes nii:
Boti loomine
Soovin, et see juhend oleks kasulik kõigile, sealhulgas algajatele 'botide ehitajatele'. Seetõttu kirjeldan selles osas üsna pikalt, kuidas üldiselt luua boti Telegram. Neile, kellele see teave ei ole vajalik — minge järgmistele osadele.
Avame rakenduse Telegaram, kutsume kõigi botide isa (nendel on kõik nagu inimestel) — @BotFather — ja algatuseks anname talle käsu /help, et meelde tuletada, mida me saame teha. Praegu huvitab meid käsk /newbot.

Kuna siin kirjeldatud bot on juba loodud, loon demonstreerimise eesmärgil lühikest aega teise boti (hiljem kustutan selle). Nimetan selle DemoHabrBot. Nimed (username) kõikide telegram-botide peavad lõppema sõnaga bot, näiteks: MyCoolBot või my_cool_bot — see on botidele. Kuid kõigepealt anname botile nime (name) — ja see on inimestele. Nimi võib olla mis tahes keeles, sisaldada tühikuid ning ei pea lõppema sõnaga bot, ja see ei pea isegi olema ainulaadne. Antud näites nimetasin ma selle boti Demo Habr.

Nüüd valime botile nime (username, see, mis on botide jaoks). Nimetame selle DemoHabrBot. Kõik, mis oli seotud boti nimega (name) ei puuduta tema nime — username (või puudutab, kuid vastupidiselt). Pärast boti ainulaadse nime edukat loomist peame kopeerima ja salvestama (karmis saladuses!) tokeni, mis on näidatud punase noolega ekraanipildil. Selle abil me hiljem seadistame Telegram‘a veebihooki meie Yandexi funktsiooni.

Ja nüüd anname käsu kõigi botide isale: /mybots, ja ta näitab meile kõigi meie loodud botide nimekirja. Jätame praegu värskelt loodud boti rahule Demo Habr (see loodi, et näidata, kuidas botte luua, kuid me kasutame seda täna veel teisteks demonstreerimiseks), ja vaatame boti Nutikaid Mõtteid (@SmartThoughtsBot). Klõpsame botide nimekirjas nupul selle nimega.

Siin saame oma boti seadistada. Klõpsates nuppu Edit… viime meid vastava valiku redigeerimise juurde. Näiteks, klõpsates nupule Edit Name me saame botile nime muuta, näiteks asemel Nutikaid Mõtteid, kirjutame Veidrad Ideed. Botpic — see on boti avatar, mille suurus peab olema vähemalt 150 x 150 px. Kirjeldus — see on lühike kirjeldus, mida kasutaja näeb boti esmakordsel avamisel vastuseks küsimusele: Mida see bot teha saab? Teave — veelgi lühem kirjeldus, mis saadetakse koos lingiga botile (https://t.me/SmartThoughtsBot) või boti teabe vaatamisel.

Meil jääb veel vaid käsklused seadistada. Selleks vajutame nuppu Edit Commands. Kasutajate praktika standardiseerimiseks Telegram soovitab alati kasutada kahte käsku: /start ja /help, ja kui bot vajab seadistusi — täiendavat käsku /settings. Meie bot on lihtne nagu pall, seega ei vaja ta veel seadistusi. Kirjutame kaks esimest käsku, mida hiljem koodis töötleme. Nüüd, kui kasutaja sisestab sisestusvälja kaldkriipsu (/), kuvatakse käsu loend nende kiireks valimiseks. Kõik nagu pildil: vasakul seadistame käsud isa-boti kaudu; paremal on need käsud juba meie boti kasutajatele saadaval.

Yandex-funktsioon
Nüüd, kui meie bot on loodud, liikume edasi Yandex.Cloud, et luua funktsioon, mis täidab meie boti koodi. Kui sa pole veel töötanud Yandex.Cloudiga , siis tutvu materjaliga , ja seejärel — . Olen peaaegu kindel, et need kaks suhteliselt lühikest artiklit on piisavad, et saada põhiline arusaam teemast.
Nii et Yandex.Cloudi konsoolis valime vasakpoolses navigeerimismenüüs punkti vasakpoolses navigeerimismenüüs valime punkti Cloud Functions, seejärel vajutame nuppu Loo funktsioon. Anname sellele nime ja endale lühikese kirjelduse.

Pärast nuppu vajutamist Loo Paari sekundi after, uus funktsioon ilmub kõigi funktsioonide nimekirja. Vajutame selle nimele — see suunab meid Ülevaade meie funktsioonile. Siin tuleb sisse lülitada (Käimas) lüliti Avalik funktsioon, et see oleks kätte saadav välismaailmale ( konsoolis valime vasakpoolses navigeerimismenüüs punkti), ja väljaandmise väljade väärtused Kutse link ja Identifikaator — hoia sügavas saladuses, välja arvatud sina ise ja Telegram, et su funktsiooni ei saaks erinevad petised kutsuda.

Nüüd liigume vasaku menüü kaudu Redaktor funktsioonidesse. Jätame praegu meie Nutikaid Mõtteid, ja loome minimaalset funktsiooni-malli, et kontrollida meie boti toimimist... Tegelikult on see funktsioon ja meie bot... Lõpuks, täna ja just siin teeme kõige lihtsama boti, mis «peegeldab» (st saadab tagasi) kasutajate päringud. Seda шаблонit saab kasutada alati uute Telegrami botide loomisel, et veenduda, et ühendus Telegram’iga töötab normaalselt. Klõpsame Loo fail, nimetame selle index.js, ja veebi Koodiredaktoris kandke see kood järgnevasse faili:
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
};
};
Yandex.Cloudi konsoolis peaks see välja nägema umbes nii:

Edasi, natuke allpool, sisestage Sissepääsupunkt — index.bot, kus index see on faili nimi (index.js), and bot — funktsiooni nimi (module.exports.bot). Kõik teised väljad jätame «selliseks, nagu on», ja paremalt ülanurgast klõpsame nuppu Loo versioon. Mõne sekundi pärast luuakse see funktsiooniversioon. Varsti, pärast veebhooki , loome uue versiooni —, loome uue versiooni — Nutikaid Mõtteid.

Objekti salvestamine
Nüüd, kui meil on loodud Yandex-funktsioon, siis liikudes konsoolis edasi konsoolis valime vasakpoolses navigeerimismenüüs punkti, loome nn baketi (baketi, st. ämbri vene keeles, mitte kimp) piltide salvestamiseks, mida kasutatakse meie botis Nutikaid Mõtteid. Vasakul navigeerimismenüüs valime punkti Object Storage, vajutame nuppu Loo bakett, anname sellele nime, näiteks, img-bucket, ja, mis kõige tähtsam, Objektide lugemisõigus teeme avalikuks — vastasel juhul ei näe Telegram meie pilte. Kõik ülejäänud väljad jätame muutmata. Vajutame nuppu Loo bakett.

Pärast seda võib kõikide bakettide nimekiri välja näha umbes nii (kui see on teie ainus bakett):

Praegu pakun vajutada baketi nimele ja selle sees luua kaust, et korraldada piltide salvestamist erinevate rakenduste jaoks. Näiteks, minu Telegrami boti jaoks Nutikaid Mõtteid loomus kaust nimega tg-bot-smart-thoughts (ära muretse, ma saan selle koodi aru). Loo ka sina mõni.

Nüüd saad vajutada kausta nimele, siseneda sinna ja faile üles laadida:

Ja vajutades faili nimele — saada see URL kasutamiseks meie botis ja tegelikult — kuskil mujal (aga, ära avalda seda URL ilma vajaduseta, sest liiklus Objekti salvestusruumist on tasuline).

Noh, see on kõik Objektne salvestus. Nüüd teate, mida teha, kui näete kutset sinna faile üles laadida.
Veebihook
Nüüd seadistame veebihooki — st. kui bot saab uuenduse (näiteks sõnumi kasutajalt), siis serverist Telegram saab meie Yandexi funktsiooni saadetakse päring (request) andmetega. Siin on rida, mille saate lihtsalt brauseri aadressiväljale kleepida ja seejärel lehte värskendada (seda tuleb teha ainult üks kord): https://api.telegram.org/bot{bot_token}/setWebHook?url={webhook_url}
Lihtsalt asendame {bot_token} meie bot-isa poolt meie boti loomisel saadud tokeniga, ja {webhook_url} — URL meie Yandexi funktsioonid. Üks hetk! Kuid RossKomTsenzur keelab teenusepakkujatel Venemaal teenindada aadressi https://api.telegram.org. Jah, see on õige. Aga te mõelge midagi välja. Näiteks võite paluda oma vanaemal Ukrainas, Iisraelis või Kanadas — seal pole mingeid «venekeskse tsensuuri», ja ainult jumal teab, kuidas inimesed ilma selleta elavad. Lõppkokkuvõttes peab veebihooki seadistamise päring-vastus välja nägema nii:

Testime. Peaks 'peegeldama'.

Nii see on. Meie õnnitlused — nüüd Yandex-funktsioon oli Telegram-botiga!
Nutikaid Mõtteid
Ja nüüd teeme Nutikaid Mõtteid. Kood on avatud ja asub . See on üsna hästi kommenteeritud ja sisaldab vaid sada rida. Looge seda nagu ooperidiiva librettot!

Kloonige projekt ja installige sõltuvused:
git clone https://github.com/stmike/tg-bot-smart-thoughts.git
cd tg-bot-smart-thoughts
npm i
Tehke vajalikud muudatused failis index.js (valikuline; ei ole kohustuslik muudatusi teha). Looge zip-arhiv, koos faili index.js ja kaustaga node_modules siseselt, näiteks nimega smart.zip.

Nüüd liikuge meie Yandexi funktsioonidkonsolis, valige vahekaart ZIP-arhiv, vajutage nuppu Vali fail, ja laadige üles meie arhiv smart.zip. Lõpuks, paremas ülanurgas vajutage nuppu Loo versioon.

Mõne sekundi pärast, kui funktsioon uuendatakse, testime jälle meie boti. Nüüd ei peegelda see enam, vaid toob nutikaid mõtteid!

Siinkohal on kõik. Teised artiklid järgivad. Kui keegi soovib, et selliseid lugeda, tellige uute artiklite teated. Tellida saab siin või Telegram-kanal , või Twitter .
Lingid
Toetused
Allikas: habr.com
