Skip to content

A. HTTP API 参考 ​

JoyInside 全量服务端 HTTP 接口的字典式速查。按鉴权、设备管理、角色管理、用户绑定、聊天记录、在线设备、视觉上报、网易云音乐 分组。各接口详细字段说明见正文对应章节。

特别说明:接口参数productId,新产品对接请直接使用产品productId,历史产品保持兼容。

A.1 通用信息 ​

API 地址 ​

环境域名
测试https://uat-api.joyinside.com
生产https://api.joyinside.com

Header 参数说明 ​

参数必选类型说明
Authorization是string鉴权头,格式固定为 Bearer ${accessToken},其中 accessToken 为通过 getToken 接口获取的访问令牌。Token 获取方式见 4.1 Token 鉴权。

鉴权方式 ​

除 getToken / refreshToken 自身外,所有接口均需在 Header 中携带:

Authorization: Bearer ${accessToken}

公共请求参数 ​

参数说明出现场景
requestId请求追踪,建议 UUID多数接口
vendorId企业 id(测试环境固定 200196)多数接口
botId设备唯一标识多数接口
uid用户 id(≤128 字节),关联长期记忆与聊天报告绑定 / 聊天接口

统一返回结构 ​

字段类型说明
stateStringSUCCESS / FAILURE / ERROR
codeString0000 或 200 成功;50x 系统错误
msg / resultString错误描述(成功时为 null)
data各接口不同业务数据

部分早期接口 code 为数字 200,新接口统一为字符串 0000。

A.2 鉴权接口 ​

A.2.1 获取 Token ​

项目说明
URL/auth/getToken
方式POST
鉴权无需 Token(本身用于获取 Token)

请求参数:

字段类型必填说明
vendorIdString否厂商标识,与 botId 二选一
botIdString否设备标识,与 vendorId 二选一
accessKeyIdString是AccessKey
accessTimestampString是13 位毫秒时间戳(≤5min 误差)
accessNonceString是随机字符串(防重放)
accessVersionString是固定 V2
accessSignString是HMAC-MD5 签名

请求示例

完整 请求示例(点击展开)
shell
curl --location 'https://api.joyinside.com/auth/getToken' \
--header 'Content-Type: application/json' \
--data '{
    "botId": "xxxxx",
    "accessVersion": "V2",
    "accessTimestamp": "1234567890",
    "accessNonce": "a",
    "accessKeyId": "1",
    "accessSign": "2"
}'

注意:参数botId与vendorId同时存在时,优先使用botId生成授权令牌

返回:

字段说明
accessToken访问令牌(有效期 8h)
expireIn访问令牌剩余有效秒数
refreshToken刷新令牌(有效期 7d)
refreshExpireIn刷新令牌剩余有效秒数

响应示例

完整 响应示例(点击展开)
json
{
  "accessToken": "ehuc2065edbru==",
  "expireIn": 7200,
  "refreshToken": "cjekcnlsjfekncejh==",
  "refreshExpireIn": 604800,
  "code": 0,
  "msg": ""
}

详见 4.1 Token 鉴权 — 签名算法

A.2.2 刷新 Token ​

项目说明
URL/auth/refreshToken
方式POST
鉴权无需 Token

请求参数:

字段类型必填说明
vendorIdString否与 botId 二选一
botIdString否与 vendorId 二选一
accessKeyIdString是AccessKey
refreshTokenString是刷新令牌

请求示例

完整 请求示例(点击展开)
shell
curl --location 'https://api.joyinside.com/auth/refreshToken' \
--header 'Content-Type: application/json' \
--data '{
  "botId": "xxxxx",
  "accessKeyId": "xxxx",
  "refreshToken": "adasdfjklji1752=="
}'

注意:参数botId与vendorId同时存在时,优先使用botId生成授权令牌

返回:同 getToken(新的 accessToken + expireIn)。

字段类型是否必选说明
accessTokenString必选用户访问令牌
expireInInteger必选访问令牌过期时间(秒),有效期8小时,失效后重新生成或使用refreshToken生成新accessToken
codeInteger必选状态码
msgString必选状态对应信息

响应示例

完整 响应示例(点击展开)
json
{
  "accessToken": "xyzt7895edbru==",
  "expireIn": 7200,
  "code": 0,
  "msg": ""
}

