Software Development / Inżynieria

Tworzenie asystenta do Telegram z logiką w chmurze Azure

Sierpień 14, 2018 4
Podziel się:

Chciałbym opowiedzieć parę słów o tym jak my, programiści, możemy wykorzystywać nowoczesne technologie dla naszych prostych potrzeb. Przedstawię proces tworzenia bota, który będzie pobierać od użytkownika link do filmiku na serwisie YouTube i zwracać plik audio jako odpowiedź. Wszystko będziemy robić za pomocą komunikatora Telegram.

Telegram jest to popularne w ostatnim czasie narzędzie do komunikacji, które wypełnia przestrzeń informacyjną. Dzięki prostocie i jakości – coraz mocniej i mocniej zastępuje konkurencyjne rozwiązania. Jednym z trendów minionego roku było wprowadzenie wszelkiego rodzaju wirtualnych asystentów czy też pomocników i o tym właśnie chciałbym dzisiaj opowiedzieć. Treścią tego artykułu będzie prosta prezentacja, jak zacząć korzystać z usług w chmurze już teraz. Niniejszy wpis skierowany jest do programistów, którzy chcą być w trendzie nowoczesnego programowania oraz są zainteresowani usługami w chmurze Microsoft.

Konfiguracja Telegram

Telegram to komunikator, który zapewnia wygodny interfejs oraz dokumentację do tworzenia botów (https://core.telegram.org/). W celu dodania swojego własnego bota do systemu Telegram, programista powinien wyszukać wśród wszystkich użytkowników asystenta, którego imię jest BotFather (stworzonego przez twórców Telegram).  Asystent pomaga tworzyć nowe boty oraz zmieniać ustawienia istniejących. Aby utworzyć  nowego bota należy napisać do niego, wykorzystując polecenie /newbot . BotFather poprosi o imię oraz nazwę użytkownika. Następnie zostanie wygenerowany token autoryzacyjny dla nowego bota, który jest niezbędny do autoryzacji wysyłania zapytań do API.

Tworzenie asystenta(bota) o nazwie «AudioLoaderBot»

Tworzenie asystenta (bota) o nazwie «AudioLoaderBot»

Konfiguracja usługi w chmurze Azure

Wykonywanie zapytań oraz logika będą uruchamiane w chmurze Microsoft Azure za pomocą mechanizmu Azure Functions, w której umieścimy właściwy kod do obsługi naszego bota.

Trochę o kosztach

Istnieją dwa podejścia do wyliczania kosztów za korzystanie z usług w chmurze Azure. Pierwszy sposób polega na tym, że usługa Functions jest rozliczana na podstawie zaobserwowanego użycia zasobów mierzonego w sekundach i gigabajtach pamięci (GB-s). Zaobserwowane użycie zasobów jest obliczane przez pomnożenie średniego rozmiaru pamięci w gigabajtach przez czas w milisekundach potrzebny na wykonanie funkcji. Pamięć użyta przez funkcję jest zaokrąglana w górę do najbliższych 128 MB przy maksymalnym rozmiarze pamięci 1 536 MB. Czas wykonywania jest obliczany przez zaokrąglenie w górę do najbliższej 1 ms. Minimalny czas wykonywania i pamięć dla pojedynczego wykonania funkcji to odpowiednio 100 ms i 128 MB. Ceny usługi typu Functions uwzględniają miesięczny bezpłatny przydział 400 000 GB-s. Drugie podejście opiera się na liczbie wywołań funkcji, przy czym 1 mln połączeń funkcji jest darmowych. Deweloper sam może zdecydować, co najlepiej pasuje dla jego potrzeb.

Na początek utworzymy nową instancję funkcji. W tym celu na portalu Azure (https://portal.azure.com/) trzeba kliknąć w pole wyszukiwarki i wpisać słowo kluczowe «Functions» albo znaleźć tą usługę w liście po lewej stronie w ».  Pojawi się dodatkowe okno, w którym  wybieramy sekcję «Compute». Następnie  należy wybrać «Function App». Zostanie otwarty formularz do wstępnej konfiguracji usługi, który w miarę jego napełniania intuicyjnie podpowiada użytkownikowi możliwe wartości. Po utworzeniu instancji aplikacji typu «Functions App», użytkownik będzie miał dostęp do panelu sterowania funkcją, gdzie można zobaczyć listę swoich funkcji, zmieniać ustawienia sieci, dodawać proxy, etc.

Panel sterowania funkcją

Panel sterowania funkcją

Dalej stworzymy naszą funkcję za pomocą przycisku «New function». Użytkownik będzie miał możliwość wybrać jeden z kilku szablonów funkcji, wykorzystując przy tym różne języki programowania takie jak C#, F# oraz JavaScript.

W naszym przypadku wybieramy szablon funkcji nazywający się «HTTP Trigger», który przyjmuje i wysyła żądania typu HTTP. Wprowadzamy nazwę dla funkcji, wybieramy poziom autoryzacji i następnie ją zatwierdzamy.

Dodawanie nowej funkcji

Dodawanie nowej funkcji

Funkcja została stworzona. Użytkownik może wykorzystać minimalistyczne środowisko deweloperskie dla rozwoju i testowania funkcji bezpośrednio w przeglądarce. W środkowej części ekranu umieszczony jest edytor kodu, natomiast z prawej strony umieszczony jest mały moduł do testowania, w którym można tworzyć zapytania, oraz śledzić ich wykonanie.

Obszar roboczy - główny widok

Obszar roboczy – główny widok

Zakładka «View files» pozwala wyświetlić katalog  funkcji, dodawać/edytować/usuwać pliki. Dodatkowo można edytować plik project.json, gdy jest potrzeba zarządzać pakietami NuGet albo skonfigurować wykorzystywane moduły.

Struktura plików zwykłej funkcji

Struktura plików zwykłej funkcji

Plik run.csx umożliwia wykonywanie głównej funkcji Run (funkcja została pokazana na powyższym zrzucie ekranu w okienku dla edytowania kodu). Pliki AudioSender.csx oraz TelegramAudioFile.csx zostały utworzone przeze mnie. Zmodyfikujmy treść funkcji Run:

Modyfikacja treści funkcji Run

Pełną i aktualną wersję kodu można zobaczyć pod linkiem: https://github.com/ihorbodia/AudioLoaderBot

Plik project.json jest plikiem konfiguracyjnym, który pomoże określić pakiety NuGet, które należy użyć. W naszym przypadku wygląda on następująco:

Struktura pliku project.json

Struktura pliku project.json

Uwaga! Jeśli biblioteki, które chcesz użyć w swojej funkcji nie są dystrybuowane  jako pakiety NuGet, trzeba użyć mechanizm KUDU. Jest to zestaw narzędzi, który pozwala przeprowadzić bardziej szczegółową diagnostykę i ustawienia usługi. Więcej szczegółów: https://blogs.msdn.microsoft.com/benjaminperkins/2017/04/13/how-to-add-assembly-references-to-an-azure-function-app/

Końcowym krokiem w dostosowywaniu usług w chmurze będzie otrzymanie linka – webhooka, pod którym będzie dostępna usługa. Aby to zrobić należy nacisnąć na przycisk «Get Function URL» , który znajduje się nad edytorem kodu. Ten link jest potrzebny do tego, aby stworzony wcześniej asystent w aplikacji Telegram wiedział gdzie ma wysłać zapytanie HTTP. W danym przypadku to wygląda następująco:

8 - Tworzenie asystenta do Telegram z logiką w chmurze AzureAby powiązać bota z funkcją w Azure należy otworzyć odnośnik:

https://api.telegram.org/bot<YOUR_API_TOKEN>/setwebhook?url=<HTTPS_url_to_send_updates_to>

W którym:

<YOUR_API_TOKEN>token / klucz, który został uzyskany przy tworzeniu naszego bota w Telegram (za pomocą BotFather) i jest potrzebny do autoryzacji asystenta

<HTTPS_url_to_send_updates_to>link /webhook do obsługi żądań, znajdujący się pod adresem usługi

 Jeśli uruchomimy odnośnik w przeglądarce, powinna pojawić się prosta odpowiedź w postaci JSON:

8.1 - Tworzenie asystenta do Telegram z logiką w chmurze Azure

Odpowiedź serwera Telegram o pomyślnym ustawieniu webhooka

Po tej akcji, usługa w Azure będzie otrzymywać wiadomości z chatu i odpowiadać na nie:

Wizualizacja - chat

Jak widać, efektem naszej pracy jest uzyskanie prostego bota umożliwiającego przetwarzanie plików wideo na audio i odpornego na błędne wiadomości. Bot może być przydatny dla ludzi, którzy lubią słuchać podcastów i jednocześnie wykonują inne zadania. Usługa w Azure jest niezależna od Telegramu i jest ogólnodostępna jako publiczne API. Ma zdefiniowaną sygnaturę przyjmowanych żądań oraz może pracować nie tylko z messengerem Telegram.

Rozbudowując naszego bota, można dodawać różne funkcjonalności, na przykład możliwość ustawienia przepływności (bit rate), co zmniejszy rozmiar pliku wynikowego czy formatu (MP3/WMA/OGG).

3.7 / 5
Ihor Bodia
Autor: Ihor Bodia
.NET deweloper Lubelskiego oddziału Sii od 2 lat

Imię i nazwisko (wymagane)

Adres email (wymagane)

Temat

Treść wiadomości

komentarze(4)

avatar'
Robert Słoń
17 sierpnia 2018 Odpowiedz

To wszystko dla mnie wydaje się być jeszcze czarną magią, ale powoli się z tym oswajam i coraz więcej rozumiem :) Pozdrawiam!

    avatar'
    Ihor Bodia
    17 sierpnia 2018 Odpowiedz

    Własnie dlatego piszemy takie artykuły żeby być bliżej tego :)

Michał Linek
24 sierpnia 2018 Odpowiedz

Bardzo ciekawy artykuł!

avatar'
Pepson
27 sierpnia 2018 Odpowiedz

Spoko Artek, jedyną nie wiadoma to te koszty z szyta 😶 w wyżej omówionym przypadku ażur liczy te g-s na wejściu i wyjściu? Tego do końca nie kumam

Zostaw komentarz