主题
H. RTC 协议参考
面向 JRTC 链路的协议参考:实时交互时序、鉴权 Token 获取、房间初始化、上下行事件一览及 SDK 使用文档。
协议边界:本附录说明 JoyInside 侧 HTTP 接口与业务事件,时序图展示进房、音视频交互及退房流程;SDK 具体调用与媒体配置请参考 H.5 SDK 使用文档 。
H.1 链路与实时交互时序
接入步骤总览
| 步骤 | 操作 | 参考 |
|---|---|---|
| 1. 准备接入凭证 | 准备 AccessKey、签名所需的密钥及 vendorId;密钥仅用于服务端签名,不下发到应用端 | 4.1 签名算法 |
| 2. 获取鉴权 Token | 调用 /auth/getToken,获取后续房间初始化请求使用的 accessToken | H.2 环境、鉴权与 Token |
| 3. 初始化房间 | 携带 accessToken 调用 /device/rtc/registerAndGetRoom,获取房间信息和 RTC 鉴权参数 | H.3 初始化房间 |
| 4. SDK 进入房间 | 准备 SDK 所需参数,调用 JRTCEngine.joinRoom(...),等待 onJoinRoomSuccess 回调确认进房成功 | H.5 SDK 使用文档 |
| 5. 开启实时交互 | 配置语音对话,发布与订阅音视频,收发业务事件并展示文本或播放语音 | H.4 业务事件协议 |
实时交互时序
| 参与方 | 功能模块 |
|---|---|
| App | 应用端 |
| JRTC SDK | 客户端 SDK |
| JoyInside 服务 | Token 鉴权、房间初始化、业务事件收发 |
进房接口:JRTCEngine.joinRoom(connection, authInfo, configInfo, options),参数依次为房间连接、鉴权信息、房间配置和媒体选项。
H.2 环境、鉴权与 Token
| 环境 | JoyInside API 域名 |
|---|---|
| 生产 | https://api.joyinside.com |
| 预发 | https://uat-api.joyinside.com |
H.2.1 V2 签名算法
签名算法及示例参考 4.1 Token 鉴权-签名算法。
H.2.2 获取鉴权 Token
参考 4.1 Token 鉴权-获取访问令牌,本链路使用 vendorId 获取鉴权 Token,其中 accessToken 即访问令牌,用于后续 RTC 房间初始化请求。
getToken 接口:
| 项 | 值 |
|---|---|
| URL | https://api.joyinside.com/auth/getToken |
| 方式 | POST |
| 作用 | 用签名获取 Token |
请求参数:
Body
| 字段 | 必选 | 说明 |
|---|---|---|
| accessKeyId | 是 | AccessKey |
| accessTimestamp | 是 | 13 位毫秒时间戳(与服务端时间误差 ≤5min) |
| accessNonce | 是 | 随机数(防重放) |
| accessVersion | 是 | 固定 V2 |
| accessSign | 是 | 签名,参见 4.1 Token 鉴权-签名算法 |
| vendorId | 是 | 厂商唯一标识,RTC 房间初始化前使用 vendorId 获取鉴权 Token |
请求示例
完整请求示例(点击展开)
shell
curl --location 'https://api.joyinside.com/auth/getToken' \
--header 'Content-Type: application/json' \
--data '{
"accessVersion": "V2",
"accessTimestamp": "1791948159496",
"accessNonce": "{本次请求随机数}",
"accessKeyId": "{AccessKey}",
"accessSign": "{签名结果}",
"vendorId": "{vendorId}"
}'示例中的时间戳、随机数和签名需在每次请求时重新生成。
响应参数:
| 字段 | 说明 |
|---|---|
| accessToken | 访问令牌,有效期 8 小时 |
| expireIn | 访问令牌剩余有效时间(秒) |
| refreshToken | 刷新令牌,有效期 7 天 |
| refreshExpireIn | 刷新令牌剩余有效时间(秒) |
| code | 状态码 |
| msg | 状态信息 |
响应示例
完整响应示例(点击展开)
json
{
"accessToken": "ehuc2065edbru==",
"expireIn": 7200,
"refreshToken": "cjekcnlsjfekncejh==",
"refreshExpireIn": 604800,
"code": 0,
"msg": ""
}accessToken 用于 JoyInside 前置接口鉴权,rtcToken 用于 JRTC 进房,两者不可互换。
H.3 初始化房间
registerAndGetRoom 接口:
| 项 | 值 |
|---|---|
| URL | https://api.joyinside.com/device/rtc/registerAndGetRoom |
| 方式 | POST |
| 作用 | 初始化房间,获取房间信息及进房凭证 |
请求参数:
Body
| 字段 | 类型 | 必选 | 说明 |
|---|---|---|---|
| vendorId | string | 是 | 厂商唯一标识 |
| productId | string | 是 | 产品唯一标识 |
| deviceId | string | 是 | 厂商保证唯一的设备标识,建议设备 SN |
| type | string | 是 | 固定 PHYSICAL_ROBOT,生产设备 |
| name | string | 是 | 设备名称 |
| requestId | string | 是 | 每次重新建连生成新的 UUID,用于追踪本次连接 |
| sessionId | string | 是 | 短期记忆/对话上下文标识,可在一次建连中新设,也可跨建连复用 |
| uid | string | 是 | 用户唯一标识,不超过 128 字节 |
| rtcType | integer | 是 | 固定 1,JRTC |
| mode | integer | 是 | 固定 1,JoyAI Interaction 服务 |
请求示例
完整请求示例(点击展开)
json
{
"vendorId": "{vendorId}",
"productId": "{productId}",
"deviceId": "{设备SN}",
"type": "PHYSICAL_ROBOT",
"name": "RTC设备",
"requestId": "{本次建连UUID}",
"sessionId": "{会话ID}",
"uid": "{用户ID}",
"rtcType": 1,
"mode": 1
}响应参数:
| 字段 | 类型 | 说明 |
|---|---|---|
| state | string | 响应结果,成功示例为 SUCCESS |
| code | string | 响应结果码,成功示例为 0000 |
| msg | string | 错误信息 |
| data | object | 响应数据,按原始 JSON 示例整理 |
| data.botId | string | JoyInside 设备 ID |
| data.roomId | string | RTC 房间 ID |
| data.rtcToken | string | RTC 进房 Token |
| data.nonce | string | RTC 生成房间的随机数 |
| data.timestamp | string | RTC 生成房间的时间戳 |
响应示例
完整响应示例(点击展开)
json
{
"state": "SUCCESS",
"code": "0000",
"msg": null,
"data": {
"botId": "{botId}",
"roomId": "{roomId}",
"rtcToken": "{rtcToken}",
"nonce": "{nonce}",
"timestamp": 1791948159496
}
}H.4 业务事件协议
H.4.1 上下行事件一览表
上行事件(设备端 → 云端)
| 事件名 | contentType | 触发时机 | 协议明细 |
|---|---|---|---|
CLIENT_VOICE_CHAT_UPDATE | EVENT | 建连后发一次,配置音频/音色/角色 | B.4.2 |
下行事件(云端 → 设备端)
| 事件名 | contentType | 触发时机 | 协议明细 |
|---|---|---|---|
CFG_BOT_EVENT | EVENT | 建连成功后下发默认配置 | B.4.1 |
SERVER_VOICE_CHAT_UPDATED | EVENT | 配置更新成功响应 | B.4.2 |
ASR | ASR | 语音识别结果 | B.4.3 |
EMPTY_CONTENT | EVENT | 未识别到有效输入(拒识) | B.4.5 |
COMPLETE | EVENT | 当轮对话完成 | B.4.5 |
TTS_SENTENCE_START | EVENT | 音频字幕(先于 TTS 下发) | B.4.6 |
TTS_COMPLETE | EVENT | TTS 音频全部下发完成 | B.4.6 |
CALL_AGENT_INTERRUPTED | EVENT | 打断事件(端侧需清空播放队列) | B.4.7 |
USER_AUDIT_FAIL | EVENT | 审核命中 | B.4.11 |
H.5 SDK 使用文档
请根据项目的平台需求,选择对应的 SDK 使用文档。
| 平台 | 参考文档 |
|---|---|
| Android | Android SDK 使用文档 |
| iOS | iOS SDK 使用文档 |
下一步
- 业务事件字段:读 附录 B · WebSocket 协议参考。
- 通用鉴权说明:读 4.1 Token 鉴权。
- 核心标识:读 4.3 重要参数介绍。