Sign inSign up

trah01/accnotify-server

By trah01

•Updated 19 days ago

Accnotify - A Bark-compatible notification push server with RSA encryption

Image
0

1.4K

trah01/accnotify-server repository overview

⁠Accnotify

Accnotify 是一款 Android 消息或者电脑消息推送的工具,可以把自动化脚本、监控告警和平台通知发送到手机或者电脑。支持文字、链接、图片、消息历史,以及 GitHub、GitLab、飞书、钉钉、企业微信等平台的通知接入。

⁠安装与开始使用

⁠安卓端

支持 Android 8.0 及以上版本。从 发布页面⁠ 下载 APK,在手机上安装并打开。

  1. 默认使用官方服务器 https://an.trah.cn。如需使用其他服务器,在“设置”中添加并选择服务器地址。
  2. 回到首页,点击“注册设备 / 同步连接”。首次使用官方服务器时,阅读并确认使用声明。
  3. 按下方说明开启系统权限,确认首页显示“服务已连接”。
  4. 在首页复制“Push 链接”,供脚本或通知工具向这台手机发送消息;接入平台通知时复制“Webhook 链接”。
  5. 点击“学习怎么用”,选择示例并发送测试消息。
⁠电脑端(测试中)

电脑端目前处于测试阶段,暂非正式版。

支持 Windows 和 macOS,使用流程和手机差不多,可以独立接收,也可以和多台手机、电脑共用一个推送 ID。

电脑端同样支持多服务器管理、公用 ID 与密钥、设备重置和注销、Markdown 消息、分组筛选、图片预览与保存、复制及清空历史,以及主题设置、使用教程和手动检查更新。图片直接分享取决于系统支持情况,桌面系统通知的图片与分组能力存在限制,详见 电脑端说明⁠。

⁠安卓保活-后台接收消息

“系统权限”里有“保活设置”和“通知权限” 按照说明配置即可

不同手机的设置名称可能不同,但权限都差不多。无障碍可能会造成部分软件异常,但由于国内系统的限制,不开启会更容易被杀,能不开自然是最好。设置里的“前台常驻通知”也可以按需开启,实际效果看手机系统。

⁠查看与管理消息

  • 支持搜索、按分组筛选,点开消息可以复制内容、打开链接。
  • 手机端支持 Markdown、图片预览,图片可以长按保存或分享;部分平台消息还能展开原始内容。
  • 手机端左右滑动消息可以删除,也可以一次清空历史;电脑端在详情里删除。
  • 发送相同 id 可以更新消息,带 delete 可以删除消息,下面有示例。

历史保存在各台设备本地,绑定不会合并或同步以前的记录。

⁠发送消息

使用首页复制的 Push 链接作为接收地址。以下地址和设备密钥均为占位示例,请替换为自己的链接。

⁠文字消息

向 Push 链接发送 POST 请求,使用 JSON 填写标题和正文:

curl -X POST 'https://你的服务器/push/你的设备密钥' \
  -H 'Content-Type: application/json' \
  -d '{"title":"任务完成","body":"备份已完成"}'

正文中的 \n 表示换行。标题可以省略。

也可以使用 Bark 风格的 GET 链接;中文和特殊字符需要进行 URL 编码:

https://你的服务器/push/你的设备密钥/标题/正文
⁠Markdown 消息

可使用 markdown 代替正文,支持 JSON、表单和查询参数;同时传入 body 时优先使用非空的 markdown。消息详情会渲染 Markdown 格式。

{
  "title": "任务状态",
  "markdown": "**备份完成**\n\n- 文件:12 个\n- 状态:成功",
  "group": "work"
}
⁠更新或删除消息

id 是自定义的消息名称:不填则新增,相同则更新,不同则分别保存。支持 JSON、表单和 URL 参数。

{"id":"backup-status","title":"备份任务","body":"正在备份"}
{"id":"backup-status","title":"备份任务","body":"备份已完成"}
{"id":"backup-status","delete":"1"}

依次向 Push 链接 POST 上面三个请求,效果为新增、更新、删除。也可以直接使用链接:

https://你的服务器/push/你的设备密钥/备份任务/正在备份?id=backup-status
https://你的服务器/push/你的设备密钥/备份任务/备份已完成?id=backup-status
https://你的服务器/push/你的设备密钥?id=backup-status&delete=1
  • URL 第一个参数用 ?,后续用 &;中文和特殊字符需要 URL 编码。同名字段以 URL 中的非空值为准,POST 也可将参数放在 URL 中。
  • id 必须是字符串,最长 256 字节,与设备 ID、接口返回的 message_id 不同。
  • 更新需要重新发送完整内容;操作只影响本次接收设备,不跨服务器。离线操作最多等待 5 分钟。
  • Android 会同步更新或删除系统通知;macOS、Windows 已显示的通知可能需要手动清除。
  • 使用发送端加密时,id、delete 与消息内容一起加密,不放在密文外。
