Rozważ stworzenie aplikacji do pracy z ChatGPT. Jej zadaniem będzie odbieranie wiadomości głosowych za pośrednictwem strony Telegram, konwertowanie ich na tekst, przekazywanie ich na stronę ChatGPT, a także odsyłanie odpowiedzi na stronę Telegram. Podczas procesu tworzenia trzeba będzie przejść przez następujące kroki:

  1. Stworzenie bota dla Telegram i jego podstawowa konfiguracja.
  2. Odbiór pliku z wiadomością głosową (Telegram używa formatu .oga ).
  3. Konwersja pliku z oga na mp3.
  4. Przekazanie pliku mp3 do Whisper serwisu w celu konwersji na tekst.
  5. Wysłanie otrzymanego tekstu na adres ChatGPT.
  6. Wysłanie odpowiedzi z ChatGPT do użytkownika w Telegram.

Tworzenie bota dla Telegram i jego podstawowa konfiguracja

Wszystko zaczyna się od samego faktu rejestracji bota. A do tego Telegram używa swojego specjalnego bota -. BotFather. Trzeba do niego napisać i przejść przez proste, sekwencyjne kroki.

Telegram BotFather

W efekcie powinieneś mieć link do swojego bota i token do żądań do jego API.

Teraz możesz przejść do skonfigurowania bota w AppMaster. Najłatwiej jest to zrobić poprzez zainstalowanie odpowiedniego modułu. Wystarczy, że wybierzesz go na liście modułów i w ustawieniach podasz swój token API.

Telegram Module

W Twoim projekcie zostaną automatycznie utworzone niezbędne modele, pojawią się bloki do pracy z Telegram, a także podstawowy proces biznesowy Telegrama Telegram: Echo. Warto dokładnie rozważyć i zrozumieć zasadę pracy.

Telegram Echo business process

Na wejściu otrzymuje wiadomość od Telegram ( modelMessage ). Zawiera tekst wysłanej wiadomości (text), a także model chat, z którego można uzyskać identyfikator nadawcy (id). Ostatni blok Telegram: Send Message wysyła otrzymaną wiadomość z powrotem do nadawcy, ale w imieniu bota.

Możesz wykorzystać ten proces biznesowy do wstępnego testowania bota i komunikacji z nim. Aby to zrobić, musisz stworzyć punkt końcowy, który będzie odbierał informacje i uruchamiał proces biznesowy.

Telegram bot endpoint

Podczas jego tworzenia ważne jest, aby wyłączyć Middleware Token Auth. Endpoint musi być otwarty do użytku bez autoryzacji.

Zasada działania bota Telegram jest dość prosta - wszystkie wiadomości, które zostaną do niego wysłane, trafiają do specjalnego webhooka, który może automatycznie przekazać je dalej i przesłać do wybranego przez użytkownika endpointu w celu podjęcia dalszych działań.

Zgodnie z tym, ostatnim krokiem pozostaje aktywacja bota - trzeba zarejestrować ten endpoint w Telegram i wskazać, że ten bot ma być z nim powiązany. Wymaga to wysłania POST-request z pełnym adresem URL endpointu i wskazaniem swojego bot tokena zamiast {Bot API Token} na adres

https://api.telegram.org/bot{Bot API Token}/setWebhook

Jeśli w odpowiedzi otrzymasz taką wiadomość, to znaczy, że wszystko zostało wykonane poprawnie.

 {

    "ok": true,

    "result": true,

    "description": "Webhook was set"

}

Post Telegram Webhook

Bot jest gotowy do pracy, możesz wysłać mu wiadomość i otrzymać ją z powrotem.

Odbieranie pliku z wiadomością głosową

