Files
dudu/server/pkg/protocol/ws.go
T
wangjia 40760aa884
ci / server (push) Failing after 14s
ci / design-tokens (push) Failing after 11s
dudu MVP:五端语音输入法初始提交
- server:Go 网关(WS 流式识别中继/计费配额/微信登录支付 mock/反馈/埋点),gummy provider 已真实联调
- desktop:Tauri 2(全局快捷键 push-to-talk/浮层/托盘/设置/登录购买/反馈/首启引导)
- android:Compose 主 App + IME(键盘内录音直传)
- ios:App + 键盘扩展(1A spike 实证键盘内不可录音,走 deep link 听写)
- design/design-pipeline:设计系统 + token 导出 iOS/Android 主题
- doc:前后端设计文档(HTML);web:官网宣传页;todo:任务看板

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 00:38:37 +08:00

64 lines
2.0 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// Package protocol 定义客户端 ↔ 后端的通信契约,是 5 端(server/desktop/android/ios/web
// 对齐的唯一真相源。设计依据 doc/backend-architecture.html 第四章。
package protocol
// 音频参数:二进制帧为 16kHz / 16bit / mono PCM,每 100ms 一帧。
const (
SampleRate = 16000
FrameMillis = 100
FrameBytes = SampleRate * 2 * FrameMillis / 1000 // 3200
// MaxSessionSeconds 单会话上限,到点服务端自动截断定稿(SESSION_LIMIT)。
MaxSessionSeconds = 180
// 设备维度 30 分钟滑动窗口限制。
RateWindowSeconds = 30 * 60
RateMaxSessions = 30
RateMaxAudioSeconds = 30 * 60
MaxConcurrentPerDevice = 1
// TrialDailySeconds 每日免费试用时长(秒)。
TrialDailySeconds = 180
)
// 上行文本帧类型。
const (
MsgStart = "start"
MsgStop = "stop"
MsgCancel = "cancel"
)
// 下行文本帧类型。
const (
MsgPartial = "partial"
MsgFinal = "final"
MsgUsage = "usage"
MsgError = "error"
)
// ClientMsg 客户端上行控制消息(文本帧)。音频走二进制帧。
type ClientMsg struct {
Type string `json:"type"` // start | stop | cancel
SessionID string `json:"session_id"`
SampleRate int `json:"sample_rate,omitempty"` // start 必填,当前仅支持 16000
Format string `json:"format,omitempty"` // start 必填,当前仅支持 pcm16
}
// ServerMsg 服务端下行消息(文本帧)。
type ServerMsg struct {
Type string `json:"type"` // partial | final | usage | error
SessionID string `json:"session_id,omitempty"`
// partial / final
Text string `json:"text,omitempty"`
// usage:识别中每 2s 及 stop 后下发,驱动 UI 实时刷新余额
SessionSeconds int `json:"session_seconds,omitempty"`
BalanceSeconds int64 `json:"balance_seconds,omitempty"`
TrialRemaining int `json:"trial_remaining,omitempty"`
// error
Code string `json:"code,omitempty"`
Message string `json:"message,omitempty"`
}