Skip to content

fix(asr): surface Volcengine 403 as 'credentials rejected'#438

Merged
appergb merged 2 commits into
betafrom
fix/volcengine-403-msg
May 15, 2026
Merged

fix(asr): surface Volcengine 403 as 'credentials rejected'#438
appergb merged 2 commits into
betafrom
fix/volcengine-403-msg

Conversation

@appergb
Copy link
Copy Markdown
Collaborator

@appergb appergb commented May 15, 2026

User description

Summary

用户反馈日志(openless-2026-05-15T01-12-07.log)显示 9 次连续:
```
[coord] open ASR session failed: connection failed: HTTP error: 403 Forbidden
```

诊断:HTTP 403 是 Volcengine bigmodel ASR 在 WebSocket 握手阶段返回的,网络通到了 Volcengine 服务器(不然不会有 HTTP 状态码),但服务端拒绝。这是凭据问题(App ID / Access Token 错、Resource ID 错、或账号没开通 SAUC bigmodel 资源),不是网络 / 代码 bug。

但当前 capsule 显示原始 HTTP error: 403 Forbidden,普通用户不会读 → 反馈到客服。

改动

`volcengine.rs`:

  • 加 `VolcengineASRError::AuthRejected(u16)` variant,display 是中文具体引导
  • 加 `classify_connect_error()` 函数:tokio-tungstenite 握手返回 `Error::Http` 且 status ∈ {401, 403} 时归入 AuthRejected,其它握手错误(DNS / TLS / connection refused)仍走 ConnectionFailed 不变

用户看到的新文案:

Volcengine 凭据被拒(HTTP 403):请检查 Settings → 凭据 → Volcengine 的 App ID 和 Access Token,或确认账号已开通 SAUC bigmodel 资源

Test plan

  • `cargo test --lib` → 258 全过
  • 手工验证:故意填错 Volcengine App ID → 录一段 → 看 capsule 显示新中文文案
  • 手工验证:正确凭据 → 录音正常,不被误判为 AuthRejected
  • 手工验证:断网 → capsule 仍显示原来的 `connection failed: ...` 不被这次改动污染

不发 tag

按 hotfix 计划,merge 到 beta 后发 `v1.3.2-3-beta-tauri` tag,下一个 Beta 一起出去。


PR Type

Bug fix


Description

  • Classify Volcengine 401/403 handshakes

  • Surface credential rejections as AuthRejected

  • Keep other connect failures unchanged


Diagram Walkthrough

flowchart LR
  A["connect_async handshake error"] -- "HTTP 401/403" --> B["AuthRejected(status)"]
  A -- "other errors" --> C["ConnectionFailed"]
  B -- "capsule text" --> D["凭据被拒(403)"]
  C -- "capsule text" --> E["connection failed: ..."]
Loading

File Walkthrough

Relevant files
Bug fix
volcengine.rs
Classify Volcengine handshake credential errors                   

openless-all/app/src-tauri/src/asr/volcengine.rs

  • Adds AuthRejected(u16) for 401/403 handshake responses
  • Replaces direct connect_async error mapping with
    classify_connect_error
  • Keeps DNS, TLS, and network failures as ConnectionFailed
  • Documents why credential rejections are handled separately
+21/-3   

… raw HTTP error

用户反馈"豆包云端语音连接不了",日志显示 9 次相同的:
  [coord] open ASR session failed: connection failed: HTTP error: 403 Forbidden

原因不是网络不通(网络通到 Volcengine 才会有 HTTP 状态码),而是凭据被拒:
App ID / Access Token 错、或账号没开通 SAUC bigmodel 资源。当前 capsule
显示原始 `HTTP error: 403 Forbidden`,用户看不懂、客服需要解释一遍。

修法:在 volcengine.rs 加 classify_connect_error 函数,握手收到 401/403 时
转成新的 VolcengineASRError::AuthRejected(status) variant;它的 thiserror
display 直接是中文「凭据被拒(HTTP 403):请检查 Settings → 凭据 → Volcengine
的 App ID 和 Access Token,或确认账号已开通 SAUC bigmodel 资源」。
coordinator 沿用原有错误透传路径,capsule 文案自动从英文变中文具体引导。

其它握手错误(DNS / TLS / connection refused)仍走 ConnectionFailed,文案不变。

cargo test 258 全过。
@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 15, 2026

PR Reviewer Guide 🔍

(Review updated until commit 1234dcd)

Here are some key observations to aid the review process:

⏱️ Estimated effort to review: 1 🔵⚪⚪⚪⚪
🧪 No relevant tests
🔒 No security concerns identified
⚡ Recommended focus areas for review

原文案带 Settings 引导 + SAUC 资源说明,capsule 上显得拥挤。简化到 5 个字 + 状态码,原因留在错误类型 doc comment 里。
@github-actions
Copy link
Copy Markdown

Persistent review updated to latest commit 1234dcd

@appergb appergb merged commit e297bfd into beta May 15, 2026
4 checks passed
@appergb appergb deleted the fix/volcengine-403-msg branch May 15, 2026 01:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant