AI AGENT SKILLS

Jf Open Pro Ai Joblover

一个面向 Other 场景的 Agent 技能。原始说明:杰峰开放平台岗位巡检技能。实时监控员工在岗状态,推送员工到岗、离岗通知,对在岗异常行为实时检测,记录并统计在岗人员的行为数据,提升巡检效率、安全性,降低人工巡检成本。

SKILL.md

SKILL.md


name: jf-open-pro-ai-joblover
description: 杰峰开放平台岗位巡检技能。实时监控员工在岗状态,推送员工到岗、离岗通知,对在岗异常行为实时检测,记录并统计在岗人员的行为数据,提升巡检效率、安全性,降低人工巡检成本。
metadata:
version: 1.0.0
author: JFTech
category: video
tags:

  • 杰峰
  • 岗位巡检
  • 在岗检测
  • 异常行为
  • 员工监控

triggers:

  • 岗位巡检
  • 在岗检测
  • 离岗提醒
  • 异常行为检测

prerequisites:

  • 配置必需的环境变量
  • 设备需已完成配网和绑定
  • 设备需在线
  • 需开通岗位巡检套餐

region:

  • CN: api-cn.jftechws.com (中国大陆)
  • AS: api-as.jftechws.com (亚洲)
  • EU: api-eu.jftechws.com (欧洲)
  • NA: api-na.jftechws.com (北美洲)

jf-open-pro-ai-joblover - 岗位巡检技能

技能描述

实时监控员工在岗状态,推送员工到岗、离岗通知,对在岗异常行为实时检测,记录并统计在岗人员的行为数据,提升巡检效率、安全性,降低人工巡检成本。

核心功能:

  • 值岗计划管理 - 新增、删除、查询值岗计划
  • 异常告警查询 - 查询离岗、玩手机、抽烟等异常告警列表
  • 行为统计 - 统计在岗人员的行为数据(次数、时长、图表)
  • 服务状态管理 - 开启/关闭岗位巡检服务

触发词

  • 岗位巡检 / 在岗检测 / 离岗提醒
  • 异常行为检测 / 值岗计划 / 员工监控

⚠️ 环境变量检查(使用前必读)

使用本技能前,必须先检查以下 7 个必需环境变量是否已配置!

检查清单

| 序号 | 环境变量 | 配置项 | 是否必需 | 检查状态 |
|------|----------|--------|----------|----------|
| 1 | JF_UUID | jf_uuid | ✅ 必需 | □ 已配置 |
| 2 | JF_APP_KEY | jf_appKey | ✅ 必需 | □ 已配置 |
| 3 | JF_APP_SECRET | jf_secret | ✅ 必需 | □ 已配置 |
| 4 | JF_MOVE_CARD | jf_moveCard | ✅ 必需 | □ 已配置 |
| 5 | JF_DEVICE_SN | jf_device_sn | ✅ 必需 | □ 已配置 |
| 6 | JF_AUTHORIZATION | jf_authorization | ✅ 必需 | □ 已配置 |
| 7 | JF_USER | jf_user | ✅ 必需 | □ 已配置 |

前置条件

前置条件

  1. 设备在线 - 设备需在线且可访问
  2. 设备绑定 - 设备需先绑定到开放平台账号
  3. 套餐开通 - 需开通相应 AI 套餐 - 需开通岗位巡检 AI 套餐

签名算法** - 使用杰峰官方 SignatureUtil.getEncryptStr() 方法生成 signature

  1. 时间戳算法 - 使用杰峰官方 TimeMillisUtil.getTimMillis() 方法生成 timeMillis
  2. 设备绑定 - 设备需先绑定到开放平台账号

环境变量(使用前必须配置)

