install
source · Clone the upstream repo
git clone https://github.com/GeorgeDoors888/GB-Power-Market-JJ
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/GeorgeDoors888/GB-Power-Market-JJ "$T" && mkdir -p ~/.claude/skills && cp -r "$T/openclaw-skills/skills/3rdsw/dingtalk-log" ~/.claude/skills/georgedoors888-gb-power-market-jj-dingtalk-log && rm -rf "$T"
OpenClaw · Install into ~/.openclaw/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/GeorgeDoors888/GB-Power-Market-JJ "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/openclaw-skills/skills/3rdsw/dingtalk-log" ~/.openclaw/skills/georgedoors888-gb-power-market-jj-dingtalk-log && rm -rf "$T"
manifest:
openclaw-skills/skills/3rdsw/dingtalk-log/SKILL.mdsource content
调用钉钉日志列表接口技能说明
技能名称
调用钉钉topapi/report/list接口获取用户日志列表
技能描述
该技能用于调用钉钉开放平台的
topapi/report/list接口,获取企业/员工的日志列表(含日志创建人、创建时间、模板名称等),支持按模板名称、员工ID、时间范围等条件筛选查询。
前置条件
- 应用权限:仅支持企业内部应用/第三方企业应用调用,需提前为应用申请「查询企业员工日志权限」;第三方个人应用不支持。
- AccessToken准备:调用接口前必须先获取对应应用的access_token:
- 接口地址:
https://api.dingtalk.com/v1.0/oauth2/accessToken - 请求方式:POST
- 请求体参数:
名称 类型 必填 说明 appKey String 是 企业内部应用的Cilent ID appSecret String 是 企业内部应用的Cilent Secret - AccessToken规则:有效期7200秒(2小时),需缓存避免频繁调用;重复获取会续期,过期返回新值。
- 接口地址:
接口核心信息
1. 基础调用信息
- 请求方式:POST
- 请求地址:
https://oapi.dingtalk.com/topapi/report/list - 字符编码:UTF-8
2. 请求参数
(1)Query参数(URL拼接)
| 名称 | 类型 | 必填 | 示例值 | 描述 |
|---|---|---|---|---|
| access_token | String | 是 | 6d1bxxxx | 应用凭证(从前置步骤获取) |
(2)Body参数(JSON格式)
| 名称 | 类型 | 必填 | 示例值 | 描述 |
|---|---|---|---|---|
| start_time | Number | 是 | 1507564800000 | 日志创建开始时间(Unix毫秒级时间戳) |
| end_time | Number | 是 | 1507564800000 | 日志创建结束时间(Unix毫秒级时间戳);与start_time间隔≤180天 |
| template_name | String | 否 | 周报 | 日志模板名称(传值则筛选该模板的日志) |
| userid | String | 否 | user123 | 员工userId(传值则筛选该员工的日志) |
| cursor | Number | 是 | 0 | 查询游标(初始传0,后续从返回值取next_cursor) |
| size | Number | 是 | 10 | 每页数据量(最大值20) |
| modified_start_time | Number | 否 | 1507564800000 | 日志修改开始时间(Unix毫秒级时间戳) |
| modified_end_time | Number | 否 | 1507564800000 | 日志修改结束时间(Unix毫秒级时间戳) |
3. 参数传递规则(核心)
- 查指定模板+时间段日志:传
,template_name
为空;userId - 查指定员工+时间段日志:传
,userId
为空;template_name - 查企业所有日志:
和template_name
均为空;userId - 分页查询:首次
,若返回cursor=0
,则用has_more=true
作为新游标继续调用。next_cursor
返回结果解析
1. 返回参数结构
| 名称 | 类型 | 说明 |
|---|---|---|
| errcode | Number | 返回码(0=成功) |
| errmsg | String | 返回描述(ok=成功) |
| result | PageVo | 核心结果集 |
| request_id | String | 请求ID(用于排查问题) |
result子参数
| 名称 | 类型 | 说明 |
|---|---|---|
| data_list | ReportOapiVo[] | 日志列表(核心数据) |
| size | Number | 实际返回数据量 |
| next_cursor | Number | 下一页游标 |
| has_more | Boolean | 是否有下一页(true=有) |
data_list子参数(单条日志)
| 名称 | 类型 | 说明 |
|---|---|---|
| create_time | Number | 日志创建时间(毫秒时间戳) |
| creator_id | String | 日志创建人userId |
| creator_name | String | 日志创建人姓名 |
| template_name | String | 日志模板名称 |
| contents | Array | 日志具体内容(key-value) |
| report_id | String | 日志唯一ID |
2. 返回示例
{ "errcode": 0, "errmsg":"ok", "result": { "data_list": [ { "contents": [ { "key": "今日完成工作", "sort": "0", "type": "1", "value": "今天已经完成的工作" } ], "create_time": 1605680704000, "creator_id": "user123", "creator_name": "测试同学", "template_name": "日报" } ], "has_more": false, "next_cursor": 2862455276, "size": 10 }, "request_id": "5c8q6ic6wyah" }
调用步骤(标准化流程)
- 调用
获取access_token,缓存该值(避免重复调用);/v1.0/oauth2/accessToken - 构造日志查询的Body参数(必填:start_time、end_time、cursor、size;可选:template_name、userId等);
- 发送POST请求到
,传入Body参数;https://oapi.dingtalk.com/topapi/report/list?access_token=xxx - 解析返回结果:
- 若
,提取errcode=0
获取日志数据;result.data_list - 若
,用has_more=true
作为新游标重复步骤3,直到next_cursor
;has_more=false
- 若
- 异常处理:若
,根据errcode≠0
排查权限/参数问题(如access_token过期、时间范围超限等)。errmsg
注意事项
- 时间参数:所有时间戳均为毫秒级Unix时间戳,start_time与end_time间隔不超过180天;
- 频率限制:禁止频繁调用gettoken接口,否则会被拦截;
- 权限校验:调用前务必确认应用已添加「查询企业员工日志权限」。
总结
- 调用核心:先获取access_token,再按条件(模板/员工/全量)传参调用日志列表接口,支持分页;
- 参数规则:start_time/end_time/cursor/size为必填,template_name和userId按需传值(均空则查全量);
- 关键限制:时间范围≤180天、每页size≤20、access_token需缓存且有效期2小时。