Skip to content

通知器 ​

通知器(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 字节的密码。
管理路径通知器提供的一切都在它之下。随机生成;留空则放在根路径。
公网地址你打开通知器的地址:协议、主机和端口。
HTTPSpanel(面板表单中的默认值)、acme、acme-http、self-signed 或 off,与所有插件相同(插件目录)。

手动安装时,在 Linux 服务器上以 root 身份运行:

bash
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 中)。请先修改这个密码。

忘记的密码在服务器上重置:

bash
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),否则取 设置 中的语言。波斯语默认使用波斯历,也可以在 日期 中为所有语言统一使用一种日历。设置 中的 静默时段 会把通知留到时段结束;不会丢弃任何通知,标记为 紧急 的通知不受其限制。

消息 ​

消息 可以发给一个或多个账户,或发给由面板自身筛选条件选出的分组:分组、状态、几天内到期、已用流量、所有者、模板、节点、搜索。

  1. 统计 显示匹配的账户数、每个账户将由哪个渠道发送、其中多少是短信、多少没有任何渠道可以送达,并显示第一个账户将看到的消息内容。
  2. 发送 会再确认一次,并注明短信数量。
  3. 消息在后台按各渠道的速率发出。尚未发出的可以取消。报告显示已发送的内容、经由哪个渠道以及哪些失败了。

账户页面会列出发给它的内容。

选择渠道顺序 ​

国家开启 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 自己的账户提醒,以免客户收到同一条通知两次。

文字与图片采用 CC BY 4.0 许可。