A.3 设备管理 ​

A.3.1 设备注册 ​

项目说明
URL/device/register
方式POST

请求参数:

字段类型必填说明
vendorIdString是厂商唯一标识
productIdString是产品唯一标识
typeString是PHYSICAL_ROBOT(生产)/ APP_ROBOT(测试)
nameString是设备名称
deviceIdString是设备唯一标识,厂商保证唯一,建议用设备 SN
deviceModelString否设备型号
timbreIdString否音色 id
descString否描述
resourceAuthedListList<String>否JoyInside支持播放自有以及三方的音乐、故事资源。
通过该字段指定设备后续进行资源检索、播放及计费所使用的资源提供方。
若不传该字段,则默认使用 JoyInside 自有资源。
注意:如需使用该字段,请提前联系JoyInside产品运营完成相关配置。
取值:WANG_YI_CLOUD:网易云音乐

请求示例:

完整 JSON 示例(点击展开)
plaintext
{
  "vendorId": "1",
  "productId": "产品ID",
  "type": "APP_ROBOT",
  "name": "测试",
  "deviceId": "1"
}

返回 data:String — 注册成功的 botId。

⚠ 同一 deviceId 重复注册返回已有 botId,不会生成新 botId。详见 4.2 设备注册

A.3.2 设备列表 ​

项目说明
URL/device/list
方式POST

请求参数:

字段类型必填说明
requestIdString是请求追踪
vendorIdString是厂商 id
botIdString否筛选
productIdString否筛选
pageSizeInteger是每页条数(10~500)
pageNumInteger是页码(≥1)
snString否筛选
shortCodeString否bot 短码筛选

请求示例:

完整 JSON 示例(点击展开)
plaintext
{
   "requestId": "xxx",
   "vendorId": "1",
   "pageSize": 20,
   "pageNum": 1
}

返回 data:PageResult<BotBaseInfoDetailDTO>(含 records / total / size / current / pages)。

Class PageResult

字段数据类型备注
recordsArray当前页数据列表,元素为机器人基础信息BotBaseInfoDetailDTO(见下表)
totalLong总数(默认最多统计 10000 条)
sizeLong每页显示条数(默认 10 条)
currentLong当前页码
pagesLong总页数
optimizeCountSqlBoolean是否自动优化 COUNT SQL,默认 true
searchCountBoolean是否进行 count 查询(默认 true)
maxLimitLong单页分页条数限制,可为 null
countIdStringcountId,可为 null

Class BotBaseInfoDetailDTO

字段数据类型备注
vendorIdLong厂商 id
botIdString设备唯一标识
productIdString产品唯一标识
shortCodeStringbot 短码
nameString名称
modelIdLong型号 id
typeString类型
typeDescString类型描述
snString编号
defaultTimbreIdString默认音色 id
timbreIdString音色 id
cloneTimbresArray<String>克隆音色列表
descString描述信息
createTimeDate创建时间
createPinString创建人 pin
modifyTimeDate更新时间
modifyPinString更新人 pin

A.3.3 移除设备克隆音色 ​

项目说明
URL/device/removeCloneTimbre
方式POST

请求参数:

字段类型必填说明
botIdString是设备唯一标识
timbreIdString是音色 id

请求示例:

完整 JSON 示例(点击展开)
plaintext
{
    "botId":"xxxxx",
    "timbreId":"TIMBRE_20250512_0001"
}

返回 data:Bool(true 成功 / false 失败)。

成功响应:

完整 JSON 示例(点击展开)
plaintext
{
    "traceId": "b1f2c3d4e5f6a7b8",
    "state": "SUCCESS",
    "code": "OK",
    "result": null,
    "data": true
}

失败响应:

完整 JSON 示例(点击展开)
plaintext
{
    "traceId": "b1f2c3d4e5f6a7b8",
    "state": "FAILURE",
    "code": "",
    "result": "TIMBRE_20250512_0001该音色正在使用,无法删除",
    "data": false
}

A.3.4 音色试听 ​

项目说明
URL/device/timbre/ttsPlayV2
方式POST

请求参数:

字段类型必填说明
requestIdString是请求追踪
botIdString是设备唯一标识
timbreIdString是音色 ID,取自 A.3.2 设备列表 返回值中的克隆音色列表(cloneTimbres)
aueint否音频编码格式,默认 0。1:pcm;2:opus(每次返回 N 个 opus 包,每包前 2 字节为包大小,每包 60ms);3:mp3