Moduł Telegram jest przeznaczony przede wszystkim do pracy z wiadomościami tekstowymi. A nasze zadanie polega na otrzymaniu pliku z wiadomością głosową. Dzięki AppMaster, można łatwo rozwiązać ten problem. Najpierw musimy przeanalizować to, co zwykle otrzymujemy z Telegram, aby sparsować strukturę wiadomości. Blok Get Request Body blok jest do tego przeznaczony. Eliminuje on konieczność wcześniejszego określenia struktury zapytania i pozwala na otrzymanie całego zapytania, niezależnie od jego treści. Blok ten zwraca wynik zapytania w postaci zestawu bajtów, a Ty możesz użyć bloku To String do przedstawienia wyniku w formie czytelnej dla człowieka, jak również zapisać go w logach (Write to Log block) w celu dalszej analizy.

Telegram Request log

Interesują nas dwa parametry z całego żądania:

Sender ID - określone w żądaniu jako. "id":300493858
File ID - "file_id":"AwACAgIAAxkBAAMzZBk6QRvO-OYWsWUC-Bu1UXDM2FwAAkktAAKTZclIWTSkfTTw8wYvBA"

Możesz stworzyć własny model pasujący do żądania i użyć go do uzyskania wymaganych pól. Szybciej jednak będzie stworzyć wyrażenie regularne (Regex) i użyć go. Aby to zrobić, the String Match Regex przyjmuje jako wejście samo wyrażenie, jak również ciąg znaków, w którym będzie sprawdzane dopasowanie do danego wyrażenia.

W pierwszym przypadku wyrażenie to. "id":"\d+

W rezultacie otrzymujemy ciąg "id":300493858, z którego będziemy musieli usunąć dodatkowy ("id":) za pomocą bloku Replace String i pozostawić tylko sam identyfikator.

W drugim przypadku zasada jest dokładnie taka sama, ale zastosowano nieco bardziej złożone wyrażenie: "file_id":"[^"]+

Regex to get request ID

Teraz mamy id nadawcy oraz id pliku i możemy to wykorzystać do uzyskania samego pliku. Aby to zrobić, należy zwrócić się do Telegram API. Zostało to już zrobione wcześniej podczas rejestracji punktu końcowego bota. Teraz należy wykonać podobne żądanie, aby otrzymać plik. {File ID} w adresie URL żądania należy zastąpić otrzymanym identyfikatorem pliku.

https://api.telegram.org/bot{Bot API Token}/setWebhook/getFile?file_id={File ID}

Aby wysłać żądanie i odebrać jego wynik, używamy bloku HTTP Request podając adres URL i Method = GET jako parametry dla niego.

Telegram File Request

Z otrzymanej odpowiedzi można dowiedzieć się o względnej ścieżce do pliku, jest ona przekazywana w parametrze "file_path" parametrze. Odpowiednio, używając następnego wyrażenia regularnego ("file_path":"[^"]+) można wyodrębnić pożądaną wartość i połączyć z "https://api.telegram.org/file/bot{Bot API Token}/", aby uzyskać pełny link do pliku.

Konwersja pliku z OGA na MP3

Plik został odebrany, ale przeszkodą jest to, że usługa Whisper serwis nie obsługuje pracy z formatem OGA formatem. Musisz przekonwertować na jeden z odpowiednich formatów.

Jako przykład można podać Zamzar używana jest usługa (jej darmowy plan wspiera możliwość wykonania 100 konwersji miesięcznie) i konwersja do MP3.

Po szczegóły można sięgnąć do jego dokumentacji lub skorzystać z innej podobnej usługi. Nie będziemy szczegółowo analizować pracy z nim, a weźmiemy pod uwagę tylko tę część, która odnosi się bezpośrednio do wdrożenia AppMaster.

Przede wszystkim żądanie będzie wymagało poprawnych danych uwierzytelniających. Muszą być one dostarczone w tzw. Basic Authentication formacie. W tym celu należy przekazać w żądaniu nagłówek o wartościach:

Key = 'Authorization'

Value = 'Basic '+ ID użytkownika i hasło oddzielone ":" w base64 formacie

Identyfikatorem użytkownika jest klucz API uzyskany podczas rejestracji w serwisie. Należy dodać do niego ":" i zakodować go w formacie Base64 za pomocą. To Base64 blok. Wynik należy zamienić w nagłówek (Make Key-Value (String) blok).

Zamzar Auth Header

