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.
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.
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.
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.
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.
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:
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:
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:
Aby 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:
Po tej akcji, usługa w Azure będzie otrzymywać wiadomości z chatu i odpowiadać na nie:
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).
To wszystko dla mnie wydaje się być jeszcze czarną magią, ale powoli się z tym oswajam i coraz więcej rozumiem 🙂 Pozdrawiam!
Własnie dlatego piszemy takie artykuły żeby być bliżej tego 🙂
Bardzo ciekawy artykuł!
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