请求示例:

完整 JSON 示例(点击展开)
json
{
    "requestId": "7f1c0c2e-9a13-4f0d-9d62-1f2f3a4b5c6d",
    "timbreId": "TIMBRE_20250512_0001",
    "botId": "xxxxx",
    "aue": 3
    
}

返回 data:byte[] — 合成后的音频数据,JSON 下为 Base64 字符串;编码格式由 aue 决定。

成功响应:

完整 JSON 示例(点击展开)
json
{
    "traceId": "b1f2c3d4e5f6a7b8",
    "state": "SUCCESS",
    "code": "",
    "result": null,
    "data": "SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU4Ljc2LjEwMAAAAAAA//..."
}

失败响应(业务失败):

完整 JSON 示例(点击展开)
json
{
    "traceId": "b1f2c3d4e5f6a7b8",
    "state": "FAILURE",
    "code": "006009",
    "result": "音频生成异常",
    "data": null
}

失败响应(系统异常):

完整 JSON 示例(点击展开)
json
{
    "traceId": "b1f2c3d4e5f6a7b8",
    "state": "ERROR",
    "code": "99999",
    "result": "系统繁忙,请稍后再试",
    "data": null
}

A.4 AI 角色管理 ​

A.4.1 系统角色列表 ​

项目说明
URL/agent/roles/query
方式POST
Content-Typeapplication/json

请求参数:

完整 JSON 示例(点击展开)
plaintext
{
  "requestId": "xxx",
  "vendorId": "1",
  "productId": "产品ID"
}
字段类型必填说明
requestIdString是每次请求唯一标识,建议 UUID
vendorIdString否厂商唯一标识,与 botId 二选一
botIdString否设备唯一标识,与 vendorId 二选一
productIdString是产品唯一标识

返回 data:List<SystemRole>

字段类型说明
roleNameString系统角色名称
roleCodeString系统角色 code(等同 roleId,调用设备绑定角色接口时将该值传入 roleId)

A.4.2 自定义角色列表 ​

项目说明
URL/soulmate/role/customRole/list
方式POST

请求参数:requestId / vendorId / userId(均必填)。

完整 JSON 示例(点击展开)
plaintext
{
   "requestId": "xxx",
   "vendorId": "1",
   "userId": "12345"
}

返回 data:List<VendorRoleDto>。

VendorRoleDto 结构见 A.4.8的VendorRoleDto

A.4.3 自定义角色详情 ​

项目说明
URL/soulmate/role/customRole/get
方式POST

请求参数:requestId / vendorId / roleId(均必填)。

完整 JSON 示例(点击展开)
plaintext
{
   "requestId": "xxx",
   "vendorId": "1",
   "roleId": "xxxxx-1"
}

返回 data:VendorRoleDto。

VendorRoleDto 结构见 A.4.8的VendorRoleDto

A.4.4 自定义角色创建 ​

项目说明
URL/soulmate/role/customRole/save
方式POST

请求参数:

字段类型必填说明
requestIdString是请求追踪
vendorIdString是企业 id
userIdString是用户 id(空代表系统预制伙伴)
roleNameString是角色名
roleCodeString是系统角色编码,通过 §G.4.1 查询列表选取。设备绑定角色成功后,会以该自定义角色中 roleCode 对应的系统角色更新对话运行时上下文
timbreIdString否音色 id,不为空时角色被绑定后将以自定义音色为准(自定义角色 timbreId 优先于系统角色默认 timbreId)

返回 data:Bool(true 成功 / false 失败)。

⚠ 用户在企业产品维度下最多创建 10 个自定义角色。

A.4.5 自定义角色编辑 ​

项目说明
URL/soulmate/role/customRole/update
方式POST

请求参数:requestId / vendorId / roleId 必填;roleName / roleCode / timbreId 选填。

返回 data:Bool(true 成功 / false 失败)。

A.4.6 自定义角色删除 ​

项目说明
URL/soulmate/role/customRole/delete
方式POST

请求参数:requestId / vendorId / roleId(均必填)。

完整 JSON 示例(点击展开)
plaintext
{
   "requestId": "xxx",
   "vendorId": "xxx",
   "roleId": "xxxxx-1"
}

