Skip to content

机器人平台-应用侧对接协议v1.0.1

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

拼接字符串:aksk165242847012AKz789

SHA256 值:ee5c4cbef3ccb944dc4472c44364120235307f56ae37e121d19dcc43d6a153d7

1.4 认证 Header 公共参数

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

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

2. 协议定义

2.1 边缘巡检告警推送接口

接口功能

边缘巡检模块生成告警数据后,将完整告警信息推送至下游系统,实现告警数据同步与流转。

调用方法

POST

接口路径

接收方提供

注意事项

  • 接口返回的告警图片仅保留一个月,接收方需及时将图片转存至自身服务器。
  • createTime 字段暂不启用,无需关注该字段传值。
  • sceneName 字段取值需严格对照附录 3.1,不可自定义场景名称。
  • 请求报文需为标准 JSON 格式,嵌套字段需符合规范。

参数说明

参数必选/可选类型位置描述备注
alarmIdStringbody告警ID全局唯一
projectIdStringbody项目ID-
projectNameStringbody项目名称-
deviceIdStringbody设备UUID-
deviceNameStringbody设备名称-
warnImageUrlStringbody告警图片地址-
imageUrlStringbody原图地址-
sceneIdStringbody告警场景ID-
sceneNameStringbody告警场景名称见附录3.1
starIgnoreTimeStringbody开始告警时间格式:yyyy-MM-dd HH:mm:ss
createTimeStringbody结束告警时间暂不启用
positionArrayListbody框图所画位置嵌套坐标集合
bboxArrayList<BboxInfo>body告警BBox信息嵌套对象数组
stateStringbody告警状态ALARM_START/ALARMING/ALARM_END/NORMAL
chineseSceneNameStringbody场景中文名称-
gpsStringbody经度,纬度逗号分隔
keypointStringbody关键点位名称-
zhantuSpaceCodeStringbody战图空间点位编码-

BboxInfo 嵌套字段说明

字段必选/可选类型位置描述备注
engTagStringbody标签-英文-
chnTagStringbody标签-中文-
scoreStringbody分数置信度
positionArrayListbody坐标-

返回结果

字段类型位置描述
codeintbody0 为成功,非0为失败
msgStringbody处理结果描述

消息示例

Request body:

json
{
  "alarmId": "432604168089669",
  "bbox": [
    {
      "chnTag": "消防通道违停",
      "engTag": "Car",
      "position": [
        0.012728929531249999,
        0.28518442708333338,
        0.23027399375,
        0.4383471515151515
      ],
      "score": "0.889041424"
    }
  ],
  "createTime": "2023-06-26 14:58:30",
  "deviceId": "2306f168-fa06-4359-a888-5209a757dc4d",
  "deviceName": "8号岗亭外通道球机摄像机G",
  "imageUrl": "https://edge-p*****.cn-south-1.myhuaweicloud.com:443/sourceImage_2306f168-fa06-4359-a888-5209a757dc4d_%E6%B6%88%E9%98%B2%E9%80%9A%E9%81%93%E8%BF%9D%E5%81%9C_20230626145829.jpg",
  "position": [
    [
      [0.3465909090909091, 0.25],
      [0.7954545454545454, 0.25],
      [0.9375, 0.3263888888888889],
      [0.9119318181818182, 0.4548611111111111],
      [0.7826704545454546, 0.4774305555555556],
      [0.6818181818181818, 0.3645833333333333],
      [0.25426136363636367, 0.3524305555555556],
      [0.25426136363636367, 0.3524305555555556]
    ],
    [
      [0.029829545454545457, 0.3611111111111111],
      [0.03551136363636364, 0.4722222222222222],
      [0.26704545454545455, 0.4010416666666667],
      [0.25, 0.3090277777777778]
    ]
  ],
  "projectId": "44030021",
  "projectName": "深*****城",
  "sceneId": "4",
  "sceneName": "PARKING",
  "starIgnoreTime": "2023-06-26 12:10:53",
  "state": "ALARMING",
  "warnImageUrl": "https://edge-p*****.cn-south-1.myhuaweicloud.com:443/warnImage_2306f168-fa06-4359-a888-5209a757dc4d_%E6%B6%88%E9%98%B2%E9%80%9A%E9%81%93%E8%BF%9D%E5%81%9C_20230626145829.jpg"
}

