
Dnes zo dostupných materiálov zložíme v Telegram-bota s využitím (alebo Yandex-funkcie — pre zjednodušenie) a (alebo Objektová úložisko — pre jasnosť). Kód bude na Node.js. Avšak, existuje jedna pikantná okolnosť — akási organizácia s názvom, povedzme, RosKomCenzur (cenzúra je zakázaná článkom 29 Ústavy RF), neumožňuje internetovým poskytovateľom Ruska odovzdávať žiadosti na Telegram API na adrese: https://api.telegram.org/. Tak my sa ani nebudeme — nie je, tak nie je. Veď v našom kufríku máme tzv. webhooky — s ich pomocou nerobíme žiadosti na konkrétnu adresu, ale iba posielame svoju žiadosť ako odpoveď na akúkoľvek žiadosť na nás. To znamená, že, ako v Odese — odpovedáme otázkou na otázku. Preto Telegram API v našom kóde nebude figurovať.
Zrieknutie sa zodpovednostiZmienky v tomto článku o akýchkoľvek štátnych organizáciách sú fiktívne a možné zcoincidencie s názvami skutočne existujúcich organizácií sú náhodné.
A teda, urobíme bota, ktorý nás bude zásobovať inteligentnými myšlienkami. Presne takého, ako na obrázku:
Môžete si ho vyskúšať v akcii — tu je meno: @SmartThoughtsBot. Všimli ste si tlačidlo «Zručnosť Alice»? Это потому, что бот является своеобразным «компаньоном» для одноименного zručnosti Alice, t.j. plní rovnaké funkcie, ako zručnosť Alice a možno, že budú môcť mierne koexistovať, reklamujúc jeden druhého. O tom, ako vytvoriť zručnosť Inteligentné Myšlienky je písané v článku . Teraz (po niektorých zmenách už po publikovaní vyššie uvedeného článku) na smartphone táto zručnosť bude vyzerať asi takto:
Vytvorenie bota
Chcel by som, aby tento tutoriál bol užitočný pre všetkých, vrátane začiatočníkov v „botstavaní“. Preto v tejto časti podrobne opíšem, ako vlastne vytvárať bota v Telegram‘e. Pre tých, ktorým tieto informácie nie sú potrebné — prejdite na ďalšie časti.
Otvárame aplikáciu Telegaram, voláme otca všetkých botov (majú to ako ľudia) — @BotFather — a na úvod mu dáme príkaz /help, aby sme si osviežili pamäť, čo môžeme robiť. Teraz nás bude zaujímať príkaz /newbot.

Pretože popisovaný bot je už vytvorený, na demonštračné účely vytvorím krátkodobo iného bota (potom ho odstránim). Nazvem ho DemoHabrBot. Mená (username) všetkých telegram-botov musia končiť slovom bot, napríklad: MyCoolBot alebo my_cool_bot — to je pre boty. Ale najprv dáme botovi názov (name) — a to je pre ľudí. Názov môže byť v akomkoľvek jazyku, obsahovať medzery, nemusí končiť slovom bot, a dokonca nemusí byť ani unikátny. V tomto príklade som nazval tohto bota Demo Habr.

Teraz vyberáme bota meno (username, to, ktoré je pre boty). Nazvime ho DemoHabrBot. Všetko, čo sa týka názvu bota (name) sa vôbec netýka jeho mena — username (alebo sa týka, ale s presnosťou naopak). Po úspešnom vytvorení unikátneho mena bota, musíme kopírovať a uchovať (v najprísnejšej tajnosti!) token, ktorý je zobrazený na snímke s červenou šípkou. S jeho pomocou nainštalujeme neskôr vychádzajúcu Telegram‘a webhook na našu Yandex funkciu.

A teraz dáme príkaz otcovi všetkých botov: /mybots, a on nám ukáže zoznam všetkých našich vytvorených botov. Nechajme zatiaľ na pokoji čerstvo vytvoreného bota Demo Habr (bol vytvorený, aby ukázal, ako vytvárať botov, ale ešte ho dnes využijeme na iné demonštračné účely), a pozrime sa na bota Inteligentné Myšlienky (@SmartThoughtsBot). Klikneme v zozname botov na tlačidlo s jeho menom.

