关联文档:
- ntfy 实现消息订阅和通知(无需注册、无需服务器,太好了)_海纳老吴的博客-CSDN博客
- 群晖 nas 自建 ntfy 通知服务(梦寐以求)_海纳老吴的博客-CSDN博客
目录
一、消息实体对象接口
1. 消息发布方消息接口
2. 消息订阅方接口
一、消息实体对象接口
1. 消息发布方消息接口
uses
Notify.Notification.Contract;
//实际定义的接口
INotifyNotification = interface
['{BE2E83B7-C39E-4985-93F9-4468976B6AC5}']
function Topic: String; overload;
function Topic(const AValue: String): INotifyNotification; overload;
function MessageContent: String; overload;
function MessageContent(const AValue: String): INotifyNotification; overload;
function Title: String; overload;
function Title(const AValue: String): INotifyNotification; overload;
function Tags: INotifyTags; overload;
function Tags(const AValue: INotifyTags): INotifyNotification; overload;
function Priority: TNotifyPriority; overload;
function Priority(const AValue: TNotifyPriority): INotifyNotification; overload;
function AttachURL(const AValue: String): INotifyNotification; overload;
function FilePath: String; overload;
function AttachFile(const AValue: String): INotifyNotification; overload;
function FileName: String; overload;
function Click: String overload;
function Click(const AValue: String): INotifyNotification; overload;
function Action: INotifyAction; overload;
function Action(const AValue: INotifyAction): INotifyNotification; overload;
function ClearActions: INotifyNotification; overload;
function AsJSONString: String;
function Email: String; overload;
function Email(const AValue: String): INotifyNotification; overload;
function Icon: String; overload;
function Icon(const AValue: String): INotifyNotification; overload;
function Delay: String; overload;
function Delay(const AValue: String): INotifyNotification; overload;
end;
接口说明:
序号 | 参数(函数) | 说明 |
1 | Topic | string:字面意思是主题,实际就是消息发布方和订阅放约定的"暗号"。只有这个"暗号"对上了,订阅放才能收到发布方的消息。 |
2 | MessageContent | string:发布的消息内容字符串,最大长度4096字节 |
3 | Title | string:标题,消息体的标题,一般设置为简短的URL |
4 | Tags | INotifyTags: 可以用表情符号和其他相关字符串标记信息: 表情符号: 如果标签与表情符号简码相匹配,就会被转换为表情符号并添加到标题或信息中。 参见:Sending messages - ntfy |
5 | Priority | TNotifyPriority:所有信息都有一个优先级,它定义了手机通知你的紧急程度。总共分5级,默认是3,数值大表示优先级高。 |
6 | AttachURL | INotifyNotification: 您可以使用外部 URL 来指定附件的托管位置,而不是向手机发送本地文件。这可以是 Dropbox 链接、社交媒体上的文件或任何其他公开可用的 URL。由于文件是外部托管的,因此上述的过期时间或大小限制在此不适用。 要附加外部文件,只需输入AValue参数即可,例如 https://example.com/flower.jpg 会生成文件名 flower.jpg)。要覆盖此文件名,可以发送 X-Filename 标头或查询参数(或其任何别名 Filename、File 或 f)。 |
7 | AttachFile | 要将电脑中的文件作为附件发送,可以将其作为 PUT 请求主体发送。如果信息大于最大信息大小(4,096 字节)或包含非 UTF-8 字符,ntfy 服务器会自动检测 MIME 类型和大小,并将信息作为附件文件发送。要以附件形式发送较小的纯文本信息或文件,必须通过 X-Filename 标头或查询参数(或其别名 Filename、File 或 f)传递文件名。 默认情况下,按照 ntfy.sh 的配置方式,附件的最大大小为 15 MB(每个访问者的附件总大小为 100 MB)。附件会在 3 小时后过期,这通常会给用户足够的时间下载,或让安卓应用自动下载。还请查看以下其他限制。 |
8 | Click | string:您可以定义点击通知时打开的 URL。如果您的通知与 Zabbix 警报或您希望提供深度链接的事务有关,这可能会很有用。点击通知将打开网页浏览器(或应用程序)并打开网站。 要定义通知的点击操作,请将 URL 作为 X-Click 标头(或其别名 Click)的值。如果传递的是网站 URL(http:// 或 https://),网络浏览器就会打开。如果传递的是可由其他应用程序处理的其他 URI,则负责的应用程序可能会打开。 例如 http:// 或 https:// 将打开浏览器(如果注册了 URL,则打开应用程序) mailto:链接将打开您的邮件应用程序,如 mailto:phil@example.com geo:链接将打开谷歌地图,例如 geo:0,0?q=1600+Amphitheatre+Parkway,+Mountain+View,+CA ntfy:// 链接将打开 ntfy(参见 ntfy:// 链接),例如 ntfy://ntfy.sh/stats twitter:// 链接将打开 Twitter,例如 twitter://user?screen_name=... ... |
9 | Action | 您可以为通知添加操作按钮,让自己直接对通知做出反应。这一点非常有用,而且应用广泛。 您可以控制家用电器(打开/关闭车库门、改变恒温器的温度......),对常见的监控警报做出反应(磁盘已满时清除日志......),还可以做很多其他事情。一切尽在掌握。 目前支持以下操作: 查看: 点击操作按钮后打开网站或应用程序 |
10 | 可以通过邮件发布消息 | |
11 | Icon | 您可以在通知文本旁边添加一个图标。只需通过 X-Icon 标头或查询参数(或其别名 Icon)来指定图标所在的 URL。客户端将自动下载该图标(除非该图标已缓存在本地,且使用时间不超过 24 小时),并将其显示在通知中。图标会缓存在客户端本地,直到通知被删除。目前只支持 JPEG 和 PNG 图像。 |
12 | Delay | 您可以延迟发送信息,让 ntfy 在稍后日期发送。这可以用来给自己发送提醒信息,甚至在以后执行命令(如果订阅者对信息采取了行动)。 使用方法非常简单。您可以使用 X-Delay 标头(或其任何别名:Delay、X-At、At、X-In 或 In)设置发送时间,可以指定 Unix 时间戳(如 1639194738)、持续时间(如 30m、3h、2 天)或自然语言时间字符串(如上午 10 点、晚上 8:30、明天、下午 3 点、星期二、上午 7 点等)。 从今天起,您可以设置的最小延迟时间为 10 秒,最大延迟时间为 3 天。目前无法进行其他配置。 |
2. 消息订阅方接口
unit Notify.Event.Contract;
interface
uses
System.SysUtils,
Notify.Types,
Notify.Action.Contract,
Notify.Attachment.Contract,
System.Generics.Collections;
type
INotifyEventActions = TDictionary<String, INotifyAction>;
INotifyEvent = interface
['{0342B585-BB88-4A63-9C41-8848B90B6042}']
function Id: String; overload;
function Id(const AValue: String): INotifyEvent; overload;
function Time: Integer; overload;
function Time(const AValue: Integer): INotifyEvent; overload;
function Event: String; overload;
function Event(const AValue: String): INotifyEvent; overload;
function Topic: String; overload;
function Topic(const AValue: String): INotifyEvent; overload;
function Tags: TArray<String>; overload;
function Tags(const AValue: TArray<String>): INotifyEvent; overload;
function Click: String; overload;
function Click(const AValue: String): INotifyEvent; overload;
function Title: String; overload;
function Title(const AValue: String): INotifyEvent; overload;
function MessageContent: String; overload;
function MessageContent(const AValue: String): INotifyEvent; overload;
function Priority: TNotifyPriority; overload;
function Priority(const AValue: TNotifyPriority): INotifyEvent; overload;
function Action: INotifyAction; overload;
function Action(const AValue: INotifyAction): INotifyEvent; overload;
function Actions: INotifyEventActions;
function Attachment: INotifyAttachment; overload;
function Attachment(const AValue: INotifyAttachment): INotifyEvent; overload;
function Icon: String; overload;
function Icon(const AValue: String): INotifyEvent; overload;
end;
TNotifyEventProc = TProc<INotifyEvent>;
implementation
end.
接口说明:
订阅方的主体参数和发布方是一致的,但是订阅放方对了如下参数:
Field | Required | Type | Example | Description |
---|---|---|---|---|
id | ✔️ | string | hwQ2YpKdmg | Randomly chosen message identifier |
time | ✔️ | number | 1635528741 | Message date time, as Unix time stamp |
expires | (✔)️ | number | 1673542291 | Unix time stamp indicating when the message will be deleted, not set if Cache: no is sent |
event | ✔️ | open , keepalive , message , or poll_request | message | Message type, typically you'd be only interested in message |
topic | ✔️ | string | topic1,topic2 | Comma-separated list of topics the message is associated with; only one for all message events, but may be a list in open events |
message | - | string | Some message | Message body; always present in message events |
title | - | string | Some title | Message title; if not set defaults to ntfy.sh/<topic> |
tags | - | string array | ["tag1","tag2"] | List of tags that may or not map to emojis |
priority | - | 1, 2, 3, 4, or 5 | 4 | Message priority with 1=min, 3=default and 5=max |
click | - | URL | https://example.com | Website opened when notification is clicked |
actions | - | JSON array | see actions buttons | Action buttons that can be displayed in the notification |
attachment | - | JSON object | see below | Details about an attachment (name, URL, size, ...) |
Attachment (part of the message, see attachments for details):
Field | Required | Type | Example | Description |
---|---|---|---|---|
name | ✔️ | string | attachment.jpg | Name of the attachment, can be overridden with X-Filename , see attachments |
url | ✔️ | URL | https://example.com/file.jpg | URL of the attachment |
type | -️ | mime type | image/jpeg | Mime type of the attachment, only defined if attachment was uploaded to ntfy server |
size | -️ | number | 33848 | Size of the attachment in bytes, only defined if attachment was uploaded to ntfy server |
expires | -️ | number | 1635528741 | Attachment expiry date as Unix time stamp, only defined if attachment was uploaded to ntfy server |