feat(wechat): 关注公众号后自动回复欢迎语(被动回复,可后台配置) #12
Reference in New Issue
Block a user
Delete Branch "feat/site"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
用户提醒:火山新版走 API Key 鉴权,不用旧版 appid+access_token。新版 WS 握手只带两个 header——Authorization(Bearer <APIKey>) + X-Api-Resource-Id。 配置从 {appid, access_token, 2×resource-id, voice} 收敛为 {api_key, 2×resource-id, voice}:APIKey 走 secrets AES 加密入库;ASREnabled/TTSEnabled 改为只看 api_key+对应 resource-id。admin 配置页两个字段并一个 API Key 字段,清单同步改为新版口径。build+tsc 绿。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>ASR 最终转写触发一次任务提交,复用 HTTP SubmitTask 那条共用关卡 (preflightCore/launchCore),语音只是"嘴替键盘",编排/工具/计费一行不新造。 - task_handler.go: preflight/launch 抽出无 gin 内核 preflightCore/launchCore (preflightBlock 承载拦截态),gin 版做薄封装;语音会话无 gin.Context 也走同一关卡 - voice_task.go: buildVoiceGraph(转写→input→agent 单图) + submitVoiceTask(校验/关卡/落库发射) - voice.go: 会话升级时抓租户/会话;结果 goroutine 见 Final→onFinalTranscript 提交、 回 ServerTask{task_id};去重连发的重复 final;画布图一次性消费 - voice_task_test.go: 组图合法性 + 带转写 + input→agent 连边 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>对齐官方 python demo 修 TTS payload: - TaskRequest 必须带完整 req_params(speaker+audio_params)再加 text,只发 {text} 火山收不到 (会回空 text 的 TTSSentenceStart 后直接结束、无音频) - StartSession 去掉自造的 namespace/user,就是 {req_params:{speaker,audio_params}} - ttsReqBase 基底 StartSession/TaskRequest 复用;TTSSession 存 reqBase - 加 VOICE_DEBUG 帧级调试日志(联调用,默认关无开销) 真机验证(voicecheck):TTS 合成 143KB PCM24k → 降采样喂 ASR → 转写"北京今天的天气怎么样? 需要带伞吗?"≈原句。ASR(volc.bigasr.sauc.duration)+TTS(seed-tts-2.0)两协议全通。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>- protocol.go: 新增 ServerReply("reply") 消息——Agent 回答增量文本 - voice_tts.go: token 一到即转发客户端(打字机),同时攒句喂 TTS(音频随后) - sentence_buffer.go: 本轮首句用低阈值(5 rune)抢首字延迟,之后回常规 12 - 桌面端 voice.ts onReply + VoiceDock 对话气泡(我说的 + JARVIS 打字机回答,思考态光标) 管线已最优:文字在 LLM 首 token 即刻上屏、音频紧随。剩余时延=大模型 TTFT(deepseek-v4-pro 4-7s 且波动大,疑似推理模型),这是模型的账、非管线——真要"马上响应"需换快模型。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>原生壳(Wails WKWebView)的 getUserMedia 不认 channelCount/echoCancellation 等高级约束, 抛 "Invalid constraint"。先试高级约束(浏览器更好),失败退回最简 {audio:true}(最兼容)。 配合上一提交的 .app 打包+NSMicrophoneUsageDescription,原生壳麦克风打通。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>- 无麦克风设备(如 Mac Studio/Mini 无内置麦)时,getUserMedia 会以 OverconstrainedError "Invalid constraint" 误导报错;先 enumerateDevices 预检 audioinput,没有就直说"没检测到麦克风" - getUserMedia 依次试 {audio:true}/{audio:{}}/带回声消除,全败则暴露真实错误名; NotAllowedError 单独提示去系统设置授权 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>