Skip to content

机器人对接协议V1.0.4

1. 接口说明

1.1 概述

为方便各种智能设备对机器人平台,制定标准的接入规范,特撰写该文档,帮助研发人员快速开展工作。

1.2 基本规则

  • 设备通过 HTTP 对接平台,上下行消息响应的超时,时间为 30 秒。
  • 接入用户通过分配:AK,SK,完成身份认证:数字、大小写字母组成,长度不超过 32。
  • 本协议为机器人平台通用定义,需根据自身能力实现对应部分。

1.3 签名校验值说明

签名校验值的计算方式为:签名检验值 = SHA256(ak + sk + timestamp + nonce)

如 ak:ak,sk:sk ,timestamp: 1652428470,nonce: 12AKz789 SHA256(aksk165242847012AKz789),值为:ee5c4cbef3ccb944dc4472c44364120235307f56ae37e121d19dcc43d6a153d7

1.3.1 认证 Header 公共参数

以 x-onewo-* 的形式放在 Header 中

参数名称说明
x-onewo-akAccess Key ID
x-onewo-nonce八位随机数(0-9 a-z A-Z)如:12AKz789
x-onewo-timestamptimestamp:时间戳,精确到秒,与服务器时间相差不能大于 120 秒
x-onewo-sign安全签名,签名检验值 SHA256(ak+sk+timestamp+nonce)

2. 协议定义

2.1 查询地图接口

接口功能

根据机器人 ID 查询该机器人支持的地图数量和详情

调用方法

POST

接口路径

http://server:port/api/robot/map/query

注意事项

  • 机器人 ID 为必填唯一标识
  • 返回结果中包含地图所属场景、创建信息等核心字段

参数说明

参数必选/可选类型位置描述
robotId必选Stringbody机器人唯一标识,示例:1924706921705771012

返回结果

字段类型必选/可选位置描述
codeint必选body0 为成功,参照附录A
dataArraybody地图列表数据
cityString可选data地图所属城市
createByString可选data创建人 ID
createTimeStringdata创建时间,格式:yyyy-MM-dd HH:mm:ss
idString必选data地图 ID
robotCountint必选data支持该地图的机器人数量
sceneLabelString可选data场景标签
sceneNameString可选data场景名称
sceneTypeString可选data场景类型(如:小区)
serialNumbersString可选data设备序列号
tenantIdString可选data租户 ID
tenantNameString可选data租户名称
updateByString可选data更新人 ID
updateTimeStringdata更新时间,格式:yyyy-MM-dd HH:mm:ss

消息示例

Request body:

json
{
  "robotId": "1924706921705771012"
}

Response body:

json
{
  "code": 0,
  "data": [
    {
      "city": "青岛",
      "createBy": "1",
      "createTime": "2025-04-15 18:01:13",
      "id": "1",
      "robotCount": 1,
      "sceneLabel": "魅力新城1期",
      "sceneName": "test67",
      "sceneType": "小区",
      "serialNumbers": "LGMCABHB4R1000067",
      "tenantId": "123",
      "tenantName": "青岛-魅力新城1期",
      "updateBy": "1",
      "updateTime": "2025-11-12 13:43:35"
    }
  ]
}

2.2 查询作业区域

接口功能

根据机器人 ID 和地图 ID 返回作业区域

调用方法

POST

接口路径

http://server:port/api/robot/work-areas/query

注意事项

  • 需同时传入机器人 ID 和地图 ID,二者为关联查询核心参数

参数说明

参数必选/可选类型位置描述
robotId必选Stringbody机器人唯一标识
mapId必选Stringbody地图 ID(场景名称),示例:test67

返回结果

字段类型位置描述
codeintbody0 为成功,参照附录A
dataArraybody线路列表数据
createTimeStringdata创建时间,格式:yyyy-MM-dd HH:mm:ss
areaIdStringdata区域 ID
areaNameStringdata区域名称

消息示例

Request body:

json
{
  "robotId": "1924706921705771012",
  "mapId": "test67"
}

Response body:

json
{
  "code": 0,
  "data": [
    {
      "createTime": "2025-11-27 11:16:21",
      "areaId": "26697",
      "areaName": "创智云演示1_fusion"
    },
    {
      "createTime": "2025-11-27 11:16:21",
      "areaId": "26698",
      "areaName": "演示1_fusion"
    }
  ]
}

2.3 查询排班任务

接口功能

查询某段时间范围内排班任务

调用方法

POST

接口路径

http://server:port/api/robot/query/tasks

注意事项

  • 需提前确认地图 ID 和线路 ID 的有效性
  • 默认巡逻模式为无限循环,无圈数限制

参数说明

参数必选/可选类型位置描述
robotId必选Stringbody机器人唯一标识
startDateTime必选Stringbody地图 ID,示例:2025-12-11 11:21:00
endDateTime必选Stringbody线路 ID,示例:2025-12-11 15:21:00

返回结果

字段类型位置描述
codeintbody0 为成功,参照附录A
dataarraybody
taskIdStringString任务ID
mapIdStringStringMapID
planDateTimeStringdata计划开始时间:2025-12-11 15:21:00
areaListdatadata区域列表
areaIdStringareaList区域ID
areaNameStringareaList区域名

消息示例

Request body:

json
{
  "robotId": "1924706921705771012",
  "startDateTime": "2025-12-11 11:21:00",
  "endDateTime": "2025-12-11 11:21:00"
}

Response body:

json
{
  "code": 0,
  "data": [
    {
      "taskId": "cb2b59b0-eee6-11f0-bd2b-dd74bb160049",
      "mapId": "aea1111a-a1f3-4a30-8421-888f8ce8b51e",
      "planDateTime": "2025-12-11 15:21:00",
      "areaList": [
        {
          "areaId": "1",
          "areaName": "监控区"
        },
        {
          "areaId": "2",
          "areaName": "麦当劳"
        },
        {
          "areaId": "3",
          "areaName": "tower1"
        },
        {
          "areaId": "4",
          "areaName": "楼栋后道"
        }
      ]
    },
    {
      "taskId": "d87e2310-8a5c-4789-b12e-9876543210ab",
      "mapId": "b822222b-b2f4-5b41-9522-999g8df9662f",
      "planDateTime": "2025-12-12 09:30:00",
      "areaList": [
        {
          "areaId": "5",
          "areaName": "美宜家"
        },
        {
          "areaId": "6",
          "areaName": "垃圾测试区"
        }
      ]
    }
  ],
  "msg": "SUCCESS"
}

2.4 启动与停止接口

接口功能

通过 control 参数控制机器的启动和停止状态

调用方法

POST

接口路径

http://server:port/api/robot/control/startstop

注意事项

  • control 参数取值:1 = 启动,0 = 停止

参数说明

参数必选/可选类型位置描述
robotId必选Stringbody机器人唯一标识
control必选intbody控制状态(1 = 启动,0 = 停止)
taskId必选Stringbody任务id

返回结果

字段类型位置描述
codeintbody0 为成功,参照附录A
msgStringbody状态码描述

消息示例

Request body:

json
{
  "robotId": "1924706921705771012",
  "taskId": "1924706921705",
  "control": 1
}

Response body:

json
{
  "code": 0,
  "msg": "SUCCESS"
}

2.5 返航与充电接口

接口功能

通过 taskMode 参数控制机器人返航到充电桩

调用方法

POST

接口路径

http://server:port/api/robot/task/returncharge

注意事项

  • taskMode=4 固定为返航充电指令

参数说明

参数必选/可选类型位置描述
robotId必选Stringbody机器人唯一标识,示例:1924706921705771000
taskMode必选intbody任务模式(4 = 返航充电)

返回结果

字段类型位置描述
codeintbody0 为成功,参照附录A
msgstringbody状态码描述(0 表示无异常)

消息示例

Request body:

json
{
  "robotId": 1924706921705771000,
  "taskMode": 4
}

Response body:

json
{
  "code": 0,
  "msg": "SUCCESS"
}