Kolejnym krokiem jest stworzenie modelu dla zapytania w projektancie bazy danych. Zapytanie musi być wysłane w formacie Multipart Form formacie, odpowiednio konieczne jest przygotowanie modelu postaci tego żądania. W naszym przykładzie model składa się z trzech pól typu String:

  • source_file - pełna ścieżka do pliku źródłowego (została poznana w poprzednim kroku).
  • source_format - format pliku źródłowego, w tym przykładzie jest to stała wartość "ogg".
  • target_format - format docelowy do konwersji. Możesz wybrać dowolny format, który jest obsługiwany przez Whisper. Użyjmy "mp3" jako przykładu.

Zamzar Request Model

W edytorze procesów biznesowych należy użyć Make aby wypełnić dane modelu i wysłać je jako żądanie POST do https://sandbox.zamzar.com/v1/jobs/ za pomocą bloku HTTP Request (pamiętaj, aby określić Serialize request body = Multipart Form).

Zamzar Conversion Request

Należy zauważyć, że to żądanie nie zwraca przekonwertowanego pliku, a jedynie tworzy zadanie do konwersji. O wynik należy ubiegać się osobno; do tego potrzebny jest identyfikator utworzonego zadania. Ten identyfikator należy uzyskać z ciała odpowiedzi na żądanie, a do tego należy wykonać już wypracowany proces z wykorzystaniem wyrażeń regularnych i wyodrębnieniem wartości id.

Wynik konwersji musi być zastosowany oddzielnie. Będzie to wymagało wykonania dwóch kolejnych zapytań. Pierwszym z nich jest sprawdzenie, czy wynik jest już gotowy. Drugi to odebranie gotowego pliku. Jednocześnie nie znamy dokładnego czasu gotowości, więc możemy zorganizować pętlę, która będzie wysyłała powtarzające się żądania sprawdzenia gotowości w określonych odstępach czasu (na przykład co sekundę).

Zamzar Conversion Check Loop

Należy wysłać HTTP Request za pomocą metody GET na adres URL https://sandbox.zamzar.com/v1/jobs/{id}, gdzie {id} to id zadania uzyskane w poprzednim kroku. Wykorzystuje się przy tym te same nagłówki, co w poprzednim żądaniu.

Z otrzymanej odpowiedzi należy dowiedzieć się o stanie gotowości. Jeśli konwersja zostanie zakończona, odpowiedź będzie zawierała "status": "successful" a dla nas jest to sygnał, że możemy zakończyć pętlę i przejść dalej.

