Skip to main content

WebSocket服务

所有WebSocket连接都需要有效的访问令牌。连接建立后使用JSON-RPC 2.0协议进行通信。

WebSocket功能概述

WebSocket服务提供实时双向通信功能,支持:
  • 用户级别的消息推送
  • 应用级别的消息订阅
  • 硬件设备的实时控制
  • 流式响应和工具调用

JSON-RPC协议

消息格式说明

所有WebSocket消息都遵循JSON-RPC 2.0协议格式:

请求消息格式

{
  "jsonrpc": "2.0",
  "method": "方法名",
  "params": {
    "key": "value"
  },
  "id": "请求ID"
}

响应消息格式

{
  "jsonrpc": "2.0",
  "result": {
    "code": 200,
    "data": {},
    "message": "成功"
  },
  "id": "请求ID"
}

通知消息格式

{
  "jsonrpc": "2.0",
  "method": "_notify",
  "params": {
    "type": "通知类型",
    "data": {}
  }
}

错误响应格式

{
  "jsonrpc": "2.0",
  "error": {
    "code": -32600,
    "message": "错误信息",
    "data": "错误详情"
  },
  "id": "请求ID"
}

用户WebSocket

/v3/wss
用户级别的WebSocket连接,支持消息推送和对话管理。

连接地址

ws://api.wainao.ai/v3/wss?token=您的访问令牌

查询参数

参数名类型必选说明
tokenstring用户访问令牌
convIdstring对话ID
const ws = new WebSocket('ws://api.wainao.ai/v3/wss?token=您的访问令牌');

ws.onopen = () => {
  console.log('连接已建立');
  // 发送心跳
  ws.send('ping');
};

ws.onmessage = (event) => {
  if (event.data === 'pong') {
    console.log('收到心跳响应');
    return;
  }
  const message = JSON.parse(event.data);
  console.log('收到消息:', message);
};
用户WebSocket支持以下功能:
  • 切换对话和设备(hardwares.switchConvId)
  • 接收消息推送(_notify)
  • 流式响应处理
  • 工具调用响应

错误码说明

错误码说明
1000正常关闭
1001服务端关闭
1002协议错误
1003数据类型错误
4401未授权访问

应用WebSocket

/v3/wss/{appId}/{toolId}
应用级别的WebSocket连接,支持应用间通信和工具调用。

路径参数

参数名类型必选说明
appIdstring应用ID
toolIdstring工具ID

连接地址

ws://api.wainao.ai/v3/wss/{appId}/{toolId}?token=您的应用令牌
const ws = new WebSocket('ws://api.wainao.ai/v3/wss/app123/tool456?token=您的应用令牌');

ws.onopen = () => {
  // 发送Redis操作请求
  ws.send(JSON.stringify({
    jsonrpc: "2.0",
    method: "redis.set",
    params: {
      key: "myKey",
      value: "myValue"
    },
    id: "set123"
  }));
};
应用WebSocket支持以下操作:
  • Redis数据操作(get/set)
  • 消息发布订阅(publish/subscribe)
  • 工具调用和响应

支持的方法

方法名说明
redis.get获取Redis数据
redis.set设置Redis数据
redis.publish发布消息
subscribe订阅消息

错误码说明

错误码说明
4401未授权访问
4000未知错误
-32600无效请求
-32601方法未找到

硬件WebSocket

/v3/wss/{hdId}
硬件设备的WebSocket连接,支持设备控制和状态同步。

路径参数

参数名类型必选说明
hdIdstring硬件设备ID

连接地址

ws://api.wainao.ai/v3/wss/{hdId}?token=您的设备令牌
const ws = new WebSocket('ws://api.wainao.ai/v3/wss/device123?token=您的设备令牌');

ws.onopen = () => {
  // 发送设备状态
  ws.send(JSON.stringify({
    jsonrpc: "2.0",
    method: "device.status",
    params: {
      status: "online",
      battery: 80
    },
    id: "status123"
  }));
};
硬件WebSocket连接会自动关联到最后一个活跃的对话。如需切换对话,请使用hardwares.switchConvId方法。

错误码说明

错误码说明
1000正常关闭
1001设备离线
1002协议错误
1003数据类型错误
4401未授权访问

WebSocket最佳实践

  • 保持定期的心跳检测(ping/pong)
  • 正确处理重连逻辑
  • 使用try-catch处理JSON解析错误
  • 注意处理流式响应的数据拼接
  • 在连接关闭时清理相关资源