Bot Telegram do transkrypcji
Stwórz bota Telegram, który transkrybuje wiadomości audio i wideo w ponad 90 językach, używając TypeScript z Deno w Supabase Edge Functions.
Poradnik · Zakłada, że masz za sobą krótki przewodnik po Speech to Text oraz token bota Telegram i konto Supabase.
Wprowadzenie
Z tego poradnika dowiesz się, jak zbudować bota Telegram, który transkrybuje wiadomości audio i wideo w ponad 90 językach za pomocą TypeScript oraz modelu ElevenLabs Scribe przez API zamiany mowy na tekst.
Wymagania
- Konto ElevenLabs z kluczem API.
- Konto Supabase (bezpłatne konto założysz przez database.new).
- Zainstalowane na komputerze Supabase CLI.
- Zainstalowane na komputerze środowisko Deno oraz opcjonalnie skonfigurowane w ulubionym IDE.
- Konto Telegram.
Konfiguracja
Zarejestruj bota Telegram
Użyj BotFather, aby stworzyć nowego bota Telegram. Uruchom polecenie /newbot i postępuj zgodnie z instrukcjami. Na końcu otrzymasz tajny token bota. Zapisz go bezpiecznie na następny krok.

Utwórz lokalnie projekt Supabase
Po zainstalowaniu Supabase CLI uruchom poniższe polecenie, aby lokalnie utworzyć nowy projekt Supabase:
Utwórz tabelę bazy danych do zapisywania wyników transkrypcji
Następnie utwórz nową tabelę bazy danych do zapisywania wyników transkrypcji:
Spowoduje to utworzenie nowego pliku migracji w katalogu supabase/migrations. Otwórz plik i dodaj poniższy SQL:
Utwórz funkcję Supabase Edge do obsługi żądań webhooka Telegram
Następnie utwórz nową funkcję Edge do obsługi żądań webhooka Telegram:
Jeśli używasz VS Code lub Cursor, wybierz y, gdy CLI wyświetli pytanie “Generate VS Code settings for Deno? [y/N]”!
Ustaw zmienne środowiskowe
W katalogu supabase/functions utwórz plik .env i dodaj poniższe zmienne:
Zależności
Projekt korzysta z kilku zależności:
- Otwartego frameworka grammY do obsługi żądań webhooka Telegram.
- Biblioteki @supabase/supabase-js do pracy z bazą danych Supabase.
- JavaScript SDK ElevenLabs do pracy z API zamiany mowy na tekst.
Ponieważ funkcja Supabase Edge używa środowiska Deno, nie musisz instalować zależności — możesz je importować przez prefiks npm:.
Napisz kod bota Telegram
W nowo utworzonym pliku scribe-bot/index.ts dodaj poniższy kod:
Omówienie kodu
W kodzie warto zwrócić uwagę na kilka rzeczy. Przejdźmy przez niego krok po kroku.
Obsługa przychodzącego żądania
Do obsługi przychodzącego żądania użyj procedury Deno.serve. Sprawdza ona, czy żądanie zawiera poprawny sekret, a następnie przekazuje je do funkcji handleUpdate.
Obsługa wiadomości głosowych, audio i wideo
Framework grammY oferuje wygodny sposób filtrowania konkretnych typów wiadomości. W tym przypadku bot nasłuchuje wiadomości głosowych, audio i wideo.
Korzystając z kontekstu żądania, bot pobiera metadane pliku, a następnie używa zadań w tle Supabase EdgeRuntime.waitUntil, aby uruchomić transkrypcję w tle.
Dzięki temu możesz od razu odpowiedzieć użytkownikowi i przetwarzać transkrypcję pliku w tle.
Transkrypcja z API ElevenLabs
Na koniec w workerze działającym w tle bot używa JavaScript SDK ElevenLabs do transkrypcji pliku. Gdy transkrypcja będzie gotowa, bot odpowiada użytkownikowi transkrypcją i zapisuje wpis w bazie danych Supabase za pomocą supabase-js.
Wdróż w Supabase
Jeśli jeszcze nie masz konta Supabase, utwórz je na database.new i połącz lokalny projekt ze swoim kontem Supabase:
Zastosuj migracje bazy danych
Uruchom poniższe polecenie, aby zastosować migracje bazy danych z katalogu supabase/migrations:
Przejdź do edytora tabel w panelu Supabase — powinna tam być pusta tabela transcription_logs.

Na koniec uruchom poniższe polecenie, aby wdrożyć funkcję Edge:
Przejdź do widoku Edge Functions w panelu Supabase — powinna być tam wdrożona funkcja scribe-bot. Zanotuj URL funkcji, bo przyda się później. Powinien wyglądać mniej więcej tak: https://<project-ref>.functions.supabase.co/scribe-bot.

Ustaw webhook
Ustaw URL webhooka bota na https://<PROJECT_REFERENCE>.functions.supabase.co/telegram-bot (zastąp <...> odpowiednimi wartościami). Aby to zrobić, wyślij żądanie GET na poniższy adres URL, na przykład w przeglądarce:
FUNCTION_SECRET to sekret ustawiony w pliku .env.

Ustaw sekrety funkcji
Gdy wszystkie sekrety są już ustawione lokalnie, uruchom poniższe polecenie, aby ustawić je w projekcie Supabase:
Przetestuj bota
Na koniec przetestuj bota, wysyłając mu wiadomość głosową, plik audio lub wideo.

Gdy zobaczysz transkrypcję w odpowiedzi, wróć do edytora tabel w panelu Supabase. Powinien pojawić się nowy wiersz w tabeli transcription_logs.
