{"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\/pl\/blog\/stroim-telegram-bot-v-yandeks-oblake","title":{"rendered":"Tworzymy bota Telegram w Yandex.Cloud","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Tworzymy bota Telegram w Yandex.Cloud\" src=\"\/wp-content\/uploads\/2020\/02\/4a758744e4fc6bc797d270fa1bc42ef3.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDzi\u015b ze dost\u0119pnych materia\u0142\u00f3w stworzymy w <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.yandex.ru\/\"><i>Yandex.Cloud<\/i><\/a><\/noindex> <i>bota w Telegramie<\/i> z u\u017cyciem <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.yandex.ru\/services\/functions\"><i>Yandex Cloud Functions<\/i><\/a><\/noindex> (lub <i>funkcje Yandex<\/i> \u2014 dla skr\u00f3tu) i <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.yandex.ru\/services\/storage\"><i>Yandex Object Storage<\/i><\/a><\/noindex> (lub <i>Obiektowe przechowywanie<\/i> \u2014 dla jasno\u015bci). Kod b\u0119dzie na <i>Node.js<\/i>. Jednak istnieje jedno pikantne okoliczno\u015b\u0107 \u2014 pewna organizacja o nazwie, powiedzmy, <i>RosKomCenzura<\/i> (cenzura jest zakazana przez artyku\u0142 29 Konstytucji Federacji Rosyjskiej), nie pozwala dostawcom internetowym w Rosji przesy\u0142a\u0107 zapyta\u0144 do <i>API Telegrama<\/i> pod adresem: <code>https:\/\/api.telegram.org\/<\/code>. C\u00f3\u017c, nie b\u0119dziemy \u2014 nie ma sprawy. W ko\u0144cu w naszym kufrze mamy tzw. <i>webhooki<\/i> \u2014 dzi\u0119ki nim nie wysy\u0142amy zapyta\u0144 na konkretny adres, lecz jedynie odpowiadamy na ka\u017cde zapytanie skierowane do nas. To znaczy, jak w Odessie \u2014 odpowiadamy pytaniem na pytanie. Dlatego <i>API Telegrama<\/i> w naszym kodzie si\u0119 nie znajdzie.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n<b class=\"spoiler_title\">Wy\u0142\u0105czenie odpowiedzialno\u015bci<\/b><i>Wspomniane w tym artykule nazwy jakiejkolwiek instytucji pa\u0144stwowej s\u0105 fikcyjne, a jakiekolwiek przypadkowe podobie\u0144stwa do nazw rzeczywistych instytucji s\u0105 niezamierzone. <\/i> <\/p>\n<p>Wi\u0119c stworzymy bota, kt\u00f3ry b\u0119dzie nas zaopatrywa\u0142 w inteligentne my\u015bli. Dok\u0142adnie takiego, jak na obrazku:<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/SmartThoughtsBot\"><img decoding=\"async\" alt=\"Tworzymy bota Telegram w Yandex.Cloud\" src=\"\/wp-content\/uploads\/2020\/02\/6b7aca248999621a20f8a0ec29e75c75.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>Mo\u017cesz przetestowa\u0107 go w akcji \u2014 oto jego nazwa: <b><i>@SmartThoughtsBot<\/i><\/b>. Zwr\u00f3ci\u0142e\u015b uwag\u0119 na przycisk <i>\u201eUmiej\u0119tno\u015b\u0107 Ali\u201d<\/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>umiej\u0119tno\u015bci Ali<\/i>, tzn. wykonuje te same funkcje, co <i>umiej\u0119tno\u015b\u0107 Ali<\/i> i by\u0107 mo\u017ce b\u0119d\u0105 mogli spokojnie wsp\u00f3\u0142istnie\u0107, reklamuj\u0105c si\u0119 nawzajem. Jak stworzy\u0107 <i>umiej\u0119tno\u015b\u0107 Inteligentne My\u015bli<\/i> om\u00f3wiono w artykule <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/465275\/\"><b><i>Ali nabiera umiej\u0119tno\u015bci<\/i><\/b><\/a><\/noindex>. Obecnie (po wprowadzeniu pewnych zmian ju\u017c po publikacji wspomnianego artyku\u0142u) na smartfonie ta <i>umiej\u0119tno\u015b\u0107<\/i> b\u0119dzie wygl\u0105da\u0107 oko\u0142o tak:<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/alice.ya.ru\/s\/f785af07-4578-4a6b-95ae-485bd803ae20\"><img decoding=\"async\" alt=\"Tworzymy bota Telegram w Yandex.Cloud\" src=\"\/wp-content\/uploads\/2020\/02\/e92c340f8d947ba9252e0fcab0511ce6.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<h2>Tworzenie bota<\/h2>\n<p>\nChcia\u0142bym, aby ten poradnik by\u0142 przydatny dla wszystkich, w tym dla pocz\u0105tkuj\u0105cych \u00abbudowniczych bot\u00f3w\u00bb. Dlatego w tej sekcji do\u015b\u0107 szczeg\u00f3\u0142owo opisz\u0119, jak w og\u00f3le tworzy\u0107 w <i>Telegram<\/i>\u2018bot\u00f3w. Dla tych, kt\u00f3rzy nie potrzebuj\u0105 tych informacji \u2014 przejd\u017acie do nast\u0119pnych sekcji. <\/p>\n<p>Otwieramy aplikacj\u0119 <i>Telegaram<\/i>, wo\u0142amy ojca wszystkich bot\u00f3w (u nich wszystko jak u ludzi) \u2014 <b><i>@BotFather<\/i><\/b> \u2014 i na pocz\u0105tek wydajemy mu polecenie \/help, aby przypomnie\u0107 sobie, co mo\u017cemy robi\u0107. Teraz interesuje nas polecenie <i>\/newbot<\/i>.<\/p>\n<p><img decoding=\"async\" alt=\"Tworzymy bota Telegram w Yandex.Cloud\" src=\"\/wp-content\/uploads\/2020\/02\/12a0e84dd712e0c74dee0463f1b44e74.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPoniewa\u017c opisywany tutaj bot ju\u017c zosta\u0142 stworzony, dla cel\u00f3w demonstracyjnych tymczasowo stworz\u0119 innego bota (potem go usun\u0119). Nazw\u0119 go <i>DemoHabrBot<\/i>. Nazwy (<i>nazwa u\u017cytkownika<\/i>) wszystkich bot\u00f3w telegramowych powinny ko\u0144czy\u0107 si\u0119 na s\u0142owo <i>bot<\/i>, na przyk\u0142ad: <i>MyCoolBot<\/i> lub <i>my_cool_bot<\/i> \u2014 to dla bot\u00f3w. Ale najpierw nadajemy botowi nazw\u0119 (<i>name<\/i>) \u2014 a to jest dla ludzi. Nazwa mo\u017ce by\u0107 w dowolnym j\u0119zyku, zawiera\u0107 spacje i nie musi ko\u0144czy\u0107 si\u0119 na s\u0142owo <i>bot<\/i>, a nawet nie musi by\u0107 unikalna. W tym przyk\u0142adzie nazwa\u0142em tego bota <i>Demo Habr<\/i>.<\/p>\n<p><img decoding=\"async\" alt=\"Tworzymy bota Telegram w Yandex.Cloud\" src=\"\/wp-content\/uploads\/2020\/02\/682ecf64724cabcfef96639d6de87521.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTeraz wybieramy nazw\u0119 dla bota (<i>nazwa u\u017cytkownika<\/i>, czyli t\u0119, kt\u00f3ra jest dla bot\u00f3w). Nazwijmy go <i>DemoHabrBot<\/i>. Wszystko, co dotyczy\u0142o nazwy bota (<i>name<\/i>) wcale nie odnosi si\u0119 do jego imienia \u2014 <i>nazwa u\u017cytkownika<\/i> (lub si\u0119 odnosi, ale w odwrotny spos\u00f3b). Po pomy\u015blnym utworzeniu unikalnej nazwy bota, musimy skopiowa\u0107 i zachowa\u0107 (w naj\u015bci\u015blejszej tajemnicy!) token, pokazany na zrzucie ekranu czerwon\u0105 strza\u0142k\u0105. Z jego pomoc\u0105 nied\u0142ugo ustawimy wychodz\u0105cy z <i>Telegram<\/i>\u2018webhook na nasz\u0105 <i>Funkcj\u0119 Yandex<\/i>.<\/p>\n<p><img decoding=\"async\" alt=\"Tworzymy bota Telegram w Yandex.Cloud\" src=\"\/wp-content\/uploads\/2020\/02\/78254946c9f763d212a1952bac6c706f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA teraz wydajemy komend\u0119 ojcu wszystkich bot\u00f3w: <i>\/mybots<\/i>, a on poka\u017ce nam list\u0119 wszystkich utworzonych przez nas bot\u00f3w. Na razie zostawmy w spokoju \u015bwie\u017co rozpocz\u0119tego bota <i>Demo Habr<\/i> (zosta\u0142 stworzony, aby pokaza\u0107, jak tworzy\u0107 boty, ale jeszcze dzisiaj skorzystamy z niego do innych cel\u00f3w demonstracyjnych), i rozwa\u017cmy bota <i>Inteligentne My\u015bli<\/i> (<i>@SmartThoughtsBot<\/i>). Klikamy w li\u015bcie bot\u00f3w przycisk z jego nazw\u0105.<\/p>\n<p><img decoding=\"async\" alt=\"Tworzymy bota Telegram w Yandex.Cloud\" src=\"\/wp-content\/uploads\/2020\/02\/98434725cb0d7441ec5f2552b0b508a8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTutaj mo\u017cemy dostosowa\u0107 naszego bota. Klikaj\u0105c przycisk <i>Edytuj\u2026<\/i> przeniesiemy si\u0119 do edytowania tej lub innej opcji. Na przyk\u0142ad, klikaj\u0105c przycisk <i>Edytuj nazw\u0119<\/i> mo\u017cemy zmieni\u0107 nazw\u0119 bota, powiedzmy zamiast <i>Inteligentne My\u015bli<\/i>, napisa\u0107 <i>Dziwaczne Pomys\u0142y<\/i>. <i>Botpic<\/i> \u2014 to awatar bota, powinien mie\u0107 co najmniej <i>150 x 150 px<\/i>. <i>Opis<\/i> \u2014 to kr\u00f3tki opis, kt\u00f3ry u\u017cytkownik widzi przy pierwszym uruchomieniu bota, jako odpowied\u017a na pytanie: <i>Co ten bot potrafi?<\/i> <i>O<\/i> \u2014 jeszcze bardziej skr\u00f3cony opis, kt\u00f3ry jest przesy\u0142any z linkiem do bota (<code>https:\/\/t.me\/SmartThoughtsBot<\/code>) lub przy przegl\u0105daniu informacji o nim.<\/p>\n<p><img decoding=\"async\" alt=\"Tworzymy bota Telegram w Yandex.Cloud\" src=\"\/wp-content\/uploads\/2020\/02\/f15ba92be1bfea827273f79616bd2a3a.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPozosta\u0142o nam tylko skonfigurowa\u0107 komendy. W tym celu klikamy przycisk <i>Edytuj komendy<\/i>. Dla standaryzacji praktyki u\u017cytkownika <i>Telegram<\/i> zaleca si\u0119 zawsze u\u017cywa\u0107 dw\u00f3ch komend: <i>\/start<\/i> i <i>\/help<\/i>, a je\u015bli bot potrzebuje ustawie\u0144 \u2014 dodatkow\u0105 komend\u0119 \/settings. Nasz bot jest prosty jak kula, wi\u0119c na razie nie potrzebuje ustawie\u0144. Wpisujemy dwie pierwsze komendy, kt\u00f3re potem przetworzymy w kodzie. Teraz, je\u015bli w polu wej\u015bciowym u\u017cytkownik wpisze uko\u015bnik (znak: \/), pojawi si\u0119 lista komend do szybkiego wyboru. Wszystko jak na obrazku: po lewej \u2014 ustawiamy komendy przez bota-ojca; po prawej te komendy s\u0105 ju\u017c dost\u0119pne dla u\u017cytkownik\u00f3w w naszym bocie.<\/p>\n<p><img decoding=\"async\" alt=\"Tworzymy bota Telegram w Yandex.Cloud\" src=\"\/wp-content\/uploads\/2020\/02\/b536b5fe7b8aad3d68877a7693ea0e6f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Funkcja Yandex<\/h2>\n<p>\nTeraz, gdy nasz bot zosta\u0142 stworzony, przechodzimy do <i>Yandex.Cloud<\/i>, aby stworzy\u0107 funkcj\u0119, kt\u00f3ra b\u0119dzie wykonywa\u0107 kod naszego bota. Je\u015bli jeszcze nie pracowa\u0142e\u015b z <i>Yandex.Cloud<\/i> , zapoznaj si\u0119 z materia\u0142em <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/464739\/\"><b><i>Alicja w kraju Bitrix<\/i><\/b><\/a><\/noindex>, a potem \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/440374\/\"><b><i>Funkcje Yandexa wysy\u0142aj\u0105 e-maile<\/i><\/b><\/a><\/noindex>. Jestem prawie pewien, \u017ce te dwa stosunkowo niewielkie artyku\u0142y wystarcz\u0105 ci do podstawowego zrozumienia tematu.<\/p>\n<p>Zatem, w konsoli <i>Yandex.Cloud<\/i> , w lewym menu nawigacyjnym wybieramy pozycj\u0119 <i>Cloud Functions<\/i>, a nast\u0119pnie klikamy przycisk <i>Utw\u00f3rz funkcj\u0119<\/i>. Przypisujemy mu nazw\u0119 oraz kr\u00f3tkie opisanie dla siebie.<\/p>\n<p><img decoding=\"async\" alt=\"Tworzymy bota Telegram w Yandex.Cloud\" src=\"\/wp-content\/uploads\/2020\/02\/67f313c60481c5ef84af8a28b4934621.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPo naci\u015bni\u0119ciu przycisku <i>Utw\u00f3rz<\/i> i po kilku sekundach nowa funkcja pojawi si\u0119 na li\u015bcie wszystkich funkcji. Klikamy na jej nazw\u0119 \u2014 to przeniesie nas na stron\u0119 <i>Przegl\u0105d<\/i> naszej funkcji. Tutaj trzeba w\u0142\u0105czy\u0107 (<i>W\u0142\u0105czony<\/i>) prze\u0142\u0105cznik <i>Funkcja publiczna<\/i>, aby by\u0142a dost\u0119pna z zewn\u0119trznego (dla <i>Yandex.Cloud<\/i>) \u015bwiata, a warto\u015b\u0107 p\u00f3l <i>Link do wywo\u0142ania<\/i> i <i>Identyfikator<\/i> \u2014 zachowa\u0107 w g\u0142\u0119bokiej tajemnicy przed wszystkimi opr\u00f3cz siebie i Telegram\u2019a, aby r\u00f3\u017cni oszu\u015bci nie mogli wywo\u0142ywa\u0107 twojej funkcji.<\/p>\n<p><img decoding=\"async\" alt=\"Tworzymy bota Telegram w Yandex.Cloud\" src=\"\/wp-content\/uploads\/2020\/02\/3ba45d357965d567ba33ab0ee65d2eb4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTeraz przechodzimy do <i>Edytora<\/i> funkcji. Na razie od\u0142\u00f3\u017cmy na chwil\u0119 nasze <i>Inteligentne My\u015bli<\/i>, i stw\u00f3rzmy minimaln\u0105 funkcj\u0119-szablon do przetestowania dzia\u0142ania naszego bota\u2026 W ka\u017cdym razie, w tym kontek\u015bcie ta funkcja to nasz bot\u2026 W skr\u00f3cie, teraz i tutaj zrobimy najprostszy bot, kt\u00f3ry b\u0119dzie \u201elustrzanym odbiciem\u201d (tj. wysy\u0142a\u0142 z powrotem) zapyta\u0144 u\u017cytkownik\u00f3w. Ten szablon mo\u017cna z powodzeniem u\u017cywa\u0107 zawsze podczas tworzenia nowych bot\u00f3w Telegram, aby upewni\u0107 si\u0119, \u017ce po\u0142\u0105czenie z <i>Telegram\u2019a<\/i>dzia\u0142a poprawnie. Klikamy <i>Utw\u00f3rz plik<\/i>, nazywamy go <i>index.js<\/i>, a w edytorze online <i>Edytorze kodu<\/i> wklejamy w ten plik nast\u0119puj\u0105cy kod:<\/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>\nW konsoli Yandex.Cloud powinno to wygl\u0105da\u0107 mniej wi\u0119cej tak:<\/p>\n<p><img decoding=\"async\" alt=\"Tworzymy bota Telegram w Yandex.Cloud\" src=\"\/wp-content\/uploads\/2020\/02\/f0204be84468c9ae7ec1b9e4ca0dfdd9.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNast\u0119pnie nieco ni\u017cej podajemy <i>Punkt wej\u015bcia<\/i> \u2014 <i>index.bot<\/i>, gdzie <i>index<\/i> to nazwa pliku (<i>index.js<\/i>), a <i>bot<\/i> \u2014 nazwa funkcji (<i>module.exports.bot<\/i>). Pozosta\u0142e pola zostawiamy \u201ejak s\u0105\u201d, a w prawym g\u00f3rnym rogu klikamy przycisk <i>Utw\u00f3rz wersj\u0119<\/i>. Po kilku sekundach ta wersja funkcji zostanie utworzona. Wkr\u00f3tce, po te\u015bcie <i>webhooku<\/i>, stworzymy now\u0105 wersj\u0119 \u2014 <i>Inteligentne My\u015bli<\/i>.<\/p>\n<p><img decoding=\"async\" alt=\"Tworzymy bota Telegram w Yandex.Cloud\" src=\"\/wp-content\/uploads\/2020\/02\/48cd898f83bdc29d124600828bf2143f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Obiektowe przechowywanie<\/h2>\n<p>\nTeraz, kiedy mamy ju\u017c utworzon\u0105 <i>Funkcja Yandex<\/i>, przejd\u017amy, p\u00f3ki jeste\u015bmy w konsoli <i>Yandex.Cloud<\/i>, stworzymy tzw. bucket (<i>bucket<\/i>, czyli wiadro po rosyjsku, a nie bukiet) do przechowywania plik\u00f3w obraz\u00f3w, kt\u00f3re b\u0119d\u0105 u\u017cywane w naszym bocie <i>Inteligentne My\u015bli<\/i>. W lewym menu nawigacyjnym wybieramy opcj\u0119 <i>Object Storage<\/i>, klikamy przycisk <i>Utw\u00f3rz bucket<\/i>, wymy\u015blamy mu nazw\u0119, na przyk\u0142ad, <i>img-bucket<\/i>, i, co najwa\u017cniejsze, <i>Dost\u0119p do odczytu obiekt\u00f3w<\/i> udost\u0119pniamy publicznie \u2014 inaczej Telegram nie zobaczy naszych obrazk\u00f3w. Pozosta\u0142e pola pozostawiamy bez zmian. Klikamy przycisk <i>Utw\u00f3rz bucket<\/i>.<\/p>\n<p><img decoding=\"async\" alt=\"Tworzymy bota Telegram w Yandex.Cloud\" src=\"\/wp-content\/uploads\/2020\/02\/c890a42f7d043e03300434b2c4a0258b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPo tym li\u015b\u0107 wszystkich bucket\u00f3w mo\u017ce wygl\u0105da\u0107 mniej wi\u0119cej tak (je\u015bli to tw\u00f3j jedyny bucket):<\/p>\n<p><img decoding=\"async\" alt=\"Tworzymy bota Telegram w Yandex.Cloud\" src=\"\/wp-content\/uploads\/2020\/02\/34701231536742a7889b200ff49b08b1.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTeraz proponuj\u0119 klikn\u0105\u0107 na nazw\u0119 bucketu i wewn\u0105trz niego utworzy\u0107 folder, aby uporz\u0105dkowa\u0107 przechowywanie obrazk\u00f3w dla r\u00f3\u017cnych aplikacji. Na przyk\u0142ad, dla bota telegramowego <i>Inteligentne My\u015bli<\/i> stworzy\u0142em folder o nazwie <i>tg-bot-smart-thoughts<\/i> (nic, zrozumiem ten szyfr). Stw\u00f3rz tak\u017ce jaki\u015b.<\/p>\n<p><img decoding=\"async\" alt=\"Tworzymy bota Telegram w Yandex.Cloud\" src=\"\/wp-content\/uploads\/2020\/02\/c5707b5ba54fea5b548d62e097328650.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTeraz mo\u017cna klikn\u0105\u0107 na nazw\u0119 folderu, wej\u015b\u0107 do niego i przesy\u0142a\u0107 pliki:<\/p>\n<p><img decoding=\"async\" alt=\"Tworzymy bota Telegram w Yandex.Cloud\" src=\"\/wp-content\/uploads\/2020\/02\/ead320e587e1d161e2cd54a94b4ea0d4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA klikaj\u0105c na nazw\u0119 pliku \u2014 otrzyma\u0107 go <i>URL<\/i> do u\u017cycia w naszym bocie, i w og\u00f3le \u2014 gdziekolwiek (ale nie publikuj tego <i>URL<\/i> bez potrzeby, poniewa\u017c ruch z <i>Obiektowego przechowywania<\/i> jest p\u0142atny).<\/p>\n<p><img decoding=\"async\" alt=\"Tworzymy bota Telegram w Yandex.Cloud\" src=\"\/wp-content\/uploads\/2020\/02\/07a833430b0584161423f363f6685306.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nI to, w zasadzie, wszystko z <i>Obiektowym przechowywaniem<\/i>. Teraz b\u0119dziesz wiedzie\u0107, co robi\u0107, gdy zobaczysz wezwanie do przes\u0142ania plik\u00f3w.<\/p>\n<h2>Webhook<\/h2>\n<p>\nTeraz zainstalujemy <i>webhook<\/i> \u2014 to znaczy, kiedy bot otrzyma aktualizacj\u0119 (na przyk\u0142ad, wiadomo\u015b\u0107 od u\u017cytkownika), z serwera <i>Telegram<\/i> z naszej <i>Funkcj\u0119 Yandex<\/i> zostanie wys\u0142ane zapytanie (<i>request<\/i>) z danymi. Oto linia, kt\u00f3r\u0105 mo\u017cna po prostu wklei\u0107 w pole adresowe przegl\u0105darki, a nast\u0119pnie zaktualizowa\u0107 stron\u0119 (to trzeba zrobi\u0107 tylko raz): <code>https:\/\/api.telegram.org\/bot{bot_token}\/setWebHook?url={webhook_url}<\/code><br \/>\nTylko zamienimy <i>{bot_token}<\/i> na token, kt\u00f3ry otrzymali\u015bmy od bota-matki przy tworzeniu naszego bota, a <i>{webhook_url}<\/i> \u2014 na <i>URL<\/i> nasz <i>funkcje Yandex<\/i>. Chwileczk\u0119! Ale przecie\u017c <i>RosKomCenzura<\/i> zakazuje dostawcom w RF obs\u0142ugi adresu <code>https:\/\/api.telegram.org<\/code>. Tak, to prawda. Ale wymy\u015bl co\u015b. Mo\u017cna, na przyk\u0142ad, poprosi\u0107 swoj\u0105 babci\u0119 w Ukrainie, Izraelu lub Kanadzie \u2014 tam nie ma \u017cadnych \u00abroskomcenzur\u00bb, a b\u00f3g jeden wie, jak ludzie \u017cyj\u0105 bez tego. W rezultacie, zapytanie-odpowied\u017a podczas ustawiania webhooku powinno wygl\u0105da\u0107 tak:<\/p>\n<p><img decoding=\"async\" alt=\"Tworzymy bota Telegram w Yandex.Cloud\" src=\"\/wp-content\/uploads\/2020\/02\/713834a1665520d3e471cd3d1831ac06.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTestujemy. Powinno \u00ablustrzane\u00bb.<\/p>\n<p><img decoding=\"async\" alt=\"Tworzymy bota Telegram w Yandex.Cloud\" src=\"\/wp-content\/uploads\/2020\/02\/3ab0e97f9b0ca06295fe7f5f793aab2c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTak jest. Nasze gratulacje \u2014 teraz <i>Funkcja Yandex<\/i> sta\u0142a si\u0119 <i>Telegram<\/i>-botem!<\/p>\n<h2>Inteligentne My\u015bli<\/h2>\n<p>\nA teraz robimy Umy\u015blne My\u015bli. Kod jest otwarty i znajduje si\u0119 na <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/stmike\/tg-bot-smart-thoughts\"><b><i>GitHub<\/i><\/b><\/a><\/noindex>. Jest do\u015b\u0107 dobrze skomentowany, a w nim tylko sto linijek. Czytaj go jak operowa diva libretto! <\/p>\n<p><img decoding=\"async\" alt=\"Tworzymy bota Telegram w Yandex.Cloud\" src=\"\/wp-content\/uploads\/2020\/02\/2ad0e96a2169d0859ccec836f151d3ea.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSklonuj projekt i zainstaluj zale\u017cno\u015bci:<\/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>\nWprowad\u017a niezb\u0119dne zmiany w pliku <i>index.js<\/i> (opcjonalnie; nie trzeba nic zmienia\u0107). Stw\u00f3rz <i>zip<\/i>-archiwum, z plikiem <i>index.js<\/i> i folderem <i>node_modules<\/i> w \u015brodku, na przyk\u0142ad o nazwie <i>smart.zip<\/i>.<\/p>\n<p><img decoding=\"async\" alt=\"Tworzymy bota Telegram w Yandex.Cloud\" src=\"\/wp-content\/uploads\/2020\/02\/c8c97707515338a01f8b8ed7f743c4a5.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTeraz przejd\u017a w konsoli do naszej <i>funkcje Yandex<\/i>, wybierz zak\u0142adk\u0119 <i>ZIP-archiwum<\/i>, naci\u015bnij przycisk <i>Wybierz plik<\/i>, a nast\u0119pnie za\u0142aduj nasze archiwum <i>smart.zip<\/i>. W ko\u0144cu, w prawym g\u00f3rnym rogu kliknij przycisk <i>Utw\u00f3rz wersj\u0119<\/i>.<\/p>\n<p><img decoding=\"async\" alt=\"Tworzymy bota Telegram w Yandex.Cloud\" src=\"\/wp-content\/uploads\/2020\/02\/96634c132848278ecc00a509e61b13f0.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPo kilku sekundach, gdy funkcja si\u0119 zaktualizuje, przetestujmy ponownie naszego bota. Teraz ju\u017c nie \"zrzuca\", a dostarcza m\u0105dre my\u015bli!<\/p>\n<p><img decoding=\"async\" alt=\"Tworzymy bota Telegram w Yandex.Cloud\" src=\"\/wp-content\/uploads\/2020\/02\/0c683826b5ef2bdbbd0253de4691900a.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNa dzisiaj to wszystko. Kolejne artyku\u0142y wkr\u00f3tce. Kto chcia\u0142by czyta\u0107 podobne \u2014 subskrybuj powiadomienia o nowych artyku\u0142ach. Mo\u017cna zapisa\u0107 si\u0119 tutaj lub na <i>Telegram<\/i>-kana\u0142 <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/it_tutorial_zahar\"><i>IT Tutorial Zachar<\/i><\/a><\/noindex>, lub <i>Twitter<\/i> <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/mikezaharov\"><i>@mikezaharov<\/i><\/a><\/noindex>.<\/p>\n<h2>Linki<\/h2>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/stmike\/tg-bot-smart-thoughts\"><b><i>Kod na GitHubie<\/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: Wprowadzenie dla programist\u00f3w<\/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>Donacje<\/h2>\n<p>\n<noindex><a rel=\"nofollow\" href=\"http:\/\/yasobe.ru\/na\/vui\"><img decoding=\"async\" alt=\"Tworzymy bota Telegram w Yandex.Cloud\" src=\"\/wp-content\/uploads\/2020\/02\/250f8765713080fcbbdaf56c04dc882f.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br \/>\n<br \/>\u0179r\u00f3d\u0142o: <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.1.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\/pl\/blog\/stroim-telegram-bot-v-yandeks-oblake\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\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\/pl\/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\udd47Budujemy bota Telegram w Yandex.Cloud | ProHoster","description":"Dzi\u015b z dost\u0119pnych materia\u0142\u00f3w stworzymy w.","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/stroim-telegram-bot-v-yandeks-oblake","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pl_PL","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\/pl\/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\/pl\/wp-json\/wp\/v2\/posts\/41315","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=41315"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/41315\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/41316"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=41315"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=41315"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=41315"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}