返回 data:Bool(true 成功 / false 失败)。

A.4.7 为设备绑定角色 ⭐ ​

角色不通过 WS 建连参数传入,改用此 HTTP 绑定接口(推荐方式)。

项目说明
URL/soulmate/role/botBindRole/save
方式POST

请求参数:

字段类型必填说明
requestIdString是请求追踪
vendorIdString是企业 id
botIdString是设备 id
roleIdString是角色编码。取值:1)系统角色 code(从 §G.4.1 列表选定);2)自定义角色 ID(从 §G.4.2 列表选定)
roleTypeString否SYSTEM 系统角色 / CUSTOM 自定义角色(不传默认 CUSTOM)

返回 data:Bool(true 成功 / false 失败)。

⚠ 旧方式 roleCode 建连参数不再推荐,新接入统一用绑定接口。 ⚠ 切换角色需重建 WebSocket 连接才能生效。

A.4.8 查询设备绑定角色 ​

项目说明
URL/soulmate/role/botBindRole/get
方式POST

请求参数:requestId / vendorId / botId(均必填)。

返回 data:VendorRoleDto

Class VendorRoleDto

字段类型说明
idLong数据 id(可忽略)
vendorIdString企业 id
userIdString用户 id
roleIdString角色(AI 伙伴)id
roleNameString角色名
roleCodeString系统角色编码
prologueString开场白
timbreIdString语音音色 id
langString语言偏好
enableInternetSearchString是否开启联网搜索
enableLongTermMemoryString是否开启长期记忆
ynInteger删除标识
createTimeDate创建时间
modifyTimeDate更新时间
roleTypeString角色类型(SYSTEM / CUSTOM)

A.4.9 修改用户昵称和设备称呼 ​

⚠ 特殊说明:需在 JoyInside 运营平台做相应配置,要求在全局人设(agentProfile)中必须使用 FreeMarker 模板语法引用设备称呼变量占位。平台配置若不含 ${agentName!"默认名称"} 占位符,通过接口修改设备称呼对该 App 完全无效,大模型始终用系统内置硬编码名称。

项目说明
URL/soulmate/role/nickName/update
方式POST

请求参数:

完整 JSON 示例(点击展开)
plaintext
{
    "botId":"xxxxx",
    "uid":"绑定用户id",
    "userNickname":"用户昵称",
    "equipmentName":"设备称呼"
}
字段类型必填说明
botIdString是设备 id
uidString是绑定用户 id
userNicknameString否用户昵称
equipmentNameString否设备称呼

返回 data:Bool(true 成功 / false 失败)。

A.4.10 查询用户昵称和设备称呼 ​

项目说明
URL/soulmate/role/nickName/get
方式POST

请求参数:requestId(选填)/ botId(必填)/ uid(选填)。

完整 JSON 示例(点击展开)
plaintext
{
    "requestId": "123456789",
    "botId":"xxxxx",
    "uid":"绑定用户id"
}

返回 data:NickNameResponse(botId / uid / userNickname / equipmentName)。

Class NickNameResponse

字段数据类型描述
botIdString设备 id
uidString用户 uid
userNicknameString用户昵称
equipmentNameString设备称呼
完整 JSON 示例(点击展开)
plaintext
{
    "state": "SUCCESS",
    "code": "ok",
    "result": null,
    "data": {
        "botId": "xxxxx",
        "uid": "86797745-12a9-4020-897b-aa55bb26c3bc",
        "userNickname": "小明",
        "equipmentName": "小joy"
    }
}

A.5 音色 ​

A.5.1 查询企业音色列表 ​

项目说明
URL/soulmate/timbre/findAllByVendorId
方式POST

请求参数:requestId / vendorId(均必填)。

完整 JSON 示例(点击展开)
plaintext
{
   "requestId": "xxx",
   "vendorId": "1"
}

返回 data:List<VendorTimbreDTO>(timbreId / voiceName)。

Class VendorTimbreDTO

字段数据类型描述
idLong数据 id(可忽略)
timbreIdString音色 id,后续保存、查询以此为准
voiceNameString音色名称

A.6 用户绑定 ​

设备绑定 uid 后,该设备对话归属到该用户,产生长期记忆与聊天报告。

