
Dziś ze dostępnych materiałów stworzymy w bota w Telegramie z użyciem (lub funkcje Yandex — dla skrótu) i (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:
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 . Obecnie (po wprowadzeniu pewnych zmian już po publikacji wspomnianego artykułu) na smartfonie ta umiejętność będzie wyglądać około tak:
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.

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.

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.

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ą.

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.

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.

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 , a potem — . 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.

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.

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:

Następnie nieco niżej podajemy Punkt wejścia — index.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.

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.

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

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ś.

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

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).

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:

Testujemy. Powinno «lustrzane».

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 . Jest dość dobrze skomentowany, a w nim tylko sto linijek. Czytaj go jak operowa diva libretto!

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.

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ę.

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

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ł , lub Twitter .
Linki
Donacje
Źródło: habr.com
