Skip to content

fix(asr): 火山渠道「验证」接入真实 WS 连通检查,修复必报「API Key 为空」 - #944

Merged
H-Chris233 merged 2 commits into
Open-Less:betafrom
bigsongeth:fix/volcengine-channel-validate
Aug 12, 2026
Merged

fix(asr): 火山渠道「验证」接入真实 WS 连通检查,修复必报「API Key 为空」#944
H-Chris233 merged 2 commits into
Open-Less:betafrom
bigsongeth:fix/volcengine-channel-validate

Conversation

@bigsongeth

Copy link
Copy Markdown
Contributor

问题

火山引擎 bigasr 渠道的「验证」按钮从来没通过过:无论选旧版(APP ID + Access Token)还是新版控制台(API Key)模式、凭据填得多对,点「验证」都立刻报「API Key 为空」。用户会以为自己配置错了,反复检查凭据——其实实际听写一直是正常的,坏的只是连接检查本身。

原因

validate_asr_provider 里百炼、讯飞、StepFun、ElevenLabs 各有专属验证分支,唯独没有火山的。火山渠道于是掉进 OpenAI 兼容 HTTP 兜底,而那条路只认 asr.api_key——火山从不写入的通用槽位(火山凭据存在 volcengine.* 专属槽位),所以第一步就空 Key 报错。渠道卡片化(#918)给每张卡都加上「验证」按钮后,这个洞暴露给了所有火山用户。

修复

给火山加上与讯飞同构的专属验证器:按当前鉴权模式取各自槽位的凭据,真连官方 WS 端点 + 1s 静音探针 + 收尾。凭据没填时按模式精确提示缺哪一项(APP ID / Access Token / API Key,五语言同步);握手被拒(401/403)或被限流(429)时把带状态码的报错原样透传,不再折叠成「操作失败」。

技术细节
  • validate_asr_provider 新增 volcengine 分支 → validate_volcengine_asr_provider
    • 凭据槽位随鉴权模式(与 read_volc_credentials 同规则):AppIdToken 读 volcengine.app_key + volcengine.access_key,ApiKey 读 volcengine.api_key,互不污染;Resource ID 空时回落默认 volc.seedasr.sauc.duration
    • 复用 VolcengineStreamingASR(生产同款客户端):open_session → 5×200ms 静音 chunk → send_last_frameawait_final_resultNoFinalResult 视为通过(纯静音会话服务端可能不回 final,握手成功已证明凭据有效,与讯飞验证器同判定)
    • 鉴权错误(AuthRejected)/ 限流(RateLimited)在握手阶段即返回,验证通常 1~2 秒内出结果
  • 凭据缺失走哨兵串(volcengineAppIdMissing / volcengineAccessTokenMissing / volcengineApiKeyMissing),前端 providerErrorMessage 映射多语言文案;volcengine.rsTARGET_AUDIO_CHUNK_BYTES 放开为 pub(crate) 供验证器复用
  • 单测:volcengine_missing_credential_error_follows_auth_mode 锁定两种模式的凭据判定(trim 语义与 VolcengineAuthMode::auth_ok 一致)

验证:cargo check 通过;cargo test volcengine(13 项)与 cargo test commands::providers(18 项)全绿;tsc --noEmit + 前端测试套件通过。

🤖 Generated with Claude Code

bigsongeth and others added 2 commits August 11, 2026 18:52
validate_asr_provider 此前没有火山分支,火山渠道点「验证」会掉进 OpenAI
兼容 HTTP 兜底——那条路只认 asr.api_key(火山从不写入的槽位),导致无论
哪种鉴权模式、凭据填得多对,连接检查都报「API Key 为空」。

- 新增 validate_volcengine_asr_provider:按鉴权模式取各自槽位凭据
  (旧版 volcengine.access_key / 新版控制台 volcengine.api_key),
  真连官方 WS 端点 + 1s 静音 + 收尾,与讯飞验证器同构;纯静音会话
  服务端不回 final(NoFinalResult)不算失败——握手成功已证明凭据有效
- 凭据缺失按模式返回哨兵串(volcengineAppIdMissing 等),前端映射为
  多语言文案,直接指出该补哪个输入框(en/ja/ko/zh-CN/zh-TW 同步)
- 握手被拒(401/403)/ 被限流(429)的报错原样透传给验证按钮,
  不再折叠成笼统的「操作失败」
- 补 volcengine_missing_credential_error 单测锁定两种模式的判定

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@H-Chris233

Copy link
Copy Markdown
Collaborator

妈呀我还不知道有这么大漏洞
感谢大松!

@H-Chris233
H-Chris233 merged commit 40cd136 into Open-Less:beta Aug 12, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants