ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

OpenProject 自动化四步落地:API 建单改状态,Webhook 实时同步

2026/9/11 6:19:02 拓冰建站 浏览量
OpenProject 自动化四步落地:API 建单改状态,Webhook 实时同步 OpenProject 自动化四步落地API 建单改状态Webhook 实时同步【免费下载链接】openprojectOpenProject is the leading open source project management software for product, project and portfolio management. A powerful Jira alternative with agile planning, issue tracking, roadmaps, Gantt charts, time tracking, collaboration features, and more. Available on premises or in the cloud. ⭐ Star us on GitHub项目地址: https://gitcode.com/GitHub_Trending/op/openprojectPR 一合并OpenProject 里自动多出一条待办——这就是自动化的样子。OpenProject API 负责你下命令它执行OpenProject Webhook 负责它先动手再喊你。跟着走四步就能跑通拿钥匙、搬砖、接 Webhook、上生产。第一步拿到 API 的钥匙 请管理员进入Administration → API and webhooks确认允许用户创建个人 API 令牌已打开。这一页还能设最大分页大小和 CORS 白名单。登录你自己的账号进Account settings → API access点 Generate。密钥只显示一次当场存好重新生成会立刻作废旧密钥。在终端粘贴下面这条返回 JSON 列表就说明门通了curl https://{你的域名}/api/v3/work_packages?pageSize5 \ -H Authorization: Basic {api-key} \ -H Content-Type: application/json其中{api-key}是apikey: 你生成的密钥这串文本的 base64 值以后每条请求都带这个头。第二步让 API 替你搬砖钥匙到手开始干活。工作包Work Package就是 OpenProject 里所有待办的统一形态任务、缺陷、会议都能装进去。三个端点先过一遍操作方法用途拉工作包列表GET按项目、按过滤条件取一批工作包建工作包POST脚本一键开单自动挂上项目与类型改工作包PATCH换状态、换负责人、改截止日期project、type、status 这些引用型字段一律用href链接传递。拉取项目内的工作包URL 带上项目前缀只回这个项目的数据想要更细的筛选加filters查询参数即可curl https://{你的域名}/api/v3/projects/{project-id}/work_packages?pageSize50 \ -H Authorization: Basic {api-key}一条 POST 建出新工作包curl -X POST https://{你的域名}/api/v3/work_packages \ -H Authorization: Basic {api-key} \ -H Content-Type: application/json \ -d { subject: API 自动创建的任务, project: { href: /api/v3/projects/{project-id} }, type: { href: /api/v3/types/{type-id} } }201 状态码加完整的工作包资源返回即建单成功。用 PATCH 推进状态只发改的字段其余保持原样curl -X PATCH https://{你的域名}/api/v3/work_packages/{work-package-id} \ -H Authorization: Basic {api-key} \ -H Content-Type: application/json \ -d { status: { href: /api/v3/statuses/{status-id} } }第三步让 OpenProject 先喊你 前两步里你一直是主动轮询的一方这一步把方向反过来事件一发生OpenProject 直接 POST 到你的端点。建一个带签名的 Webhook管理员进Administration → API and webhooks点绿色的 WebhookName起个认得出的名字Payload URL你对外暴露的接收端点Signature secret随便一串随机字符OpenProject 用它给每次请求签名Events勾选工作包创建、更新等事件Projects全部项目或只圈定几个接收端先验签再处理事件触发后OpenProject 把含action和payload的 JSON 发到你端点并附上X-OP-Signature头——它是对请求体用 secret 做的 HMAC-SHA1。最小接收端Pythonimport hmac, hashlib import flask app flask.Flask(__name__) app.post(/openproject-webhook) def receive(): body flask.request.get_data() expect sha1 hmac.new(b{webhook-secret}, body, hashlib.sha1).hexdigest() if not hmac.compare_digest(expect, flask.request.headers.get(X-OP-Signature, )): return flask.Response(bad signature, 403) event flask.request.get_json() print(event[action], event[payload]) return ok到这里一条完整流水线就通了事件发生 → 签名发出 → 接收端验签 → 跑你的业务逻辑。第四步把自动化放进生产⚙️ 能跑通只是起点想长期挂着先把这几处磨平。把脚本磨到能上生产失败要重试。网络抖动躲不掉把请求套进重试循环每次失败先 sleep 再试连续 3 次还失败就记录日志并告警别把异常吞掉。用 ETag 和分页省流量。工作包列表这类读多写少的端点支持 ETag 条件请求回传If-None-Match没变化时直接 304不用重新解析 JSON。批量拉取就把pageSize调大、用offset翻页别一条条查。报告交给 cron。每天 9 点自动发一份未关闭工作包摘要0 9 * * * curl -s https://{你的域名}/api/v3/projects/{project-id}/work_packages?pageSize100 \ -H Authorization: Basic {api-key} \ | python3 summarize.py \ | mail -s OpenProject 日报 teamexample.com收尾整条链路回头看就这几件事密钥只显示一次重新生成即刻作废旧密钥认证头是Authorization: Basic {api-key}用户名固定为apikeyproject、type、status 全部以href链接传递Webhook 收到请求先验X-OP-Signature验不过直接 403读多写少ETag pageSize写多加重试想继续深入从这两篇入手API v3 使用示例系统管理员指南 - API and webhooks【免费下载链接】openprojectOpenProject is the leading open source project management software for product, project and portfolio management. A powerful Jira alternative with agile planning, issue tracking, roadmaps, Gantt charts, time tracking, collaboration features, and more. Available on premises or in the cloud. ⭐ Star us on GitHub项目地址: https://gitcode.com/GitHub_Trending/op/openproject创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考