2.6 状态事件查询与推送接口

接口功能

实时查询或推送机器的运行状态、位置、任务执行情况等核心信息

调用方法

POST(查询)/ Push(推送)

接口路径

  • 查询路径:http://server:port/api/robot/status/query
  • 推送路径:http://server:port/api/robot/event/statuspush(采用 WebSocket/MQ 方式)

注意事项

  • 包含位置信息、任务信息、设备状态三大核心模块
  • 经纬度、姿态角等参数为实时定位数据
  • 鉴权和其他接口一致

查询参数

参数必选/可选类型位置描述
robotId必选Stringbody机器人唯一标识

返回/推送结果

字段类型必选/可选位置描述
codeint必选body0 成功
bidStringbody业务 ID
tsStringbody数据时间戳,格式:yyyy-MM-dd HH:mm:ss
locationInfoObjectdata位置信息
latitudedouble必选locationInfo纬度
longitudedouble必选locationInfo经度
xdouble必选body地图 x 坐标
ydouble必选body地图 y 坐标
heightdouble可选locationInfo高度
pitchdouble可选locationInfo俯仰角
rolldouble可选locationInfo横滚角
yawdouble可选locationInfo偏航角
rtkStatusint可选locationInfoRTK 状态
rtkVeldouble可选locationInfoRTK 速度
taskInfoObject可选data任务信息(可能存在无任务状态)
taskIdObject必选data任务ID
businessStatusint必选taskInfo业务状态:0未知,1取消,2开始,3暂停 4 结束
mapNameString必选taskInfo当前地图名称
curKeypointNameString可选taskInfo当前关键点名称
nextKeypointNameString可选taskInfo下一个关键点名称
allAlarmCountint可选taskInfo总报警次数
businessRemainTimedouble可选taskInfo剩余运行时间(秒)
vehicleInfoObjectdata设备信息
socEnergyint必选vehicleInfo剩余电量(%)
speeddouble可选vehicleInfo当前速度
statusint必选vehicleInfo设备状态(1:正常运行、0:离线)
batteryStatusint必选vehicleInfo0:IDLE(空闲)、1:CHARGING(充电中)、2:CHARGE_FULL(充满电)、3:CHARGE_ERROR_CONTACT(充电连接异常)、4:CHARGE_ERROR_ELECTRIC(电流异常)、5:ERROR_BATTERY_PACK_COMM(通讯异常)、6:ERROR_OVER_VOLT(电压异常)、7:ERROR_OVER_ELECTRIC(电流异常)、8:ERROR_OVER_TEMPERATURE(温度异常)、9:ERROR_OVER_TIME(超时异常)
serialNumberString可选vehicleInfo设备序列号

消息示例

查询 Request body:

json
{
  "robotId": "1924706921705771012"
}

返回/推送 Response body:

