Tworzymy bota Telegram w Yandex.Cloud

Tworzymy bota Telegram w Yandex.Cloud

Dziś ze dostępnych materiałów stworzymy w Yandex.Cloud bota w Telegramie z użyciem Yandex Cloud Functions (lub funkcje Yandex — dla skrótu) i Yandex Object Storage (lub Obiektowe przechowywanie — dla jasności). Kod będzie na Node.js. Jednak istnieje jedno pikantne okoliczność — pewna organizacja o nazwie, powiedzmy, RosKomCenzura (cenzura jest zakazana przez artykuł 29 Konstytucji Federacji Rosyjskiej), nie pozwala dostawcom internetowym w Rosji przesyłać zapytań do API Telegrama pod adresem: https://api.telegram.org/. Cóż, nie będziemy — nie ma sprawy. W końcu w naszym kufrze mamy tzw. webhooki — dzięki nim nie wysyłamy zapytań na konkretny adres, lecz jedynie odpowiadamy na każde zapytanie skierowane do nas. To znaczy, jak w Odessie — odpowiadamy pytaniem na pytanie. Dlatego API Telegrama w naszym kodzie się nie znajdzie.

Wyłączenie odpowiedzialnościWspomniane w tym artykule nazwy jakiejkolwiek instytucji państwowej są fikcyjne, a jakiekolwiek przypadkowe podobieństwa do nazw rzeczywistych instytucji są niezamierzone.

Więc stworzymy bota, który będzie nas zaopatrywał w inteligentne myśli. Dokładnie takiego, jak na obrazku:

Tworzymy bota Telegram w Yandex.Cloud

Możesz przetestować go w akcji — oto jego nazwa: @SmartThoughtsBot. Zwróciłeś uwagę na przycisk „Umiejętność Ali”? Это потому, что бот является своеобразным «компаньоном» для одноименного umiejętności Ali, tzn. wykonuje te same funkcje, co umiejętność Ali i być może będą mogli spokojnie współistnieć, reklamując się nawzajem. Jak stworzyć umiejętność Inteligentne Myśli omówiono w artykule Ali nabiera umiejętności. Obecnie (po wprowadzeniu pewnych zmian już po publikacji wspomnianego artykułu) na smartfonie ta umiejętność będzie wyglądać około tak:

Tworzymy bota Telegram w Yandex.Cloud

Tworzenie bota

Chciałbym, aby ten poradnik był przydatny dla wszystkich, w tym dla początkujących «budowniczych botów». Dlatego w tej sekcji dość szczegółowo opiszę, jak w ogóle tworzyć w Telegram‘e boty. Dla tych, którzy nie potrzebują tych informacji — przejdź do następnych sekcji.

Otwieramy aplikację Telegaram, wołamy ojca wszystkich botów (u nich wszystko jak u ludzi) — @BotFather — i na początek wydajemy mu polecenie /help, aby przypomnieć sobie, co możemy robić. Teraz interesuje nas polecenie /newbot.

Tworzymy bota Telegram w Yandex.Cloud

Ponieważ opisywany tutaj bot już został stworzony, dla celów demonstracyjnych tymczasowo stworzę innego bota (potem go usunę). Nazwę go DemoHabrBot. Nazwy (nazwa użytkownika) wszystkich botów telegramowych powinny kończyć się na słowo bot, na przykład: MyCoolBot lub my_cool_bot — to dla botów. Ale najpierw nadajemy botowi nazwę (name) — a to jest dla ludzi. Nazwa może być w dowolnym języku, zawierać spacje i nie musi kończyć się na słowo bot, a nawet nie musi być unikalna. W tym przykładzie nazwałem tego bota Demo Habr.

Tworzymy bota Telegram w Yandex.Cloud

Teraz wybieramy nazwę dla bota (nazwa użytkownika, czyli tę, która jest dla botów). Nazwijmy go DemoHabrBot. Wszystko, co dotyczyło nazwy bota (name) wcale nie odnosi się do jego imienia — nazwa użytkownika (lub się odnosi, ale w odwrotny sposób). Po pomyślnym utworzeniu unikalnej nazwy bota, musimy skopiować i zachować (w najściślejszej tajemnicy!) token, pokazany na zrzucie ekranu czerwoną strzałką. Z jego pomocą niedługo ustawimy wychodzący z Telegram‘a webhook na naszą Funkcję Yandex.

Tworzymy bota Telegram w Yandex.Cloud

A teraz wydajemy komendę ojcu wszystkich botów: /mybots, a on pokaże nam listę wszystkich utworzonych przez nas botów. Na razie zostawmy w spokoju świeżo rozpoczętego bota Demo Habr (został stworzony, aby pokazać, jak tworzyć boty, ale jeszcze dzisiaj skorzystamy z niego do innych celów demonstracyjnych), i rozważmy bota Inteligentne Myśli (@SmartThoughtsBot). Klikamy w liście botów przycisk z jego nazwą.