| 变量名 | 配置项 | 说明 | 默认值 | 必需 |
|--------|------|------|--------|------|
| JF_UUID | jf_uuid | 开放平台用户 uuid | - | ✅ |
| JF_APP_KEY | jf_appKey | 开放平台应用 appKey | - | ✅ |
| JF_APP_SECRET | jf_secret | 开放平台应用密钥 | - | ✅ |
| JF_MOVE_CARD | jf_moveCard | 移动卡标识(用于签名) | 2 | ✅ |
| JF_DEVICE_SN | jf_device_sn | 设备序列号 | - | ✅ |
| JF_AUTHORIZATION | jf_authorization | 用户 token (JWT) | - | ✅ |
| JF_USER | jf_user | 用户 ID | - | ✅ |
| JF_ENDPOINT | - | API 接入地址 | api.jftechws.com | ❌ |

API 接口

| 功能 | 地址 | 方法 | 需要 Token | 需要在线 |
|------|------|------|------------|----------|
| 查询服务状态 | POST /aisvr/v3/gateway/api/joblover/ai/analysis/switch/get | POST | ✅ | ✅ |
| 开关服务 | POST /aisvr/v3/gateway/api/joblover/ai/analysis/switch/change | POST | ✅ | ✅ |
| 查询异常配置 | POST /aisvr/v3/gateway/api/joblover/abnormalAlarmConfig/list | POST | ✅ | ✅ |
| 更新异常配置 | POST /aisvr/v3/gateway/api/joblover/abnormalAlarmConfig/save | POST | ✅ | ✅ |
| 查询告警列表 | POST /aisvr/v3/gateway/api/child/alarm/page | POST | ✅ | ✅ |
| 添加值岗计划 | POST /aisvr/v3/gateway/api/joblover/plan/add | POST | ✅ | ✅ |
| 删除值岗计划 | POST /aisvr/v3/gateway/api/joblover/plan/remove | POST | ✅ | ✅ |
| 查询行为次数 | POST /aisvr/v3/gateway/api/joblover/static/queryCount | POST | ✅ | ✅ |
| 查询行为时间 | POST /aisvr/v3/gateway/api/joblover/static/queryTime | POST | ✅ | ✅ |
| 查询七天图表 | POST /aisvr/v3/gateway/api/joblover/static/queryTimeForDayChart | POST | ✅ | ✅ |
| 查询次数图表 | POST /aisvr/v3/gateway/api/joblover/static/queryCountForWeekChart | POST | ✅ | ✅ |

核心功能

1. 服务状态管理

查询服务状态: POST /joblover/ai/analysis/switch/get

请求参数:
| 参数 | 类型 | 必需 | 说明 |
|------|------|------|------|
| sn | string | ✅ | 设备序列号 |
| user | string | ✅ | 用户 ID |

响应参数:
| 字段 | 类型 | 说明 |
|------|------|------|
| code | int | 平台状态码(2000=成功) |
| data.aiAnalysisSwitch | boolean | 服务开启状态(true=开启) |

开关服务: POST /joblover/ai/analysis/switch/change

请求参数:
| 参数 | 类型 | 必需 | 说明 |
|------|------|------|------|
| sn | string | ✅ | 设备序列号 |
| user | string | ✅ | 用户 ID |
| aiAnalysisSwitch | boolean | ✅ | true 开启,false 关闭 |

2. 异常提醒配置

异常类型枚举:
| 枚举值 | 说明 |
|--------|------|
| AreaOnDuty | 值岗区域 |
| PlanOnDuty | 值岗计划 |
| StaffOnboarded | 到岗提醒 |
| StaffOffDuty | 离岗提醒 |
| SleepOnDuty | 在岗睡觉 |
| PlayPhoneOnDuty | 玩手机 |
| SmokeOnDuty | 抽烟 |

3. 值岗计划管理

添加值岗计划: POST /joblover/plan/add

请求参数:
| 参数 | 类型 | 必需 | 说明 |
|------|------|------|------|
| sn | string | ✅ | 设备序列号 |
| user | string | ✅ | 用户 ID |
| monitorTimes | array | ✅ | 值岗时间列表 |
| ├─ startTime | string | ✅ | 开始时间(HH:mm:ss) |
| ├─ endTime | string | ✅ | 结束时间(HH:mm:ss) |
| config.priDays | array | ✅ | 值岗工作日(1-7,1=周一) |

