{"id":41315,"date":"2020-02-10T12:09:34","date_gmt":"2020-02-10T09:09:34","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/stroim-telegram-bot-v-yandeks-oblake"},"modified":"2020-02-10T12:09:34","modified_gmt":"2020-02-10T09:09:34","slug":"stroim-telegram-bot-v-yandeks-oblake","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/stroim-telegram-bot-v-yandeks-oblake","title":{"rendered":"Ehitus Telegram-bot Yandex.Cloudis","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Ehitus Telegram-bot Yandex.Cloudis\" src=\"\/wp-content\/uploads\/2020\/02\/4a758744e4fc6bc797d270fa1bc42ef3.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nT\u00e4na kogume valmis materjalidest <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.yandex.ru\/\"><i>Yandex.Cloudist<\/i><\/a><\/noindex> <i>Telegrami bot<\/i> kasutades <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.yandex.ru\/services\/functions\"><i>Yandex Cloud Functions<\/i><\/a><\/noindex> (v\u00f5i <i>Yandexi funktsioonid<\/i> \u2014 l\u00fchidalt) ja <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.yandex.ru\/services\/storage\"><i>Yandex Object Storage<\/i><\/a><\/noindex> (v\u00f5i <i>Objekti salvestamine<\/i> \u2014 selguse huvides). Kood tuleb <i>Node.js<\/i>. Siiski on olemas \u00fcks p\u00f5nev asjaolu \u2014 mingisugune organisatsioon, nimetame seda n\u00e4iteks <i>RossKomTsenzur<\/i> (tsensuur on keelatud Venemaa P\u00f5hiseaduse artikli 29 j\u00e4rgi), ei luba Venemaa Interneti-teenuse pakkujatel edastada p\u00e4ringuid <i>Telegram API-le<\/i> aadressil: <code>https:\/\/api.telegram.org\/<\/code>. Noh, me ei tee seda \u2014 kui ei, siis ei. L\u00f5ppude l\u00f5puks on meie k\u00e4sipagasis nn. <i>veebihooked<\/i> \u2014 nende abil me ei tee p\u00e4ringuid kindlale aadressile, vaid saadame lihtsalt oma p\u00e4ringu vastusena igasugustele p\u00e4ringutele, mis meile saadetakse. Teisis\u00f5nu, nagu Odessas \u2014 vastame k\u00fcsimusele k\u00fcsimusega. Seega <i>Telegram API-le<\/i> meie koodis ei figureeri.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n<b class=\"spoiler_title\">Vastutusest loobumine<\/b><i>K\u00e4esolevas artiklis mainitud riiklike organisatsioonide nimed on v\u00e4ljam\u00f5eldised ning igasugused kokkulangevused reaalselt eksisteerivate organisatsioonide nimedega on juhuslikud. <\/i> <\/p>\n<p>Nii et me teeme boti, mis varustab meid nutikate m\u00f5tetega. T\u00e4pselt sellise, nagu pildil:<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/SmartThoughtsBot\"><img decoding=\"async\" alt=\"Ehitus Telegram-bot Yandex.Cloudis\" src=\"\/wp-content\/uploads\/2020\/02\/6b7aca248999621a20f8a0ec29e75c75.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>Saate seda praktikas proovida \u2014 siin on nimi: <b><i>@SmartThoughtsBot<\/i><\/b>. Kas t\u00e4hele panite nuppu <i>\u00abAlisa oskus\u00bb<\/i>? \u042d\u0442\u043e \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0431\u043e\u0442 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0432\u043e\u0435\u043e\u0431\u0440\u0430\u0437\u043d\u044b\u043c \u00ab\u043a\u043e\u043c\u043f\u0430\u043d\u044c\u043e\u043d\u043e\u043c\u00bb \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0438\u043c\u0435\u043d\u043d\u043e\u0433\u043e <i>Alisa oskuse<\/i>, st see t\u00e4idab samu funktsioone, nagu <i>Alise oskus<\/i> ja v\u00f5ib-olla suudavad nad rahulikult koos eksisteerida, reklaamides \u00fcksteist. Kuidas luua <i>Nutikaid M\u00f5tteid<\/i> on artiklis kirjeldatud <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/465275\/\"><b><i>Alise omandab oskuse<\/i><\/b><\/a><\/noindex>. Praegu (p\u00e4rast teatud muudatusi, mis tehti p\u00e4rast artikli avaldamist) n\u00e4eb see nutitelefonis umbes selline v\u00e4lja: <i>oskus<\/i> n\u00e4eb v\u00e4lja umbes nii:<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/alice.ya.ru\/s\/f785af07-4578-4a6b-95ae-485bd803ae20\"><img decoding=\"async\" alt=\"Ehitus Telegram-bot Yandex.Cloudis\" src=\"\/wp-content\/uploads\/2020\/02\/e92c340f8d947ba9252e0fcab0511ce6.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<h2>Boti loomine<\/h2>\n<p>\nSoovin, et see juhend oleks kasulik k\u00f5igile, sealhulgas algajatele 'botide ehitajatele'. Seet\u00f5ttu kirjeldan selles osas \u00fcsna pikalt, kuidas \u00fcldiselt luua boti <i>Telegram<\/i>\u2018e botide. Neile, kellele see teave ei pruugi vajalik olla \u2014 liikuge j\u00e4rgmistele osa. <\/p>\n<p>Avame rakenduse <i>Telegaram<\/i>, kutsume k\u00f5igi botide isa (nendel on k\u00f5ik nagu inimestel) \u2014 <b><i>@BotFather<\/i><\/b> \u2014 ja algatuseks anname talle k\u00e4su \/help, et meelde tuletada, mida me saame teha. Praegu huvitab meid k\u00e4sk <i>\/newbot<\/i>.<\/p>\n<p><img decoding=\"async\" alt=\"Ehitus Telegram-bot Yandex.Cloudis\" src=\"\/wp-content\/uploads\/2020\/02\/12a0e84dd712e0c74dee0463f1b44e74.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKuna siin kirjeldatud bot on juba loodud, loon demonstreerimise eesm\u00e4rgil l\u00fchikest aega teise boti (hiljem kustutan selle). Nimetan selle <i>DemoHabrBot<\/i>. Nimed (<i>username<\/i>) k\u00f5ikide telegram-botide peavad l\u00f5ppema s\u00f5naga <i>bot<\/i>, n\u00e4iteks: <i>MyCoolBot<\/i> v\u00f5i <i>my_cool_bot<\/i> \u2014 see on botidele. Kuid k\u00f5igepealt anname botile nime (<i>name<\/i>) \u2014 ja see on inimestele. Nimi v\u00f5ib olla mis tahes keeles, sisaldada t\u00fchikuid ning ei pea l\u00f5ppema s\u00f5naga <i>bot<\/i>, ja see ei pea isegi olema ainulaadne. Antud n\u00e4ites nimetasin ma selle boti <i>Demo Habr<\/i>.<\/p>\n<p><img decoding=\"async\" alt=\"Ehitus Telegram-bot Yandex.Cloudis\" src=\"\/wp-content\/uploads\/2020\/02\/682ecf64724cabcfef96639d6de87521.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nN\u00fc\u00fcd valime botile nime (<i>username<\/i>, see, mis on botide jaoks). Nimetame selle <i>DemoHabrBot<\/i>. K\u00f5ik, mis oli seotud boti nimega (<i>name<\/i>) ei puuduta tema nime \u2014 <i>username<\/i> (v\u00f5i puudutab, kuid vastupidiselt). P\u00e4rast boti ainulaadse nime edukat loomist peame kopeerima ja salvestama (karmis saladuses!) tokeni, mis on n\u00e4idatud punase noolega ekraanipildil. Selle abil me hiljem seadistame <i>Telegram<\/i>\u2018a webhooks meie <i>Yandexi funktsiooni<\/i>.<\/p>\n<p><img decoding=\"async\" alt=\"Ehitus Telegram-bot Yandex.Cloudis\" src=\"\/wp-content\/uploads\/2020\/02\/78254946c9f763d212a1952bac6c706f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJa n\u00fc\u00fcd anname k\u00e4su k\u00f5igi botide isale: <i>\/mybots<\/i>, ja ta n\u00e4itab meile k\u00f5igi meie loodud botide nimekirja. J\u00e4tame praegu v\u00e4rskelt loodud boti rahule <i>Demo Habr<\/i> (see loodi, et n\u00e4idata, kuidas botte luua, kuid me kasutame seda t\u00e4na veel teisteks demonstreerimiseks), ja vaatame boti <i>Nutikaid M\u00f5tteid<\/i> (<i>@SmartThoughtsBot<\/i>). Kl\u00f5psame botide nimekirjas nupul selle nimega.<\/p>\n<p><img decoding=\"async\" alt=\"Ehitus Telegram-bot Yandex.Cloudis\" src=\"\/wp-content\/uploads\/2020\/02\/98434725cb0d7441ec5f2552b0b508a8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSiin saame oma boti seadistada. Kl\u00f5psates nuppu <i>Muuda\u2026<\/i> viime meid vastava valiku redigeerimise juurde. N\u00e4iteks, kl\u00f5psates nupule <i>Edit Name<\/i> me saame botile nime muuta, n\u00e4iteks asemel <i>Nutikaid M\u00f5tteid<\/i>, kirjutame <i>Veidrad Ideed<\/i>. <i>Botpic<\/i> \u2014 see on boti avatar, mille suurus peab olema v\u00e4hemalt <i>150 x 150 px<\/i>. <i>Kirjeldus<\/i> \u2014 see on l\u00fchike kirjeldus, mida kasutaja n\u00e4eb boti esmakordsel avamisel vastuseks k\u00fcsimusele: <i>Mida see bot teha saab?<\/i> <i>Teave<\/i> \u2014 veelgi l\u00fchem kirjeldus, mis saadetakse koos lingiga botile (<code>https:\/\/t.me\/SmartThoughtsBot<\/code>) v\u00f5i boti teabe vaatamisel.<\/p>\n<p><img decoding=\"async\" alt=\"Ehitus Telegram-bot Yandex.Cloudis\" src=\"\/wp-content\/uploads\/2020\/02\/f15ba92be1bfea827273f79616bd2a3a.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMeil j\u00e4\u00e4b veel vaid k\u00e4sklused seadistada. Selleks vajutame nuppu <i>Edit Commands<\/i>. Kasutajate praktika standardiseerimiseks <i>Telegram<\/i> soovitab alati kasutada kahte k\u00e4sku: <i>\/start<\/i> ja <i>\/help<\/i>, ja kui bot vajab seadistusi \u2014 t\u00e4iendavat k\u00e4sku \/settings. Meie bot on lihtne nagu pall, seega ei vaja ta veel seadistusi. Kirjutame kaks esimest k\u00e4sku, mida hiljem koodis t\u00f6\u00f6tleme. N\u00fc\u00fcd, kui kasutaja sisestab sisestusv\u00e4lja kaldkriipsu (\/), kuvatakse k\u00e4su loend nende kiireks valimiseks. K\u00f5ik nagu pildil: vasakul seadistame k\u00e4sud isa-boti kaudu; paremal on need k\u00e4sud juba meie boti kasutajatele saadaval.<\/p>\n<p><img decoding=\"async\" alt=\"Ehitus Telegram-bot Yandex.Cloudis\" src=\"\/wp-content\/uploads\/2020\/02\/b536b5fe7b8aad3d68877a7693ea0e6f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Yandex-funktsioon<\/h2>\n<p>\nN\u00fc\u00fcd, kui meie bot on loodud, liikume edasi <i>Yandex.Cloud<\/i>, et luua funktsioon, mis t\u00e4idab meie boti koodi. Kui sa pole veel t\u00f6\u00f6tanud <i>Yandex.Cloudiga<\/i> , siis tutvu materjaliga <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/464739\/\"><b><i>Aliisa Bitrixi maal<\/i><\/b><\/a><\/noindex>, ja seej\u00e4rel \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/440374\/\"><b><i>Yandexi funktsioonid saadavad e-kirju<\/i><\/b><\/a><\/noindex>. Olen peaaegu kindel, et need kaks suhteliselt l\u00fchikest artiklit on piisavad, et saada p\u00f5hiline arusaam teemast.<\/p>\n<p>Nii et Yandex.Cloudi <i>konsoolis valime vasakpoolses navigeerimismen\u00fc\u00fcs punkti<\/i> vasakpoolses navigeerimismen\u00fc\u00fcs valime punkti <i>Cloud Functions<\/i>, seej\u00e4rel vajutame nuppu <i>Loo funktsioon<\/i>. Anname sellele nime ja endale l\u00fchikese kirjelduse.<\/p>\n<p><img decoding=\"async\" alt=\"Ehitus Telegram-bot Yandex.Cloudis\" src=\"\/wp-content\/uploads\/2020\/02\/67f313c60481c5ef84af8a28b4934621.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nP\u00e4rast nuppu vajutamist <i>Loo<\/i> Paari sekundi after, uus funktsioon ilmub k\u00f5igi funktsioonide nimekirja. Vajutame selle nimele \u2014 see suunab meid <i>\u00dclevaade<\/i> meie funktsioonile. Siin tuleb sisse l\u00fclitada (<i>K\u00e4imas<\/i>) l\u00fcliti <i>Avalik funktsioon<\/i>, et see oleks k\u00e4tte saadav v\u00e4lismaailmale ( <i>konsoolis valime vasakpoolses navigeerimismen\u00fc\u00fcs punkti<\/i>), ja v\u00e4ljaandmise v\u00e4ljade v\u00e4\u00e4rtused <i>Kutse link<\/i> ja <i>Identifikaator<\/i> \u2014 hoida s\u00fcgavas saladuses k\u00f5igi teiste eest, v\u00e4lja arvatud iseenda ja Telegram\u2019i, et teie funktsiooni ei saaks kutsuda erinevad kelmid.<\/p>\n<p><img decoding=\"async\" alt=\"Ehitus Telegram-bot Yandex.Cloudis\" src=\"\/wp-content\/uploads\/2020\/02\/3ba45d357965d567ba33ab0ee65d2eb4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nN\u00fc\u00fcd liigume vasaku men\u00fc\u00fc kaudu <i>Redaktor<\/i> funktsioonidesse. J\u00e4tame praegu meie <i>Nutikaid M\u00f5tteid<\/i>, ja loome minimaalset funktsiooni-malli, et kontrollida meie boti toimimist... Tegelikult on see funktsioon ja meie bot... L\u00f5puks, t\u00e4na ja just siin teeme k\u00f5ige lihtsama boti, mis \u00abpeegeldab\u00bb (st saadab tagasi) kasutajate p\u00e4ringud. Seda \u0448\u0430\u0431\u043b\u043e\u043dit saab kasutada alati uute Telegrami botide loomisel, et veenduda, et \u00fchendus <i>Telegram\u2019i<\/i>iga t\u00f6\u00f6tab normaalselt. Kl\u00f5psame <i>Loo fail<\/i>, nimetame selle <i>index.js<\/i>, ja veebi <i>Koodiredaktoris<\/i> kandke see kood j\u00e4rgnevasse faili:<\/p>\n<pre><code class=\"javascript\">module.exports.bot = async (event) =&gt; {\n  \n  const body = JSON.parse(event.body);\n\n  const msg = {\n    'method': 'sendMessage',\n    'chat_id': body.message.chat.id,\n    'text': body.message.text\n  };\n\n  return {\n    'statusCode': 200,\n    'headers': {\n      'Content-Type': 'application\/json'\n    },\n    'body': JSON.stringify(msg),\n    'isBase64Encoded': false\n  };\n};\n<\/code><\/pre>\n<p>\nYandex.Cloudi konsoolis peaks see v\u00e4lja n\u00e4gema umbes nii:<\/p>\n<p><img decoding=\"async\" alt=\"Ehitus Telegram-bot Yandex.Cloudis\" src=\"\/wp-content\/uploads\/2020\/02\/f0204be84468c9ae7ec1b9e4ca0dfdd9.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEdasi, natuke allpool, sisestage <i>Sissep\u00e4\u00e4supunkt<\/i> \u2014 <i>index.bot<\/i>, kus <i>index<\/i> see on faili nimi (<i>index.js<\/i>), and <i>bot<\/i> \u2014 funktsiooni nimi (<i>module.exports.bot<\/i>). K\u00f5ik teised v\u00e4ljad j\u00e4tame \u00abselliseks, nagu on\u00bb, ja paremalt \u00fclanurgast kl\u00f5psame nuppu <i>Loo versioon<\/i>. M\u00f5ne sekundi p\u00e4rast luuakse see funktsiooniversioon. Varsti, p\u00e4rast veebhooki <i>, loome uue versiooni \u2014<\/i>, loome uue versiooni \u2014 <i>Nutikaid M\u00f5tteid<\/i>.<\/p>\n<p><img decoding=\"async\" alt=\"Ehitus Telegram-bot Yandex.Cloudis\" src=\"\/wp-content\/uploads\/2020\/02\/48cd898f83bdc29d124600828bf2143f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Objekti salvestamine<\/h2>\n<p>\nN\u00fc\u00fcd, kui meil on loodud <i>Yandex-funktsioon<\/i>, siis liikudes konsoolis edasi <i>konsoolis valime vasakpoolses navigeerimismen\u00fc\u00fcs punkti<\/i>, loome nn baketi (<i>baketi<\/i>, st. \u00e4mbri vene keeles, mitte kimp) piltide salvestamiseks, mida kasutatakse meie botis <i>Nutikaid M\u00f5tteid<\/i>. Vasakul navigeerimismen\u00fc\u00fcs valime punkti <i>Object Storage<\/i>, vajutame nuppu <i>Loo bakett<\/i>, anname sellele nime, n\u00e4iteks, <i>img-bucket<\/i>, ja, mis k\u00f5ige t\u00e4htsam, <i>Objektide lugemis\u00f5igus<\/i> teeme avalikuks \u2014 vastasel juhul ei n\u00e4e Telegram meie pilte. K\u00f5iki teisi v\u00e4lju j\u00e4tame muutmata. Vajutame nuppu <i>Loo bakett<\/i>.<\/p>\n<p><img decoding=\"async\" alt=\"Ehitus Telegram-bot Yandex.Cloudis\" src=\"\/wp-content\/uploads\/2020\/02\/c890a42f7d043e03300434b2c4a0258b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nP\u00e4rast seda v\u00f5ib k\u00f5ikide bakettide nimekiri v\u00e4lja n\u00e4ha umbes nii (kui see on teie ainus bakett):<\/p>\n<p><img decoding=\"async\" alt=\"Ehitus Telegram-bot Yandex.Cloudis\" src=\"\/wp-content\/uploads\/2020\/02\/34701231536742a7889b200ff49b08b1.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPraegu pakun vajutada baketi nimele ja selle sees luua kaust, et korraldada piltide salvestamist erinevate rakenduste jaoks. N\u00e4iteks, minu Telegrami boti jaoks <i>Nutikaid M\u00f5tteid<\/i> loomus kaust nimega <i>tg-bot-smart-thoughts<\/i> (\u00e4ra muretse, ma saan selle koodi aru). Loo ka sina m\u00f5ni.<\/p>\n<p><img decoding=\"async\" alt=\"Ehitus Telegram-bot Yandex.Cloudis\" src=\"\/wp-content\/uploads\/2020\/02\/c5707b5ba54fea5b548d62e097328650.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nN\u00fc\u00fcd saad vajutada kausta nimele, siseneda sinna ja faile \u00fcles laadida:<\/p>\n<p><img decoding=\"async\" alt=\"Ehitus Telegram-bot Yandex.Cloudis\" src=\"\/wp-content\/uploads\/2020\/02\/ead320e587e1d161e2cd54a94b4ea0d4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJa vajutades faili nimele \u2014 saada see <i>URL<\/i> kasutamiseks meie botis ja tegelikult \u2014 kuskil mujal (aga, \u00e4ra avalda seda <i>URL<\/i> ilma vajaduseta, sest liiklus <i>Objekti salvestusruumist<\/i> on tasuline).<\/p>\n<p><img decoding=\"async\" alt=\"Ehitus Telegram-bot Yandex.Cloudis\" src=\"\/wp-content\/uploads\/2020\/02\/07a833430b0584161423f363f6685306.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNoh, see on k\u00f5ik <i>Objektne salvestus<\/i>. N\u00fc\u00fcd teate, mida teha, kui n\u00e4ete kutset sinna faile \u00fcles laadida.<\/p>\n<h2>Veebihook<\/h2>\n<p>\nN\u00fc\u00fcd seadistame <i>veebihooki<\/i> \u2014 st. kui bot saab uuenduse (n\u00e4iteks s\u00f5numi kasutajalt), siis serverist <i>Telegram<\/i> saab meie <i>Yandexi funktsiooni<\/i> saadetakse p\u00e4ring (<i>request<\/i>) andmetega. Siin on rida, mille saate lihtsalt brauseri aadressiv\u00e4ljale kleepida ja seej\u00e4rel lehte v\u00e4rskendada (seda tuleb teha ainult \u00fcks kord): <code>https:\/\/api.telegram.org\/bot{bot_token}\/setWebHook?url={webhook_url}<\/code><br \/>\nLihtsalt asendame <i>{bot_token}<\/i> meie bot-isa poolt meie boti loomisel saadud tokeniga, ja <i>{webhook_url}<\/i> \u2014 <i>URL<\/i> meie <i>Yandexi funktsioonid<\/i>. \u00dcks hetk! Kuid <i>RossKomTsenzur<\/i> keelab teenusepakkujatel Venemaal teenindada aadressi <code>https:\/\/api.telegram.org<\/code>. Jah, see on \u00f5ige. Aga te m\u00f5elge midagi v\u00e4lja. N\u00e4iteks v\u00f5ite paluda oma vanaemal Ukrainas, Iisraelis v\u00f5i Kanadas \u2014 seal pole mingeid \u00abvenekeskse tsensuuri\u00bb, ja ainult jumal teab, kuidas inimesed ilma selleta elavad. L\u00f5ppkokkuv\u00f5ttes peab veebihooki seadistamise p\u00e4ring-vastus v\u00e4lja n\u00e4gema nii:<\/p>\n<p><img decoding=\"async\" alt=\"Ehitus Telegram-bot Yandex.Cloudis\" src=\"\/wp-content\/uploads\/2020\/02\/713834a1665520d3e471cd3d1831ac06.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTestime. Peaks 'peegeldama'.<\/p>\n<p><img decoding=\"async\" alt=\"Ehitus Telegram-bot Yandex.Cloudis\" src=\"\/wp-content\/uploads\/2020\/02\/3ab0e97f9b0ca06295fe7f5f793aab2c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNii see on. Meie \u00f5nnitlused \u2014 n\u00fc\u00fcd <i>Yandex-funktsioon<\/i> oli <i>Telegram<\/i>-botiga!<\/p>\n<h2>Nutikaid M\u00f5tteid<\/h2>\n<p>\nJa n\u00fc\u00fcd teeme Nutikaid M\u00f5tteid. Kood on avatud ja asub <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/stmike\/tg-bot-smart-thoughts\"><b><i>GitHub<\/i><\/b><\/a><\/noindex>. See on \u00fcsna h\u00e4sti kommenteeritud ja sisaldab vaid sada rida. Looge seda nagu ooperidiiva librettot! <\/p>\n<p><img decoding=\"async\" alt=\"Ehitus Telegram-bot Yandex.Cloudis\" src=\"\/wp-content\/uploads\/2020\/02\/2ad0e96a2169d0859ccec836f151d3ea.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKloonige projekt ja installige s\u00f5ltuvused:<\/p>\n<pre><code class=\"plaintext\">git clone https:\/\/github.com\/stmike\/tg-bot-smart-thoughts.git\ncd tg-bot-smart-thoughts\nnpm i\n<\/code><\/pre>\n<p>\nTehke vajalikud muudatused failis <i>index.js<\/i> (valikuline; ei ole kohustuslik muudatusi teha). Looge <i>zip<\/i>-arhiv, koos faili <i>index.js<\/i> ja kaustaga <i>node_modules<\/i> siseselt, n\u00e4iteks nimega <i>smart.zip<\/i>.<\/p>\n<p><img decoding=\"async\" alt=\"Ehitus Telegram-bot Yandex.Cloudis\" src=\"\/wp-content\/uploads\/2020\/02\/c8c97707515338a01f8b8ed7f743c4a5.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nN\u00fc\u00fcd liikuge meie <i>Yandexi funktsioonid<\/i>konsolis, valige vahekaart <i>ZIP-arhiv<\/i>, vajutage nuppu <i>Vali fail<\/i>, ja laadige \u00fcles meie arhiv <i>smart.zip<\/i>. L\u00f5puks, paremas \u00fclanurgas vajutage nuppu <i>Loo versioon<\/i>.<\/p>\n<p><img decoding=\"async\" alt=\"Ehitus Telegram-bot Yandex.Cloudis\" src=\"\/wp-content\/uploads\/2020\/02\/96634c132848278ecc00a509e61b13f0.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nM\u00f5ne sekundi p\u00e4rast, kui funktsioon uuendatakse, testime j\u00e4lle meie boti. N\u00fc\u00fcd ei peegelda see enam, vaid toob nutikaid m\u00f5tteid!<\/p>\n<p><img decoding=\"async\" alt=\"Ehitus Telegram-bot Yandex.Cloudis\" src=\"\/wp-content\/uploads\/2020\/02\/0c683826b5ef2bdbbd0253de4691900a.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSiinkohal on k\u00f5ik. Teised artiklid j\u00e4rgivad. Kui keegi soovib, et selliseid lugeda, tellige uute artiklite teated. Tellida saab siin v\u00f5i <i>Telegram<\/i>-kanal <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/it_tutorial_zahar\"><i>IT \u00d5petus Zahari<\/i><\/a><\/noindex>, v\u00f5i <i>Twitter<\/i> <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/mikezaharov\"><i>@mikezaharov<\/i><\/a><\/noindex>.<\/p>\n<h2>Lingid<\/h2>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/stmike\/tg-bot-smart-thoughts\"><b><i>Kood GitHubis<\/i><\/b><\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.yandex.ru\/docs\/functions\/\"><b><i>Yandex Cloud Functions<\/i><\/b><\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.yandex.ru\/docs\/storage\/\"><b><i>Yandex Object Storage<\/i><\/b><\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/core.telegram.org\/bots\"><b><i>Bots: An introduction for developers<\/i><\/b><\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/core.telegram.org\/bots\/api\"><b><i>Telegram Bot API<\/i><\/b><\/a><\/noindex><\/p>\n<h2>Toetused<\/h2>\n<p>\n<noindex><a rel=\"nofollow\" href=\"http:\/\/yasobe.ru\/na\/vui\"><img decoding=\"async\" alt=\"Ehitus Telegram-bot Yandex.Cloudis\" src=\"\/wp-content\/uploads\/2020\/02\/250f8765713080fcbbdaf56c04dc882f.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br \/>\n<br \/>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/486876\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0438\u0437 \u043f\u043e\u0434\u0440\u0443\u0447\u043d\u044b\u0445 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u0432 \u043c\u044b \u0441\u043e\u0431\u0435\u0440\u0451\u043c \u0432 \u042f\u043d\u0434\u0435\u043a\u0441.\u041e\u0431\u043b\u0430\u043a\u0435 Telegram-\u0431\u043e\u0442 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c Yandex Cloud Functions (\u0438\u043b\u0438 \u042f\u043d\u0434\u0435\u043a\u0441-\u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u2014 \u0434\u043b\u044f \u043a\u0440\u0430\u0442\u043a\u043e\u0441\u0442\u0438) \u0438 Yandex Object Storage (\u0438\u043b\u0438 \u041e\u0431\u044a\u0435\u043a\u0442\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u2014 \u0434\u043b\u044f \u044f\u0441\u043d\u043e\u0441\u0442\u0438). \u041a\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430 Node.js. \u041e\u0434\u043d\u0430\u043a\u043e, \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e \u043f\u0438\u043a\u0430\u043d\u0442\u043d\u043e\u0435 \u043e\u0431\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u043e \u2014 \u043d\u0435\u043a\u0430\u044f \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c, \u0441\u043a\u0430\u0436\u0435\u043c \u0442\u0430\u043a, \u0420\u043e\u0441\u0441\u041a\u043e\u043c\u0426\u0435\u043d\u0437\u0443\u0440 (\u0446\u0435\u043d\u0437\u0443\u0440\u0430 \u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u0430 \u0441\u0442\u0430\u0442\u044c\u0451\u0439 29 \u041a\u043e\u043d\u0441\u0442\u0438\u0442\u0443\u0446\u0438\u0438 \u0420\u0424), \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430\u043c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":41316,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-41315","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.0.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0438\u0437 \u043f\u043e\u0434\u0440\u0443\u0447\u043d\u044b\u0445 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u0432 \u043c\u044b \u0441\u043e\u0431\u0435\u0440\u0451\u043c \u0432.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/et\/blog\/stroim-telegram-bot-v-yandeks-oblake\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0421\u0442\u0440\u043e\u0438\u043c Telegram-\u0431\u043e\u0442 \u0432 \u042f\u043d\u0434\u0435\u043a\u0441.\u041e\u0431\u043b\u0430\u043a\u0435 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0438\u0437 \u043f\u043e\u0434\u0440\u0443\u0447\u043d\u044b\u0445 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u0432 \u043c\u044b \u0441\u043e\u0431\u0435\u0440\u0451\u043c \u0432.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/stroim-telegram-bot-v-yandeks-oblake\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-02-10T09:09:34+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-10T09:09:34+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Ehita Telegrami boti Yandex. Cloud'is | ProHoster","description":"T\u00e4na kasutame k\u00e4sit\u00f6\u00f6na valmistatud materjale, et koostada .","canonical_url":"https:\/\/prohoster.info\/et\/blog\/stroim-telegram-bot-v-yandeks-oblake","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0421\u0442\u0440\u043e\u0438\u043c Telegram-\u0431\u043e\u0442 \u0432 \u042f\u043d\u0434\u0435\u043a\u0441.\u041e\u0431\u043b\u0430\u043a\u0435 | ProHoster","og:description":"\u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0438\u0437 \u043f\u043e\u0434\u0440\u0443\u0447\u043d\u044b\u0445 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u0432 \u043c\u044b \u0441\u043e\u0431\u0435\u0440\u0451\u043c \u0432.","og:url":"https:\/\/prohoster.info\/et\/blog\/stroim-telegram-bot-v-yandeks-oblake","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-02-10T09:09:34+00:00","article:modified_time":"2020-02-10T09:09:34+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"41315","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 00:19:25","updated":"2022-09-29 21:53:55","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/41315","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=41315"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/41315\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/41316"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=41315"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=41315"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=41315"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}