個人通知渠道
個人交付渠道將您自己的 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 接收器拒絕簽名。 | 檢查原始主體,而不是重新序列化的物件,並確認您正在使用當前的秘密(如果您最近旋轉了它 ) 。 |
| 轉換秘密後通知停止。 | 更新接收器。 上一個秘密立即停止工作。 |
