转录 Telegram 机器人
转录 Telegram 机器人
使用 Supabase Edge Functions 中的 Deno 和 TypeScript,构建可转录 90 多种语言音频和视频消息的 Telegram 机器人。
操作指南 · 假定你已完成语音转文本快速入门,并拥有 Telegram 机器人令牌和 Supabase 账户。
简介
本教程将介绍如何使用 TypeScript 和语音转文本 API 中的 ElevenLabs Scribe 模型,构建一个可转录 90 多种语言音频和视频消息的 Telegram 机器人。
要求
- 拥有 API 密钥的 ElevenLabs 账户。
- 一个 Supabase 账户(可通过 database.new 免费注册)。
- 本机已安装 Supabase CLI。
- 本机已安装 Deno runtime,也可选择在常用 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 文件,并添加以下变量:
依赖项
项目使用以下依赖项:
- 开源 grammY Framework 用于处理 Telegram webhook 请求。
- @supabase/supabase-js 库用于与 Supabase 数据库交互。
- ElevenLabs JavaScript SDK 用于与语音转文本 API 交互。
由于 Supabase Edge Function 使用 Deno runtime,无需安装依赖项,可通过 npm: 前缀导入它们。
编写 Telegram 机器人代码
在新创建的 scribe-bot/index.ts 文件中添加以下代码:
代码详解
代码中有几个值得注意的地方。下面逐步讲解。
处理语音、音频和视频消息
grammY 框架提供了便捷方式,可针对特定消息类型进行筛选。这里,机器人会监听语音、音频和视频消息。
机器人使用请求上下文提取文件元数据,然后通过 Supabase Background Tasks EdgeRuntime.waitUntil 在后台运行转录任务。
这样可以立即回复用户,并在后台处理文件转录。
使用 ElevenLabs API 转录
最后,在后台工作器中,机器人使用 ElevenLabs JavaScript SDK 转录文件。转录完成后,机器人会将转录文本回复给用户,并使用 supabase-js 向 Supabase 数据库写入日志条目。
部署到 Supabase
如果还没有 Supabase 账户,请前往 database.new 创建一个,然后将本地项目关联到 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 表中看到新行。