⁠链接与图片

在 JSON 中添加 url 或 image:

{
  "title": "监控通知",
  "body": "点击打开链接查看详情",
  "url": "https://example.com/status",
  "image": "https://example.com/image.png"
}

图片支持可访问的图片链接,也支持 data:image/png;base64,... 格式的数据。系统通知会先显示文字,图片加载成功后再显示大图;加载失败或图片超过 8 MB 时仍保留文字通知。还可以使用 group 为消息指定分组。

⁠接入平台通知

将首页复制的 Webhook 链接填入平台通知设置,选择 POST、application/json。Accnotify 会自动整理平台消息,并保留原始内容。平台名称加在密钥后、? 参数前:

平台追加路径
GitHub/github
GitLab/gitlab
Docker Hub/docker
Gitea / Forgejo/gitea / /forgejo
飞书 / Lark/feishu
钉钉/dingtalk
企业微信/wecom

例如 Forgejo,每次新增通知:

https://你的服务器/webhook/你的设备密钥/forgejo

若要固定更新一条消息、只发电脑并归入 work 分组:

https://你的服务器/webhook/你的设备密钥/forgejo?id=repo-status&target=pc&group=work

Webhook 支持与 Push 相同的消息参数。平台通知的参数放在 URL 中,平台数据自带的 id 等字段不会作为消息控制参数。

参数作用
id、delete更新或删除消息⁠
target指定接收设备⁠
group分组,平台通知默认 webhook
title、body替换自动整理的标题、正文
markdownMarkdown 正文,优先于 body
url、image、icon打开链接、图片、图标
sound、badge提示音、整数角标;效果取决于客户端和系统支持

通用 Webhook(不追加平台路径)会尝试自动识别平台,也接受 Push 格式 JSON、普通表单、multipart 表单和纯文本;URL 编码表单的 payload 字段可携带平台 JSON。GET 请求通过查询参数传内容,不支持 /标题/正文 路径。

Go 和 Cloudflare 均支持以上用法。发送端加密方式见下文⁠,密文中的平台数据不会自动整理。

需要测试接口时,可下载 接口测试页⁠,用浏览器打开。推送、定向发送、更新删除、加密、Webhook、设备绑定和连接都能测,也能生成独立的电脑测试设备。后台接口需要把测试页放在后台同源地址下打开。

⁠多设备与指定接收设备

手机和电脑都可以独立使用,也可以在同一个服务器上共用 ID,支持多台手机、多台电脑。每台都有自己的设备标识、RSA 密钥和收件状态,移除一台不会影响其他设备。

手机在“设置 → 设备与消息提醒 → 绑定已有 ID”里粘贴已有设备的 Push 链接,点击“发送验证码”。到确认设备的历史消息里找验证码,填回发起设备,点击“确认绑定”就行。验证码 5 分钟有效;“同 ID 的设备”里可以查看标识、移除设备或解除绑定。绑定后原来的独立链接失效,本地历史保留。

默认全部推送,想指定范围就加 target:

target发给谁
不填或 all同一个 ID 下的全部设备
pc(也支持 desktop)全部电脑
mobile全部手机
某台设备的标识只发给这台设备

比如只推送给全部电脑:

{"body":"任务完成","target":"pc"}

JSON、表单和链接都可以带 target,Webhook 也可以加 ?target=pc。首页“Push 链接(仅本机)”已经带了本机标识,直接复制就能用。没有对应设备时会返回错误。

推送 ID 是 32 位大小写英文字母和数字。设备标识是另一回事,用来区分具体哪台手机或电脑,改设备名称不会改变它。

⁠消息提醒规则

手机在“设置 → 设备与消息提醒 → 消息提醒规则”里设置,电脑在设置里调整。可以关闭通知、只在工作日或指定星期和时段提醒,也可以设置每日静默、节假日静默、自定义静默和上班日期。比如只在工作日 8 点到 17 点提醒。

关闭提醒或静默时,消息照样进历史,只是不弹通知,恢复后也不会补弹。按本机时间判断,结束早于开始表示跨午夜,开始和结束一样表示全天。

节假日在设置里手动点击“获取本年度节假日”,从 Timor⁠ 获取全年数据并缓存,不会自动请求或重试。再次获取会先确认,失败保留旧数据;也可以导入本地日历。没有本年度数据时,工作日先按周一到周五算,自定义日期可以覆盖日历。

⁠分别设置通知提醒

首页“系统权限 → 通知权限”会打开手机的通知设置,可以分别调整各类消息的提示音、振动和静音,具体选项看手机系统。

通知渠道发送时的 group 值
普通消息不填写,或使用其他分组名称
重要提醒important 或 重要提醒
工作通知work 或 工作通知
生活通知life 或 生活通知

