个人通知渠道
个人交付渠道将您自己的 Kanera 通知发送到电子邮件或浏览器推送以外的其他地方。
电子邮件和浏览器推送对大多数人来说都很有用,但它们并不是唯一有用的目标。 一些团队已经运行了自托管的通知服务器。 有些人希望在手机上收到提醒,但不想授予浏览器通知权限。 Kanera 将事件放入脚本、主仪表板或待命工具中。
Kanera 支持三个个人目的地:
| 频道 | 什么是 | 适合 |
|---|---|---|
| 非法 | 您通过手机或桌面应用程序订阅的通知服务器 开发者 或者您自己的实例。 | 无需浏览器推送的手机提醒、共享团队主题、家庭实验室设置。 |
| 戈蒂菲 | 具有自己的 Android 应用程序和 Web UI 的自托管通知服务器。 | 完全自托管的警报,路径中没有第三方推送服务。 |
| 个人网钩 | 您拥有的 HTTPS 端点,用于接收签名的 JSON。 | 脚本、仪表板、呼叫路由、自定义自动化、您已经运行的聊天桥。 |
这些渠道是个人的,属于您的帐户,而不是工作区,其他人无法查看或更改它们。 它们不依赖于单位推送设置或浏览器通知权限。
他们需要 Pro 30天 Pro试用。它们在托管的 Free 上不可用,其中电子邮件、浏览器推送和应用程序内抽屉继续正常工作。参见 计划所需资源 下文。
如果您希望整个团队都能看到共享频道中的卡片活动,请使用 聊天通知目标 个人频道是私人源;聊天目标是团队源,由工作区管理员设置。
何时使用每个通道
使用 非法 当您想要手机或桌面提醒,而不想使用浏览器推送时,安装 ntfy 应用程序,订阅一个主题,Kanera 会发布到该主题。 如果您已经在 ntfy 上发布了其他提醒,并且希望 Kanera 与其并列,这也是最简单的选择。
使用 戈蒂菲 Gotify 运行在您自己的服务器上,Android 应用直接与其通信,而 Kanera 只需要服务器 URL 和应用令牌,这样您就可以在任何时候都可以访问您的数据。
使用一个 个人 webhook 当您想要对通知做些什么而不是阅读它时。 常见用法:
- 将提及和逾期卡片路由到待命或分机工具。
- 将您的任务发布到个人聊天频道或您已经运行的机器人。
- 将通知附加到日志、仪表板或个人数据库。
- 将 Kanera 桥接到通知提供程序 Kanera 不直接支持。
计划所需资源
个人交付渠道需要 Pro 或 Pro 试用版。 电子邮件、浏览器推送、应用内通知抽屉式导航栏、每日摘要、观看和 工作区规则 所有计划均可用,不受此影响。
主机 Free 上, 其他通知目的地 表演 ntfy、Gotify 和个人 webhook 在您的计划中不可用 是的,这是最好的。
如果一个组织从 Pro 或试用版升级到 Free,Kanera 会关闭每个人的 ntfy、Gotify 和 webhook 通道,不会删除任何内容:服务器 URL、主题、令牌、签名秘密和每种类型的首选项都会保留,任何等待发送的内容都会被丢弃,而不会延迟到达。 再次升级后,会恢复每个人启用的通道,因此无需重新连接任何内容。
设置它们的位置
开放 个人资料设置 -> 通知 并扩大 其他通知目的地.
每个通道都有自己的卡,连接字段,一个 已启用 切换,通知类型切换,以及 保存, 测试, 和 删除 行动。
在您填写完通道所需的所有内容之前,无法启用通道。您在此处允许的内容是频道向您发送的最多内容: 工作区规则 可以为一个工作区静音一个通道,但绝不会让它发送超过这些设置允许的数量。
您的应用内通知抽屉式导航栏从不受这些设置的影响,它始终显示完整的 Feed。
设置 ntfy
- 选择服务器。使用
https://ntfy.sh为公共服务,或您自己的实例,如https://ntfy.example.com. - 选择一个主题名称。将其视为公共服务的秘密,因为任何知道某个主题的人都可以订阅它。像这样的东西
kanera-a7f3c2-amelia是比kanera. - 内 Kanera请输入密码 服务器URL 以及 主题。将查询字符串保留在服务器 URL 之外; Kanera 附加主题本身。
- 如果主题需要身份验证,请将访问令牌粘贴到 不记名令牌。它在开放服务器上是可选的,在受保护服务器上是必需的。
- 点击 保存,然后打开 已启用.
- 选择此渠道应传送的通知类型。
- 点击 测试 并确认消息到达。
- 如果您尚未订阅,请在 ntfy 应用程序或 Web UI 中订阅相同的主题。
每条通知都会以带有标题的普通消息形式到达,点击它将在 Kanera 中打开卡片。
设置 Gotify
- 打开您的 Gotify 网页界面并创建一个 适用 例如,"Kanera " 。
- 复制 Gotify 生成的应用程序令牌。 应用程序令牌以
A。不要使用客户端令牌。 - 内 Kanera请输入密码 服务器URL,例如
https://gotify.example.com,并将令牌粘贴到 应用令牌. - 点击 保存,然后打开 已启用.
- 选择此渠道应传送的通知类型。
- 点击 测试 并确认消息在 Gotify 中出现。
消息会在 Gotify 中显示在您创建的应用程序下,并附有通知标题、可读摘要和打开卡片的链接。 它们以正常优先级发送,因此 Gotify 的每个应用程序设置决定警报的强度。
应用令牌以加密方式存储,并且不会再次显示;该字段显示 保存 — 留空以保留。使用 移除标记 要清除它,或者粘贴一个新令牌并保存以替换它。
设置个人 webhook
- 准备一个接受 HTTPS 的端点
POST使用 JSON 主体请求并快速返回 2xx 状态。 - 内 Kanera请输入密码 端点URL 并点击 保存.
- Kanera 生成一个签名秘密并显示一次。 现在就复制 再次,这是不可能的。
- 将密码存储在接收器中,并在信任之前验证每个请求。
- 开机 已启用,然后选择此通道应传送的通知类型。
- 点击 测试 并确认您的端点已收到并验证了请求。
使用 旋转秘密 旧的密码会立即停止工作,因此请在同一维护窗口更新您的接收器。
请求头
| 头条 | 意义 |
|---|---|
Content-Type | 总是 application/json. |
User-Agent | Kanera-Personal-Notifications/1.0. |
X-Kanera-Event-Id | 此交付的唯一 ID。 id 身体的。 |
X-Kanera-Timestamp | Unix 时间戳(秒 ) 。 |
X-Kanera-Signature | sha256= 加上一个 HMAC-SHA256 的 ${timestamp}.${rawBody} 使用您的签名秘密。 |
有效载荷
{
"id": "0199c3ab-6f5e-7d21-9b0c-8b31a7e40f2d",
"type": "notification",
"occurredAt": "2026-07-30T09:14:22.481Z",
"notification": {
"kind": "comment_mentioned",
"reason": "mentioned",
"title": "Mentioned in a comment",
"body": "Amelia mentioned you in Website Redesign / Prepare kickoff agenda: can you review the copy?",
"url": "https://kanera.example.com/b/48a52a55-763e-4c64-8a76-51ac56247f5c/c/70c39cef-1aec-44e6-a8f5-f36f765a818d",
"tag": "card:70c39cef-1aec-44e6-a8f5-f36f765a818d:mentioned"
}
}
| 外地 | 意义 |
|---|---|
id | 交付 id,也发送为 X-Kanera-Event-Id。用它来使你的接收者幂等。 |
type | 总是 notification 个人渠道交付。 |
occurredAt | 通知被排队时的 ISO 8601 时间戳。 |
notification.kind | 通知类型,如 card_assigned, card_comment_added, comment_mentioned, card_due_date_changed, card_overdue, card_reminder, 或 test. |
notification.reason | 为什么你被通知: assigned, comment, mentioned, dueDateChanged, overdue, reminder, 或 test. |
notification.title | 简短的标题。 |
notification.body | 人类可读的摘要,包括演员、板和卡片。 |
notification.url | 深层链接到卡片,当通知指向一个。 |
notification.tag | 分组键,用于折叠有关同一卡片的重复通知。 |
验证签名
import crypto from "node:crypto";
import express from "express";
const app = express();
app.post("/kanera/notifications", express.raw({ type: "application/json" }), (req, res) => {
const timestamp = req.header("X-Kanera-Timestamp") ?? "";
const signature = req.header("X-Kanera-Signature") ?? "";
const expected = "sha256=" + crypto
.createHmac("sha256", process.env.KANERA_NOTIFICATION_SECRET!)
.update(`${timestamp}.${req.body.toString("utf8")}`)
.digest("hex");
const ok = signature.length === expected.length
&& crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected));
if (!ok) return res.status(401).send("invalid signature");
const event = JSON.parse(req.body.toString("utf8"));
// Handle event.notification.reason, .title, .body, and .url.
res.sendStatus(204);
});
始终根据原始请求正文进行验证。如果您的框架在验证之前解析 JSON,则检查可能会失败或变得不可靠。拒绝其请求 X-Kanera-Timestamp 从你自己的时钟,并且对待一个重复 X-Kanera-Event-Id 作为一个复制。
每个通道可以发送哪些通知
个人通道与电子邮件和推送通知类型相同:
| 类型 | 发送时 |
|---|---|
| 已分配卡 | 您被分配到一张卡片。 |
| 已添加卡片评论 | 有人在分配给您的卡片上发表评论。 |
| 发表评论 | 有人在评论中提到您。 |
| 卡到期日期已更改 | 分配给您的卡片上的到期日期发生了变化。 |
| 卡逾期 | 分配的卡或分配的清单项目已过期。 |
| 您的卡提醒 | 一个 您设置的提醒 卡上到期。 |
每个通道都有自己的类型切换,因此通道比电子邮件安静得多。 一个常见的设置是用电子邮件处理所有内容,用 ntfy 处理提及和逾期工作,用 webhook 处理给个人脚本输入的任务。
被动观察者活动会显示在应用内抽屉式导航栏中,每日摘要仅限电子邮件。
允许的目的地和安全
Kanera 在您保存时检查每个目的地,并在每次通知发出之前再次检查。
默认情况下:
- 目的地必须使用 公共 HTTPS.
- 请输入用户名和密码登录
https://user:pass@host)或一个#fragment. - ntfy 或 Gotify 服务器 URL 不能携带查询字符串。仅输入服务器地址。
- 私人或内部网络上的地址将被拒绝。
- 重定向到其他地方的目的地被视为失败,Kanera 等待回复的时间不超过 10 秒。
一些Kanera安装允许在内部网络上接收,这是家庭或公司局域网上运行的ntfy或Gotify服务器通常需要的。 无论如何,有少数地址仍然被阻止,包括云提供商为自己的基础设施保留的那些地址。 通知设置页面会告诉你这两种策略中哪一种适用于你;如果需要内部网络策略,请询问管理Kanera的人。
您的令牌和签名秘密以加密方式存储,并且在您保存后不会再显示。 如果交付失败,Kanera 会记录失败,但不会记录您的目标或凭据。
从交付期望什么
通知会在半分钟内到达,而不是立即到达。 Kanera 在后台发送通知,因此您在应用程序中所做的任何事情都不会等待 ntfy 服务器或 webhook 响应。
如果您的目的地短暂无法联系,Kanera 会多尝试几次,然后放弃通知。 如果您关闭某个通道,清除其详细信息,或者组织转移到没有个人通道的计划,任何仍在等待的通知都会被丢弃,而不是在几个小时后失去上下文而到达。
测试 即使在启用通道之前,也能立即发送并运行,因此您可以先确认连接。
故障排除
| 问题 | 检查 |
|---|---|
| Kanera 在保存时拒绝 URL。 | 使用 https://、删除任何用户名、密码或 #fragment,并从 ntfy 或 Gotify 服务器 URL 中删除查询字符串。仅当您的安装允许时才接受私人或内部地址。 |
| 整个部分说它是不可用的您的计划。 | 个人频道需要 Pro 或 Pro 试用版。 电子邮件、浏览器推送和应用内抽屉式导航栏不受影响。 |
| 每个频道都关闭了。 | 检查组织是否迁移至Free。降级会禁用 ntfy、Gotify 和 webhook 传送并保留已保存的连接;升级会将它们重新打开。 |
| 该 已启用 切换显示为灰色。 | 通道未完全配置。 ntfy 需要服务器 URL 和主题,Gotify 需要服务器 URL 和应用令牌,webhook 需要带有生成的秘密的 URL。 |
| 测试表示通道未完全配置。 | 首先保存连接字段,然后进行测试。 |
| 测试失败,出现 HTTP 状态。 | 目标拒绝了请求。 对于 ntfy,请检查主题和任何所需令牌。 对于 Gotify,请确认您使用的是应用程序令牌,而不是客户端令牌。 |
| 测试超时或报告网络故障。 | Kanera 无法在 10 秒内连接到主机。 确认主机是否可以从 Kanera 服务器连接到,并记住重定向不会被跟踪。 |
| 即使测试成功,也没有任何东西到达。 | 检查该通道上的通知类型切换,然后检查是否 工作区规则 暂停或缩小该工作区的交付范围。 |
| webhook 接收器拒绝签名。 | 检查原始主体,而不是重新序列化的对象,并确认您正在使用当前的秘密(如果您最近旋转了它 ) 。 |
| 转换秘密后通知停止。 | 更新接收器。 上一个秘密立即停止工作。 |