A.6.1 绑定用户 ​

项目说明
URL/device/bindUser
方式POST

请求参数:requestId / botId / uid(均必填)。

字段数据类型是否必填备注
requestIdString是请求追踪
botIdString是设备 id
uidString是用户 id,关联长期记忆与聊天报告

返回 data:Boolean(true 绑定成功 / false 绑定失败)。

⚠ uid 关联长期记忆与聊天报告,必须与设备绑定用户保持一致。uid 规则(≤128 字节、必须真实)详见 4.3 核心参数总表。

A.6.2 查询设备绑定 uid ​

项目说明
URL/device/queryBotBind
方式POST

请求参数:requestId / botId(均必填)。

返回 data:String(uid)。

A.6.3 解绑用户 ​

项目说明
URL/device/unbindUser
方式POST

请求参数:requestId / botId / uid(均必填)/ deleteMemory(非必填)。

字段数据类型是否必填备注
requestIdString是请求追踪
botIdString是设备 id
uidString是用户 id,关联长期记忆与聊天报告
deleteMemoryBoolean否解绑时是否删除记忆,true 删除记忆 false 仅解绑

返回 data:Boolean(true 解绑成功 / false 解绑失败)。

⚠ 解绑影响设备长期记忆与聊天报告。

A.7 聊天记录与报告 ​

端侧获取聊天记录与报告数据,需要设备绑定用户(uid)后才能获取绑定用户的聊天数据记录。

A.7.1 获取聊天报告 ​

聊天报告生成周期采用 T+1 模式(即次日生成聊天报告),且需提前联系JoyInside 运营团队开启每日对话分析功能配置。每天9点之后,端侧如采用定时任务调用接口来获取报告。 时间点:9点,端侧最好做成可动态配置的时间点。

项目说明
URL/soulmate/chatReport/recentDays
方式POST

请求参数:

字段类型必填说明
requestIdString是请求追踪
botIdString是设备 id
recentDaysNumber是查询天数
uidString是用户 id(须与绑定用户一致)

返回 data:List<ChatReportDTO>(reportCode / date / contents / tipName / tipValue / publishTime)。

Class ChatReportDTO

字段数据类型描述
reportCodeString报告 code
botIdString设备 id
dateString生成时间
contentsList<Content>内容(name + value)
tipNameString提示名
tipValueString提示值
publishTimeLong发布时间戳

Class Content

字段数据类型描述
nameString内容名
valueString内容值

A.7.2 查询聊天记录 ​

查询设备/会话维度的对话记录,支持按设备维度查询近 90 天内的聊天记录。

项目说明
URL/soulmate/chatReport/chatMessage/page
方式POST

请求参数:requestId / vendorId 必填;botId 与 sn 二者至少填一个;startTime 必填(不能早于 90 天前)、endTime 选填;filterEmptyUserInput / filterEmptyModelOutput 必填;searchAfter(翻页游标)/ pageSize(默认 20,最大 500)/ deviceModel / uid / roleCode / includeAudioUrl 选填。

完整 JSON 示例(点击展开)
plaintext
{
    "requestId":"123456789",
    "vendorId":"1",
    "botId":"xxxxx",
    "startTime":1781625600000,
    "endTime":1781762520000,
    "pageSize":50,
    "filterEmptyUserInput":true,
    "filterEmptyModelOutput":true,
    "uid": "58997745-12a9-4020-897b-aa55bb26c3bc",
    "roleCode": "角色编码",
    "includeAudioUrl": true
}
字段类型必填说明
requestIdString是请求追踪
vendorIdLong是企业 id
botIdString否设备 id(与 sn 至少填一)
snString否设备 SN(与 botId 至少填一)
startTimeLong是开始时间戳(ms),不能早于 90 天前
endTimeLong否结束时间戳(默认当前)
filterEmptyUserInputBoolean是过滤空用户输入
filterEmptyModelOutputBoolean是过滤空模型输出
searchAfterList否翻页游标(首次不传)
pageSizeInteger否每页大小(默认 20,最大 500)
deviceModelString否设备型号
uidString否用户 id
roleCodeString否角色编码
includeAudioUrlBoolean否是否返回音频 URL,默认 false(不返回);传 true 时响应携带 inputAudioUrl/outputAudioUrl

返回 data:ChatMessagePageResult(data / total / hasNext / nextCursor)。