Tworzymy bota Telegram w Yandex.Cloud

Tutaj możemy dostosować naszego bota. Klikając przycisk Edytuj… przeniesiemy się do edytowania tej lub innej opcji. Na przykład, klikając przycisk Edytuj nazwę możemy zmienić nazwę bota, powiedzmy zamiast Inteligentne Myśli, napisać Dziwaczne Pomysły. Botpic — to awatar bota, powinien mieć co najmniej 150 x 150 px. Opis — to krótki opis, który użytkownik widzi przy pierwszym uruchomieniu bota, jako odpowiedź na pytanie: Co ten bot potrafi? O — jeszcze bardziej skrócony opis, który jest przesyłany z linkiem do bota (https://t.me/SmartThoughtsBot) lub przy przeglądaniu informacji o nim.

Tworzymy bota Telegram w Yandex.Cloud

Pozostało nam tylko skonfigurować komendy. W tym celu klikamy przycisk Edytuj komendy. Dla standaryzacji praktyki użytkownika Telegram zaleca się zawsze używać dwóch komend: /start i /help, a jeśli bot potrzebuje ustawień — dodatkową komendę /settings. Nasz bot jest prosty jak kula, więc na razie nie potrzebuje ustawień. Wpisujemy dwie pierwsze komendy, które potem przetworzymy w kodzie. Teraz, jeśli w polu wejściowym użytkownik wpisze ukośnik (znak: /), pojawi się lista komend do szybkiego wyboru. Wszystko jak na obrazku: po lewej — ustawiamy komendy przez bota-ojca; po prawej te komendy są już dostępne dla użytkowników w naszym bocie.

Tworzymy bota Telegram w Yandex.Cloud

Funkcja Yandex

Teraz, gdy nasz bot został stworzony, przechodzimy do Yandex.Cloud, aby stworzyć funkcję, która będzie wykonywać kod naszego bota. Jeśli jeszcze nie pracowałeś z Yandex.Cloud , zapoznaj się z materiałem Alicja w kraju Bitrix, a potem — Funkcje Yandexa wysyłają e-maile. Jestem prawie pewien, że te dwa stosunkowo niewielkie artykuły wystarczą ci do podstawowego zrozumienia tematu.

Zatem, w konsoli Yandex.Cloud , w lewym menu nawigacyjnym wybieramy pozycję Cloud Functions, a następnie klikamy przycisk Utwórz funkcję. Przypisujemy mu nazwę oraz krótkie opisanie dla siebie.

Tworzymy bota Telegram w Yandex.Cloud

Po naciśnięciu przycisku Utwórz i po kilku sekundach nowa funkcja pojawi się na liście wszystkich funkcji. Klikamy na jej nazwę — to przeniesie nas na stronę Przegląd naszej funkcji. Tutaj trzeba włączyć (Włączony) przełącznik Funkcja publiczna, aby była dostępna z zewnętrznego (dla Yandex.Cloud) świata, a wartość pól Link do wywołania i Identyfikator — przechowuj w głębokiej tajemnicy przed wszystkimi, poza sobą i Telegramem, aby twoja funkcja nie była wywoływana przez różnorodnych oszustów.

Tworzymy bota Telegram w Yandex.Cloud

Teraz przechodzimy do Edytora funkcji. Na razie odłóżmy na chwilę nasze Inteligentne Myśli, i stwórzmy minimalną funkcję-szablon do przetestowania działania naszego bota… W każdym razie, w tym kontekście ta funkcja to nasz bot… W skrócie, teraz i tutaj zrobimy najprostszy bot, który będzie „lustrzanym odbiciem” (tj. wysyłał z powrotem) zapytań użytkowników. Ten szablon można z powodzeniem używać zawsze podczas tworzenia nowych botów Telegram, aby upewnić się, że połączenie z Telegramemdziała poprawnie. Klikamy Utwórz plik, nazywamy go index.js, a w edytorze online Edytorze kodu wklejamy w ten plik następujący kod:

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
  };
};

W konsoli Yandex.Cloud powinno to wyglądać mniej więcej tak:

Tworzymy bota Telegram w Yandex.Cloud

Następnie nieco niżej podajemy Punkt wejściaindex.bot, gdzie index to nazwa pliku (index.js), a bot — nazwa funkcji (module.exports.bot). Pozostałe pola zostawiamy „jak są”, a w prawym górnym rogu klikamy przycisk Utwórz wersję. Po kilku sekundach ta wersja funkcji zostanie utworzona. Wkrótce, po teście webhooku, stworzymy nową wersję — Inteligentne Myśli.

Tworzymy bota Telegram w Yandex.Cloud

Obiektowe przechowywanie