删除值岗计划: POST /joblover/plan/remove

请求参数:
| 参数 | 类型 | 必需 | 说明 |
|------|------|------|------|
| sn | string | ❌ | 设备序列号 |
| user | string | ❌ | 用户 ID |
| id | integer | ✅ | 值岗计划 ID |

4. 异常告警查询

查询告警列表: POST /child/alarm/page

请求参数:
| 参数 | 类型 | 必需 | 说明 |
|------|------|------|------|
| sn | string | ✅ | 设备序列号 |
| user | string | ✅ | 用户 ID |
| startTime | string | ✅ | 开始时间(秒值) |
| endTime | string | ✅ | 结束时间(秒值) |
| msgType | string | ✅ | 异常类型 |
| page | integer | ✅ | 页码 |
| rows | integer | ✅ | 每页条数 |

响应参数:
| 字段 | 类型 | 说明 |
|------|------|------|
| data.total | integer | 告警总数 |
| data.records | array | 告警列表 |
| ├─ alarmId | string | 告警 ID |
| ├─ sn | string | 设备号 |
| ├─ picUrl | string | 告警图片地址 |
| ├─ videoUrl | string | 告警视频地址 |
| └─ alarmTime | string | 告警时间 |

5. 行为统计

行为类型枚举:
| 枚举值 | 说明 |
|--------|------|
| phone | 玩手机 |
| smoking | 吸烟 |
| sleep | 睡觉 |
| leave | 离开 |
| leavePost | 离岗 |

查询行为次数: POST /joblover/static/queryCount

查询行为时间: POST /joblover/static/queryTime

查询七天图表: POST /joblover/static/queryTimeForDayChart

查询次数图表: POST /joblover/static/queryCountForWeekChart

使用示例

环境准备

# 设置环境变量
export JF_UUID="<your-uuid>"
export JF_APP_KEY="<your-appkey>"
export JF_APP_SECRET="<your-secret>"
export JF_MOVE_CARD="7"
export JF_DEVICE_SN="<your-device-sn>"
export JF_AUTHORIZATION="eyJhbGciOiJIUzI1NiIs..."
export JF_USER="<your-uuid>"
export JF_ENDPOINT="api.jftechws.com"

1. 查询服务状态

cd /root/.openclaw/workspace/skills/aiscene/jf-open-pro-ai-joblover/scripts

# 查询岗位巡检服务状态
python3 inspection.py --action status \
  --sn "<your-device-sn>" \
  --user "<your-uuid>" \
  --uuid "<your-uuid>" \
  --appkey "<your-appkey>" \
  --secret "<your-secret>" \
  --auth "<your-uuid>" \
  --movecard 7

1.1 完整 curl 示例(用于调试)

# 生成签名(使用 jf_signature.py)
python3 -c "from jf_signature import generate_signature; t,s=generate_signature('<your-uuid>','<your-appkey>','<your-secret>',7); echo timeMillis=\$t; echo signature=\$s"

# 使用生成的 timeMillis 和 signature 执行 curl
curl -X POST "https://api-cn.jftechws.com/aisvr/v3/gateway/api/joblover/ai/analysis/switch/get" \
  -H "Content-Type: application/json" \
  -H "uuid: <your-uuid>" \
  -H "appKey: <your-appkey>" \
  -H "timeMillis: <生成的 timeMillis>" \
  -H "signature: <生成的 signature>" \
  -H "Authorization: <your-uuid>" \
  -d '{"sn": "<your-device-sn>", "user": "<your-uuid>"}'

2. 开关服务

# 开启岗位巡检服务
python3 inspection.py --action switch --enable true \
  --sn "<your-device-sn>" \
  --user "<your-uuid>"

# 关闭岗位巡检服务
python3 inspection.py --action switch --enable false \
  --sn "<your-device-sn>" \
  --user "<your-uuid>"

