feat: add dingtalk-log skill for querying work reports

- Add SKILL.md with full API documentation
- Add shell script for quick queries
- Update TOOLS.md with reference to new skill
This commit is contained in:
root
2026-03-29 14:15:03 +08:00
parent f8d9936d56
commit 1a9fdc7274
8 changed files with 1177 additions and 0 deletions

View File

@@ -0,0 +1,86 @@
# 钉钉工作日志查询
查询钉钉工作日志(周报/日报等)。
## 接口信息
- **接口地址**: `POST https://oapi.dingtalk.com/topapi/report/list`
- **认证方式**: access_token基于企业内部应用
- **时间单位**: ⚠️ **毫秒**(不是秒!)
## 前置条件
1. 获取 access_token
```bash
curl -s -X POST 'https://api.dingtalk.com/v1.0/oauth2/accessToken' \
-H 'Content-Type: application/json' \
-d '{
"appKey": "dingklemniq8uqk5qbgx",
"appSecret": "_8EHgyhvHRHRMx6fZbh9LNpQoxyYl3At0b-fXXlQiahwupbt9oY5P6Grj8IM9Dx8"
}'
```
2. 凭证存储在 `TOOLS.md`
- AgentId: 4404185308
- Client ID (AppKey): dingklemniq8uqk5qbgx
- Client Secret (AppSecret): _8EHgyhvHRHRMx6fZbh9LNpQoxyYl3At0b-fXXlQiahwupbt9oY5P6Grj8IM9Dx8
## 调用示例
```bash
# 查询指定用户的日志(时间单位:毫秒)
curl -s 'https://oapi.dingtalk.com/topapi/report/list?access_token={TOKEN}' \
-H 'Content-Type: application/json' \
-d '{
"userid": "121922510028034588",
"offset": 0,
"size": 10,
"start_time": 1738329600000,
"end_time": 1743292800000,
"cursor": 0
}'
```
## 参数说明
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| userid | string | ✅ | 用户的钉钉 userid |
| start_time | number | ✅ | 开始时间,**毫秒**时间戳 |
| end_time | number | ✅ | 结束时间,**毫秒**时间戳 |
| cursor | number | ✅ | 分页游标(首次查询传 0 |
| size | number | ✅ | 每页数量(建议 10 |
| offset | number | ❌ | 偏移量(兼容旧版,可不传) |
## 返回字段说明
日志内容在 `result.data_list` 数组中,每个元素的 `contents` 数组包含各字段:
| contents.key | 说明 |
|-------------|------|
| 本周完成工作 / 本日完成工作 | 完成事项 |
| 本周工作总结 / 本日工作总结 | 详细总结 |
| 下周工作计划 / 下日工作计划 | 后续计划 |
| 需协调与帮助 | 协调事项 |
| 图片 | 图片列表 |
| 附件 | 附件列表 |
其他字段:
- `report_id`: 日志ID
- `template_name`: 日志模板名称(如"经理人周报"
- `creator_name`: 创建人姓名
- `dept_name`: 部门名称
- `create_time`: 创建时间(毫秒)
## 分页查询
通过 `cursor` 分页:
1. 首次查询 `cursor: 0`
2. 返回 `next_cursor` 作为下次查询的游标
3. `has_more: false` 表示最后一页
## 注意事项
1. ⚠️ **时间单位必须是毫秒**:如 `1743292800000`(不能用 `1743292800`
2. ⚠️ **字段名是 `userid`(全小写)**,不是 `userId`
3. 部分日志内容可能超长被截断,返回可能不完整

View File

@@ -0,0 +1,54 @@
#!/bin/bash
# 钉钉工作日志查询脚本
# 配置(从 TOOLS.md 读取)
APP_KEY="dingklemniq8uqk5qbgx"
APP_SECRET="_8EHgyhvHRHRMx6fZbh9LNpQoxyYl3At0b-fXXlQiahwupbt9oY5P6Grj8IM9Dx8"
API_BASE="https://oapi.dingtalk.com"
# 获取 access_token
get_token() {
curl -s -X POST 'https://api.dingtalk.com/v1.0/oauth2/accessToken' \
-H 'Content-Type: application/json' \
-d "{\"appKey\":\"$APP_KEY\",\"appSecret\":\"$APP_SECRET\"}" | \
grep -o '"accessToken":"[^"]*"' | cut -d'"' -f4
}
# 查询日志
query_logs() {
local userid=$1
local start_time=$2 # 毫秒
local end_time=$3 # 毫秒
local size=${4:-10}
local cursor=${5:-0}
local token=$6
curl -s "$API_BASE/topapi/report/list?access_token=$token" \
-H 'Content-Type: application/json' \
-d "{
\"userid\": \"$userid\",
\"start_time\": $start_time,
\"end_time\": $end_time,
\"cursor\": $cursor,
\"size\": $size
}"
}
# 解析毫秒时间戳为日期
ms_to_date() {
local ms=$1
date -d @$((ms / 1000)) "+%Y-%m-%d %H:%M:%S"
}
# 帮助信息
usage() {
echo "钉钉工作日志查询"
echo ""
echo "用法: $0 <userid> <start_time_ms> <end_time_ms> [size] [cursor]"
echo ""
echo "示例:"
echo " $0 121922510028034588 1738329600000 1743292800000"
echo " $0 121922510028034588 1738329600000 1743292800000 20 0"
echo ""
echo "时间戳获取: date +%s000000 (mac/linux)"
}