跳到主要内容

语音识别(ASR)

ASR 功能可以实时将音频识别成文字,并通过事件通知客户端。

Invite/Accept/Refer 命令的 CallOptionasr 字段中配置 ASR 功能, 分别对应呼叫、接听、转接的场景。

他们的格式是相同的,具体参见 TranscriptionOption

AsrFinal
text: 你好
AsrFinal...
sdk
sdk
你好(语音)
你好(语音)
RustPBX
RustPBX
电话
电话
ASR 提供商
ASR 提供商
你好(文本)
你好(文本)
你好(语音)
你好(语音)
通话
通话
Text is not SVG - cannot display

支持的提供商

目前支持腾讯云、阿里云、Deepgram 和 VoiceApi 四种提供商。可以通过 provider 字段选择。

各模型和支持的语言不同,可查阅对应的文档:

参数

provider

选择 ASR 提供商。

  • tencent:腾讯云
  • aliyun:阿里云
  • voiceapi:VoiceApi

language

语言。用于阿里云提示语音使用哪种语言。 对应 api 的 language_hints 参数。

modelType

  • 腾讯云:默认使用 16k_zh_en, 支持中文和英文。
  • 阿里云:默认使用 paraformer-realtime-v2,支持中文、英文、日语、韩语、德语、法语、俄语

samplerate

采样率。单位:Hz。

  • 腾讯云:默认 16000, 需要和模型设置同样的数值, 比如 16k_zh_en 对应的采样率是 16000。
  • 阿里云:默认 16000, 只有 paraformer-realtime-v2 支持自定义采样率, 其他模型是固定数值。
注意

采样率需要配置和 Track 采样率相同:

  • SIP 呼叫默认为 16000hz
  • WebRTC 呼叫依据编解码器决定:
    • G722 16000hz
    • Opus 48000hz
    • 其他 8000hz

endpoint

自定义服务端点 URL。

  • 阿里云:默认 wss://dashscope.aliyuncs.com/api-ws/v1/inference
  • 腾讯云:默认 wss://asr.cloud.tencent.com/asr/v2/

extra

提供商特定参数。依照供应商文档,extra 字段中使用相同的字段名。这些参数会直接传递给提供商。

startWhenAnswer

是否在接通后再请求 ASR 服务,默认为 false。启用后会忽略彩铃。

配置 API Key

API Key 可以在启动 RustPBX 时的环境变量中配置,也可以在参见 TranscriptionOption 中配置。

在环境变量中配置:

  • 腾讯云:

    • TENCENT_APPID:腾讯云的 appId
    • TENCENT_SECRET_ID:腾讯云的 secretId
    • TENCENT_SECRET_KEY:腾讯云的 secretKey
  • 阿里云:

    • DASHSCOPE_API_KEY: 阿里云大模型服务平台百炼的 API Key
  • Deepgram:

    • DEEPGRAM_API_KEY:Deepgram 的 API Key

TranscriptionOption 中配置:

腾讯云:

  • appId:腾讯云的 appId
  • secretId:腾讯云的 secretId
  • secretKey:腾讯云的 secretKey

其他提供商:

  • secretKey:提供商的 API Key

ASR 事件

RustPBX 会推送两种 ASR 事件:

  • AsrDelta: 中间识别结果 (可能变动)
  • AsrFinal: 最终识别结果 (稳定)

这两个事件的字段是相同的:

  • trackId: 通话轨道 ID (在转接场景下,会有两条 Track)
  • index: 识别结果序列号 (仅在腾讯云的 ASR 中有效)
  • text: 识别结果文本
  • timestamp: 事件时间戳
  • startTime: 识别开始时间
  • endTime: 识别结束时间