文字起こしTelegramボット
文字起こしTelegramボット
Supabase Edge FunctionsでDenoとTypeScriptを使用し、90以上の言語でオーディオとビデオメッセージを文字起こしするTelegramボットを構築します。
ハウツーガイド · スピーチtoテキスト クイックスタートを完了し、Telegramボットトークンと Supabaseアカウントを持っていることを前提としています。
はじめに
このチュートリアルでは、スピーチtoテキストAPIを通じてTypeScriptとElevenLabs Scribeモデルを使用し、90以上の言語でオーディオメッセージとビデオメッセージを文字起こしするTelegramボットの作成方法を学びます。
必要なもの
- APIキーを持つElevenLabsアカウント。
- Supabaseアカウント(database.newから無料アカウントに登録できます)。
- マシンにインストールしたSupabase CLI。
- マシンにインストールしたDenoランタイムと、必要に応じてお気に入りのIDEでのセットアップ。
- Telegramアカウント。
セットアップ
Telegramボットを登録する
BotFatherを使って新しいTelegramボットを作成します。/newbotコマンドを実行し、手順に従って新しいボットを作成してください。最後に、秘密のボットトークンを受け取ります。次のステップで使用するため、安全な場所に記録しておきましょう。

Supabaseプロジェクトをローカルに作成する
Supabase CLIをインストールしたら、次のコマンドを実行してローカルに新しいSupabaseプロジェクトを作成します。
文字起こし結果を記録するデータベーステーブルを作成する
次に、文字起こし結果を記録する新しいデータベーステーブルを作成します。
これにより、supabase/migrationsディレクトリに新しいマイグレーションファイルが作成されます。ファイルを開き、次のSQLを追加します。
Telegram webhookリクエストを処理するSupabase Edge Functionを作成する
次に、Telegram webhookリクエストを処理する新しいEdge Functionを作成します。
VS CodeまたはCursorを使用している場合、CLIで「Generate VS Code settings for Deno? [y/N]」と表示されたらyを選択してください。
環境変数を設定する
supabase/functionsディレクトリ内に新しい.envファイルを作成し、以下の変数を追加します。
依存関係
このプロジェクトでは、いくつかの依存関係を使用します。
- Telegram webhookリクエストを処理するオープンソースのgrammY Framework。
- Supabaseデータベースと連携するための@supabase/supabase-jsライブラリ。
- スピーチtoテキストAPIと連携するためのElevenLabs JavaScript SDK。
Supabase Edge FunctionはDenoランタイムを使用するため、依存関係をインストールする必要はありません。npm:プレフィックスを使ってインポートできます。
Telegramボットを実装する
新しく作成したscribe-bot/index.tsファイルに、次のコードを追加します。
コードの詳細
コードには注目すべき点がいくつかあります。順に見ていきましょう。
受信リクエストの処理
受信リクエストを処理するには、Deno.serveハンドラーを使用します。ハンドラーはリクエストに正しいシークレットがあるかを確認してから、handleUpdate関数にリクエストを渡します。
音声・オーディオ・ビデオメッセージを処理する
grammY Frameworkには、特定のメッセージタイプをフィルタリングする便利な方法があります。この例では、ボットは音声、オーディオ、ビデオメッセージを待ち受けます。
リクエストコンテキストを使用して、ボットはファイルメタデータを抽出し、Supabase Background TasksのEdgeRuntime.waitUntilでバックグラウンドの文字起こしを実行します。
これにより、ユーザーにはすぐに応答しつつ、ファイルの文字起こしをバックグラウンドで処理できます。
ElevenLabs APIで文字起こしする
最後に、バックグラウンドワーカーでボットはElevenLabs JavaScript SDKを使用してファイルを文字起こしします。文字起こしが完了すると、ボットはトランスクリプトをユーザーに返信し、supabase-jsを使ってSupabaseデータベースにログエントリを書き込みます。
Supabaseにデプロイする
まだの場合は、database.newで新しいSupabaseアカウントを作成し、ローカルプロジェクトをSupabaseアカウントにリンクします。
データベースマイグレーションを適用する
次のコマンドを実行して、supabase/migrationsディレクトリのデータベースマイグレーションを適用します。
Supabaseダッシュボードのテーブルエディターに移動すると、空のtranscription_logsテーブルが表示されます。

最後に、次のコマンドを実行してEdge Functionをデプロイします。
SupabaseダッシュボードのEdge Functionsビューに移動すると、scribe-bot関数がデプロイされています。後で必要になるため、関数URLを控えておいてください。https://<project-ref>.functions.supabase.co/scribe-botのような形式です。

webhookを設定する
ボットのwebhook URLをhttps://<PROJECT_REFERENCE>.functions.supabase.co/telegram-botに設定します(<...>をそれぞれの値に置き換えてください)。これを行うには、たとえばブラウザで次のURLにGETリクエストを実行します。
FUNCTION_SECRETは、.envファイルに設定したシークレットです。

関数のシークレットを設定する
すべてのシークレットをローカルで設定したら、次のコマンドを実行してSupabaseプロジェクトにシークレットを設定できます。
ボットをテストする
最後に、音声メッセージ、オーディオファイル、またはビデオファイルを送信してボットをテストできます。

トランスクリプトが返信として表示されたら、Supabaseダッシュボードのテーブルエディターに戻ります。transcription_logsテーブルに新しい行が表示されます。