Response body:

json
{
  "code": 0,
  "msg": "告警数据接收成功"
}

2.2 临时调度机器人接口

接口功能

接收 IOC 系统下发的机器人临时调度指令,解析请求参数并封装为任务参数,转发至业务服务执行调度任务。

调用方法

POST

接口路径

/api/robot/tmpWork

注意事项

  • position 为坐标数组,必须为 Double 类型数值,不可为空。
  • projectCode 参数从系统配置自动获取,无需请求方传入。
  • 请求报文需为标准 JSON 格式,否则解析失败。

参数说明

参数必选/可选类型位置描述
position可选Array<Double>body机器人目标坐标数组
equipmentId必选Stringbody设备唯一标识
warnPicUrl可选Stringbody告警图片访问地址
incidentId必选Stringbody事件唯一ID
alarmCode可选Stringbody告警编码
robotType必选Stringbody机器人类型(clean:清洁机器人,patrol_a1:巡检)

返回结果

字段类型位置描述
codeintbody0 为成功,非0为失败
msgStringbody处理结果描述

消息示例

Request body:

json
{
  "position": [116.403874, 39.914885],
  "equipmentId": "EQ20260324001",
  "warnPicUrl": "http://xxx.com/pic/1.jpg",
  "incidentId": "INC20260324001",
  "alarmCode": "ALM001",
  "robotType": "clean"
}

Response body:

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

2.3 任务状态回调接口

接口功能

机器人执行业务系统临时调度任务后,回调上报任务执行状态、时间、设备等信息。

调用方法

POST

接口路径

/api/robot/tmpWorkCallback

注意事项

参数说明

参数必选/可选类型位置描述
incidentId必选Stringbody事件 ID(与调度接口 ID 保持一致)
workStatus必选Stringbody作业状态: 0--分配任务中, 1--分配任务成功, 2--分配任务失败, 3作业完成
workTime必选Stringbody任务执行时间,格式:yyyy-MM-dd HH:mm:ss
robotId必选Stringbody机器人 ID
deviceId必选Stringbody设备 ID

返回结果

字段类型位置描述
codeintbody0 为成功,非0为失败
msgStringbody处理结果描述

消息示例

Request body:

json
{
  "incidentId": "INC20260324001",
  "workStatus": "1",
  "workTime": "2026-03-25 15:30:00",
  "robotId": "ROBOT_001",
  "deviceId": "EQ20260324001"
}

Response body:

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

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

接口功能

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

调用方法

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任务信息(可能存在无任务状态)
taskIdString必选taskInfo任务 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.5 查询作业区域

接口功能

根据机器人 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.6 查询排班任务

接口功能

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

调用方法

POST

接口路径

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

注意事项

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

参数说明

参数必选/可选类型位置描述
robotId必选Stringbody机器人唯一标识
startDateTime必选Stringbody开始时间,示例:2025-12-11 11:21:00
endDateTime必选Stringbody结束时间,示例:2025-12-11 15:21:00

返回结果

字段类型位置描述
codeintbody0 为成功,参照附录A
dataarraybody
taskIdStringdata任务 ID
mapIdStringdataMap ID
planDateTimeStringdata计划开始时间:2025-12-11 15:21:00
areaListarraydata区域列表
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.7 启动与停止接口

接口功能

通过 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.8 返航与充电接口

接口功能

通过 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.9 视频预览

接口功能

获取机器人视频流 flv 地址,默认视频有效时长 60 秒,过期后需重新获取。

调用方法

POST

接口路径

http://server:port/api/robot/video/preview

注意事项

参数说明

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

返回结果

字段类型位置描述
codeintbody0 为成功,参照附录A
dataArraybody
nameStringdata流名
addressStringdataflv 流地址
expireLongdata11位秒失效时间戳
msgStringbody状态码描述

消息示例

Request body:

json
{
  "robotId": "1924706921705771012"
}

Response body:

json
{
  "code": 0,
  "data": [
    {
      "name": "前",
      "address": "https://flv12xxx.com/flv*****"
    }
  ],
  "msg": "SUCCESS"
}

3. 附录

3.1 告警场景对照表