json
{
  "code": 0,
  "bid": "305502",
  "data": {
    "locationInfo": {
      "diffAgeTime": -999,
      "gnssSateNum": 0,
      "height": 16.630322911104443,
      "inspvaxDeviation": "0.030443",
      "inspvaxStatus": "INS_ALIGNMENT_COMPLETE&INS_RTKFLOAT",
      "latitude": 36.28666815758092,
      "longitude": 120.39769443553882,
      "pitch": 1.9935941906465906,
      "roll": -5.101920388666848,
      "rtkStatus": 6,
      "rtkVel": 0.0,
      "rtkVelDirection": 0.0,
      "slaveAntGnssQuality": -999,
      "x": 266287.88528354245,
      "y": 4018887.2495166436,
      "yaw": 273.2594422053095,
      "z": 16.630322911104443
    },
    "taskInfo": {
      "alarmCaptureDangersCount": 0,
      "alarmCaptureIllegalCount": 0,
      "alarmCaptureKeypointCount": 0,
      "alarmCapturePersonCount": 21,
      "alarmCaptureVehicleCount": 176,
      "alarmEmergencyStopCount": 0,
      "alarmShoutCount": 0,
      "alarmSosCount": 0,
      "allAlarmCount": 197,
      "businessAllPowerConsumption": 257.3809110000075,
      "businessCompletionPercent": 0.0,
      "businessFinishTime": 1758156674442,
      "businessMode": 5,
      "businessPowerConsumption": 0.0,
      "businessRemainTime": 80150.93,
      "businessRunningTime": 26506.0,
      "businessStartTime": 1758130169000,
      "businessStatus": 2,
      "businessTaskName": "",
      "businessTotalMileage": 0.0,
      "controlMode": 0,
      "curKeypointIndex": 1228,
      "curKeypointName": "进车库道闸",
      "curPatrolPointIndex": -1,
      "curPlanedPatrol": "",
      "globalPathIndex": -1,
      "isArrivePatrolPoint": false,
      "isPatrolPointActionFinish": false,
      "loops": 0,
      "mapName": "魅力新城1期北侧全覆盖巡逻_fusion",
      "mapRecordMapName": "",
      "mapRecordMapSceneName": "",
      "mapVersion": "2_0_0",
      "nextKeypointIndex": 1663,
      "nextKeypointName": "3楼-3消174垃",
      "preKeypointIndex": 145,
      "preKeypointName": "起点",
      "prePlanedPatrol": "",
      "sceneId": "test67",
      "takeoverCount": 0,
      "taskEndSoc": 0,
      "taskId": "LGMCABHB4R1000067_20250918012759",
      "taskStartSoc": 0
    },
    "vehicleInfo": {
      "alarmCodes": "",
      "alarmLevels": "",
      "alarmNames": "",
      "alarmStatus": "0",
      "batteryStatus": 0,
      "cameraPtk": "{\"ptk_focus\":\"291.310000\",\"ptk_vertical\":\"0.000000\",\"camera_ptk_20250918085114\":\"open\",\"ptk_horizontal\":\"180.000000\",\"ptk_zoom\":\"0.000000\"}",
      "capture": 0,
      "deviceId": 403,
      "emergencyStop": 0,
      "firmwareVersion": "{\"system\":\"\",\"business\":\"\",\"decision\":\"\",\"selfdriving\":\"\",\"control\":\"\",\"communication\":\"\",\"perception\":\"\"}",
      "frontLight": 0,
      "gear": 1,
      "lowBatteryStatus": 0,
      "mileageDevActivation": 859.0,
      "mileagePowerOn": "31.0",
      "net4gDelay": "0",
      "net4gLoss": "103.670",
      "obstacleStatus": 0,
      "productId": 156,
      "rainMode": 0,
      "serialNumber": "LGMCABHB4R1000067",
      "slideBarMode": 0,
      "socAmpere": 2.6,
      "socEnergy": 99,
      "socVoltage": 2.6,
      "speaker": 1.0,
      "speed": 0.0,
      "status": 1,
      "steerAngle": 0.019999999552965164,
      "tenantId": 1,
      "timeDevActivation": 2419.0,
      "timePowerOn": "85.3",
      "timePowerOnTimestamp": 1757849519000,
      "userId": 1,
      "vehicleRunningMode": 0,
      "warnLight": 0,
      "warnVoice": 0
    }
  },
  "ts": "2025-09-18 08:51:14"
}

2.7 定点清洁任务

接口功能

指定目标坐标后,机器人从当前位置移动到目标点位,进行清扫任务

调用方法

POST

接口路径

http://server:port/api/robot/move/pointtopoint

注意事项

  • x/y 为目标点位的平面坐标,需与当前地图坐标系一致

参数说明

参数必选/可选类型位置描述
robotId必选Stringbody机器人唯一标识,示例:1996406593067028517
mapId必选Stringbody当前地图 ID,示例:26791
x必选Stringbody目标点位 X 坐标,示例:1.2564
y必选Stringbody目标点位 Y 坐标,示例:-2.4973
radius可选Floatbody作业半径,单位米

返回结果