Oprócz statusu, odpowiedź musi zawierać identyfikator gotowego pliku ("target_files":[{"id":). Należy go wyodrębnić, aby uzyskać ostateczny link do pliku w postaci https://sandbox.zamzar.com/v1/files/{ID}/content

Jednocześnie otrzymanie pliku jest dostępne tylko dla autoryzowanych użytkowników, dlatego należy wykonać HTTP Request używając tych samych nagłówków co w poprzednich żądaniach.

W wyniku wykonania żądania zostanie uzyskana zawartość pliku, któremu należy nadać nazwę i zapisać do dalszego wykorzystania.

Zamzar save converted file

Wysłanie pliku MP3 do Whisper w celu konwersji na tekst

Teraz wszystko jest gotowe do kolejnego kroku - wysłania pliku z wiadomością głosową do rozpoznania. Będzie to wymagało kolejnego zapytania w Multipart Form formacie. Tylko w odróżnieniu od poprzedniego przykładu, żądanie będzie wymagało przesłania samego pliku, a nie linku do niego.

Model takiego żądania można stworzyć w. External HTTP Request sekcji. W tym przypadku nie można tworzyć żądania w całości, a ograniczyć się jedynie do stworzenia modelu ciała żądania. Sam model składa się z dwóch parametrów:

  1. File (Virtual File type) - ten sam plik, który musi zostać rozpoznany.
  2. model (type String) - tutaj określamy wartość whisper-1.

Whisper request model

Ponadto, dla żądania konieczne jest uzyskanie klucza do pracy z OpenAI API oraz wygenerować nagłówek autoryzacji typu Bearer Token type.

Key = 'Authorization'

Value = 'Bearer '+ OpenAI API Key

Następnie można wysłać samo żądanie POST rozpoznania wiadomości głosowej do serwisu Whisper pod adresem URL https://api.openai.com/v1/audio/transcriptions

Whisper HTTP Request

W wyniku pomyślnego rozpoznania pliku otrzymamy odpowiedź w postaci {"text": "Hello world.”}

Wysłanie odebranego tekstu na adres ChatGPT

Możesz nadal używać HTTP Request bloków, aby wysłać żądanie do ChatGPT. Aby poznać dokumentację API, a także niezależnie tworzyć modele dla żądań i odpowiedzi. Ale możesz też skorzystać z prostszej opcji w postaci gotowego modułu z AppMaster do pracy z OpenAI, który należy zainstalować w sekcji modules.

OpenAI Module

W minimalnie wystarczającej wersji wystarczy podać parametry m.in. OAI ChatCompletionMessage (role = user, content = wiadomość do wysłania), dodać je do tablicy i wysłać żądanie do ChatGPT za pomocą OpenAI: Create Chat Completion blokiem (set parameter model = gpt-4).

OpenAI Request

W efekcie otrzymujemy odpowiedź z ChatGPT. Odczytujemy ją z content parametru OAI ChatCompletionChoice model.

ChatGPT Response

Wysłanie odpowiedzi z ChatGPT do użytkownika w Telegram

Ostatni krok to tylko powtórzenie tego, co już wcześniej zostało zrobione - wysłanie wiadomości do Telegram. Ale jeśli zaczęliśmy od zwykłego zwrócenia wiadomości z powrotem do nadawcy, to teraz ta wiadomość uruchomiła serię różnych akcji, a wynik jest zwracany jako odpowiedź z ChatGPT.

Telegram send ChatGPT response

W procesie tworzenia takiego bota warto rozważyć, że:

  1. Telegram działa w taki sposób, że każde żądanie wysłane przez bota musi zostać pomyślnie przetworzone. W przeciwnym razie będzie on próbował powtarzać je wielokrotnie, co oznacza, że w razie jakichkolwiek problemów otrzymasz je ponownie i ponownie. Upewnij się, że logika jest zbudowana w taki sposób, że żądanie nie powoduje błędu i może zostać pomyślnie przetworzone.
  2. Nie wszystkie żądania będą działać zgodnie z przeznaczeniem przy pierwszej próbie. Będziesz musiał szukać błędów, a w tym celu zorganizuj do Write to Log bloki. Są one przydatne zarówno do sprawdzania, czy każdy blok rzeczywiście otrzymuje dane, które planowałeś przekazać, jak i do analizowania wyniku działania bloku i szczegółowego badania odpowiedzi.
  3. W ramach przewodnika założyliśmy, że wszystkie żądania są przewidywalne i zakończone sukcesem, a proces jest w miarę liniowy. W praktyce konieczne będzie zapewnienie wielu opcji działań (na przykład co zrobić, gdy użytkownik wyśle wiadomość tekstową zamiast głosowej lub nawet obrazek) i obsługi błędów (sprawdzanie stanu żądań HTTP, uwzględnianie różnych opcji odpowiedzi).
Was this article helpful?

AppMaster.io 101 Kurs zderzeniowy

10 moduły
2 Tygodnie

Nie wiesz, od czego zacząć? Rozpocznij z naszym szybkim kursem dla początkujących i poznaj AppMaster od A do Z.

Rozpocznij kurs
Development it’s so easy with AppMaster!

Potrzebujesz więcej pomocy?

Rozwiąż każdy problem z pomocą naszych ekspertów. Oszczędzaj czas i skup się na tworzeniu aplikacji.

headphones

Skontaktuj się z pomocą techniczną

Opowiedz nam o swoim problemie, a my znajdziemy dla Ciebie rozwiązanie.

message

Czat społeczności

Omów pytania z innymi użytkownikami na naszym czacie.

Dołącz do społeczności