类别场景名称中文说明(便于理解)
PERIMETER_INVASION车库出入口人员逗留
PEOPLE_GATHER出入口拥堵
GARBAGE_OVERFLOW1垃圾满溢
GARBAGE_OVERFLOW2桶边垃圾
PARKING消防通道违停
PUBLIC_AREA_GARBAGE公共区域垃圾
INDOOR_FIRE_ESCAPE_CLUTTER室内消防通道堆放杂物
ENTRANCE_ILLEGALLY_BLOCKED出入口违停
MAIN_ROAD_ILLEGAL_BLOCKED主流道违停
EBIKE_IN_ELEVATOR电动车进电梯
EBIKE_IN_LOBBY电动车进大堂
POOL_TRESPASSING_OFF_HOURS非营业期间进入泳池
COMMUNITY_PERIMETER_INTRUSION小区周界入侵
COMMAND_CENTER_STAFF_ABSENT指挥中心员工离岗
POOL_GUARD_ABSENT泳池安全员离岗
SMOKING_IN_GUARDHOUSE岗亭内吸烟
ON_DUTY_PHONE_USE值班玩手机
BALD_SPOTS_ON_GRASS草地斑秃
MISSING_FIRE_EXTINGUISHER灭火器缺失
EQUIPMENT_ROOM_OPEN_FLAMES_DETECTION设备房明火检测
OUTDOOR_OPEN_FLAME_DETECTION室外明火检测
FALL_INTO_WATER人员落水
RIVER_RUBBISH河岸垃圾
RIVER_POLLUTION_DETECT水质异常
WATER_LEVEL水位预警
DRONE岸堤塌陷
RIVER_PERSONAL_BEHAVIOR_DETECT河道人员入侵
FISHING_DETECT人员垂钓
FLOATING_DEBRIS河面漂浮物
RIVER_OUTFALL_OVERFLOW_DETECT排水口溢流
MANHOLE_OVERFLOW闸口溢流
RIVER_CULVERTOVERFLO涵洞溢流
VEHICLE_BLOCKAGE机动车滞留
MOTOR_VEHICLE_ILLEGAL_PARKING机动车违停
机器人RBT_PUBLIC_AREA_GARBAGE机器人-公共区域垃圾
RBT_PERSIONNEL_FALL_DOWN机器人-人员摔倒
RBT_MOTOR_VEHICLE_ILLEGAL_PARKING机器人-机动车违停
RBT_EBIKE_ILLEGAL_PARKING机器人-非机动车违停
RBT_COMMUNITY_PERIMETER_INTRUSION机器人-人员入侵
RBT_INDOOR_FIRE_ESCAPE_CLUTTER机器人-杂物堆放
RBT_GARBAGE_OVERFLOW1机器人-垃圾桶满溢
RBT_DOOR_OPEN机器人-单元门未关闭
RBT_LIGHT_OFF机器人-路灯未亮
RBT_EQUIPMENT_DAMAGE机器人-设备损坏
RBT_GLASS_BREAKAGE机器人-玻璃破损
RBT_GATE_DAMAGE机器人-道闸杆损坏
RBT_ELECTRIC_BOX_OPEN机器人-电箱未关闭
RBT_FIRE_HYDRANT_ABNORMA机器人-消火栓门异常
RBT_PET_ACT_ALONE机器人-宠物单独行动
RBT_PRIVATE_PULL_WIRE机器人-私拉电线
RBT_INDICATION_MISSING机器人-标识缺失
RBT_FIRE_EQUIPMENT_MISSING机器人-灭火器缺失

3.2 编码规则说明

共用编码

  • 0 为正常,其他为异常
  • 0-999 为所有子系统共用编码
  • 100-199 用于指定客户端应相应的某些动作。
  • 400-499 用于指出客户端的错误。
  • 500-599 用于指出服务器错误。

业务系统编码

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

  • 一到二位即 10-99 各业务系统编码:10: 扫地机器人,11:巡检机器人,12:梯控
  • 三位表示异常类型级别 0-9,值越大表示异常越严重
  • 4-6位各业务系统内部定义编码

示例:104000 机器人ID错误(10 机器人编码,4 异常等级,000 自定义编码)

编码分类

编码大类编码说明
共用编码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前端软件接口异常