首页博客 → 语音消息转文字:Telegram、WhatsApp 及其他即时通讯工具

语音消息转文字:Telegram、WhatsApp 及其他即时通讯工具

发布于 2026-08-05 · 5 分钟阅读

语音消息对发送者方便,对其他所有人都不方便:没法快速略读,没法检索,开会时也没法看。自动转录解决了这个问题——下面讲如何把它接进机器人或业务流程。

语音消息和普通录音有什么不同

有三个特点需要注意:

把语音消息送去转录

文件按即时通讯工具给出的原样传过去:

from openai import OpenAI

client = OpenAI(base_url="https://voicesscribe.com/v1", api_key="your key")

with open("voice_message.ogg", "rb") as f:
    text = client.audio.transcriptions.create(model="whisper-1", file=f).text

print(text)

格式由文件内容判断,而不是扩展名,因此文件名写错也不影响识别。

用文字回复语音消息的机器人

流程很简单:收到语音消息 → 下载文件 → 送去转录 → 把文字发回聊天。

async def on_voice(message, bot):
    file = await bot.download(message.voice.file_id)   # ogg/opus
    text = client.audio.transcriptions.create(
        model="whisper-1", file=("voice.ogg", file), language="zh",
    ).text
    await message.reply(text or "没有听清任何语音内容")

结果在同一个请求里返回,用户发完消息一两秒后就能拿到文字。

短片段:如何提高准确率

两三秒的录音最难处理:上下文少,语种判断也容易出错。三个几乎总是有效的做法:

  1. 显式指定语种—— language="zh"。关掉自动识别,短句上的错误就消失了。
  2. 描述预期内容,通过 prompt。例如验证码场景:prompt="A four-digit confirmation code"
  3. 检查置信度。verbose_json 的响应里带有语种概率,数值偏低就是需要人工复核的信号。

多语种混合的场景

如果消息来自不同语种,无需任何配置:语种由音频自动判断,支持 99 种语言。verbose_json 会返回识别出的语种,用它把会话分配给对应的客服很方便。

一个注意点:语种是根据录音开头判定的。如果对方先说中文再切到英文,转录会继续以「中文模式」进行——这类消息最好单独处理。

静音和空录音

有一部分语音消息其实是空的:误触、断线、只有背景噪音没有人声。这种情况下服务返回空字符串,而不是编造出来的句子——内置过滤器会切掉神经网络典型的幻觉内容,比如片尾字幕和「感谢观看」。

代码里只需判断字符串是否为空,不要把无意义的结果展示给用户。

用你自己的录音试一试。 注册只需一分钟,免费额度足够判断识别质量。

免费获取 API 密钥

常见问题

发送前需要把 ogg 转成 wav 吗?

不需要。即时通讯工具产出什么格式就直接发什么:ogg、opus、mp3、m4a、wav 等常见格式都可以。

中文语音消息识别效果怎么样?

中文属于识别质量最好的一批语种,共支持 99 种语言。不过对于单一语种的消息流,仍然建议显式指定语种。

一条语音消息要转多久?

一分钟以内的普通消息一到两秒完成,结果在同一个请求里返回。

如果录音里没有人声会返回什么?

返回空文本。服务不会在没有内容的地方编造内容。

文件大小有限制吗?

有,单次请求 25 MB。对语音消息来说余量极大:opus 编码下这个体积是好几个小时的语音。

相关阅读