Class ChatMessagePageResult

字段数据类型描述
dataList<ChatMessageVO>当前页数据
totalLong总命中数(ES 默认最多统计 10000 条)
hasNextBoolean是否有下一页
nextCursorString下一页游标,翻页时回传

Class ChatMessageVO 字段:asrText / startTime / ttsText / ttsTime / botId / sn / productId / securityStatus / uid / roleCode / inputAudioUrl / outputAudioUrl / roundId。

字段数据类型描述
asrTextString用户说的话(ASR 识别结果)
startTimeLong对话开始时间(时间戳毫秒)
ttsTextString设备回复的话(TTS 文本)
ttsTimeLongTTS 请求时间(时间戳毫秒)
botIdString设备 ID
snString设备 SN
productIdString产品唯一标识
securityStatusInteger安全审核状态(0 通过,1 不通过)
uidString用户 id
roleCodeString角色编码
inputAudioUrlString用户语音输入音频 URL(includeAudioUrl=true 时返回,无音频时为 null)
outputAudioUrlString模型 TTS 输出音频 URL(includeAudioUrl=true 时返回,无音频时为 null)
roundIdString轮次ID
完整 JSON 示例(点击展开)
plaintext
{
    "state": "SUCCESS",
    "code": "0000",
    "msg": null,
    "data": {
        "data": [
            {
                "asrText": "内蒙古九十九号公路",
                "startTime": 1781751367274,
                "ttsText": "哇,内蒙古的九十九号公路超级壮观,沿途都是草原美景!京东618,咱们可以自驾去,一路欣赏风景,怎么样?",
                "ttsTime": null,
                "botId": "xxxxx",
                "sn": "conversation-robot-2781690038317",
                "productId": "11966",
                "securityStatus": null,
                "uid": "54567745-12a9-4020-897b-aa55bb26c3bc",
                "roleCode": "角色编码",
                "inputAudioUrl": "https://.../xxx.pcm",
                "outputAudioUrl": "https://.../xxx.pcm",
                "roundId": "f1c5b622-2ffe-4fd2-b0be-3974cf887a61_1789660799918"
            },
            {
                "asrText": "有大草原吗?",
                "startTime": 1781751354883,
                "ttsText": "当然有啦!可以去张家口的坝上草原,那里风景超美,还能骑马呢!京东618,要不要去感受一下?",
                "ttsTime": null,
                "botId": "xxxxx",
                "sn": "conversation-robot-2781690038317",
                "productId": "11966",
                "securityStatus": null,
                "uid": "54567745-12a9-4020-897b-aa55bb26c3bc",
                "roleCode": "角色编码",
                "inputAudioUrl": "https://.../xxx.pcm",
                "outputAudioUrl": "https://.../xxx.pcm",
                "roundId": "f1c5b622-2ffe-4fd2-b0be-3974cf887a61_1789660799918"
            }
        ],
        "total": 2,
        "hasNext": false,
        "nextCursor": null
    }
}

A.8 在线设备管理与插播 ​

A.8.1 查询用户在线设备 ​

查询用户(uid)在某厂商(vendorId)下的所有在线设备列表。

项目说明
URL/online/bot/query
方式POST

请求参数:vendorId / uid(均必填)。

字段数据类型是否必填备注
vendorIdString是企业 id
uidString是绑定用户 id

请求示例:

完整 JSON 示例(点击展开)
plaintext
{
  "vendorId": "1",
  "uid": "uid_test"
}

返回 data:List<BotOnlineDTO>(botId / uid / deviceId / sessionId / requestId / connectTime / updateTime / lastRoundStartTime / chatRoundCount / connectDuration / silenceDuration)。

Class BotOnlineDTO

字段数据类型备注
botIdString设备唯一标识
uidString关联用户 UID
vendorIdString业务方厂商唯一标识
deviceIdString设备 ID
sessionIdString当前会话 ID
requestIdString最近一次请求 ID(用于链路排查)
connectTimeLong设备连接建立时间(毫秒)
updateTimeLong数据最近更新时间(毫秒)
lastRoundStartTimeLong最后一次会话开始时间(毫秒)
chatRoundCountInteger会话轮数
connectDurationString连接时长(可读字符串,如 "1h23m")
silenceDurationString静默时长(可读字符串)