Tu môžeme nastaviť nášho bota. Kliknutím na tlačidlo Edit… prejdeme na úpravu tej alebo onej možnosti. Napríklad, kliknutím na tlačidlo Edit Name môžeme zmeniť názov bota, povedzme namiesto Inteligentné Myšlienky, napísať Bláznivé Nápady. Botpic — to je avatar bota, mal by byť minimálne 150 x 150 px. Description — to je stručný popis, ktorý používateľ vidí pri prvom spustení bota, ako odpoveď na otázku: Čo môže tento bot robiť? O — ešte stručnejší popis, ktorý sa odovzdáva s odkazom na bota (https://t.me/SmartThoughtsBot) alebo pri prezeraní informácií o ňom.

Zostáva nám už len nastaviť príkazy. Na to klikneme na tlačidlo Edit Commands. Pre štandardizáciu používateľskej praxe Telegram odporúča vždy používať dva príkazy: /start a /help, a ak bot potrebuje nastavenia — ďalší príkaz /settings. Náš bot je jednoduchý ako guľa, takže nastavenia zatiaľ nepotrebuje. Zapíšeme prvé dva príkazy, ktoré neskôr spracujeme v kóde. Teraz, ak používateľ do vstupného poľa zadá lomku (znak kosou čiarou: /), objaví sa zoznam príkazov pre rýchly výber. Všetko ako na obrázku: vľavo — nastavujeme príkazy cez otca bota; vpravo budú tieto príkazy už dostupné používateľom v našom botovi.

Yandex funkcia
Teraz, keď je náš bot vytvorený, prechádzame do Yandex.Cloud, aby sme vytvorili funkciu, ktorá vykoná kód nášho bota. Ak ste ešte nepracovali s Yandex.Cloud , prečítajte si materiál , a potom — . Som takmer presvedčený, že týchto dvoch relatívne malých článkov vám úplne postačí na základné pochopenie témy.
Takže v konzole Yandex.Cloud v ľavom navigačnom menu vyberieme položku Cloud Functions, a potom klikneme na tlačidlo Vytvoriť funkciu. Priradíme jej názov a pre seba — krátky popis.

Po stlačení tlačidla Vytvoriť a po niekoľkých sekundách sa nová funkcia objaví v zozname všetkých funkcií. Kliknite na jej názov — to nás prenesie na stránku Prehľad našej funkcie. Tu musíme zapnúť (On) prepínač Verejná funkcia, aby bola prístupná z vonkajšieho (pre Yandex.Cloud) sveta, a hodnota polí Odkaz na volanie a Identifikátor — uchovávajte v najhlbšej tajnosti pred všetkými okrem seba a Telegramu, aby vašu funkciu nemohli volať rôzni podvodníci.

Teraz pomocou ľavého menu prejdeme do Editor funkcie. Počas chvíle odložíme naše Inteligentné Myšlienky, a vytvoríme minimálnu šablónovú funkciu na overenie funkčnosti nášho bota… Vlastne, v tomto kontexte táto funkcia je náš bot… Skrátka, teraz a hneď tu vytvoríme najjednoduchšieho bota, ktorý bude „zrkadliť“ (t.j. posielať späť) požiadavky používateľov. Túto šablónu môžete vždy použiť pri vytváraní nových telegramových botov, aby ste sa uistili, že spojenie s Telegramomfunguje správne. Kliknite na Vytvoriť súbor, nazveme ho index.js, a v online Editor kódu vložíme do tohto súboru nasledujúci kód:
module.exports.bot = async (event) => {
const body = JSON.parse(event.body);
const msg = {
'method': 'sendMessage',
'chat_id': body.message.chat.id,
'text': body.message.text
};
return {
'statusCode': 200,
'headers': {
'Content-Type': 'application/json'
},
'body': JSON.stringify(msg),
'isBase64Encoded': false
};
};
V konzole Yandex.Cloud to bude vyzerať približne takto:

Ďalej nižšie uvedieme Bod vstupu — index.bot, kde index to je názov súboru (index.js), a bot — názov funkcie (module.exports.bot). Všetky ostatné polia necháme „ako sú“, a v pravom hornom rohu klikneme na tlačidlo Vytvoriť verziu. O niekoľko sekúnd bude táto verzia funkcie vytvorená. Čoskoro, po testovaní webhooku, vytvoríme novú verziu — Inteligentné Myšlienky.

Objektová úložisko
Teraz, keď sme vytvorili Yandex funkcia, poďme, zatiaľ čo sme v konzole Yandex.Cloud, vytvoríme takzvaný bucket (bucket, t.j. vedro po slovensky, rozhodne nie kytica) na ukladanie obrázkových súborov, ktoré budú použité v našom bote Inteligentné Myšlienky. V ľavom navigačnom menu vyberieme položku Object Storage, klikneme na tlačidlo Vytvoriť bucket, vymyslíme mu názov, napríklad img-bucket, a, samozrejme, Prístup na čítanie objektov urobíme verejným — inak Telegram našich obrázkov neuvidí. Všetky ostatné polia nechávame bez zmien. Klikneme na tlačidlo Vytvoriť bucket.

Potom môže zoznam všetkých bucketov vyzerať približne takto (ak je to váš jediný bucket):

Teraz navrhujem kliknúť na názov bucketu a vo vnútri neho vytvoriť priečinok, aby sme usporiadali ukladanie obrázkov pre rôzne svoje aplikácie. Napríklad, pre telegramového bota Inteligentné Myšlienky som vytvoril priečinok s názvom tg-bot-smart-thoughts (nič, pochopím tento šifrovaný názov). Vytvorte si aj vy nejaký.

Teraz môžeme kliknúť na názov priečinka, vstúpiť do neho a nahrávať súbory:

A kliknutím na názov súboru — získať ho URL na použitie v našom bote, a vo všeobecnosti — kdekoľvek (ale, nezverejňujte ho URL bez potreby, pretože prevádzka z Objektového ukladania sa spoplatňuje).

Tak, a to je všetko ohľadom Objektového ukladania. Teraz budete vedieť, čo robiť, keď uvidíte výzvu na nahranie súborov.
Webhook
Teraz nainštalujeme webhook — t.j. keď bot dostane aktualizáciu (napríklad, správu od používateľa), zo servera Telegram sa do našich Yandex funkciu zašle požiadavka (request) s údajmi. Tu je reťazec, ktorý môžete jednoducho skopírovať do adresného poľa prehliadača a potom obnoviť stránku (to je potrebné urobiť len raz): https://api.telegram.org/bot{bot_token}/setWebHook?url={webhook_url}
Len nahradíme {bot_token} tokenom, ktorý sme dostali od bota-otca pri vytváraní nášho bota, a {webhook_url} — na URL našich Yandex-funkcie. Chvíľku! Ale veď RosKomCenzur zakazuje poskytovateľom v SR obsluhovať adresu https://api.telegram.org. Áno, správne. Ale niečo vymyslite. Veď sa môžete napríklad opýtať svojej babičky na Ukrajine, v Izraeli alebo Kanade — tam nie sú žiadne 'ruské cenzúry', a len Boh vie, ako ľudia žijú bez toho. Nakoniec, požiadavka-odpoveď pri nastavovaní webhooku by mala vyzerať takto:

Testujeme. Malo by 'zrkadliť'.

A je to. Naše gratulácie — teraz Yandex funkcia sa stala Telegram-botom!
Inteligentné Myšlienky
A teraz robíme Učené Myšlienky. Kód je otvorený a nachádza sa na . Je dobre okomentovaný a má len stovku riadkov. Čítajte ho ako operná diva libreto!

Sklonujte projekt a nainštalujte závislosti:
git clone https://github.com/stmike/tg-bot-smart-thoughts.git
cd tg-bot-smart-thoughts
npm i
Urobte potrebné zmeny v súbore index.js (voliteľné; môžete nič nemenit). Vytvorte zip-archív so súborom index.js a priečinkom node_modules vnútri, napríklad s názvom smart.zip.

Teraz prejdite v konzole na našu Yandex-funkcie, vyberte kartu ZIP-archív, kliknite na tlačidlo Vybrať súbor, a nahrajte náš archív smart.zip. Nakoniec v pravom hornom rohu kliknite na tlačidlo Vytvoriť verziu.

O niekoľko sekúnd, keď sa funkcia aktualizuje, opäť otestujeme nášho bota. Teraz už nezrkadlí, ale poskytuje inteligentné myšlienky!

Na dnes je to všetko. Ďalšie články budú nasledovať. Kto má záujem o podobné témy — prihláste sa na upozornenia na nové články. Prihlásiť sa môžete tu, alebo na Telegram-kanál , alebo Twitter .
Odkazy
Dary
Zdroj: habr.com