例如,发送 {"title":"备份失败","body":"请检查备份任务","group":"important"} 会使用“重要提醒”渠道。发送端加密消息也按解密后的 group 选择渠道;各渠道初始使用系统默认提示音,可以在系统设置中自行修改。

为兼容 Bark,接口接受 sound 和 badge 参数,但客户端不使用它们指定提示音或角标数量。声音由手机系统的通知渠道设置决定,角标显示由手机系统管理。

⁠外观与设备设置

设置里可以选白、蓝、绿、红、粉、黑主题,以及浅色、深色或跟随系统。默认白色,“关于项目”(电脑端为“关于”)里可以手动检查更新,只提示适用于当前平台的正式安装包。“学习怎么用”里有使用说明和测试模板,也能测试只推电脑或只推手机。

支持保存多个服务器,切换后回首页同步连接。首页点击 ID 可以切换“私有随机 ID”和“公用 ID”,私有 ID 可以重新生成。“通用信息设置”里统一管理本机的公用 ID 和公用秘钥,添加服务器时可选择复用。这里的公用 ID 是本机在不同服务器间复用,跨设备共用要走验证码绑定。

设备操作只影响当前服务器上的本机:

  • 仅重置 RSA 密钥:更换加密密钥,推送地址保留。
  • 重置设备 ID 和 RSA 密钥:本机换成新的独立 ID,本地历史保留,需要更新自己的推送链接。
  • 注销设备 ID 和服务端公钥:移除本机注册,历史保留,再次同步会使用新的 ID。

已绑定的设备重置或注销后,其他成员继续使用原来的共用 ID;独立设备的旧链接会失效。共用 ID 时,想切换首页 ID,需要先解除绑定。

⁠服务端与管理后台

服务端可以用 Go 自建,也可以部署到 Cloudflare,后者见 Cloudflare 说明⁠。客户端按全新安装设计。Go 服务端启动时会自动补齐旧数据库的设备字段,保留原有设备和推送地址。升级前请备份数据库。

Go 版有 admin 后台,可以看推送统计、设备在线状态和实时日志,也能给指定设备或全部设备发消息、更新和删除消息。设备列表会显示手机/电脑、唯一标识和推送 ID 分组,支持搜索和分页。

Go 服务端使用 Go 1.27.3 构建,Docker 构建镜像同步固定为该版本;本地编译需要 Go 1.27.3 或更高版本。

后台默认不开,配置至少 12 个字符的 ACCNOTIFY_ADMIN_PASSWORD 后启用。默认用户名 admin,访问 http://你的服务器:8081/admin/;推送接口还是 8080。Docker 部署配置见 Compose 示例⁠,Cloudflare 版没有这个后台。

⁠发送端加密

如需在发送前加密消息,可在首页打开“发送端加密密钥”,生成或输入密钥并保存,再让发送脚本使用同一密钥。密钥按服务器地址分别加密保存在本机,覆盖安装会保留。首次启动自动生成并保存一把公用秘钥;添加或编辑服务器时可勾选“复用公用秘钥”,也可在密钥弹窗中勾选同名选项填入后保存。复用是持续关联,公用秘钥更新后自动生效;未选择复用时,各服务器使用各自配置的密钥。

此功能需要发送脚本主动配合,设置密钥后,普通推送和 Webhook 不会自动变成发送端加密。更换密钥时,需要同步更新发送脚本。配置方法见 发送端加密说明⁠。

普通推送由服务器按各台设备的公钥加密后投递,服务器仍可读取消息内容。建议使用 HTTPS,并通过 POST 或 Webhook 发送敏感内容。Push 链接、Webhook 链接和设备密钥都可以用于向你的设备发送消息,请妥善保管。

⁠收不到消息时

  1. 检查手机网络,以及首页是否显示“服务已连接”;未连接时尝试“注册设备 / 同步连接”。
  2. 检查无障碍、后台运行、自启动、电池优化和通知权限。
  3. 使用“学习怎么用”发送测试消息,排查发送工具是否使用了正确的服务器和最新的推送地址。
  4. 如果历史已有消息但没弹通知,先检查“消息提醒规则”,再看通知权限、通知渠道和系统勿扰模式。

服务器接受请求不代表设备已经收到,各台设备分别确认收件。离线消息仅在发送后的 5 分钟内等待补发,超过有效期后不会补发。

⁠反馈

遇到问题可提交 Issue⁠,说明手机型号、Android 版本、应用版本和复现步骤。截图与日志中请隐藏设备密钥、推送链接和消息中的个人信息。

Tag summary

Content type

Image

Digest

sha256:9a0c62a46…

Size

14.2 MB

Last updated

19 days ago

docker pull trah01/accnotify-server