机智云 → 钉钉多维表同步
相关文件
| 文件 | 作用 |
|---|---|
gizwits_dingtalk_daily_sync.py |
主同步:机智云 → Webhook →(可选)多维表贴图 |
register_daily_task.ps1 |
注册 Windows 计划任务 GizwitsDingTalkDailySync |
dingtalk_python_node.py |
钉钉自动化 Python 节点(全量表) |
dingtalk_python_node_tice.py |
钉钉 Python 节点(仅含「提测」的记录) |
dingtalk_notable_qr.py |
开放平台上传草料 PNG 到「安卓二维码」列(需 AppKey) |
.env / .env.example |
Token、Webhook、开放平台配置 |
logs/sync_YYYYMMDD.log |
运行日志 |
.sync_state.json |
已推送 id(按 webhook 去重) |
数据流
机智云 archives API
→ 过滤 status=1、时间窗内、本地未推送
→ 拼接 apk_url(非接口字段)
→ POST 钉钉连接器 Webhook
→ 钉钉自动化:Python 解析 → 新增记录到多维表
APK 下载地址规则
接口不返回 apk_url,脚本本地拼接:
{GIZWITS_APK_BASE}/{version}-{archive_type}.apk
默认前缀:
https://xbgroup-static.gizwits.com/applications/72c63478
例:2.1.42 + release →https://xbgroup-static.gizwits.com/applications/72c63478/2.1.42-release.apk
Webhook 推送字段
POST 到钉钉连接器的 JSON(4 个字段):
| 字段 | 说明 |
|---|---|
version |
版本号,如 2.1.42 |
archive_type |
如 release |
update_content |
原始备注 JSON 字符串 |
apk_url |
上面规则拼好的下载地址 |
没有 qrcode_url。多维表图片列不能直接写链接变二维码;要单元格内嵌图需开放平台(见 reference.md)。
钉钉自动化配置要点
1. Webhook「接收到数据时」
- 关键词:
version、update_content、apk_url - 参数示例:
{
"version": "2.1.42",
"update_content": "{\"remark\":\"[builder:master]更换探索板块资源\"}",
"apk_url": "https://xbgroup-static.gizwits.com/applications/72c63478/2.1.42-release.apk"
}
2. Python 3.10 入参
| 变量名 | 映射 |
|---|---|
version |
1.接收到数据时 | version |
content |
1.接收到数据时 | update_content |
apk_url |
1.接收到数据时 | apk_url |
3. Python 出参(JSON)
| 字段 | 说明 |
|---|---|
version |
版本号 |
environment |
release→测试环境,master→生产环境 |
update_text |
去掉 [builder:xxx] 前缀后的文案 |
apk_url |
下载地址透传 |
出参示例:
{
"version": "2.1.42",
"environment": "生产环境",
"update_text": "更换探索板块资源",
"apk_url": "https://xbgroup-static.gizwits.com/applications/72c63478/2.1.42-release.apk"
}
4. 新增记录字段映射
- 版本号 ←
version - 软件环境 ←
environment - 更新内容 ←
update_text - 版本日期 ← 系统变量「今天」
- 安卓二维码 ←
apk_url(文本/链接列;图片列需开放平台贴图)
完整 Python 节点代码见 dingtalk_python_node.py,直接粘贴到钉钉。
同步规则
- 仅
status=1(构建成功)才推送 - 默认时间窗:昨天 09:00 ~ 现在(
rolling_sync_window) - 本地
.sync_state.json按 webhook 记录已推送id,一天跑两次不重复 - 机智云 API:
packages/14535/archives?page_size=30&ordering=-id
常用命令
# 日常定时(计划任务调用,无参数)
py gizwits_dingtalk_daily_sync.py
# 试跑:只看会推什么
py gizwits_dingtalk_daily_sync.py --dry-run
# 测试:推今天 + 指定版本
py gizwits_dingtalk_daily_sync.py --today --version 2.1.42
# 强制再推(忽略已推送状态)
py gizwits_dingtalk_daily_sync.py --today --version 2.1.42 --include-pushed
# 注册/更新计划任务(每天 09:00、15:00)
powershell -ExecutionPolicy Bypass -File register_daily_task.ps1
# 立即触发计划任务
Start-ScheduledTask -TaskName GizwitsDingTalkDailySync
# 查看任务
Get-ScheduledTask -TaskName GizwitsDingTalkDailySync
.env 必填项
复制 .env.example → .env:
| 变量 | 来源 |
|---|---|
GIZWITS_TOKEN |
浏览器 F12 → archives 请求 → Authorization Bearer 后的 JWT |
GIZWITS_ORG_ID |
默认 15597 |
DINGTALK_WEBHOOK / _2 |
钉钉连接器 Webhook 地址 |
GIZWITS_APK_BASE |
CDN 前缀(见上) |
开放平台贴图(可选):DINGTALK_APP_KEY、DINGTALK_APP_SECRET、DINGTALK_OPERATOR_ID、DINGTALK_TABLE_URL、DINGTALK_SHEET。详见 reference.md。
Agent 操作清单
用户要求测试/改定时/排查同步问题时:
- 确认
.env存在且GIZWITS_TOKEN、Webhook 已填(勿把密钥贴到聊天) - 改定时 → 编辑
register_daily_task.ps1后重新执行注册脚本 - 测试单版本 →
--today --version X.Y.Z;已推过则加--include-pushed - 看
logs/sync_YYYYMMDD.log和钉钉执行记录 apk_url为空 → 检查 Webhook 关键词/参数示例/Python 入参是否映射apk_url
附加说明
- 提测专用表用
dingtalk_python_node_tice.py(过滤「提测」,多返回skip) - 修改同步逻辑后不必重注册计划任务,除非改了
register_daily_task.ps1本身 - 详细开放平台权限与 unionId 获取见 reference.md