Bot Telegram do transkrypcji
Zbuduj 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.
Przewodnik krok po kroku · Zakłada, że masz już za sobą krótki przewodnik po Speech to Text oraz token bota Telegram i konto Supabase.
Wprowadzenie
W tym poradniku 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 (możesz założyć darmowe konto 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 utworzyć nowego bota Telegram. Uruchom polecenie /newbot i postępuj zgodnie z instrukcjami. Na końcu otrzymasz tajny token bota. Zapisz go bezpiecznie — przyda się w następnym kroku.

Utwórz lokalnie projekt Supabase
Po zainstalowaniu Supabase CLI uruchom to polecenie, aby utworzyć lokalnie 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 ten SQL:
Utwórz Supabase Edge Function do obsługi żądań webhooka Telegram
Następnie utwórz nową Edge Function 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]”!
Skonfiguruj zmienne środowiskowe
W katalogu supabase/functions utwórz nowy plik .env i dodaj te zmienne:
Zależności
Projekt korzysta z kilku zależności:
- Open-source’owego frameworka grammY do obsługi żądań webhooka Telegram.
- Biblioteki @supabase/supabase-js do komunikacji z bazą danych Supabase.
- JavaScript SDK ElevenLabs do komunikacji z API zamiany mowy na tekst.
Ponieważ Supabase Edge Function 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 ten kod:
Omówienie kodu
W kodzie jest kilka rzeczy, na które warto zwrócić uwagę. Przejdźmy przez nie krok po kroku.
Obsługa przychodzącego żądania
Aby obsłużyć przychodzące żądanie, użyj handlera Deno.serve. Handler sprawdza, czy żądanie zawiera właściwy 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 określonych 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 EdgeRuntime.waitUntil z Supabase Background Tasks, 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. Po zakończeniu transkrypcji bot odpowiada użytkownikowi tekstem transkrypcji i zapisuje wpis w bazie danych Supabase za pomocą supabase-js.
Wdróż w Supabase
Jeśli jeszcze tego nie zrobiłeś, utwórz nowe konto Supabase na database.new i połącz lokalny projekt z kontem Supabase:
Zastosuj migracje bazy danych
Uruchom to polecenie, aby zastosować migracje bazy danych z katalogu supabase/migrations:
Przejdź do edytora tabel w panelu Supabase — powinna być tam pusta tabela transcription_logs.

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

Skonfiguruj webhook
Ustaw URL webhooka bota na https://<PROJECT_REFERENCE>.functions.supabase.co/telegram-bot (zastąp <...> odpowiednimi wartościami). W tym celu po prostu wyślij żądanie GET na poniższy URL, na przykład w przeglądarce:
Pamiętaj, że FUNCTION_SECRET to sekret ustawiony w pliku .env.

Ustaw sekrety funkcji
Gdy masz już wszystkie sekrety ustawione lokalnie, uruchom to polecenie, aby ustawić je w projekcie Supabase:
Przetestuj bota
Na koniec możesz przetestować bota, wysyłając mu wiadomość głosową albo plik audio lub wideo.

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