Teraz, kiedy mamy już utworzoną Funkcja Yandex, przejdźmy, póki jesteśmy w konsoli Yandex.Cloud, stworzymy tzw. bucket (bucket, czyli wiadro po rosyjsku, a nie bukiet) do przechowywania plików obrazów, które będą używane w naszym bocie Inteligentne Myśli. W lewym menu nawigacyjnym wybieramy opcję Object Storage, klikamy przycisk Utwórz bucket, wymyślamy mu nazwę, na przykład, img-bucket, i, co najważniejsze, Dostęp do odczytu obiektów robimy publiczny — w przeciwnym razie Telegram nie zobaczy naszych obrazków. Pozostałe pola pozostawiamy bez zmian. Klikamy przycisk Utwórz bucket.

Tworzymy bota Telegram w Yandex.Cloud

Po tym liść wszystkich bucketów może wyglądać mniej więcej tak (jeśli to twój jedyny bucket):

Tworzymy bota Telegram w Yandex.Cloud

Teraz proponuję kliknąć na nazwę bucketu i wewnątrz niego utworzyć folder, aby uporządkować przechowywanie obrazków dla różnych aplikacji. Na przykład, dla bota telegramowego Inteligentne Myśli stworzyłem folder o nazwie tg-bot-smart-thoughts (nic, zrozumiem ten szyfr). Stwórz także jakiś.

Tworzymy bota Telegram w Yandex.Cloud

Teraz można kliknąć na nazwę folderu, wejść do niego i przesyłać pliki:

Tworzymy bota Telegram w Yandex.Cloud

A klikając na nazwę pliku — otrzymać go URL do użycia w naszym bocie, i w ogóle — gdziekolwiek (ale nie publikuj tego URL bez potrzeby, ponieważ ruch z Obiektowego przechowywania jest płatny).

Tworzymy bota Telegram w Yandex.Cloud

I to, w zasadzie, wszystko z Obiektowym przechowywaniem. Teraz będziesz wiedzieć, co robić, gdy zobaczysz wezwanie do przesłania plików.

Webhook

Teraz zainstalujemy webhook — to znaczy, kiedy bot otrzyma aktualizację (na przykład, wiadomość od użytkownika), z serwera Telegram z naszej Funkcję Yandex zostanie wysłane zapytanie (request) z danymi. Oto linia, którą można po prostu wkleić w pole adresowe przeglądarki, a następnie zaktualizować stronę (to trzeba zrobić tylko raz): https://api.telegram.org/bot{bot_token}/setWebHook?url={webhook_url}
Tylko zamienimy {bot_token} na token, który otrzymaliśmy od bota-matki przy tworzeniu naszego bota, a {webhook_url} — na URL nasz funkcje Yandex. Chwileczkę! Ale przecież RosKomCenzura zakazuje dostawcom w RF obsługi adresu https://api.telegram.org. Tak, to prawda. Ale wymyśl coś. Można, na przykład, poprosić swoją babcię w Ukrainie, Izraelu lub Kanadzie — tam nie ma żadnych «roskomcenzur», a bóg jeden wie, jak ludzie żyją bez tego. W rezultacie, zapytanie-odpowiedź podczas ustawiania webhooku powinno wyglądać tak:

Tworzymy bota Telegram w Yandex.Cloud

Testujemy. Powinno «lustrzane».

Tworzymy bota Telegram w Yandex.Cloud

Tak jest. Nasze gratulacje — teraz Funkcja Yandex stała się Telegram-botem!

Inteligentne Myśli

A teraz robimy Umyślne Myśli. Kod jest otwarty i znajduje się na GitHub. Jest dość dobrze skomentowany, a w nim tylko sto linijek. Czytaj go jak operowa diva libretto!

Tworzymy bota Telegram w Yandex.Cloud

Sklonuj projekt i zainstaluj zależności:

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

Wprowadź niezbędne zmiany w pliku index.js (opcjonalnie; nie trzeba nic zmieniać). Stwórz zip-archiwum, z plikiem index.js i folderem node_modules w środku, na przykład o nazwie smart.zip.

Tworzymy bota Telegram w Yandex.Cloud

Teraz przejdź w konsoli do naszej funkcje Yandex, wybierz zakładkę ZIP-archiwum, naciśnij przycisk Wybierz plik, a następnie załaduj nasze archiwum smart.zip. W końcu, w prawym górnym rogu kliknij przycisk Utwórz wersję.

Tworzymy bota Telegram w Yandex.Cloud

Po kilku sekundach, gdy funkcja się zaktualizuje, przetestujmy ponownie naszego bota. Teraz już nie "zrzuca", a dostarcza mądre myśli!

Tworzymy bota Telegram w Yandex.Cloud

Na dzisiaj to wszystko. Kolejne artykuły wkrótce. Kto chciałby czytać podobne — subskrybuj powiadomienia o nowych artykułach. Można zapisać się tutaj lub na Telegram-kanał IT Tutorial Zachar, lub Twitter @mikezaharov.

Linki

Kod na GitHubie
Yandex Cloud Functions
Yandex Object Storage
Bots: Wprowadzenie dla programistów
Telegram Bot API

Donacje

Tworzymy bota Telegram w Yandex.Cloud

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster