{"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\/da\/blog\/stroim-telegram-bot-v-yandeks-oblake","title":{"rendered":"Vi bygger en Telegram-bot i Yandex.Cloud","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Vi bygger en Telegram-bot i Yandex.Cloud\" src=\"\/wp-content\/uploads\/2020\/02\/4a758744e4fc6bc797d270fa1bc42ef3.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nI dag vil vi samle i <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.yandex.ru\/\"><i>Yandex.Cloud<\/i><\/a><\/noindex> <i>Telegram-bot<\/i> ved hj\u00e6lp af <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.yandex.ru\/services\/functions\"><i>Yandex Cloud Functions<\/i><\/a><\/noindex> (eller <i>Yandex-funktioner<\/i> \u2014 for kortheds skyld) og <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.yandex.ru\/services\/storage\"><i>Yandex Object Storage<\/i><\/a><\/noindex> (eller <i>Objektlagring<\/i> \u2014 for klarheds skyld). Koden vil v\u00e6re p\u00e5 <i>Node.js<\/i>. Men der er en snigende omst\u00e6ndighed \u2014 en organisation ved navn lad os sige <i>Roskomtsenzura<\/i> (censur forbydes af artikel 29 i Den Russiske F\u00f8derations forfatning), forhindrer internetudbydere i Rusland i at sende foresp\u00f8rgsler til <i>Telegram API<\/i> p\u00e5 adressen: <code>https:\/\/api.telegram.org\/<\/code>. N\u00e5, vi skal ikke \u2014 hvis ikke, s\u00e5 ikke. For i vores taske har vi s\u00e5kaldte <i>webhooks<\/i> \u2014 ved hj\u00e6lp af dem sender vi ikke foresp\u00f8rgsler til en specifik adresse, men blot sender vores foresp\u00f8rgsel som svar p\u00e5 enhver foresp\u00f8rgsel til os. Det vil sige, som i Odesssa \u2014 vi svarer med et sp\u00f8rgsm\u00e5l. Derfor <i>Telegram API<\/i> vil ikke figurere i vores kode.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n<b class=\"spoiler_title\">Fraskrivelse<\/b><i>De n\u00e6vnte titler p\u00e5 nogen offentlige organisationer i denne artikel er fiktive, og eventuelle ligheder med eksisterende organisationers navne er tilf\u00e6ldige. <\/i> <\/p>\n<p>S\u00e5 vi vil lave en bot, der vil forsyne os med kloge tanker. Lige s\u00e5dan som p\u00e5 billedet:<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/SmartThoughtsBot\"><img decoding=\"async\" alt=\"Vi bygger en Telegram-bot i Yandex.Cloud\" src=\"\/wp-content\/uploads\/2020\/02\/6b7aca248999621a20f8a0ec29e75c75.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>Du kan teste den i aktion \u2014 her er navnet: <b><i>@SmartThoughtsBot<\/i><\/b>. Har du bem\u00e6rket knappen <i>\u00abAlices f\u00e6rdigheder\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>eksisterende Alices f\u00e6rdighed<\/i>, dvs. den udf\u00f8rer de samme funktioner som <i>Alices f\u00e6rdighed<\/i> og muligvis kan de fredeligt eksistere side om side og reklamere for hinanden. Om hvordan man opretter <i>f\u00e6rdigheden Kloge Tanker<\/i> er beskrevet i artiklen <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/465275\/\"><b><i>Alice f\u00e5r en f\u00e6rdighed<\/i><\/b><\/a><\/noindex>. Nu (efter at have foretaget nogle \u00e6ndringer efter offentligg\u00f8relsen af den f\u00f8rn\u00e6vnte artikel) vil denne <i>f\u00e6rdighed<\/i> se omtrent s\u00e5dan her ud p\u00e5 din smartphone:<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/alice.ya.ru\/s\/f785af07-4578-4a6b-95ae-485bd803ae20\"><img decoding=\"async\" alt=\"Vi bygger en Telegram-bot i Yandex.Cloud\" src=\"\/wp-content\/uploads\/2020\/02\/e92c340f8d947ba9252e0fcab0511ce6.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<h2>Oprettelse af bot<\/h2>\n<p>\nJeg h\u00e5ber, at denne tutorial vil v\u00e6re nyttig for alle, ogs\u00e5 for begyndere i 'botbygning'. Derfor vil jeg i denne sektion beskrive i detaljer, hvordan man overhovedet opretter <i>Telegram<\/i>\u2018for bots. For those who do not need this information \u2014 proceed to the next sections. <\/p>\n<p>\u00c5bn appen <i>Telegram<\/i>, kalder faderen til alle bots (de har det ligesom folk) \u2014 <b><i>@BotFather<\/i><\/b> \u2014 og f\u00f8rst skal vi give ham kommandoen \/help for at opfriske hukommelsen om, hvad vi kan g\u00f8re. Nu skal vi interessere os for kommandoen <i>\/newbot<\/i>.<\/p>\n<p><img decoding=\"async\" alt=\"Vi bygger en Telegram-bot i Yandex.Cloud\" src=\"\/wp-content\/uploads\/2020\/02\/12a0e84dd712e0c74dee0463f1b44e74.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDa den bot, der beskrives her, allerede er oprettet, vil jeg for demonstrationsform\u00e5l kort oprette en anden bot (derefter slette den). Jeg vil kalde den <i>DemoHabrBot<\/i>. Navne (<i>brugernavn<\/i>) for alle telegram-bots skal slutte p\u00e5 ordet <i>bot<\/i>, for eksempel: <i>MyCoolBot<\/i> eller <i>my_cool_bot<\/i> \u2014 det er til bots. Men f\u00f8rst giver vi botten et navn (<i>name<\/i>) \u2014 og dette er for mennesker. Navnet kan v\u00e6re p\u00e5 ethvert sprog, indeholde mellemrum, og det beh\u00f8ver ikke at ende med et bestemt ord <i>bot<\/i>, og det beh\u00f8ver heller ikke at v\u00e6re unikt. I dette eksempel kaldte jeg denne bot <i>Demo Habr<\/i>.<\/p>\n<p><img decoding=\"async\" alt=\"Vi bygger en Telegram-bot i Yandex.Cloud\" src=\"\/wp-content\/uploads\/2020\/02\/682ecf64724cabcfef96639d6de87521.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNu v\u00e6lger vi et navn til botten (<i>brugernavn<\/i>, det vi bruger til bots). Lad os kalde den <i>DemoHabrBot<\/i>. Alt der vedr\u00f8rer botnavnet (<i>name<\/i>) har slet ikke noget at g\u00f8re med dens navn \u2014 <i>brugernavn<\/i> (eller har noget at g\u00f8re med det, men helt omvendt). Efter at have oprettet et unikt navn til botten, skal vi kopiere og gemme (i streng hemmelighed!) tokenet, der vises p\u00e5 sk\u00e6rmbilledet med den r\u00f8de pil. Med det kan vi lidt senere ops\u00e6tte en webhook fra <i>Telegram<\/i>\u2018a webhook to our <i>Yandex-funktion<\/i>.<\/p>\n<p><img decoding=\"async\" alt=\"Vi bygger en Telegram-bot i Yandex.Cloud\" src=\"\/wp-content\/uploads\/2020\/02\/78254946c9f763d212a1952bac6c706f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNu giver vi kommandoen til fader til alle bots: <i>\/mybots<\/i>, og han viser os listen over alle de bots, vi har oprettet. Lad os for nu lade den nyoprettede bot v\u00e6re <i>Demo Habr<\/i> (den blev oprettet for at vise, hvordan man laver bots, men vi vil stadig bruge den til andre demonstrationsform\u00e5l i dag), og lad os se p\u00e5 botten <i>Smarts Thoughts<\/i> (<i>@SmartThoughtsBot<\/i>). Klik p\u00e5 knappen med dens navn i listen over bots.<\/p>\n<p><img decoding=\"async\" alt=\"Vi bygger en Telegram-bot i Yandex.Cloud\" src=\"\/wp-content\/uploads\/2020\/02\/98434725cb0d7441ec5f2552b0b508a8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHer kan vi konfigurere vores bot. Ved at klikke p\u00e5 knappen <i>Edit\u2026<\/i> g\u00e5r vi til redigeringen af en hvilken som helst mulighed. For eksempel ved at klikke p\u00e5 knappen <i>Edit Name<\/i> kan vi \u00e6ndre botens navn, lad os sige i stedet for <i>Smarts Thoughts<\/i>, skrive <i>Nonsense Ideas<\/i>. <i>Botpic<\/i> \u2014 det er botens avatar, som skal v\u00e6re minimum <i>150 x 150 px<\/i>. <i>Beskrivelse<\/i> \u2014 det er en kort beskrivelse, som brugeren ser ved f\u00f8rste opstart af botten, som svar p\u00e5 sp\u00f8rgsm\u00e5let: <i>Hvad kan denne bot g\u00f8re?<\/i> <i>Om<\/i> \u2014 en endnu kortere beskrivelse, der sendes med linket til botten (<code>https:\/\/t.me\/SmartThoughtsBot<\/code>) eller ved visning af oplysninger om den.<\/p>\n<p><img decoding=\"async\" alt=\"Vi bygger en Telegram-bot i Yandex.Cloud\" src=\"\/wp-content\/uploads\/2020\/02\/f15ba92be1bfea827273f79616bd2a3a.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVi skal kun konfigurere kommandoerne. For dette trykker vi p\u00e5 knappen <i>Edit Commands<\/i>. For at standardisere brugerpraksis <i>Telegram<\/i> anbefales det altid at bruge to kommandoer: <i>\/start<\/i> og <i>\/help<\/i>, og hvis botten har brug for indstillinger \u2014 en ekstra kommando \/settings. Vores bot er simpel som en bold, s\u00e5 den har ikke brug for indstillinger endnu. Vi skriver de f\u00f8rste to kommandoer, som vi derefter vil behandle i koden. Nu, hvis brugeren indtaster en skr\u00e5streg (symbolet for skr\u00e5streg: \/) i inputfeltet, vil der dukke en liste over kommandoer op for hurtig valg. Alt som p\u00e5 billedet: til venstre \u2014 vi ops\u00e6tter kommandoer gennem faderbotten; til h\u00f8jre er disse kommandoer allerede tilg\u00e6ngelige for brugerne i vores bot.<\/p>\n<p><img decoding=\"async\" alt=\"Vi bygger en Telegram-bot i Yandex.Cloud\" src=\"\/wp-content\/uploads\/2020\/02\/b536b5fe7b8aad3d68877a7693ea0e6f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Yandex-funktion<\/h2>\n<p>\nNu, n\u00e5r vores bot er oprettet, g\u00e5r vi videre til <i>Yandex.Cloud<\/i>, for at oprette en funktion, der vil k\u00f8re koden for vores bot. Hvis du ikke har arbejdet med <i>Yandex.Cloud<\/i> l\u00e6se materialet <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/464739\/\"><b><i>Alice i Bitrix-land<\/i><\/b><\/a><\/noindex>, og derefter - <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/440374\/\"><b><i>Yandex-funktioner sender e-mails<\/i><\/b><\/a><\/noindex>. Jeg er n\u00e6sten sikker p\u00e5, at disse to relativt korte artikler vil give dig en god grundl\u00e6ggende forst\u00e5else af emnet.<\/p>\n<p>S\u00e5, i konsollen <i>Yandex.Cloud<\/i> v\u00e6lg punktet i den venstre navigationsmenu <i>Cloud Functions<\/i>, og klik derefter p\u00e5 knappen <i>Opret funktion<\/i>. Giv den et navn, og skriv en kort beskrivelse til dig selv.<\/p>\n<p><img decoding=\"async\" alt=\"Vi bygger en Telegram-bot i Yandex.Cloud\" src=\"\/wp-content\/uploads\/2020\/02\/67f313c60481c5ef84af8a28b4934621.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAfter clicking the button <i>Oprette<\/i> og efter et par sekunder vil den nye funktion dukke op p\u00e5 listen over alle funktioner. Klik p\u00e5 dens navn \u2014 det vil f\u00f8re os til siden <i>Oversigt<\/i> for vores funktion. Her skal du aktivere (<i>T\u00e6ndt<\/i>) kontakten <i>Offentlig funktion<\/i>, s\u00e5 den bliver tilg\u00e6ngelig fra den eksterne (for <i>Yandex.Cloud<\/i>) verden, og v\u00e6rdien af felterne <i>Kaldelseslink<\/i> og <i>Identifikator<\/i> \u2014 keep it deep secret from everyone except yourself and Telegram, so that your function cannot be called by various scammers.<\/p>\n<p><img decoding=\"async\" alt=\"Vi bygger en Telegram-bot i Yandex.Cloud\" src=\"\/wp-content\/uploads\/2020\/02\/3ba45d357965d567ba33ab0ee65d2eb4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNu bruger vi det venstre menu til at g\u00e5 til <i>Redakt\u00f8r<\/i> funktionerne. Lad os l\u00e6gge vores <i>Smarts Thoughts<\/i>, til side i et kort \u00f8jeblik og oprette en minimal skabelonfunktion for at teste, om vores bot fungerer... Faktisk er denne funktion i denne sammenh\u00e6ng vores bot... Kort sagt, lige nu og her vil vi lave en simpel bot, som vil \"spejle\" (dvs. sende tilbage) brugernes anmodninger. Denne skabelon kan altid bruges til at oprette nye telegram-bots for at sikre, at forbindelsen til <i>Telegram<\/i>fungerer korrekt. Klik p\u00e5 <i>Opret fil<\/i>, kald det <i>index.js<\/i>, og i online <i>Kodeeditor<\/i> inds\u00e6t f\u00f8lgende kode i denne fil:<\/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>\nI Yandex.Cloud skal det se nogenlunde s\u00e5dan ud:<\/p>\n<p><img decoding=\"async\" alt=\"Vi bygger en Telegram-bot i Yandex.Cloud\" src=\"\/wp-content\/uploads\/2020\/02\/f0204be84468c9ae7ec1b9e4ca0dfdd9.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDerudover angiver vi lidt l\u00e6ngere nede <i>Indgangspunkt<\/i> \u2014 <i>index.bot<\/i>, hvor <i>index<\/i> det er filnavnet (<i>index.js<\/i>), mens <i>bot<\/i> \u2014 funktionsnavnet (<i>module.exports.bot<\/i>). Alle andre felter lader vi \"som de er\", og klikker p\u00e5 knappen i \u00f8verste h\u00f8jre hj\u00f8rne <i>Opret version<\/i>. Efter et par sekunder vil denne funktionsversion blive oprettet. Snart, efter at have testet <i>webhooken<\/i>, vil vi oprette en ny version \u2014 <i>Smarts Thoughts<\/i>.<\/p>\n<p><img decoding=\"async\" alt=\"Vi bygger en Telegram-bot i Yandex.Cloud\" src=\"\/wp-content\/uploads\/2020\/02\/48cd898f83bdc29d124600828bf2143f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Objektlagring<\/h2>\n<p>\nNu hvor vi har oprettet en <i>Yandex-funktion<\/i>, lad os, mens vi er i konsollen <i>Yandex.Cloud<\/i>, oprette en s\u00e5kaldt bucket (<i>bucket<\/i>, dvs. en spand p\u00e5 dansk, slet ikke en buket) til opbevaring af billedfiler, der skal bruges i vores bot <i>Smarts Thoughts<\/i>. I venstre navigationsmenu v\u00e6lger vi punktet <i>Object Storage<\/i>, klikker p\u00e5 knappen <i>Opret spand<\/i>, finder et navn, for eksempel, <i>img-bucket<\/i>, og vigtigst af alt, <i>Adgang til l\u00e6sning af objekter<\/i> making it public \u2014 otherwise, Telegram won't see our images. All other fields remain unchanged. Click the button <i>Opret spand<\/i>.<\/p>\n<p><img decoding=\"async\" alt=\"Vi bygger en Telegram-bot i Yandex.Cloud\" src=\"\/wp-content\/uploads\/2020\/02\/c890a42f7d043e03300434b2c4a0258b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEfter dette kan listen over alle spande se nogenlunde s\u00e5dan ud (hvis det er din eneste spand):<\/p>\n<p><img decoding=\"async\" alt=\"Vi bygger en Telegram-bot i Yandex.Cloud\" src=\"\/wp-content\/uploads\/2020\/02\/34701231536742a7889b200ff49b08b1.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLad os nu klikke p\u00e5 spandens navn, og inden i den oprette en mappe for at organisere opbevaringen af billeder til forskellige applikationer. For eksempel til Telegram-boten <i>Smarts Thoughts<\/i> skabte jeg en mappe kaldet <i>tg-bot-smart-thoughts<\/i> (det er fint, jeg forst\u00e5r denne kode). Opret ogs\u00e5 en.<\/p>\n<p><img decoding=\"async\" alt=\"Vi bygger en Telegram-bot i Yandex.Cloud\" src=\"\/wp-content\/uploads\/2020\/02\/c5707b5ba54fea5b548d62e097328650.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNu kan du klikke p\u00e5 mappenavnene, g\u00e5 ind i den og uploade filer:<\/p>\n<p><img decoding=\"async\" alt=\"Vi bygger en Telegram-bot i Yandex.Cloud\" src=\"\/wp-content\/uploads\/2020\/02\/ead320e587e1d161e2cd54a94b4ea0d4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOg ved at klikke p\u00e5 filnavnet \u2014 f\u00e5 det <i>URL<\/i> til brug i vores bot, og generelt \u2014 hvor som helst (men, publicer ikke dette <i>URL<\/i> uden grund, da trafikken fra <i>Objektlageret<\/i> t\u00e6lles med i prisen).<\/p>\n<p><img decoding=\"async\" alt=\"Vi bygger en Telegram-bot i Yandex.Cloud\" src=\"\/wp-content\/uploads\/2020\/02\/07a833430b0584161423f363f6685306.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOg det er faktisk alt med <i>Objektlageret<\/i>. Nu vil du vide, hvad du skal g\u00f8re, n\u00e5r du ser en opfordring til at uploade filer der.<\/p>\n<h2>Webhooks<\/h2>\n<p>\nLad os nu ops\u00e6tte <i>webhook<\/i> \u2014 dvs. n\u00e5r boten modtager en opdatering (f.eks. en besked fra en bruger), sender serveren <i>Telegram<\/i> en anmodning ( <i>Yandex-funktion<\/i> ) med data til vores<i>request<\/i>. Her er den linje, som du bare kan inds\u00e6tte i browserens adressefelt, og s\u00e5 opdatere siden (det skal g\u00f8res \u00e9n gang): <code>https:\/\/api.telegram.org\/bot{bot_token}\/setWebHook?url={webhook_url}<\/code><br \/>\nBare erstat <i>{bot_token}<\/i> med tokenet, vi fik fra bot-faderen, da vi oprettede vores bot, og <i>{webhook_url}<\/i> \u2014 med <i>URL<\/i> vores <i>Yandex-funktioner<\/i>. Vent lige et \u00f8jeblik! Men <i>Roskomtsenzura<\/i> forbyder udbydere i Rusland at betjene adressen <code>https:\/\/api.telegram.org<\/code>. Ja, korrekt. Men find p\u00e5 noget. Man kan jo for eksempel bede sin bedstemor i Ukraine, Israel eller Canada om hj\u00e6lp \u2014 der er ingen 'russisk censur' der, og Gud ved, hvordan folk klarer sig uden det. I sidste ende skal anmodning-svar ved ops\u00e6tning af webhook se s\u00e5dan ud:<\/p>\n<p><img decoding=\"async\" alt=\"Vi bygger en Telegram-bot i Yandex.Cloud\" src=\"\/wp-content\/uploads\/2020\/02\/713834a1665520d3e471cd3d1831ac06.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLad os teste. Det skal 'spejle'.<\/p>\n<p><img decoding=\"async\" alt=\"Vi bygger en Telegram-bot i Yandex.Cloud\" src=\"\/wp-content\/uploads\/2020\/02\/3ab0e97f9b0ca06295fe7f5f793aab2c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDet g\u00f8r det. Tillykke \u2014 nu er du <i>Yandex-funktion<\/i> blevet <i>Telegram<\/i>-bot!<\/p>\n<h2>Smarts Thoughts<\/h2>\n<p>\nOg nu laver vi Smarte Tanker. Koden er \u00e5ben og ligger p\u00e5 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/stmike\/tg-bot-smart-thoughts\"><b><i>GitHub<\/i><\/b><\/a><\/noindex>. Den er ret godt kommenteret, og den har kun hundrede linjer. L\u00e6s den som en operasangerinde l\u00e6ser librettoen! <\/p>\n<p><img decoding=\"async\" alt=\"Vi bygger en Telegram-bot i Yandex.Cloud\" src=\"\/wp-content\/uploads\/2020\/02\/2ad0e96a2169d0859ccec836f151d3ea.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKlient projektet og installer afh\u00e6ngigheder:<\/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>\nForetag de n\u00f8dvendige \u00e6ndringer i filen <i>index.js<\/i> (valgfrit; du kan lade det v\u00e6re som det er). Opret en <i>zip<\/i>-mappe med filen <i>index.js<\/i> og mappen <i>node_modules<\/i> indeni, for eksempel med navnet <i>smart.zip<\/i>.<\/p>\n<p><img decoding=\"async\" alt=\"Vi bygger en Telegram-bot i Yandex.Cloud\" src=\"\/wp-content\/uploads\/2020\/02\/c8c97707515338a01f8b8ed7f743c4a5.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNu skal du g\u00e5 til vores <i>Yandex-funktioner<\/i>, v\u00e6lg fanen <i>ZIP-archive<\/i>, tryk p\u00e5 knappen <i>V\u00e6lg fil<\/i>, og upload vores arkiv <i>smart.zip<\/i>. Til sidst skal du klikke p\u00e5 knappen i \u00f8verste h\u00f8jre hj\u00f8rne <i>Opret version<\/i>.<\/p>\n<p><img decoding=\"async\" alt=\"Vi bygger en Telegram-bot i Yandex.Cloud\" src=\"\/wp-content\/uploads\/2020\/02\/96634c132848278ecc00a509e61b13f0.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEfter et par sekunder, n\u00e5r funktionen er opdateret, vil vi teste vores bot igen. Nu spejler den ikke l\u00e6ngere, men leverer kloge tanker!<\/p>\n<p><img decoding=\"async\" alt=\"Vi bygger en Telegram-bot i Yandex.Cloud\" src=\"\/wp-content\/uploads\/2020\/02\/0c683826b5ef2bdbbd0253de4691900a.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDet er alt for i dag. Andre artikler f\u00f8lger. For dem, der interesserer sig for at l\u00e6se s\u00e5danne emner \u2014 tilmeld dig notifikationer om nye artikler. Du kan tilmelde dig her, eller p\u00e5 <i>Telegram<\/i>-kanal <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/it_tutorial_zahar\"><i>IT Tutorial Zakhar<\/i><\/a><\/noindex>, eller <i>Twitter<\/i> <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/mikezaharov\"><i>@mikezaharov<\/i><\/a><\/noindex>.<\/p>\n<h2>Links<\/h2>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/stmike\/tg-bot-smart-thoughts\"><b><i>Kode p\u00e5 GitHub<\/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: En introduktion til udviklere<\/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>Donationer<\/h2>\n<p>\n<noindex><a rel=\"nofollow\" href=\"http:\/\/yasobe.ru\/na\/vui\"><img decoding=\"async\" alt=\"Vi bygger en Telegram-bot i Yandex.Cloud\" src=\"\/wp-content\/uploads\/2020\/02\/250f8765713080fcbbdaf56c04dc882f.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br \/>\n<br \/>Kilde: <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.3 - 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\/da\/blog\/stroim-telegram-bot-v-yandeks-oblake\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"da_DK\" \/>\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\/da\/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\udd47Bygger Telegram-bot i Yandex.Cloud | ProHoster","description":"I dag vil vi samle fra disponible materialer i.","canonical_url":"https:\/\/prohoster.info\/da\/blog\/stroim-telegram-bot-v-yandeks-oblake","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"da_DK","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\/da\/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\/da\/wp-json\/wp\/v2\/posts\/41315","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=41315"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/41315\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media\/41316"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=41315"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=41315"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=41315"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}