Vytváříme Telegram bota v Yandex Cloudu

Vytváříme Telegram bota v Yandex Cloudu

Dnes z dostupných materiálů sestavíme v Yandex Cloudu Telegram bota s využitím Yandex Cloud Functions (nebo Yandex funkce — pro stručnost) a Yandex Object Storage (nebo Objektové úložiště — pro jasnost). Kód bude na Node.js. Avšak je zde jeden pikantní problém — jistá organizace s názvem, řekněme, RosKomCenzura (cenzura je zakázána článkem 29 Ústavy Ruské federace), neumožňuje internetovým poskytovatelům v Rusku předávat dotazy do Telegram API na adrese: https://api.telegram.org/. No a nebudeme — není, tak není. Vždyť v našem kufříku máme tzv. webhooky — pomocí nich neprovádíme dotazy na konkrétní adresu, ale jednoduše posíláme svůj dotaz jako odpověď na jakýkoliv dotaz k nám. To znamená, jako v Oděse — odpovídáme otázkou na otázku. Proto Telegram API v našem kódu figurovat nebude.

Vyloučení odpovědnostiNázvy jakýchkoli státních institucí zmíněné v tomto článku jsou smyšlené a případná shodnost s názvy skutečně existujících institucí je náhodná.

Takže, vytvoříme bota, který nás bude zásobovat chytrými myšlenkami. Přesně takového, jako na obrázku:

Vytváříme Telegram bota v Yandex Cloudu

Můžete si ho vyzkoušet v akci — zde je jméno: @SmartThoughtsBot. Všimli jste si tlačítka „Dovednost Alice“? Это потому, что бот является своеобразным «компаньоном» для одноименного dovednosti Alice, t.j. vykonává stejné funkce jako dovednost Alice a možná, že budou moci klidně koexistovat a propagovat se navzájem. O tom, jak vytvořit dovednost Chytré Myšlenky je řečeno v článku Alice získává dovednost. Nyní (po provedení několika změn po zveřejnění výše zmíněného článku) bude na smartphonu tento dovednost vypadat přibližně takto:

Vytváříme Telegram bota v Yandex Cloudu

Vytvoření bota

Rád bych, aby tento tutoriál byl užitečný všem, vč. začínajícím „botolidirům“. Proto v této části podrobně popíšu, jak vlastně vytvářet v Telegram‘e boty. Pro ty, kdo tuto informaci nepotřebují — přejděte do následujících sekcí.

Otevřete aplikaci Telegaram, zavolejte otce všech botů (mají to jako lidé) — @BotFather — a nejprve mu dejte příkaz /help, abychom si osvěžili paměť, co vše můžeme dělat. Nyní nás bude zajímat příkaz /newbot.

Vytváříme Telegram bota v Yandex Cloudu

Jelikož popsaný bot byl již vytvořen, pro demonstrační účely vytvořím na krátký čas jiného bota (později ho smažu). Nazvu ho DemoHabrBot. Jména (uživatelské jméno) všech Telegram botů musí končit slovem bot, například: MyCoolBot nebo my_cool_bot — to je pro roboty. Ale nejprve dáme robotu název (name) — a to je pro lidi. Název může být v jakémkoli jazyce, může obsahovat mezery a nemusí končit na slovo bot, a dokonce nemusí být jedinečný. V tomto příkladu jsem pojmenoval tohoto robota Demo Habr.

Vytváříme Telegram bota v Yandex Cloudu

Teď vybíráme robotovi jméno (uživatelské jméno, tedy to, které je pro roboty). Nazveme ho DemoHabrBot. Všechno, co se týká názvu robota (name) vůbec nesouvisí s jeho jménem — uživatelské jméno (nebo souvisí, ale přesně naopak). Po úspěšném vytvoření jedinečného jména robota musíme zkopírovat a uchovat (v nejpřísnější tajnosti!) token, který je zobrazen na screenshotu červenou šipkou. Pomocí něho později nastavíme výchozí Telegramwebhook na naši Jandeks funkci.

Vytváříme Telegram bota v Yandex Cloudu

A teď dáme povel otci všech robotů: /mybots, a on nám ukáže seznam všech námi vytvořených robotů. Prozatím necháme na pokoji čerstvě upečeného robota Demo Habr (byl vytvořen, aby ukázal, jak vytvářet roboty, ale dnes ho ještě použijeme pro jiné demonstrační účely), a podíváme se na robota Chytré myšlenky (@SmartThoughtsBot). Klikneme v seznamu robotů na tlačítko s jeho jménem.

Vytváříme Telegram bota v Yandex Cloudu