3. 值岗计划管理

# 添加值岗计划(工作日 9:00-18:00)
python3 plan_manager.py --action add \
  --start-time "09:00:00" --end-time "18:00:00" \
  --pri-days 1,2,3,4,5 \
  --sn "<your-device-sn>" \
  --user "<your-uuid>"

# 删除值岗计划
python3 plan_manager.py --action delete --id 10 \
  --sn "<your-device-sn>" \
  --user "<your-uuid>"

# 查询值岗计划
python3 plan_manager.py --action list \
  --sn "<your-device-sn>" \
  --user "<your-uuid>"

4. 查询异常告警

# 查询离岗告警(最近 7 天)
python3 alarm_query.py --action list \
  --msg-type "StaffOffDuty" \
  --start-time 1733241600 --end-time 1733846399 \
  --page 1 --rows 10 \
  --sn "<your-device-sn>" \
  --user "<your-uuid>"

# 查询玩手机告警
python3 alarm_query.py --action list \
  --msg-type "PlayPhoneOnDuty" \
  --start-time 1733241600 --end-time 1733846399 \
  --page 1 --rows 10 \
  --sn "<your-device-sn>" \
  --user "<your-uuid>"

5. 查询统计数据

# 查询玩手机行为次数(当日)
python3 stats_query.py --action count \
  --type "phone" \
  --start-time 1733241600 --end-time 1733327999 \
  --sn "<your-device-sn>" \
  --user "<your-uuid>"

# 查询离岗行为时长
python3 stats_query.py --action time \
  --type "leavePost" \
  --start-time 1733241600 --end-time 1733327999 \
  --sn "<your-device-sn>" \
  --user "<your-uuid>"

# 查询七天行为图表
python3 stats_query.py --action week-chart \
  --type "phone" \
  --start-time 1732982400 --end-time 1733587199 \
  --sn "<your-device-sn>" \
  --user "<your-uuid>"

状态码

平台状态码

| code | 说明 | 处理建议 |
|------|------|----------|
| 2000 | 成功 | - |
| 28007 | Header 参数错误 | 检查 uuid、appKey、timeMillis、signature |
| 40103 | 无效 Token | authorization 过期,重新获取 |
| 12504 | 授权失败 - 设备未开通套餐 | 登录开放平台为设备绑定岗位巡检套餐卡 |
| 50000 | 服务器内部错误 | 联系杰峰技术支持 |

错误码 12504 详细处理步骤

错误信息: authorize failed,Please check it in the open platform

原因: 设备未开通岗位巡检服务,或未绑定套餐卡

解决步骤:

  1. 登录杰峰开放平台:https://developer.jftech.com
  2. 进入 套餐管理 / 服务管理
  3. 找到 岗位巡检 套餐
  4. 为设备购买并绑定套餐卡
  5. 等待配置生效(通常 1-5 分钟)
  6. 重新调用 API 测试

注意事项

  1. 时间格式 - 值岗计划时间格式为 HH:mm:ss
  2. 工作日枚举 - 1=周一,2=周二,...,7=周日
  3. 时间戳 - 统计查询使用秒级时间戳
  4. 套餐开通 - 使用前需确保设备已开通岗位巡检套餐
  5. Token 有效期 - authorization 需在有效期内
  6. 签名算法 - 使用杰峰官方移位加密算法

相关文件

| 文件 | 说明 |
|------|------|
| SKILL.md | 技能文档 |
| scripts/inspection.py | 服务状态管理脚本 |
| scripts/plan_manager.py | 值岗计划管理脚本 |
| scripts/alarm_query.py | 异常告警查询脚本 |
| scripts/stats_query.py | 统计数据查询脚本 |
| references/inspection-api.md | API 参考文档 |

参考文档


📋 前置配置文档(环境变量缺失时参考)

⚠️ 重要提示: 如果在使用本技能时发现缺少必需的环境变量,请先完成以下配置步骤,然后再继续操作。

必需环境变量清单

