feat(voice): 语音配置控制面——火山豆包 appid/token/resource-id/音色(参数落地处)

JARVIS 不依赖火山账号能先做的第二块:配置层,做成'你参数一填就落库'的形态。
- voice.Config: AppID/AccessToken/ASRResourceID/TTSResourceID/TTSVoiceType,AccessToken
  走 secrets AES 加密入库(镜像微信配置);ASREnabled/TTSEnabled 可各自独立判断。
- admin GET/PUT /admin/voice(RequireAdmin),token 空串=沿用已存、明文回显。
- admin「语音设置」页(运维组):五个字段 + ASR/TTS 就绪徽标 + '去哪拿参数'清单。

端点/音频格式(PCM 16k 单声道)由代码固定不入配置。WS 会话 + 火山 ASR/TTS 客户端等
用户回传 resource-id 后按官方 demo 协议做。build+tsc 绿。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Blizzard
2026-07-21 17:00:35 +08:00
parent 644b635d73
commit 618184689e
6 changed files with 295 additions and 0 deletions
+8
View File
@@ -1,5 +1,6 @@
import { SubscriptionPage } from "./pages/SubscriptionPage";
import { LoginConfigPage } from "./pages/LoginConfigPage";
import { VoiceConfigPage } from "./pages/VoiceConfigPage";
import { WechatUsersPage } from "./pages/WechatUsersPage";
import { lazy, type ReactNode } from "react";
@@ -86,6 +87,13 @@ export const routes: RouteDef[] = [
ready: true,
element: <LoginConfigPage />,
},
{
path: "voice-config",
label: "语音设置",
group: "运维",
ready: true,
element: <VoiceConfigPage />,
},
{
path: "datasources",
label: "数据源 & RAG",