字段类型位置描述
codeintbody0 为成功,参照附录A
dataObjectbody
taskIdStringData任务ID
statusIntData0未知,1取消,2开始,3暂停 4 结束
msgStringbody状态码描述

消息示例

Request body:

json
{
  "robotId": 1996406593067028517,
  "sourceMapId": "26791",
  "x": 1.2564,
  "y": -2.4973,
  "radius": 25.0
}

Response body:

json
{
  "code": 0,
  "data": {
    "taskId": "122331244",
    "status": 0
  },
  "msg": "SUCCESS"
}

2.8 作业计划排班配置

接口功能

配置机器人作业计划的排班规则,包括重复类型、执行时间及生效日期范围。

2.9 文件上传下载说明

此部分主要描述文件的传输认证。本文档涉及到的图片上传和下载、日志文件上传,均需要增加认证信息在 HTTP Header 中。

2.9.1 上传路径生成规则

上传路径为:{ossPreUrl}/{resource}/

ossPreUrl:获取配置中 ossPreUrl 值

/{resource}/{action} 为:resource 对应业务的值。如果值不存在,置为 unknown 字符串。action 1 表示上传

如:上传拍照,resource:capture,action:1。假设 ossPreUrl 值为:https://xxx.com/upload/

上传的路径为:https://xxx.com/upload/capture/1

2.9.2 文件上传请求示例

bash
curl --location --request POST 'https://***com/v1/uploadFile4Device/10/pass/1' \
--header 'x-onewo-nonce: ***456' \
--header 'x-onewo-timestamp: 1656657073' \
--header 'x-onewo-ak: ***99' \
--header 'x-onewo-sign: afa3bdb72cc421e85c0d5b730b889fea0975bceac8d85c46e7***' \
--form 'image=@"******.jpg"'

返回:

json
{
  "code": 0,
  "msg": "上传成功",
  "data": "capture/20220722/daddf1637894c54d3d9643e286ef040e"
}

2.10 查询清洁任务状态

接口功能

进行清扫任务的任务状态查询

调用方法

POST

接口路径

http://server:port/api/robot/move/pointtopoint/status

注意事项

参数说明

参数必选/可选类型位置描述
robotId必选Stringbody机器人唯一标识
taskId必选Stringbody任务id

返回结果

字段类型位置描述
codeintbody0 为成功,参照附录A
dataObjectbody
taskIdStringData任务ID
statusIntData0未知,1取消,2开始,3暂停 4 结束
msgStringbody状态码描述

消息示例

Request body:

json
{
  "robotId": 1996406593067028517,
  "taskId": "26791"
}

Response body:

json
{
  "code": 0,
  "data": {
    "taskId": "122331244",
    "status": 0
  },
  "msg": "SUCCESS"
}

附录A

A.1 编码规则说明

共用编码

0 为正常,其他为异常

0-999 为所有子系统共用编码

100-199 用于指定客户端应相应的某些动作。

400-499 用于指出客户端的错误。

500-599 用于支持服务器错误。

业务系统编码

业务系统编码共六位格式如:100000

一到二位即 10-99 各业务系统编码 10: 扫地机器人 11:巡检机器人 12:梯控

三位表示异常类型级别 0-9 值越大表示异常越严重

4-6位各业务系统内部定义编码

如:104000 机器人ID错误。10(1-2位)表示机器人编码、4(第三位)表示异常等级、000(4-6位)表示业务系统自定义编码

A.2 编码分类

编码大类编码说明
共用编码0成功
-1失败
401未授权
402sign签名验证失败,x-onewo-timestamp或AK或SK错误,验证失败
403禁止访问
404服务未找到,command或resource或action错误
405发送超时
406设备未在线
407权限异常
413body超长
414JSON格式不合法
415时间异常
500服务内部异常错误
502Bad Gateway
503服务不可用(无此服务)
600未登陆(token过期)
602用户或密码错误
603登陆验证受限制
扫地机器人104000机器人ID错误
101001照片不合规
107002子系统未在线
104003用户不存在
104500子系统异常
104501空间参数错误
104502前端软件接口异常