以下 7 个环境变量 必须全部配置,缺一不可:

| # | 变量名 | 配置项 | 说明 |
|---|--------|--------|------|
| 1 | JF_UUID | jf_uuid | 开放平台用户 uuid |
| 2 | JF_APP_KEY | jf_appKey | 开放平台应用 appKey |
| 3 | JF_APP_SECRET | jf_secret | 开放平台应用密钥 |
| 4 | JF_MOVE_CARD | jf_moveCard | 移动卡标识(用于签名) |
| 5 | JF_DEVICE_SN | jf_device_sn | 设备序列号 |
| 6 | JF_AUTHORIZATION | jf_authorization | 用户 token (JWT) |
| 7 | JF_USER | jf_user | 用户 ID |


参数获取指南

1. JFUUID(jfuuid)

获取方式:

  • 登录杰峰开放平台:https://developer.jftech.com
  • 进入 个人中心开发者信息
  • 复制您的用户 UUID

说明: 这是您在杰峰开放平台的唯一用户标识


2. JFAPPKEY(jf_appKey)

获取方式:

  • 登录杰峰开放平台:https://developer.jftech.com
  • 进入 应用管理我的应用
  • 选择或创建一个应用
  • 复制应用的 appKey

说明: 这是您创建的应用的唯一标识


3. JFAPPSECRET(jf_secret)

获取方式:

  • 登录杰峰开放平台:https://developer.jftech.com
  • 进入 应用管理我的应用
  • 选择对应的应用
  • 查看应用详情,复制 secret 密钥

说明: 这是应用的密钥,用于 API 签名,请妥善保管


4. JFMOVECARD(jf_moveCard)

获取方式:

  • 方式一: 通过 appKey 查询接口获取并缓存(24 小时有效)
  • 方式二: 登录杰峰开放平台,进入应用详情页查看

说明: 移动卡标识,用于签名算法生成


5. JFDEVICESN(jfdevicesn)

获取方式:

  • 查看设备底部标签或包装盒上的序列号
  • 或在杰峰开放平台 设备管理 中查看已绑定的设备

说明: 设备的唯一序列号,格式通常为 16 位十六进制字符串


6. JFAUTHORIZATION(jfauthorization)⭐

获取方式(二选一):

方式 A:使用杰峰用户系统

请参考 用户登录接口 获取 Authorization 值

调用登录接口后,从响应中提取 authorization 字段(JWT Token)

方式 B:使用开发者自己的用户系统

传值参考 套餐卡使用说明 中的 userId

将您的用户系统生成的 userId 作为 authorization 值传入

说明: 用户鉴权 Token,用于 API 请求的身份验证


7. JFUSER(jfuser)

获取方式:

  • JF_UUID 通常相同
  • 或在杰峰开放平台 个人中心 查看用户 ID

说明: 用户 ID,用于 API 请求中标识当前用户


配置示例

完成上述参数获取后,在您的环境中设置:

# 设置环境变量(请替换为您的实际值)
export JF_UUID="your-uuid-here"
export JF_APP_KEY="your-appkey-here"
export JF_APP_SECRET="your-secret-here"
export JF_MOVE_CARD="your-movecard-here"
export JF_DEVICE_SN="your-device-sn-here"
export JF_AUTHORIZATION="your-authorization-token-here"
export JF_USER="your-user-id-here"
export JF_ENDPOINT="api.jftechws.com"  # 可选,默认值

验证配置

配置完成后,可以先调用一个简单的接口验证配置是否正确:

# 查询服务状态(验证配置)
python3 inspection.py --action status \
  --sn "$JF_DEVICE_SN" \
  --user "$JF_USER"

如果返回 code: 2000,说明配置成功!


重要提醒

使用原则: 后续所有 API 调用,必须严格使用用户环境变量中配置的参数值,不允许技能自己发散去获取或推算参数!

这样可以确保:

- 参数来源可控、可追溯

- 避免使用错误的或过期的凭证

- 符合安全和审计要求