Habitica Webhook自动化实战:3步构建你的习惯提醒机器人
【免费下载链接】habiticaA habit tracker app which treats your goals like a Role Playing Game.项目地址: https://gitcode.com/gh_mirrors/ha/habitica
Habitica是一款把目标管理变成角色扮演游戏的习惯追踪应用(habit tracker RPG)。而它内置的Webhook 推送机制,正是把习惯数据接到你工作流里的核心功能:完成任务、宠物孵化、任务关卡开始等事件发生时,Habitica 服务器会自动向你的网址发送一条 JSON 通知。本文将带你 3 步搭建一个习惯提醒机器人——无需复杂开发,普通用户也能上手。
为什么需要 Habitica Webhook 自动化
用习惯类应用时,最大的痛点是:完成了没人知道,断了没人提醒。
Habitica 的 Webhook 就是解决这个问题的钩子。你在设置里填一个接收地址(URL),之后每当指定事件发生,服务器就会主动 POST 一段 JSON 到你的地址。你的"机器人"只需要负责收消息——转发到 Slack、微信、邮箱,或者记录到表格都行。
Habitica Webhook 支持的 5 种事件类型
Webhook 的完整数据模型定义在 website/server/models/webhook.js 中,共支持 5 种类型,选对类型是第一步:
| 类型 | 触发时机 | 典型用途 |
|---|---|---|
taskActivity(默认) | 任务创建 / 更新 / 删除 / 完成打分 | 习惯完成提醒(最常用) |
userActivity | 宠物孵化、坐骑养成、角色升级 | 成长里程碑播报 |
questActivity | 任务关卡开始 / 完成 / 收到邀请 | 团队任务日程提醒 |
groupChatReceived | 群组聊天收到消息(需指定 groupId) | 群消息同步到其他平台 |
globalActivity | 以上全部事件 | 全量数据备份 |
各类型的触发开关(options)是布尔值,例如taskActivity默认只有"完成打分(scored)"开启,其余(created / updated / deleted / checklistScored)默认关闭,可按需打开。
步骤一:在设置页创建 Webhook
- 打开 Habitica 网站,进入设置 → 网站数据(Site Data)→ Webhooks,该页面的实现见 website/client/src/pages/settings/siteDataRows/webhooksRow.vue;
- 点击添加 Webhook,填入一个能接收 POST 请求的 https 地址(例如你的云函数、Slack 机器人 webhook、或自建服务的回调端点);
- 点击保存。新建的 Webhook 默认类型为
taskActivity、默认开启"完成"事件——也就是说,保存即生效,你每完成一个习惯任务,机器人就会收到一条推送。
💡 不想用网页界面?也可以直接调 API:向POST /api/v3/user/webhook发送请求体即可创建,接口参数与示例完整定义在 website/server/controllers/api-v3/webhook.js:
{ "url": "https://你的回调地址.com/notify", "label": "习惯提醒机器人", "type": "taskActivity", "options": { "scored": true, "created": true } }步骤二:挑选事件类型并配置触发选项
创建时或之后通过编辑都能修改type和options(id不可改,PUT /user/webhook/:id更新接口见 website/server/controllers/api-v3/webhook.js)。几个实用配置思路:
- 习惯打卡播报:
taskActivity只开scored,只推送"完成任务",最省流量; - 升级庆祝:
userActivity打开leveledUp和petHatched,角色升级、宠物孵化时让机器人大喊一声; - 团队任务管家:
questActivity打开questStarted和questInvited,配合 Habitica 挑战页面 的群组玩法,自动提醒队友开荒; - 指定群组监听:
groupChatReceived必须在options.groupId里填目标群组的 UUID,否则保存会报错(校验逻辑见 website/server/models/webhook.js)。
步骤三:写一个接收端,完成习惯提醒机器人
Habitica 发送请求的细节都集中在 website/server/libs/webhook.js 中,了解这些能让你写出更稳的接收端:
- 请求方式:HTTP POST + JSON 请求体,超时 30 秒,失败自动重试 3 次;
- 每条推送都带
webhookType字段和user._id,方便你区分事件来源; - 自动熔断:某个 Webhook 连续失败达到 10 次会被自动停用,且 1 个月内的失败持续累计、超期自动清零(见 website/server/libs/webhook.js)。所以接收端一定要返回 2xx,否则机器人会被"保护性关机";
- 生产环境下 URL 必须带 TLD 域名,
http/https之外的协议会被拒绝。
以"习惯完成"事件为例,你的接收端拿到的载荷包含task(任务详情)、direction(加分/减分方向)、delta(本条经验加成)以及user.stats(用户属性),由 website/server/libs/webhook.js 组装,触发点在任务打分流程中(website/server/libs/tasks/index.js)。最简接收逻辑就是:判断webhookType→ 提取任务名 → 转发到你的通知渠道。
常见问题速查
| 问题 | 答案 |
|---|---|
| Webhook 没收到消息? | 先检查地址是否 https 可达、是否返回了 2xx;再确认对应事件选项是否为true |
| Webhook 被自动停用了? | 连续失败 10 次触发;修复接收端后,把enabled重新置为true |
| 想验证 Webhook 是否保存成功? | 调GET /api/v3/user/webhook可拉取全部 Webhook 列表(测试用例见 test/api/v3/integration/webhook/GET-user-webhook.test.js) |
| 能同时建多个 Webhook 吗? | 可以,它们按id(UUID)区分,互不干扰,各自独立熔断 |
小结
回顾这 3 步:① 在设置页添加 Webhook → ② 按场景选择事件类型与选项 → ③ 用任意接收端处理 JSON 推送。Habitica 的 Webhook 不需要你改动游戏本身,只需一个能收 POST 的地址,就能把"完成习惯"这件事实时同步到 Slack、微信或你的自建系统里——让坚持习惯这件事,从此有人(机器)见证。
【免费下载链接】habiticaA habit tracker app which treats your goals like a Role Playing Game.项目地址: https://gitcode.com/gh_mirrors/ha/habitica
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考