REST + WebSocket + gRPC · 微服务间契约 · 错误码标准
| 项目 | 规范 |
|---|---|
| Base URL | https://api.vocalink.sg/v1(生产) / https://staging-api.vocalink.sg/v1(测试) |
| 协议 | HTTPS only(TLS 1.2+) |
| 数据格式 | JSON(UTF-8) |
| 时区 | UTC(响应中统一),客户端按本地时区展示 |
| 时间戳 | Unix epoch milliseconds(13 位) |
| 鉴权 | Bearer Token(JWT),Header: Authorization: Bearer <jwt> |
| 幂等 | 写操作支持 Idempotency-Key Header(UUID v4) |
| 限流 | 每用户 100 req/min(API Gateway 层) |
| Header | 必填 | 说明 |
|---|---|---|
| Authorization | 是(除 /auth/*) | Bearer <jwt_token> |
| Content-Type | 是(POST/PUT) | application/json |
| X-Request-ID | 推荐 | UUID,用于链路追踪 |
| Idempotency-Key | 写操作推荐 | UUID v4,防重复提交 |
| X-Client-Version | 是 | App 版本号(如 1.0.0) |
| X-Platform | 是 | ios / android / web |
| X-Locale | 是 | zh-CN / en-SG |
| 响应字段 | 说明 |
|---|---|
| data.session_id | OTP 会话 ID(60s 有效) |
| data.expires_in | 剩余秒数(60) |
| 响应字段 | 说明 |
|---|---|
| data.access_token | JWT(有效期 7 天) |
| data.refresh_token | 刷新令牌(有效期 30 天) |
| data.is_new_user | 是否新注册用户 |
| data.user | 用户基本信息 |
| 响应字段 | 说明 |
|---|---|
| data.match_id | 匹配会话 ID |
| data.status | searching / matched / timeout |
| data.estimated_wait_ms | 预估等待时间 |
| 响应字段 | 说明 |
|---|---|
| data.duration_seconds | 通话时长 |
| data.coins_spent | 本次消耗金币 |
| data.coins_earned | 本次获得金币(被叫) |
| data.can_add_buddy | 是否可加为语伴 |
| 响应字段 | 说明 |
|---|---|
| data.order_id | 订单号 |
| data.pay_url | 支付跳转 URL(PayNow/Stripe) |
| data.qr_code | PayNow QR 数据(Base64) |
| data.expires_at | 订单过期时间 |
| 响应字段 | 说明 |
|---|---|
| data.reward_granted | 是否发放奖励 |
| data.coins_added | 获得金币数 |
| data.remaining_today | 今日剩余次数 |
| 举报原因枚举 | 说明 |
|---|---|
| harassment | 骚扰/纠缠 |
| nsfw | 色情/不当内容 |
| scam | 诈骗/钓鱼 |
| hate_speech | 仇恨言论 |
| spam | 垃圾信息 |
| underage | 疑似未成年人 |
| other | 其他(需描述) |
| 响应字段 | 说明 |
|---|---|
| data.is_safe | 是否安全 |
| data.categories | 命中的违规类别 |
| data.action | allow / warn / block / escalate |
| data.confidence | 置信度 0-1 |
| 连接 URL | 用途 | 心跳 | 重连 |
|---|---|---|---|
| wss://api.vocalink.sg/v1/ws/global | 全局事件(通知/系统消息) | 30s ping/pong | 指数退避 1-30s |
| wss://api.vocalink.sg/v1/match/events | 匹配事件推送 | 10s | 即时 |
| wss://rtc.vocalink.sg/v1/call/signaling | WebRTC 信令 | 5s | 3s 内 |
| wss://api.vocalink.sg/v1/translate/stream | 翻译字幕流 | 15s | 1s 内 |
| wss://api.vocalink.sg/v1/social/messages | 私聊实时消息 | 30s | 5s |
| 事件类型 (type) | 方向 | 说明 |
|---|---|---|
| match.found | S→C | 匹配成功 |
| match.timeout | S→C | 匹配超时 |
| call.started | S→C | 通话开始 |
| call.ended | S→C | 通话结束 |
| call.quality | S→C | 通话质量更新 |
| subtitle | S→C | 翻译字幕(final) |
| subtitle_partial | S→C | 翻译字幕(中间结果) |
| gift.received | S→C | 收到礼物 |
| buddy.online | S→C | 语伴上线 |
| message.new | S→C | 新私聊消息 |
| system.notice | S→C | 系统通知 |
| webrtc_offer | C↔S | WebRTC Offer |
| webrtc_answer | C↔S | WebRTC Answer |
| ice_candidate | C↔S | ICE Candidate |
| 错误码段 | 类别 | 示例 |
|---|---|---|
| 0 | 成功 | — |
| 1000-1999 | 通用错误 | 1001 参数错误 / 1002 未授权 / 1003 频率限制 |
| 2000-2999 | Auth 错误 | 2001 OTP 无效 / 2002 Token 过期 / 2003 账号被封 |
| 3000-3999 | Match 错误 | 3001 匹配池为空 / 3002 匹配超时 / 3003 被拒绝 |
| 4000-4999 | Call 错误 | 4001 通话已满 / 4002 对方忙 / 4003 网络差 |
| 5000-5999 | Translate 错误 | 5001 ASR 失败 / 5002 MT 失败 / 5003 TTS 失败 |
| 6000-6999 | Payment 错误 | 6001 余额不足 / 6002 支付超时 / 6003 退款失败 |
| 7000-7999 | Social 错误 | 7001 已被拉黑 / 7002 添加频繁 |
| 8000-8999 | Safety 错误 | 8001 内容违规 / 8002 账号受限 |
| 9000-9999 | Ad 错误 | 9001 填充失败 / 9002 频次超限 / 9003 验证失败 |
| Code | Message | 客户端处理 |
|---|---|---|
| 1002 | Unauthorized | 跳转登录页 / 自动刷新 Token |
| 1003 | Rate limited | 显示"操作太频繁,请稍后再试" |
| 2002 | Token expired | 用 refresh_token 静默刷新 |
| 3002 | Match timeout | 弹窗"扩大范围"或"稍后再来" |
| 4001 | Translation unavailable | 降级为纯语音模式 |
| 6001 | Insufficient coins | 跳转充值页 |
| 8001 | Content violation | 通话中断 + 提示"违反社区规则" |
| 9002 | Ad daily limit reached | 隐藏广告入口 |
| 规则 | 说明 |
|---|---|
| URL 版本 | /v1/ /v2/ 大版本变更(不兼容时升级) |
| Header 版本 | X-API-Version: 1.2(小版本,兼容) |
| 向后兼容 | 每个版本至少维护 12 个月 |
| 废弃流程 | 标记 deprecated → 通知 3 个月 → 下线 |
| 客户端强制更新 | API 返回 426 → 客户端弹"请更新到最新版" |
| 版本 | 日期 | 变更 |
|---|---|---|
| v1.0 | 2026-08-15 | Phase 1 初始 API 集合 |
| v1.1 | 2026-09-30 | 新增翻译反馈接口 / 优化匹配算法参数 |
| v1.2 | 2026-11-15 | 广告位接口 / TTS 语音合成接口 |
⚠️ API 变更原则:
所有 API 已导出为 Postman Collection v2.1,包含环境变量(dev/staging/prod)。
下载:https://github.com/vocalink/api-specs/vocalink-api-v1.postman_collection.json
OpenAPI 3.0 YAML 文件同步维护,用于自动生成 SDK 和文档。
路径:https://api.vocalink.sg/v1/openapi.yaml
| 文档 | 关联内容 |
|---|---|
| 08 系统架构 HLD | API 在微服务架构中的位置 |
| 09 实时翻译子系统 LLD | 翻译相关接口的内部实现 |
| 13 支付中台接入方案 | 支付通道详细对接 |
| 版本 | 日期 | 修改内容 | 作者 |
|---|---|---|---|
| V1.0 | 2026-08-15 | 初始版本 | 后端团队 |