通知器
通知器(Nexora Notif)是官方插件,负责把账户情况告诉面板的用户:到期日临近、流量即将用完、续费、增加了流量,以及你发给某个用户或某个分组的消息。它通过 Telegram、Bale、Soroush Plus、Rubika、短信、电子邮件、ntfy 或任意 HTTP API 发送。本页介绍它的安装、渠道、发送什么以及何时发送,还有你自己的消息。
一条通知,一次送达
一条通知只撰写一次,然后按你设定的顺序交给用户的各个渠道。只有当某个渠道无法送达时才尝试下一个:用户在该渠道没有地址、渠道拒绝了(机器人被屏蔽、号码不存在),或者连续失败三次。只有免费渠道都无法送达用户时,才会发送付费短信,而且没有人会收到同一条通知两次。
通知器用限定权限范围的令牌读取面板,并接收面板的签名事件。它把每个用户的即时通讯关联保存在面板上该账户的联系信息中(telegram_id、bale_id、soroush_id、rubika_id),其他插件和用户页面也能看到它们。
安装
在面板中:服务 → 扩展 → 浏览 → Nexora Notif → 安装。面板会询问它的问题,然后把它装在面板自己的服务器上或通过 SSH 装在另一台服务器上,或者给你一条命令自己运行。所有安装方式见 插件目录。
| 问题 | 设置的内容 |
|---|---|
| 端口 | 默认 8097。开启 HTTPS 时,这是通知器唯一的端口。 |
| 数据库 | SQLite,或带连接字符串的 PostgreSQL。 |
| 第一个管理员 | 名称,以及 10 个字符到 72 字节的密码。 |
| 管理路径 | 通知器提供的一切都在它之下。随机生成;留空则放在根路径。 |
| 公网地址 | 你打开通知器的地址:协议、主机和端口。 |
| HTTPS | panel(面板表单中的默认值)、acme、acme-http、self-signed 或 off,与所有插件相同(插件目录)。 |
手动安装时,在 Linux 服务器上以 root 身份运行:
sh install.sh --method docker --opt port=8097 --opt admin_password=… \
--panel-url https://panel.example.com --claim-code …--method script 改用 systemd 而不是 Docker 运行程序。再次运行同一条命令会就地更新;--uninstall 移除它,--purge 还会删除其数据。
批准通知器时,它会请求两项权限:读取账户,以及把即时通讯关联写入账户的联系信息。
设置
在公网地址加管理路径处登录:https://<host>:<port>/<path>/。地址的根路径不作任何响应。设置 是通知器自身工作的检查清单:两步验证登录、第一个渠道、备份。它还会标出面板安装留下的问题:地址缺失或使用纯 HTTP、注册情况,或者密码仍是安装时的密码(该密码以明文保存在 .env 中)。请先修改这个密码。
忘记的密码在服务器上重置:
notif admin reset-password -user admin -pass …渠道
渠道 按回退顺序列出你的渠道。用箭头调整顺序,也可以停用某个渠道而不删除它。每个渠道显示今天和本月的发送量。测试 会按账户名向一个账户发送测试通知。
Telegram、Bale 和 Soroush Plus
三者使用同一种机器人。在各个即时通讯的 BotFather 中创建机器人,然后粘贴其令牌。
给通知器单独的机器人
一个机器人的更新只能由一个程序读取。Shop 或其他工具已在使用的令牌不能共用;如果是这样,渠道会提示。
- Telegram:如果你的服务器无法访问 Telegram 的 API,请设置 代理(
socks5://host:port),或把 Bot API 镜像填为 API 地址。位于本服务器、Docker 宿主机或你局域网中的代理,必须在安装时写在 允许的机器人代理 中。 - Bale:Bale 会限制向未与其对话的用户发消息的机器人。它的付费商业 API 专为通知而设;Bale 商业账户充值后,在渠道中开启即可。
- Soroush Plus:与 Telegram 用法相同,使用它自己的 API 地址。
Rubika
Rubika 有自己的机器人 API,通知器支持它。它的 API 可能拒绝伊朗境外的服务器:请为渠道设置位于伊朗境内的代理,或填写那里的中转地址。
把用户关联到机器人
机器人只能给已经启动它的人发消息。用户把自己的订阅链接,或你在 账户 下其页面上找到的 绑定码 发给机器人,即可关联账户。对于 Telegram,该页面还提供一个附带绑定码的链接,点一下即可关联。
- 聊天 id 会写入账户的联系信息;如果联系信息中没有语言,还会记下用户在即时通讯中的语言。
/stop取消关联。屏蔽机器人的用户会被自动取消关联,其通知会落到下一个渠道。- 十分钟内五次错误尝试会把该聊天暂时锁定。
短信
内置 Kavenegar 和 Faraz SMS。两者都通过服务线路上已审核的模板发送,这样的短信也能送达屏蔽了广告短信的号码。在服务商后台编写模板并通过审核,然后告诉通知器每个变量对应什么,每行一个,例如 token={name}。对于 Faraz SMS,还要填写每个变量在模板中的长度(name=20);通知器会把每个值截断到该长度,因为消息更长时,Faraz 会把它留待人工审核,同时仍然回复“已发送”。
电话号码取自联系信息中的 phone,按运营者习惯的任何方式书写都可以。其他短信服务商可通过下文的通用 HTTP 渠道使用。
电子邮件
任意 SMTP 服务器:主机、端口(587 用 STARTTLS,465 用 TLS)、用户、密码和发件人。邮件为纯文本。地址取自联系信息中的 email。
用自己的域名发送
为发件人的域名配置 SPF、DKIM 和 DMARC。QQ 邮箱、163、Mail.ru、Yandex 和 Gmail 会拒收或隐藏无法验证的邮件。
ntfy
ntfy 是用户自行安装的推送应用。在 账户 下用户的页面上为其开启 ntfy:通知器会生成一个无人能猜到的主题,以 ntfy 保存在联系信息中,并显示需要交给用户的地址。知道该地址的人都能读取,所以只交给这位用户。在没有 Google 服务的 Android 手机上,用户需要在应用中开启 instant delivery。
通用 HTTP 渠道
任何提供 HTTP API 的服务商:地址、方法、请求头和正文,每一项都是基于通知的模板;再加上联系信息中存放用户在该服务商处地址的字段(phone,或你自己的键,例如 vk_id)。服务商的密钥填在 密钥 中,从不出现在记录里。正文可以是 JSON、表单或无;支持 HTTP Basic 认证、为失败也返回 200 的服务商准备的 成功判断,以及用于私有服务商的 CA 证书。
模板可以使用通知的文字、标题、用户的地址和名称、密钥、每条通知的 id 以及通知的变量,还有把电话号码格式化为国际或本地格式的函数。
预设 可以为 SMS.ru、SMSC、SMS Aero、MTS Exolve、VK、LINE、Matrix 和 Pushover 填好全部内容;替换大写字母部分即可。WhatsApp 可以通过你选择的中介在此渠道上使用。
通知器拒绝的地址
每个渠道的地址(以及机器人的代理)都必须位于公共互联网上。如果是你自己位于私有网络中的中转或服务器(局域网、WireGuard、Tailscale、与通知器并列的容器),请在渠道中开启 地址在我自己的网络中。即便如此,通知器自己的服务器和云元数据服务仍会被拒绝;请改为在你网络中的另一台机器上运行本地中转。在 Docker 下,开启该开关后可以通过 host.docker.internal 访问宿主机。
通知
通知 包含你的 时间安排,即在到期前几天(例如 5, 1)和流量用到多少比例(例如 80, 95)时提醒用户,以及每种通知的开关:
| 时机 | 通知 |
|---|---|
| 按你的时间安排 | 即将到期、流量即将用完。每条只发送一次,在账户续费、增加流量或进入新周期后重新生效。 |
| 面板通知时 | 已续费、已到期、流量用完、已创建(附订阅链接)、代理商额度用完、恢复使用、套餐开始、已添加订阅、设备上限、已删除。 |
| 管理员修改账户时 | 增加流量、更改日期、重置用量、手动停用或启用。这些通知会等待一分半钟;如果这次修改其实是续费,就由续费通知代替。 |
文字 按语言打开通知的文字;当某个渠道需要不同的文字(例如较短的短信)时,还可以按渠道类型设置。留空的字段沿用默认文字。点击变量即可插入:{name}、{expiry}、{days}、{traffic_total}、{traffic_used}、{traffic_left}、{percent}、{added}、{sub_url}、{group}。预览会用示例账户显示文字效果。
用户的语言取其联系信息中的 lang(fa、en、ru 或 zh),否则取 设置 中的语言。波斯语默认使用波斯历,也可以在 日期 中为所有语言统一使用一种日历。设置 中的 静默时段 会把通知留到时段结束;不会丢弃任何通知,标记为 紧急 的通知不受其限制。
消息
消息 可以发给一个或多个账户,或发给由面板自身筛选条件选出的分组:分组、状态、几天内到期、已用流量、所有者、模板、节点、搜索。
- 统计 显示匹配的账户数、每个账户将由哪个渠道发送、其中多少是短信、多少没有任何渠道可以送达,并显示第一个账户将看到的消息内容。
- 发送 会再确认一次,并注明短信数量。
- 消息在后台按各渠道的速率发出。尚未发出的可以取消。报告显示已发送的内容、经由哪个渠道以及哪些失败了。
账户页面会列出发给它的内容。
选择渠道顺序
| 国家 | 开启 VPN 时可送达 | 关闭 VPN 时可送达 |
|---|---|---|
| 伊朗 | Telegram 及其他所有渠道 | Bale、Soroush Plus、Rubika、短信、电子邮件 |
| 俄罗斯 | Telegram、电子邮件、ntfy | 电子邮件(Mail.ru 和 Yandex 在移动网络白名单模式下仍可访问);拥有俄罗斯法人的运营者可用短信 |
| 中国 | Telegram、ntfy、电子邮件 | 电子邮件(QQ 邮箱、163) |
好的顺序是把用户常看的免费渠道放在前面,把短信或电子邮件放在最后:在伊朗是 Telegram,然后 Bale,然后短信;在俄罗斯和中国是 Telegram,然后 ntfy,然后电子邮件。让通知只涉及账户本身:默认文字不含价格、优惠或 VPN 一词。在宣传绕过封锁的方法会被罚款、短信服务商也禁止这类内容的地方,这一点很重要。
记录、隐私和备份
发送记录 列出每次送达,以及每个渠道的尝试和回应。已完成的送达连同其文字,会在 设置 中规定的天数(默认 90 天)后删除。通知器保存每个账户的名称、联系信息、到期日和流量的副本,用于判断和撰写通知;订阅链接的秘密部分只以哈希形式保存。
使用 SQLite 时,通知器每天把数据库复制一次到 <data>/backups,保留七份。手动备份用 notif backup -o notif.db;在通知器停止时用 notif restore -i notif.db 还原。使用 PostgreSQL 时,请用 pg_dump 备份数据库。
出现问题时
| 你看到的现象 | 含义 |
|---|---|
| 机器人渠道提示另一个程序正在读取它的更新 | 该令牌已在别处使用(Shop、某个 Webhook)。请给通知器单独的机器人。 |
| 记录中出现 无地址 | 用户的联系信息中没有该渠道的地址;通知会落到下一个渠道。 |
| 没有渠道送达该用户 | 所有渠道都已尝试;记录中的各次尝试说明了每个渠道失败的原因。 |
| 某个账户没有任何通知入队 | 没有任何已开启的渠道拥有它的地址。请关联机器人,或在联系信息中添加电话或电子邮件。 |
| 渠道显示 不是公网地址 | 它的地址位于本服务器或私有网络上。见通知器拒绝的地址。 |
| 记录中出现 未知 | 服务商收到了请求,但回应丢失了。它可能已经发出,因此不会再次发送。 |
如果你还在运行 Shop,请关闭 Shop 自己的账户提醒,以免客户收到同一条通知两次。
