Install
openclaw skills install camera-api摄像头设备与云事件 API 技能。用于查询设备列表、根据设备名解析 device_id、查询设备最新封面图、查询设备在线状态、按天查询或汇总云事件、查询单个事件详情,以及在需要最新画面时向设备发送截图指令并轮询结果。当用户要求查看某个摄像头当前画面、最新封面、在线状态、今天/昨天/某天/最近几天发生了什么、某个事...
openclaw skills install camera-api通过探鸽云端 API 完成设备解析、接口选路、云事件归纳和截图轮询,并将结果整理成面向用户的答案。优先返回设备状态、事件摘要和图片内容,不直接回传原始签名图片 URL 或未整理的接口响应。
https://openapi-cn01.tange365.com/。Authorization: Bearer $TIVS_API_KEY
X-Tg-App-Id: $TIVS_APP_ID
Accept-Language: zh-CN
X-Tg-Platform: pc
Content-Type: application/json
X-Tg-SDK-VERSION: 216
TIVS_API_KEY 和 TIVS_APP_ID。不要在技能内容、代码或回复里硬编码任何凭据或用户私密信息。X-Tg-Platform: pc 发请求;如果当前运行环境已经通过 SDK 自动注入 web,沿用运行时默认值,不要同时发送两个不同的 X-Tg-Platform。https://openapi-cn01.tange365.com/ 只是 API 服务地址,不是创建 AppID 或 api_key 的入口页面。AppID / api_key 的获取页面可能因客户 APP 名称、APP 账号体系不同而不同,不要假设所有用户共用同一个入口页面。icam365 APP 账号:https://skill.webcamapp.cc/icam365/api-keywosee APP 账号:https://skill.webcamapp.cc/wosee/api-keyTIVS_API_KEY 或 TIVS_APP_ID 时优先复用。TIVS_API_KEY、TIVS_APP_ID,还是两者都缺失。AppID 和 api_key,再配置到当前运行环境。icam365、wosee,再给页面。code = 0 或 code = 200 视为成功。id、time、thumbnail、image、image_path、tag.tag、tag.name、tag.msg、can_play、summary。device_id。device_id 字符串;按天事件接口和事件详情接口按单设备、单事件处理。YYYY-MM-DD。POST /v2/msg/directive/device/{device_id};查询抓拍结果的唯一路径是 GET /v2/cloud/screenshot/{device_id}。POST /v2/device/thumbnail 只是查询封面图,不是抓拍结果接口;不要把它和 GET /v2/cloud/screenshot/{device_id} 混用。GET /v2/device/screenshot/{device_id}、POST /v2/device/screenshot/{device_id},或任何未在本文档出现的 screenshot 变体路径。404、405 或 501,先逐字检查方法和路径是否与本文档一致,再决定是否回退到备用接口;不要在错误路径上重复重试。POST /v2/device/listPOST /v2/device/thumbnailPOST /v3/device/onlineGET /v2/cloud/events/{device_id}/{date}POST /v2/cloud/eventGET /v2/cloud/event/{event_id}POST /v2/msg/directive/device/{device_id} 发送截图指令,再优先 GET /v2/cloud/screenshot/{device_id} 或回退到当天云事件查询获取最新截图当请求里没有可靠的 device_id 时:
device_name 精确匹配,再做保守的包含匹配。device_id 字符串;不支持批量的接口逐个调用。POST /v2/cloud/event。GET /v2/cloud/screenshot/{device_id},必要时才回退到当天事件。触发截图后按下面流程执行:
/v2/msg/directive/device/{device_id} 发送 save_video 指令。GET /v2/cloud/screenshot/{device_id} 获取最新抓拍结果;方法和路径都要逐字匹配,不要改写成 /v2/device/screenshot/{device_id} 或其他变体。POST /v2/cloud/event 查询当天事件。tag.tag == "screenshot" 的最新事件;如果没有 tag.tag,再看 tag.name 或 tag.msg 是否表示截图。不要无限轮询。
device_name、device_id、是否主人、绑定时间、联网方式等关键信息。is_online 作为设备整体是否在线的最终结论,再分别解释 register_status.is_online、dormant_status.is_alive、rtc_status.is_online 等子系统状态;子系统状态只能补充说明连接形态,不能单独推翻顶层在线结论。如果顶层 is_online 缺失,再明确说明整体结论未知,并列出已返回的各子系统状态。time 倒序整理,再将 Unix 秒级时间戳转为可读时间,必要时结合 tag、summary、图片信息做简短总结。当需要列出设备或根据设备名解析 device_id 时,调用:
POST /v2/device/list
请求体示例:
{
"offset": 0,
"limit": 10,
"name": "我的门铃",
"device_id": ""
}
请求参数说明:
name:按设备名称过滤,适合用户只提供设备名称、备注名或模糊名称时使用。device_id:按设备 ID 过滤,适合已经知道精确设备 ID 时使用。offset / limit:分页参数。优先从响应中读取:
device_iddevice_nameis_ownerconnect_wayextend.bind_timetotalname 做初筛,再对返回项做精确匹配。total 大于当前已取回的数量,而设备仍未唯一匹配,继续翻页。当用户想看设备最近一张画面,但不要求立刻唤醒设备时,调用:
POST /v2/device/thumbnail
请求体示例:
{
"device_id": "678A7QP6Q5WD"
}
说明:
device_id,多个设备用逗号分隔。当用户想知道设备是否在线、是否在工作、是否休眠、是否可用 RTC 连接时,调用:
POST /v3/device/online
请求体示例:
{
"device_id": "678A7QP6Q5WD"
}
说明:
device_id,多个设备用逗号分隔。is_online 是设备整体在线状态的最终判断。用户问“设备在线吗”时,先回答这个结论。register_status.is_online、dormant_status.is_alive、rtc_status.is_online 分别表示长连接、休眠子系统、RTC 子系统的状态,用于解释整体状态来源和可用链路。register_status.is_online 为 false,只要顶层 is_online 为 true,仍应回答“设备整体在线”,再补充说明当前是哪个子系统在线、哪个子系统不在线。is_online 缺失时,才退化为分别报告各子系统状态,并明确说明“整体在线状态未知”。is_online 的整体结论。当用户要查询今天或某一天的事件列表时,调用:
GET /v2/cloud/events/{device_id}/{date}
路径参数:
device_id:单个设备 IDdate:YYYY-MM-DD说明:
tag 和 summary 归纳。id、time、thumbnail、image、tag.tag、tag.name、tag.msg、can_play。当你需要分页、按标签过滤事件,或为截图轮询查找新增事件时,调用:
POST /v2/cloud/event
请求体示例:
{
"device_id": "678A7QP6Q5WD",
"tag": ["screenshot"],
"date": "2026-03-21",
"offset": 0,
"limit": 10
}
说明:
tag 可以留空数组,表示不过滤事件类型。tag 收窄到截图相关值。offset > 0 且返回空列表,视为没有更多数据。response.data.items 数组,可继续读取 time、thumbnail、image、tag、can_play 等字段。当用户提供 event_id 或要求查看某条事件详情时,调用:
GET /v2/cloud/event/{event_id}
说明:
detail.msg、detail.categoryName、containsVideo、storageId 等详情字段,优先利用这些字段补充说明。当截图指令已经发送,且当前环境提供专门的抓拍结果查询接口时,调用:
GET /v2/cloud/screenshot/{device_id}
说明:
GET,不要改写成 /v2/device/screenshot/{device_id} 或其他 /v2/device/* 路径。response.data.items,图片字段常见为 image_path。200 不代表一定拿到了本次新截图;要优先结合 time、created_at、create_time 等时间字段,确认图片晚于截图指令的时间基线。404、405 或 501,先检查自己是否把方法或路径写错了;确认无误后,再判断当前环境是否不支持该接口。POST /v2/cloud/event。当用户明确要求“现在拍一张”“看当前画面”时,调用:
POST /v2/msg/directive/device/{device_id}
请求体示例:
{
"directive": "save_video",
"reactive": false,
"data": ""
}
说明:
device_id 调用;如果用户要多个设备的当前画面,逐个设备执行。data 字段结构。device_id,先查设备列表。device_id。device_id,先查设备列表。device_id,先查设备列表。GET /v2/cloud/screenshot/{device_id},失败再按轮询流程查当天事件。device_id 组装为逗号分隔字符串。device_id 组装为逗号分隔字符串。TIVS_API_KEY 或 TIVS_APP_ID:明确提示缺少环境变量;先识别用户当前 APP 名称,再引导他去对应 APP 的 API Key 页面创建应用并获取 AppID 与 api_key。404、405 或 501:先检查是否误写成 /v2/device/screenshot/{device_id}、是否把 GET 写成了其他方法;只有确认路径和方法都正确后,才判断接口本身不可用并回退到 POST /v2/cloud/event。is_online 作为整体结论,再说明各子系统状态可能处于切换瞬间;不要因为某一个子系统离线就误判整体离线。