成功响应:

完整 JSON 示例(点击展开)
plaintext
{
  "state": "SUCCESS",
  "code": "0000",
  "msg": null,
  "data": [
    {
      "botId": "xxxxx",
      "uid": "xxxxx",
      "vendorId": null,
      "deviceId": "test-yy-langlangsha",
      "sessionId": "7d8fd31ddba44940b8ddb11f9e1485eb72864594-599f-4781-9537-dde54c7a794c",
      "requestId": "d6c079a7-9908-4517-ab74-134cc9aceb38",
      "connectTime": 1780072660495,
      "updateTime": 1780072675812,
      "lastRoundStartTime": 1780072675812,
      "chatRoundCount": 1,
      "connectDuration": null,
      "silenceDuration": null
    }
  ]
}

失败响应:

完整 JSON 示例(点击展开)
plaintext
{
  "state": "FAILURE",
  "code": "9999",
  "msg": null,
  "data": null
}

A.8.2 给在线设备插播一句话 ⭐ ​

项目说明
URL/online/bot/broadcast/instant
方式POST

请求参数:

字段类型必填说明
vendorIdString是企业 id
botIdString是设备标识
textString是待播放文本(≤500 字符)
playStrategyString是INTERRUPT(强制打断)/ WAIT_IDLE(等空闲)
maxWaitMsLong否WAIT_IDLE 等待上限(默认 10000,硬上限 60000)
bizTagString否业务标识(监控分桶)
bizRequestIdString否幂等 ID(建议 UUID)

PlayStrategy 枚举:

策略行为
INTERRUPT强制打断当前 AI 回复后立即播放。全链路秒级,不阻塞 Provider 线程
WAIT_IDLE同步等待进行中对话完成后插播,等待最大时间 maxWaitMs

⚠ WAIT_IDLE 策略同步阻塞整个等待窗口,调用方需保证 HTTP 超时充足。

请求示例:

完整 JSON 示例(点击展开)
plaintext
{
  "vendorId": "1",
  "botId": "xxxxx",
  "text": "您好,有什么可以帮您的?",
  "playStrategy": "INTERRUPT",
  "bizTag": "demo_scene",
  "bizRequestId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}

返回 data:BroadcastInstantVO(taskId / pushed / abortReason)。

Class BroadcastInstantVO

字段数据类型备注
taskIdString任务唯一标识,便于追踪/查询(成功时不为空)
pushedBoolean是否成功推送(true=已下发或已开始下发;false=被中止/未下发)
abortReasonString未成功推送时的原因(成功时为 null)

成功响应:

完整 JSON 示例(点击展开)
plaintext
{
  "state": "SUCCESS",
  "code": "0000",
  "msg": null,
  "data": {
    "taskId": "021a41e5d42143a98eaa0b10f4b2d2bd",
    "pushed": true,
    "abortReason": null
  }
}

失败响应:

完整 JSON 示例(点击展开)
plaintext
{
  "state": "FAILURE",
  "code": "9999",
  "msg": null,
  "data": {
    "taskId": null,
    "pushed": false,
    "abortReason": "instant-wait-idle-timeout"
  }
}

A.9 视觉对话 — 图像上报 ​

项目说明
URL/vision/client/image/report
方式POST
鉴权Authorization: Bearer ${accessToken}

请求参数:

字段类型必填说明
requestIdString是请求追踪
botIdString是设备标识
productIdString是产品唯一标识
sessionIdString是当前 WebSocket 会话 ID(必须一致)
imgBase64String是图像 Base64(JPEG)
frameTimestampLong是采集时间戳(ms)

返回:state + code(0000 成功)。

请求/响应示例(点击展开)

请求示例:

json
{
  "requestId": "1",
  "botId": "xxxxx",
  "productId": "1",
  "sessionId": "12345678",
  "imgBase64": "imgBase64==",
  "frameTimestamp": 1761899917136
}

响应示例:

json
{
  "state": "SUCCESS",
  "code": "0000",
  "data": null
}

⚠ sessionId 必须与 WebSocket 建连时一致,否则图像无法关联到对话上下文。详见 6.6 视觉对话

A.10 网易云音乐账号绑定 ​

需要使用网易云音乐资源时,通过以下接口完成用户 OAuth 绑定与设备赋权。详见 网易云账号绑定 API

A.10.1 获取 H5 登录配置 ​

项目说明
URL/soulmate/wyy/getWyyH5LoginConfig
方式POST

请求参数:requestId / vendorId / uid / h5Token(均必填)。

返回 data:WyyH5LoginConfigDto(clientId / state / clientType / redirectUrl)。

A.10.2 获取 H5 登录结果(轮询) ​

项目说明
URL/soulmate/wyy/getWyyH5LoginResult
方式POST

请求参数:requestId / vendorId / state(均必填)。

返回 data:Boolean(是否已完成绑定)。

A.10.3 获取账号用户信息 ​

项目说明
URL/soulmate/wyy/getWyyAccountUser
方式POST

请求参数:requestId / vendorId / uid(均必填)。

返回 data:WyyAccountUserDto(nickname / avatarUrl / gender / vipDetail 等)。

A.10.4 解绑网易云账号 ​

项目说明
URL/soulmate/wyy/unbindWyyAccount
方式POST

请求参数:requestId / vendorId / uid(均必填)。

返回 data:Boolean。

A.10.5 获取已绑定设备列表 ​

项目说明
URL/soulmate/wyy/getWyyAccountBotList
方式POST

请求参数:requestId / vendorId / uid(均必填)。

返回 data:List<ResourceAccountBotDto>(botId / accountId / bindId 等)。

A.10.6 绑定设备 ​

项目说明
URL/soulmate/wyy/bindBotWyyAccount
方式POST

请求参数:requestId / vendorId / uid / botIdList(均必填)。

返回 data:Boolean。

A.10.7 解绑设备 ​

项目说明
URL/soulmate/wyy/unbindBotWyyAccount
方式POST

请求参数:requestId / vendorId / uid / botIdList(均必填)。

返回 data:Boolean。

网易云专用错误码:

code说明
ok成功
500参数 / 服务端逻辑异常
1001未绑定网易云账号
1002绑定的网易云账号已过期

A.11 接口一览表 ​

#接口用途详见
1/auth/getToken签名换 Token§A.2.1
2/auth/refreshToken刷新 Token§A.2.2
3/device/register设备注册§A.3.1
4/device/list设备列表§A.3.2
5/device/removeCloneTimbre移除设备克隆音色§A.3.3
6/soulmate/timbre/ttsPlayV2音色试听§A.3.4
7/agent/roles/query系统角色列表§A.4.1
8/soulmate/role/customRole/list自定义角色列表§A.4.2
9/soulmate/role/customRole/get自定义角色详情§A.4.3
10/soulmate/role/customRole/save创建自定义角色§A.4.4
11/soulmate/role/customRole/update编辑自定义角色§A.4.5
12/soulmate/role/customRole/delete删除自定义角色§A.4.6
13/soulmate/role/botBindRole/save设备绑定角色§A.4.7
14/soulmate/role/botBindRole/get查询绑定角色§A.4.8
15/soulmate/role/nickName/update修改用户昵称和设备称呼§A.4.9
16/soulmate/role/nickName/get查询用户昵称和设备称呼§A.4.10
17/soulmate/timbre/findAllByVendorId音色列表§A.5.1
18/device/bindUser绑定用户§A.6.1
19/device/queryBotBind查询绑定 uid§A.6.2
20/device/unbindUser解绑用户§A.6.3
21/soulmate/chatReport/recentDays聊天报告§A.7.1
22/soulmate/chatReport/chatMessage/page聊天记录§A.7.2
23/online/bot/query在线设备查询§A.8.1
24/online/bot/broadcast/instant设备插播§A.8.2
25/vision/client/image/report视觉图像上报§A.9
26/soulmate/wyy/getWyyH5LoginConfig网易云登录配置§A.10.1
27/soulmate/wyy/getWyyH5LoginResult网易云登录结果§A.10.2
28/soulmate/wyy/getWyyAccountUser网易云账号信息§A.10.3
29/soulmate/wyy/unbindWyyAccount解绑网易云账号§A.10.4
30/soulmate/wyy/getWyyAccountBotList网易云已绑设备§A.10.5
31/soulmate/wyy/bindBotWyyAccount网易云绑设备§A.10.6
32/soulmate/wyy/unbindBotWyyAccount网易云解绑设备§A.10.7