【免费下载链接】taskview-community
TaskView is a self-hosted project and task management platform focused on clarity, ownership, and control. TaskView is built for teams that want a transparent, self-hosted alternative to SaaS task managers.
TaskView 是一款自托管的项目与任务管理平台,它的 Webhooks(HTTP 事件通知)和 HTTP API 正是自动化的两大基石:当项目中的任务被创建、更新、指派或完成时,TaskView 会实时向你的服务器发送带签名的 HTTP POST 请求,配合 API Token 调用 REST 接口,你就能轻松搭建出属于自己的自定义任务自动化通知系统——对接 Slack、CI/CD 流水线或任何内部工具。
为什么需要 TaskView Webhooks
自建任务通知系统时,你通常希望:任务一完成就自动通知对应团队、任务指派后自动创建 CI 工单、Sprint 结束时自动归档周报。Webhooks 就是 TaskView 为此提供的"事件出口":
- 按项目订阅,每个项目可配置多个 Webhook
- 支持18 种事件,覆盖任务、工时、Sprint 三大域
- 每次投递附带HMAC-SHA256 签名,可验证请求确实来自 TaskView
- 内置自动重试与投递历史,失败可手动重发
Webhook 快速搭建:7 步完成
- 打开某个项目
- 在左侧栏右键项目 → Webhooks
- 点击Add Webhook
- 填入接收事件的 URL
- 勾选要订阅的事件
- 点击Add保存
- 立即复制生成的 secret 并妥善保存——它只显示一次
完整的配置说明见官方文档 docs/2.features/7.webhooks.md。
⚠️ URL 必须指向公网地址:
127.0.0.1、localhost、10/8、192.168/16等内网地址默认会被拒绝,且 3xx 重定向不会被跟随(重定向会直接记为投递失败)。若接收端(如 n8n、内部机器人)部署在同一内网,可在 API 环境变量中设置WEBHOOKS_ALLOW_PRIVATE_URLS=true,详见 环境变量文档。
18 种事件一览:覆盖任务、工时与 Sprint
| 类别 | 事件 |
|---|---|
| 任务 | task.created/task.updated/task.deleted/task.assigneesChanged/task.assignedToSprint |
| 工时 | time-entry.started/time-entry.stopped/time-entry.created/time-entry.updated/time-entry.deleted |
| Sprint | sprint.created/sprint.updated/sprint.activated/sprint.reviewStarted/sprint.completed/sprint.paused/sprint.resumed/sprint.deleted |
所有事件名统一定义在 webhooks.types.ts,事件到 Webhook 的派发逻辑则位于 WebhooksDispatcher.ts。
Payload 格式与签名验证
每次投递都是Content-Type: application/json的 HTTP POST,例如任务更新事件:
{ "event": "task.updated", "timestamp": "2026-03-22T12:00:00.000Z", "task": { "id": 123, "description": "Fix login bug", "statusId": 5, "assignedUsers": [10, 22] }, "changes": { "statusId": 5 }, "initiatorId": 1 }其中changes字段只出现在task.updated和sprint.updated事件中,且只包含实际变更的字段,非常适合做"只对新变更做响应"的判断。
安全关键点:每个请求都会带X-Webhook-Signature请求头(sha256=...格式的 HMAC-SHA256 签名)。处理 Payload 前务必先校验签名,否则任何知道 URL 的人都可能伪造事件:
const expected = 'sha256=' + crypto .createHmac('sha256', secret) .update(body) // body 必须是原始字符串 .digest('hex')投递保障:重试、自动禁用与投递历史
TaskView 的 Webhook 投递基于后台任务队列异步执行(见 WebhooksDispatcher.ts),并内置了完整的可靠性机制:
| 机制 | 说明 |
|---|---|
| 自动重试 | 非 2xx 响应或 10 秒超时后重试,共 3 次尝试(首次 + 约 10s、20s 各一次) |
| 自动禁用 | 累计10 次连续失败后 Webhook 自动停用;一次成功即重置计数 |
| 投递历史 | Webhooks 页面可查看每条投递的事件、状态、HTTP 码、尝试次数与完整 Payload |
| 手动重发 | 失败的投递可直接在历史页手动 Retry |
| 密钥轮换 | 一键 Rotate Secret,旧密钥立即失效 |
💡 停用后无需删除 Webhook,直接在页面上重新开启即可。
HTTP API 与 API Token:程序化操作任务
Webhooks 负责"事件出",HTTP API 负责"操作入"。TaskView 提供标准的 REST 接口,配合API Token即可脱离浏览器会话进行程序化访问。
创建 Token:进入Account Settings → API Tokens → Create Token,可设置:
- 权限范围(如仅允许读取和创建任务)
- 项目范围(限定到指定项目)
- 过期时间(过期后返回
401 Unauthorized)
Token 以tvk_开头,仅创建时展示一次,数据库只保存 SHA-256 哈希。认证方式为标准 Bearer Token:
curl -H "Authorization: Bearer tvk_a1b2c3d4..." \ https://your-instance.com/module/tasks?goalId=1常用端点:
| 接口 | 用途 |
|---|---|
GET /module/tasks?goalId=1 | 获取项目下全部任务 |
POST /module/tasks | 创建任务 |
PATCH /module/tasks | 更新任务(状态、描述等) |
DELETE /module/tasks | 删除任务 |
GET /module/goals | 获取项目列表 |
GET /module/webhooks?goalId=1 | 获取项目 Webhook 列表 |
POST /module/webhooks/rotate-secret | 轮换 Webhook 密钥 |
Webhook 相关路由的权限校验(登录、项目 Owner、Token 权限三重中间件)可参考 WebhooksRoutes.ts。
更省事的方案——官方 SDK:仓库内置taskview-api客户端包(taskview-packages/taskview-api/),安装后即可类型安全地调用全部接口:
import axios from 'axios' import { TvApi } from 'taskview-api' const api = new TvApi(axios.create({ baseURL: 'https://your-instance.com', headers: { Authorization: 'Bearer tvk_your_token_here' }, })) const tasks = await api.tasks.fetch({ goalId: 1 }) // 拉取任务 const newTask = await api.tasks.createTask({ // 创建任务 goalId: 1, description: 'Task created via API', })API Token 的完整说明见 docs/2.features/8.api-tokens.md。
典型自动化场景:从事件到通知
把 Webhook 与 API 组合起来,几类常见玩法几乎零成本实现:
📣 场景一:任务变更推送到 IM接收task.created/task.assigneesChanged事件 → 校验签名 → 调用你的 Slack/企业微信机器人接口转发。若想免去自己维护机器人,TaskView 也内置了 Telegram 与 Slack 消息集成(个人私聊 + 项目群频道两级),配置指南见 docs/3.integrations/3.messaging.md。
🔄 场景二:Sprint 生命周期驱动 CI/CD订阅sprint.activated触发构建流水线、sprint.completed生成周报——Sprint 生命周期事件会携带完整 Sprint 对象(名称、日期、goalAchieved等),无需二次查询。
🤖 场景三:双向同步闭环Webhook 收到task.updated且changes中含statusId→ 通过 HTTP API 的GET /module/tasks获取任务详情 → 同步到外部系统;反向则用PATCH /module/tasks回写状态,形成闭环。
⏱ 场景四:工时统计报表订阅全部time-entry.*事件,把开始/停止计时实时汇入你的工时看板或计费系统。
⚠️ 本地测试提示:由于回环地址默认被拒绝,本地调试可启动 API 时设置
WEBHOOKS_ALLOW_PRIVATE_URLS=true,或用 ngrok、Cloudflare Tunnel 等隧道暴露接收端。
总结
TaskView 的 Webhooks 与 HTTP API 覆盖了自托管任务管理自动化的完整链路:Webhook 事件出站(18 种事件 + 签名验证 + 自动重试)、API Token 认证 + REST 接口出站入站、再叠加官方taskview-apiSDK,足以支撑 IM 通知、CI/CD 联动、双向同步等绝大多数自定义任务自动化通知系统。配合自托管的部署方式,数据与事件流都完全掌握在自己手中。
【免费下载链接】taskview-community
TaskView is a self-hosted project and task management platform focused on clarity, ownership, and control. TaskView is built for teams that want a transparent, self-hosted alternative to SaaS task managers.
相关推荐
Hardhat任务系统:自动化工作流与自定义任务
Hardhat任务系统:自动化工作流与自定义任务 Hardhat的任务系统是其核心功能之一,提供了一个强大而灵活的自动化工作流框架。内置任务系统通过精心设计的架
开发工具区块链CLIMediaPipe 实战指南:人脸检测、手势跟踪与姿态估计的一站式上手路径
MediaPipe 实战指南:人脸检测、手势跟踪与姿态估计的一站式上手路径 MediaPipe 是谷歌开源的跨平台实时媒体处理框架,核心能力是人脸检测、手势跟踪
人工智能机器学习计算机视觉多模态本地部署Easy!Appointments高级配置:自定义字段、Webhooks和通知系统
Easy!Appointments高级配置:自定义字段、Webhooks和通知系统 Easy!Appointments是一款功能强大的开源预约调度系统,通过其高
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考