Tady si můžeme nastavit našeho robota. Kliknutím na tlačítko Edit... přejdeme na úpravu některé z možností. Například kliknutím na tlačítko Edit Name můžeme změnit název robota, třeba místo Chytré myšlenky, napsat Bláznivé Nápady. Botpic — to je avatar robota, měl by být alespoň 150 x 150 px. Popis — to je krátký popis, který uživatel vidí při prvním spuštění robota, jako odpověď na otázku: Co může tento robot dělat? O aplikaci — ještě kratší popis, který je předáván s odkazem na robota (https://t.me/SmartThoughtsBot) nebo při prohlížení informací o něm.

Vytváříme Telegram bota v Yandex Cloudu

Zbývá nám jen nastavit příkazy. K tomu klikneme na tlačítko Edit Commands. Pro standardizaci uživatelské praxe Telegram se doporučuje vždy používat dva příkazy: /start a /help, a pokud robot potřebuje nastavení — další příkaz /settings. Náš robot je jednoduchý jako houpací síť, takže nastavení zatím nepotřebuje. Napíšeme dva první příkazy, které pak zpracujeme v kódu. Teď, pokud uživatel zadá do vstupního pole lomítko (záměr: /), objeví se seznam příkazů pro rychlý výběr. Všechno jako na obrázku: vlevo — nastavujeme příkazy přes otce robota; vpravo jsou tyto příkazy již dostupné uživatelům v našem robotu.

Vytváříme Telegram bota v Yandex Cloudu

Jandeks funkce

Teď, když je náš robot vytvořen, přecházíme k Yandex.Cloud, aby vytvořili funkci, která provede kód našeho bota. Pokud jste s tímto ještě nepracovali, Yandex.Cloud prostudujte materiál Alice v říši Bitrix, a poté — Yandex funkce posílají e-maily. Jsem téměř přesvědčen, že tyto dvě relativně malé články vám bohatě postačí pro základní porozumění tématu.

Takže v konzoli Yandex.Cloud v levém navigačním menu vyberte položku Cloud Functions, a poté klikněte na tlačítko Vytvořit funkci. Přiřaďte jméno a pro sebe krátký popis.

Vytváříme Telegram bota v Yandex Cloudu

Po stisknutí tlačítka Vytvořit a po několika vteřinách se nová funkce objeví v seznamu všech funkcí. Klikněte na její název — přivede vás to na stránku Přehled naší funkce. Zde musíte zapnout (On) přepínač Veřejná funkce, aby byla dostupná z vnějšího (pro Yandex.Cloud) světa, a hodnoty polí Odkaz pro volání a Identifikátor — uchovávejte v hlubokém utajení před všemi kromě sebe a Telegramu, aby vaši funkci nemohli volat různí podvodníci.

Vytváříme Telegram bota v Yandex Cloudu

Nyní pomocí levého menu přejděte do Editoru funkce. Zatím odložme na krátkou dobu naše Chytré myšlenky, a vytvořme minimální funkci šablonu pro ověření provozuschopnosti našeho bota… Nicméně, v tomto kontextu je tato funkce vlastně naším botem… Jinými slovy, teď a tady vytvoříme nejjednoduššího bota, který bude „zrcadlit“ (tj. posílat zpět) požadavky uživatelů. Tato šablona se dá použít kdykoli při vytváření nových telegramových botů, abyste si ověřili, že spojení s Telegramemfunguje správně. Klikněte na Vytvořit soubor, pojmenujte ho index.js, a v online Editoru kódu vložíme do tohoto souboru následující 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 konzoli Yandex.Cloud to bude vypadat zhruba takto:

Vytváříme Telegram bota v Yandex Cloudu

Dále o něco níže uvádíme Bod vstupu — index.bot, kde index to je název souboru (index.js), a bot — název funkce (module.exports.bot). Všechna ostatní pole necháme „jak jsou“, a v pravém horním rohu klikneme na tlačítko Vytvořit verzi. Za několik vteřin bude tato verze funkce vytvořena. Brzy, po testování webhooku, vytvoříme novou verzi — Chytré myšlenky.

Vytváříme Telegram bota v Yandex Cloudu

Objektové úložiště

Nyní, když máme vytvořeno Jandeks funkce, pojďme, zatímco jsme v konzoli Yandex.Cloud, vytvořme takzvaný bucket (bucket, tedy kbelík česky, rozhodně ne kytice) pro ukládání obrazových souborů, které budou použity v našem botu Chytré myšlenky. V levém navigačním menu vybereme položku Object Storage, klikneme na tlačítko Vytvořit bucket, vymyslíme mu název, například, img-bucket, a, co je nejdůležitější, Přístup ke čtení objektů nastavíme na veřejný — jinak Telegram naše obrázky neuvidí. Všechna ostatní pole necháme nezměněná. Klikneme na tlačítko Vytvořit bucket.

Vytváříme Telegram bota v Yandex Cloudu

Poté může seznam všech bucketů vypadat přibližně takto (pokud je to váš jediný bucket):

Vytváříme Telegram bota v Yandex Cloudu

Teď navrhuji kliknout na název bucketu a uvnitř něj vytvořit složku, abychom uspořádali ukládání obrázků pro různé své aplikace. Například pro telegramového bota Chytré myšlenky jsem vytvořil složku pojmenovanou tg-bot-smart-thoughts (nic, tomuto šifru porozumím). Vytvořte si také nějakou.

Vytváříme Telegram bota v Yandex Cloudu

Teď můžeme kliknout na název složky, vstoupit do ní a nahrávat soubory:

Vytváříme Telegram bota v Yandex Cloudu

A kliknutím na název souboru — získat jej URL k použití v našem botu, a vůbec — kdekoli (ale, nepublikujte to URL bez důvodu, protože provoz z Objektového úložiště se účtuje).

Vytváříme Telegram bota v Yandex Cloudu

To je v podstatě vše s Objektovým úložištěm. Nyní budete vědět, co udělat, když uvidíte výzvu k nahrání souborů tam.

Webhook

Teď nainstalujeme webhook — to znamená, že když bot obdrží aktualizaci (například zprávu od uživatele), z serveru Telegram bude odeslán požadavek ( Jandeks funkci ) s daty. Zde je řetězec, který můžete jednoduše vložit do adresního pole prohlížeče a poté aktualizovat stránku (to je třeba udělat pouze jednou):requestJen vyměníme https://api.telegram.org/bot{bot_token}/setWebHook?url={webhook_url}
{bot_token} za token, který jsme získali od otce bota při vytváření našeho bota, a {webhook_url} — za naše URL . Chvíli! Ale přece Yandex funkcezakazuje poskytovatelům v RF obsluhovat adresu RosKomCenzura . Ano, správně. Ale vymyslete něco. Vždyť je možné například požádat svou babičku na Ukrajině, v Izraeli nebo v Kanadě — tam nejsou žádné «roskomcenzoři», a pouze Bůh ví, jak žijí lidé bez toho. V konečném důsledku by měl požadavek-odpověď při nastavování webhooku vypadat takto: https://api.telegram.orgTestujeme. Mělo by „zrcadlit“.

Vytváříme Telegram bota v Yandex Cloudu

A je to. Naše gratulace — nyní

Vytváříme Telegram bota v Yandex Cloudu

-botem! Jandeks funkce se stala Telegramstala

Chytré myšlenky

A teď děláme Chytré Myšlenky. Kód je otevřený a leží na GitHub. Je docela dobře komentovaný a má jen sto řádků. Čtěte ho jako operní diva libretto!

Vytváříme Telegram bota v Yandex Cloudu

Oklonujte projekt a nainstalujte závislosti:

git clone https://github.com/stmike/tg-bot-smart-thoughts.git
cd tg-bot-smart-thoughts
npm i

Proveďte požadované změny v souboru index.js (volitelné; není nutné nic měnit). Vytvořte zip-archiv, se souborem index.js a složkou node_modules uvnitř, například s názvem smart.zip.

Vytváříme Telegram bota v Yandex Cloudu

Nyní přejděte v konzoli k našemu Yandex funkce, vyberte záložku ZIP-archiv, stiskněte tlačítko Vybrat soubor, a nahrajte náš archiv smart.zip. Nakonec v pravém horním rohu stiskněte tlačítko Vytvořit verzi.

Vytváříme Telegram bota v Yandex Cloudu

Za několik sekund, kdy se funkce aktualizuje, znovu otestujeme našeho bota. Nyní už ne „zrcadlí“, ale dodává chytré myšlenky!

Vytváříme Telegram bota v Yandex Cloudu

Na dnes vše. Další články následují. Kdo má zájem o podobné čtení — přihlaste se k odběru nových článků. Přihlásit se můžete zde, nebo na Telegram-kanál IT Tutorial Zachar, nebo Twitter @mikezaharov.

Odkazy

Kód na GitHub
Yandex Cloud Functions
Yandex Object Storage
Bots: Úvod pro vývojáře
Telegram Bot API

Dary

Vytváříme Telegram bota v Yandex Cloudu

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster