ntfy 如何为通知添加动作按钮并配置 view 与 http 动作
ntfy 如何为通知添加动作按钮并配置 view 与 http 动作【免费下载链接】ntfySend push notifications to your phone or desktop using PUT/POST项目地址: https://gitcode.com/GitHub_Trending/nt/ntfy如果你通过 ntfy 推送一条通知后还需要点进 App 或网页才能做下一步操作打开某个面板、调用一次 REST API那就用不上动作按钮了。ntfy 允许在发布通知时附带最多三个动作按钮用户在通知上直接点按即可触发。本文以官方文档docs/publish.md的 “Action buttons” 一节为主线演示如何用X-Actions请求头或 JSON 请求体两种方式配置view打开网站/App和http发送 HTTP 请求两种动作并通过 JSON 订阅接口验证按钮定义是否随消息下发。前提条件你需要一个可发布的 ntfy 服务地址如 ntfy.sh 或自建服务安装方式见 安装文档和一个主题名。主题无需预先创建发布时即自动建立由于没有注册环节主题名本质上相当于密码文档建议选一个不易被猜中的名字。动作按钮在 Android、iOS 和 Firefox 通知上受支持。文档示例带两个用户动作按钮的通知来源docs/publish.md动作按钮的两种定义方式一条通知最多可以定义三个用户动作写法有两种任选其一在X-Actions请求头中用逗号分隔的简单格式请求头别名Actions、Action以 JSON 请求体发布时在actions键中放一个 JSON 数组。请求头格式分长短两种多个动作之间用分号;分隔键值对之间用逗号,分隔# 长格式 actionaction1, labellabel1, paramN... [; actionaction2, labellabel2, ...] # 短格式 action1, label1, paramN... [; action2, label2, ...]如果某个值本身包含逗号或分号可以用双引号或单引号把值包起来。每种动作的短格式为view:view, label, url[, cleartrue]http:http, label, url[, methodmethod][, headers.headervalue][, bodybody][, cleartrue]另有broadcast、copy两种动作本文不展开。配置 view 动作view动作在按钮被点按时打开一个网站或 Apphttp:///https://打开浏览器若某 App 注册了该 URL 则打开 Appmailto:打开邮件应用geo:打开 Google Mapsntfy://打开 ntfytwitter://打开 Twitter 等。具体如何路由取决于 Android 和桌面浏览器对链接的处理方式。view动作支持的字段字段必填类型默认值示例说明action✔️string-view动作类型必须是viewlabel✔️string-Turn on light通知中动作按钮的标签url✔️URL-https://example.com点按时打开的 URLclear-booleanfalsetrue点按动作按钮后清除通知文档给出的 curl 示例myhome为示例主题名替换为你自己的主题curl \ -d Somebody retweeted your tweet. \ -H Actions: view, Open Twitter, https://twitter.com/binwiederhier/status/1467633927951163392 \ ntfy.sh/myhome等价的 ntfy CLI 写法ntfy publish \ --actionsview, Open Twitter, https://twitter.com/binwiederhier/status/1467633927951163392 \ myhome \ Somebody retweeted your tweet.短格式之外也可以始终用keyvalue写法例如actionview, urlhttps://google.com, labelOpen Google。配置 http 动作http动作在按钮被点按时发送一个 HTTP 请求文档给出的用途示例是触发 REST API如开关车库门、控制灯光。注意两点默认发送 POST 请求不是 GET可用method参数改为其他方法唯一必填的参数是url请求头通过headers参数传递。http动作支持的字段字段必填类型默认值示例说明action✔️string-http动作类型必须是httplabel✔️string-Open garage door通知中动作按钮的标签url✔️string-https://ntfy.sh/mytopicHTTP 请求发送到的 URLmethod-GET/POST/PUT/...POST⚠️GET请求方法默认是 POST⚠️headers-map of strings-见示例请求携带的 HTTP 头JSON 发布时为 map简单格式用headers.headervaluebody-string空some body, somebody?HTTP 请求体clear-booleanfalsetrueHTTP 请求成功后清除通知请求失败则通知不会被清除文档给出的 curl 示例https://api.mygarage.lan/与 Bearer token 均为文档示例值curl \ -d Garage door has been open for 15 minutes. Close it? \ -H Actions: http, Close door, https://api.mygarage.lan/, methodPUT, headers.AuthorizationBearer zAzsx1sk.., body{\action\: \close\} \ ntfy.sh/myhome短格式为http, label, url例如http, Close door, https://api.mygarage.lan/close。组合一条带两个动作的通知下面把view和http组合在同一条通知里文档示例myhome替换为你自己的主题body{temperature: 65} curl \ -d You left the house. Turn down the A/C? \ -H Actions: view, Open portal, https://home.nest.com/, cleartrue; \ http, Turn down, https://api.nest.com/, body$body \ ntfy.sh/myhome对应的 ntfy CLI 写法body{temperature: 65} ntfy publish \ --actionsview, Open portal, https://home.nest.com/, cleartrue; \ http, Turn down, https://api.nest.com/, body$body \ myhome \ You left the house. Turn down the A/C?第二个动作里的body$body就是前面定义的 shell 变量值中包含逗号和引号靠引号包裹避免被解析成键值对分隔符。如果非 ASCII 字符在标题或动作里显示成?符号文档说明可以把任意请求头包括 actions按 RFC 2047 编码例如 base64 形式?UTF-8?B?8JHqfCfh6o?。用 JSON 数组定义动作发布时若在请求体中定义整条消息JSON 发布动作就是actions键下的 JSON 数组。注意文档的强调JSON 发布必须 PUT/POST 到 ntfy 根 URL而不是主题 URL——发到https://ntfy.sh/是正确做法发到https://ntfy.sh/mytopic是不正确的。curl ntfy.sh \ -d { topic: myhome, message: You left the house. Turn down the A/C?, actions: [ { action: view, label: Open portal, url: https://home.nest.com/, clear: true }, { action: http, label: Turn down, url: https://api.nest.com/, body: {\temperature\: 65} } ] }JSON 请求体中与本场景相关的字段完整字段表见 publish 文档 “Publish as JSON” 一节topic必填actions为 JSON 数组即上文的用户动作按钮message为空时置为triggered。验证动作是否随消息下发文档提供的核对路径是订阅接口。用 JSON 方式订阅该主题查看返回消息中的actions字段curl ntfy.sh/myhome/json?poll1/json端点返回的每条消息都是 JSON按 API 文档 的 JSON message formatactions字段是JSON array内容为发布时定义的动作按钮。确认输出中actions数组包含你定义的view/http条目说明动作定义已被服务器接收并随消息下发之后在订阅该主题的 Android App、iOS 通知或 Firefox 通知中应能看到对应按钮点按后分别触发打开链接、发送 HTTP 请求。另外两个与验证相关的行为边界cleartrue的动作在点按后清除该通知http动作的clear只在请求成功时清除通知请求失败时通知保留。限制与边界每条通知最多三个动作按钮view与http动作在 Android、iOS、Firefox 上受支持文档列出的broadcast动作仅 Android 支持copy动作的按钮只在 web app 和 Android App 通知列表中显示浏览器桌面通知中不显示http动作默认方法是 POST如果你的目标接口只接受 GET必须显式写methodGET用请求头方式发布时请求头别名X-Actions/Actions/Action均可见 参数总表。如果需要进一步定制消息内容比如根据 webhook 载荷动态生成动作文档的 “Message templating” 一节演示了模板语法ntfy://深链接可用于view的url让按钮直接打开 ntfy 的某个主题。【免费下载链接】ntfySend push notifications to your phone or desktop using PUT/POST项目地址: https://gitcode.com/GitHub_Trending/nt/ntfy创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考