联通余量提醒

ChinaUnicom

联通余量(v4)
GitHub:https://github.com/ChinaTelecomOperators/ChinaUnicom

因为开发者懒 如果你要更换当前使用的账号 请自行清空所有数据(青龙清除环境变量和.dat文件) 保证无脏数据后 再使用

由于不可抗力, 如果自动登录方式无法使用, 请参考以下方式使用 token_online 续命:

自动抓包

最新版模块已加回联通手厅重写(可自动抓取并保存 appId, token_online, cookie)

手动抓包

使用官方客户端, 抓包 https://m.client.10010.com/mobileService/onLine.htm

取出请求中的 token_onlineappId 的值, 填入/写入本脚本需要使用的地方.

如: BoxJs 字段 或 青龙/Node.js 中.

简单来说, 就是把官方的几个字段扒下来 塞进去. 目前使用 token_onlineappId 续登录状态的逻辑还能用, 先一起苟着吧…

以 Surge 为例(其他抓包工具同理, 自己去学怎么看这个 url 对应的请求体, 别问):

注意看下面三张图里的内容: 1. 是请求的 URL 2. 是告诉你看 请求体 里的内容, 不要傻乎乎地去找 请求头 . 其他抓包工具同理, 自己去学怎么看这个 url 对应的请求体, 别问




抓包后, 可在 BoxJs 中查看, 并复制粘贴到其他地方使用

总有人不看文档, 加一个传送门 青龙等,不使用短信验证码登录

关于请求超时

  • 自己处理 m.client.10010.com 的分流
  • 修改请求超时参数 默认为 15s

IOS等

安装

Surge

使用模块

https://github.com/ChinaTelecomOperators/ChinaUnicom/releases/download/Prerelease-Alpha/10010.sgmodule

Shadowrocket

使用模块

⚠️ Shadowrocket 不支持跳转 可能有问题 使用下面这个👇🏻

https://mirror.ghproxy.com/https://github.com/ChinaTelecomOperators/ChinaUnicom/releases/download/Prerelease-Alpha/10010.shadowrocket.sgmodule

如果 mirror.ghproxy.com 寄了 可以自己换别的 github 加速服务

Stash

使用覆写

https://github.com/ChinaTelecomOperators/ChinaUnicom/releases/download/Prerelease-Alpha/10010.stoverride

Loon

⚠️  感谢 @Surui 的反馈 Loon 上存在无法进行短信登录的问题 因为开发者比较懒(脚本逻辑都一致, 需要抓包比较跟别的 app 的差异是什么) 所以决定摆烂
请 Loon 用户使用别的方式进行登录并复制数据到 Loon

使用插件

https://github.com/ChinaTelecomOperators/ChinaUnicom/releases/download/Prerelease-Alpha/10010.loon.plugin

QuanX

以该 app 最新配置的语法为准, 自行配置. 请勿全部复制粘贴然后问为啥不能用.
  1. 重写
    1. 一键安装(如果你使用的是 v1.0.29 (670) 及以上版本)
      1. quantumult-x:///add-resource?remote-resource=%7B%22rewrite_remote%22%3A%5B%22https%3A%2F%[2Fgithub.com](http://2fgithub.com/)%2FChinaTelecomOperators%2FChinaUnicom%2Freleases%2Fdownload%2FPrerelease-Alpha%2F10010.qx.conf%2Ctag%3D10010v4%22%5D%7D
      2. https://quantumult.app/x/open-app/add-resource?remote-resource={"rewrite_remote"%3A["https%3A%2F%2Fgithub.com%2FChinaTelecomOperators%2FChinaUnicom%2Freleases%2Fdownload%2FPrerelease-Alpha%2F10010.qx.conf%2Ctag%3D10010v4"]}
    2. 手动安装
      1. 安装路径: 风车 > 重写 > 引用
      2. 重写路径: https://github.com/ChinaTelecomOperators/ChinaUnicom/releases/download/Prerelease-Alpha/10010.qx.conf
  2. 手动添加定时任务
    [task_local]
    */5 * * * * https://github.com/ChinaTelecomOperators/ChinaUnicom/releases/download/Prerelease-Alpha/10010.js
    

    配置

    BoxJs

    自己把 BoxJs 配好 再进行后续操作 请自行 Google
    
    服了 能不能先把前置工作做好 再来质疑脚本有没有问题

喂饭: 这是 BoxJs

自行 Google QuanX 安装/信任证书 Surge 安装/信任证书 等教程 把 BoxJs 配好

什么叫配好

先来个 没配好的 例子:

群里天天有人发这样的图来问 能不能好好看文档操作
打开 https://boxjs.com/query/boxdatahttps://boxjs.com/query/data/@ChinaUnicom.10010v4 有正确的 JSON 数据

如果你没 安装并信任证书 有可能你能正常打开 http://boxjs.com 但是无法访问 https://boxjs.com

你可能需要手动操作

QX 用户请用 BoxJs 的 重写 别开 http backend 不然你会一直纳闷为啥 https://boxjs.com 无法访问

⚠️ 某些 QX 懒人配置 自带了 http backend 的配置. 请自己查看
目前 BoxJs 官方模块/覆写中 只有 Stash 加了 MITM 现在应该都有了

请自行添加 boxjs.com 到 hostname 中

示例:

Surge/Shadowrocket

[MITM]
hostname = boxjs.com

QuanX

[mitm]
hostname = boxjs.com

HTTP API 设置

请自行了解 HTTP API 的概念, 执行脚本需要使用(比如 Surge). 请在 Surge 中开启 HTTP API(需要关闭 HTTPS), 并在 BoxJs 中配置 HTTP API . 其他应用请参考对应的文档

截图1:

或这样的

截图2:

Surge 配置示例

如图设置 不要开 HTTPS 不要开 HTTPS 不要开 HTTPS 如果开了 HTTPS 就会出现👆🏻截图1 的情况



或者


什么叫配好了 HTTP API

以能在 BoxJs 中手动执行远程脚本/ BoxJs 代码编辑器中执行填写的脚本内容为准

如果你看到这里 有很多疑问 可以先 Google 或 去 对应的工具(如 BoxJs)/代理 app 的群组 里寻求帮助. 请勿在 折腾啥 群组内疯狂提出 非脚本相关的问题.
例如, 你可以尝试以下途径

  1. 在 BoxJs 群组询问 BoxJs 相关的问题 https://t.me/NobyDa_Chat
  2. 在 Surge/Stash/Shadowrocket/Quantumult X 等 app 对应的讨论群中, 询问与 安装并信任证书/ HTTP API 等 app 相关的问题
  3. 只在 折腾啥 群组内, 提出脚本相关的问题(附上系统环境/app/日志/配置/截图/录屏等信息)

在 BoxJs 里 添加 订阅

https://github.com/ChinaTelecomOperators/ChinaUnicom/releases/download/Prerelease-Alpha/boxjs.json

如图, 请设置联通域名的分流

在 BoxJs 里进行对应的配置

自己找到 联通余量(v4) 这个应用 或 在该设备浏览器中打开 https://boxjs.com/#/app/ChinaUnicom.10010v4 进行配置

其他通用配置说明

通知模板变量列表

例: 你在配置页面新建了一个名为 某某某 的配置. 通知模板变量列表中会新增 [某某某.已用] [某某某.剩余] [某某某.总] [某某某.用量] 4 项

即可设置通知模板:

[时长] 跳 [所有通用.用量] 免 [所有免流.用量] 某某某用了 [某某某.用量]

通用剩 [通用有限.剩余] 免流剩 [免流有限.剩余] 某某某还剩 [某某某.剩余]

今免 [所有免流.今日用量] 今用 [所有通用.今日用量]

将渲染成

30分钟 跳 1G 免 0M 某某某用了 1G

通用剩 99G 免流剩 0M 某某某还剩 29G

今免 10G 今用 1M

以下是完整对照列表

{
  "[免流不限.已用]": "40.32G",
  "[免流不限.剩余]": "0M",
  "[免流不限.总]": "0M",
  "[免流不限.用量]": "1.96G",
  "[免流不限.今日用量]": "0M",

  "[免流有限.已用]": "0M",
  "[免流有限.剩余]": "5G",
  "[免流有限.总]": "5G",
  "[免流有限.用量]": "0M",
  "[免流有限.今日用量]": "0M",

  "[所有免流.已用]": "40.32G",
  "[所有免流.剩余]": "5G",
  "[所有免流.总]": "5G",
  "[所有免流.用量]": "1.96G",
  "[所有免流.今日用量]": "0M",

  "[通用不限.已用]": "0M",
  "[通用不限.剩余]": "0M",
  "[通用不限.总]": "0M",
  "[通用不限.用量]": "0M",
  "[通用不限.今日用量]": "0M",

  "[通用有限.已用]": "6.23G",
  "[通用有限.剩余]": "33.77G",
  "[通用有限.总]": "40G",
  "[通用有限.用量]": "263.21M",
  "[通用有限.今日用量]": "0M",

  "[所有通用.已用]": "6.23G",
  "[所有通用.剩余]": "33.77G",
  "[所有通用.总]": "40G",
  "[所有通用.用量]": "263.21M",
  "[所有通用.今日用量]": "0M",

    "[原始通用.已用]": "1.31G",
    "[原始通用.用量]": "0M",
    "[原始通用.今日用量]": "0M",
    "[原始免流.已用]": "4.28G",
    "[原始免流.用量]": "1000M",
    "[原始免流.今日用量]": "1000M",

  "[时长]": "16小时",
  "[套餐]": "冰激凌专属5G套餐(钉钉版)99元",
  "[联通时间]": "2023-01-13 14:00:24",
  "[日期时间]": "2023/1/13 14:00:23",
  "[时间]": "14:00:23"
}

Bark 设置说明

使用 Bark 通知 可实现更多通知效果: 推送铃声, 推送图标, 时效性通知, 复制推送内容等. 具体功能请参考 Bark 的设置说明.

假设你 Bark 的链接为 https://api.day.app/XXXXXXXXX/ 你的 key 为 XXXXXXXXX

可在 BoxJs 里设置 Bark 推送https://api.day.app/XXXXXXXXX/[推送标题]/[推送内容]?group=10010&autoCopy=1&isArchive=1&icon=https%3A%2F%2Fraw.githubusercontent.com%2Fanker1209%2Ficon%2Fmain%2Fzglt.png&sound=shake&level=timeSensitive

[推送标题] [推送内容] 会被自动替换. 其他参数请参考 Bark 的设置说明.

小组件

选择1: 我的组件 完全使用自定义模板

原理: 优先从 获取实时数据, 如果失败则从 http://boxjs.com/query/data/@ChinaUnicom.10010v4.vars 获取缓存数据.

BoxJs 的缓存数据是由定时任务更新的


Untitled

Scriptable 脚本:

  1. 依赖: https://raw.githubusercontent.com/im3x/Scriptables/v2-dev/Scripts/「小件件」开发环境.js
  2. 本体: https://github.com/ChinaTelecomOperators/ChinaUnicom/releases/download/Prerelease-Alpha/10010-scriptable.js

选择2: 花猫佬的小组件 美观大方 兼容联通


https://t.me/CatStudyCase

Android

Termux

安装

clone 安装依赖 示例如下:

pkg update
pkg install nodejs
# 使用 wget 下载这几个文件 或 自行下载
wget https://github.com/ChinaTelecomOperators/ChinaUnicom/releases/download/Prerelease-Alpha/package.json
wget https://github.com/ChinaTelecomOperators/ChinaUnicom/releases/download/Prerelease-Alpha/10010.js
wget https://github.com/ChinaTelecomOperators/ChinaUnicom/releases/download/Prerelease-Alpha/10010_send_sms.js
wget https://github.com/ChinaTelecomOperators/ChinaUnicom/releases/download/Prerelease-Alpha/10010_sms_sign.js

npm i


termux-notification
若按照 Termux:API https://wiki.termux.com/wiki/Termux:API 完成了安装配置, 脚本将调用 termux-notification 发送通知
定时任务/自启动
可参考 Termux:Boot https://wiki.termux.com/wiki/Termux:Boot Termux-services https://wiki.termux.com/wiki/Termux-services 里的 cronie 配置

💡
注意: 可能需要 cd 到 js 文件的目录下, 并设置环境变量 `TERMUX_VERSION`

一个群友的例子:

~/cc $ crontab -l
# cd 到 js 文件的目录下
# 并设置环境变量 TERMUX_VERSION
*/5 * * * * cd /data/data/com.termux/files/home/cc && TERMUX_VERSION=0.118.0 node 10010.js >> ~/cc/log.txt

然后参考 Node.js 通用配置完成登录/配置

其他通用配置说明

青龙等

[必看!!!] sendNotify.js 导致的无法使用的问题(请自查此文件)

有些人用的 sendNotify.js 有问题 里面某些通知渠道的方法里没有写 else resolve...例如  aibotkNotify 
如果你遇到运行到第一次发通知后就不执行了 请自查 sendNotify.js

⚠️ 上面这段你可能没看懂. 如果你看到这样的情况, 只会执行到这里

你的通知可能是长这样的…

那么说的就是你这种情况

比如 你的 sendNotify.js 里有一段是这样的:

正常的应该是

你们怎么一点基础都没…喂饭了 自己改

else {
  resolve()
}
青龙更新后 sendNotify.js 可能会被覆盖. 保险起见 可下载一个可用的 sendNotify.js 跟脚本执行文件放在一个目录下 https://t.me/c/1771725356/467864 或 https://t.me/zhetengsha_group/467864

拉文件

发送短信验证码

ql raw https://github.com/ChinaTelecomOperators/ChinaUnicom/releases/download/Prerelease-Alpha/10010_send_sms.js

短信验证码登录

ql raw https://github.com/ChinaTelecomOperators/ChinaUnicom/releases/download/Prerelease-Alpha/10010_sms_sign.js

默认操作如果无法进行短信验证码登录, 请尝试带 `(方式2)` 的操作
经群友提醒 如果登录不了可以尝试用官方营业厅app获取短信验证码 然后进行下一步

发送短信验证码(方式2)

ql raw https://github.com/ChinaTelecomOperators/ChinaUnicom/releases/download/Prerelease-Alpha/10010_send_sms2.js

短信验证码登录(方式2)

ql raw https://github.com/ChinaTelecomOperators/ChinaUnicom/releases/download/Prerelease-Alpha/10010_sms_sign2.js

查询

ql raw https://github.com/ChinaTelecomOperators/ChinaUnicom/releases/download/Prerelease-Alpha/10010.js

联通可能半夜维护导致数据异常 建议不要24小时跑. `任务定时`可设为  `*/5 7-21 * * *`

https://crontab.guru/#*/5_7-21_*_*_*

这种就是没拉成功js文件 拉了个报错的网页文件 自己检查青龙配置里的github加速服务/网络环境

找到刚刚拉到的文件 修改定时

使用短信验证码登录

  1. 配置手机号的环境变量 ChinaUnicom_10010v4_mobile
  2. 执行 发送短信登录验证码
  3. 配置短信登录验证码的环境变量 ChinaUnicom_10010v4_code
  4. 执行 短信登录验证码登录

    不使用短信验证码登录

    自己配置 TokenOnline AppId 手机号(mobile) 服务密码(password) 等对应的环境变量

总有人不自己看文档, 再加一下传送门:

  1. 配置方法 👉🏻 所有环境变量说明
  2. 应该使用什么环境变量名

手动执行一次

⚠️ 之后记得删掉 TokenOnline

⚠️ 之后记得删掉 TokenOnline

⚠️ 之后记得删掉 TokenOnline

还是有人看不懂

意思就是不要设置一个固定的值 比如 TokenOnline

因为本脚本不会更新环境变量

你设了一个固定的 TokenOnline 就会每次都用这个固定的 TokenOnline

维护在线状态等逻辑得到的新 TokenOnline 也不会在下次被用到

多账号设置方式

参考 Node.js 通用配置说明 中的 多账号设置方式 来设置对应的环境变量

点击查看

不同账号使用自定义的通知

Node.js 通用配置说明 中的 多账号设置方式 里的 不同账号使用自定义通知 说明
点击查看

所有环境变量说明

有人不会设环境变量…喂个饭 自己学一下青龙操作好吗

如图 自己对照需要设置的环境变量的 名称 , 设置一个对应的 . 备注自己写

通用配置说明

通知模板变量列表

例: 你在配置页面新建了一个名为 某某某 的配置. 通知模板变量列表中会新增 [某某某.已用] [某某某.剩余] [某某某.总] [某某某.用量] 4 项

即可设置通知模板:

[时长] 跳 [所有通用.用量] 免 [所有免流.用量] 某某某用了 [某某某.用量]

通用剩 [通用有限.剩余] 免流剩 [免流有限.剩余] 某某某还剩 [某某某.剩余]

今免 [所有免流.今日用量] 今用 [所有通用.今日用量]

将渲染成

30分钟 跳 1G 免 0M 某某某用了 1G

通用剩 99G 免流剩 0M 某某某还剩 29G

今免 10G 今用 1M

以下是完整对照列表

{
  "[免流不限.已用]": "40.32G",
  "[免流不限.剩余]": "0M",
  "[免流不限.总]": "0M",
  "[免流不限.用量]": "1.96G",
  "[免流不限.今日用量]": "0M",

  "[免流有限.已用]": "0M",
  "[免流有限.剩余]": "5G",
  "[免流有限.总]": "5G",
  "[免流有限.用量]": "0M",
  "[免流有限.今日用量]": "0M",

  "[所有免流.已用]": "40.32G",
  "[所有免流.剩余]": "5G",
  "[所有免流.总]": "5G",
  "[所有免流.用量]": "1.96G",
  "[所有免流.今日用量]": "0M",

  "[通用不限.已用]": "0M",
  "[通用不限.剩余]": "0M",
  "[通用不限.总]": "0M",
  "[通用不限.用量]": "0M",
  "[通用不限.今日用量]": "0M",

  "[通用有限.已用]": "6.23G",
  "[通用有限.剩余]": "33.77G",
  "[通用有限.总]": "40G",
  "[通用有限.用量]": "263.21M",
  "[通用有限.今日用量]": "0M",

  "[所有通用.已用]": "6.23G",
  "[所有通用.剩余]": "33.77G",
  "[所有通用.总]": "40G",
  "[所有通用.用量]": "263.21M",
  "[所有通用.今日用量]": "0M",

    "[原始通用.已用]": "1.31G",
    "[原始通用.用量]": "0M",
    "[原始通用.今日用量]": "0M",
    "[原始免流.已用]": "4.28G",
    "[原始免流.用量]": "1000M",
    "[原始免流.今日用量]": "1000M",

  "[时长]": "16小时",
  "[套餐]": "冰激凌专属5G套餐(钉钉版)99元",
  "[联通时间]": "2023-01-13 14:00:24",
  "[日期时间]": "2023/1/13 14:00:23",
  "[时间]": "14:00:23"
}

Bark 设置说明

使用 Bark 通知 可实现更多通知效果: 推送铃声, 推送图标, 时效性通知, 复制推送内容等. 具体功能请参考 Bark 的设置说明.

假设你 Bark 的链接为 https://api.day.app/XXXXXXXXX/ 你的 key 为 XXXXXXXXX

可在 BoxJs 里设置 Bark 推送https://api.day.app/XXXXXXXXX/[推送标题]/[推送内容]?group=10010&autoCopy=1&isArchive=1&icon=https%3A%2F%2Fraw.githubusercontent.com%2Fanker1209%2Ficon%2Fmain%2Fzglt.png&sound=shake&level=timeSensitive

[推送标题] [推送内容] 会被自动替换. 其他参数请参考 Bark 的设置说明.

Node.js通用配置说明

多账号设置方式

复制出一个新文件 文件名为 _liubang_10010.js

即为 另一个账号 liubang

它将读取 10010v4-liubang-box.dat 里的配置

它使用的所有环境变量前缀对应变化

例如从 ChinaUnicom_10010v4_mobile 对应的变为 liubang_10010v4_mobile

同理 短信验证码相关的文件也改成 _liubang_10010_sms_sign.js_liubang_10010_send_sms.js

🆕 为方便直接无脑拉取, 在主账号外, 新增 a, b, c, d 四个账号的全部文件
  • release 页面 a, b, c, d 四个账号的全部文件 截图示例:
    Untitled

    不同账号使用自定义通知

    此时在执行到 加载sendNotify.js 文件发送通知时, 会优先加载 _liubang_sendNotify.js 来发送通知. 比如你不想使用青龙通用的 sendNotify.js, 你可以自己准备一个 _liubang_sendNotify.js

    使用短信验证码登录

    发送短信验证码

将尝试从环境变量中读取手机号

ChinaUnicom_10010v4_mobile=18600000000 node 10010_send_sms.js

方式2:

ChinaUnicom_10010v4_mobile=18600000000 node 10010_send_sms2.js

使用短信验证码登录

将尝试从环境变量中读取手机号和短信验证码

ChinaUnicom_10010v4_mobile=18600000000 ChinaUnicom_10010v4_code=1234 node 10010_sms_sign.js

方式2:

ChinaUnicom_10010v4_mobile=18600000000 ChinaUnicom_10010v4_code=1234 node 10010_sms_sign2.js

此时已经自动存好了 cookie token_online appId

如果你不理解, 那么你可以将上述脚本执行日志里的 cookie token_online appId 自己复制出来使用.

不使用短信验证码登录

自己配置 TokenOnline AppId 手机号(mobile) 服务密码(password) 对应的环境变量

执行一次

(如果是青龙或者你写到了什么初始化脚本里)删掉 TokenOnline 的环境变量

为什么要删掉? 参考下一条👇🏻

所有环境变量

🤔 不要设一个固定的环境变量然后不删掉….因为会优先从环境变量读取 等于每次都是一个固定的值. 它不会被更新…

还是有人看不懂

意思就是不要设置一个固定的值 比如 TokenOnline

因为本脚本不会更新环境变量

你设了一个固定的 TokenOnline 就会每次都用这个固定的 TokenOnline

维护在线状态等逻辑得到的新 TokenOnline 也不会在下次被用到

🤔 要 `删掉` 不要 `禁用` 因为青龙里的禁用还是会设置环境变量的值, 只不过是设为 `空字符串`

青龙里环境变量不能有空格 你可以这么做:


在这里 写

$.setdata(`剩 [通用有限.剩余] 今用 [所有通用.今日用量] 今免 [所有免流.今日用量]\n总用 [所有通用.已用] 总免 [所有免流.已用]`, KEY_DESC)

然后手动执行两次
第一次它会被写入 dat

第二次以后 它就会被使用. 可以去删掉它或者不管它.

以后脚本被定时拉库覆盖了也不影响.

编辑文件需要进入编辑模式 怎么进自己找

移动端上可能是这样:

桌面端可能是这样:

语法

$.setdata(``, KEY_DESC)

比如设置 最小用量通知阈值(单位 M) , 模板Bark 地址:

$.setdata(`剩 [通用有限.剩余] 今用 [所有通用.今日用量] 今免 [所有免流.今日用量]\n总用 [所有通用.已用] 总免 [所有免流.已用]`, KEY_DESC)
$.setdata(10, KEY_MIN_USAGE)
$.setdata('https://api.day.app/xxxxxxxxxxxxxxxxxxxxxxxxxxxxx/[推送标题]/[推送内容]?group=10010&autoCopy=1&isArchive=1&icon=https%3A%2F%2Fraw.githubusercontent.com%2Fanker1209%2Ficon%2Fmain%2Fzglt.png&sound=shake&level=timeSensitive', KEY_BARK)

某个 环境变量 对应的 key 自己在下面找👇🏻

[{
  "环境变量名": "ChinaUnicom_10010v4_debug",
  "key": "KEY_DEBUG",
  "name": "调试模式(一般不开 开了通知爆炸)",
  "val": false,
  "type": "boolean",
  "desc": "默认不开启调试. 开启后将推送自动登录等信息"
},
{
  "环境变量名": "ChinaUnicom_10010v4_mobile",
  "key": "KEY_MOBILE",
  "name": "手机号",
  "val": "",
  "type": "text",
  "desc": "联通客户端登录手机号"
},
{
  "环境变量名": "ChinaUnicom_10010v4_code",
  "key": "KEY_CODE",
  "name": "验证码(执行验证码登录才需要填)",
  "placeholder": "",
  "val": "",
  "type": "text",
  "desc": "登录短信验证码"
},
{
  "环境变量名": "ChinaUnicom_10010v4_password",
  "key": "KEY_PASSWORD",
  "name": "服务密码",
  "val": "",
  "type": "text",
  "desc": "联通客户端登录的服务密码"
},
{
  "环境变量名": "ChinaUnicom_10010v4_appId",
  "key": "KEY_APPID",
  "name": "appId",
  "val": "",
  "type": "text",
  "desc": "联通客户端 appId"
},
{
  "环境变量名": "ChinaUnicom_10010v4_cookie",
  "key": "KEY_COOKIE",
  "name": "Cookie",
  "val": "",
  "type": "text",
  "desc": "Cookie"
},
{
  "环境变量名": "ChinaUnicom_10010v4_token_online",
  "key": "KEY_TOKEN_ONLINE",
  "name": "TokenOnline",
  "val": "",
  "type": "text",
  "desc": "TokenOnline"
},
{
  "环境变量名": "ChinaUnicom_10010v4_http_timeout",
  "key": "KEY_HTTP_TIMEOUT",
  "name": "请求超时时间(单位 毫秒) ",
  "val": 15000,
  "type": "number",
  "persistentHint": true,
  "desc": "默认: 15000 毫秒, 即 15 秒"
},
{
  "环境变量名": "ChinaUnicom_10010v4_ignore_http_timeout",
  "key": "KEY_IGNORE_HTTP_TIMEOUT",
  "name": "忽略请求超时错误",
  "val": false,
  "type": "boolean",
  "persistentHint": true,
  "desc": "默认关闭. 开启后, 将忽略请求超时错误.(联通经常抽风, 可视情况开启)"
}
{
  "环境变量名": "ChinaUnicom_10010v4_min_usage",
  "key": "KEY_MIN_USAGE",
  "name": "最小用量通知阈值(单位 M) ",
  "val": 0,
  "type": "number",
  "desc": "通知模板内的任一一项用量 >= 该数值时 才会通知. 例 [通用有限.用量] 表示这段时间内 有限的通用包的差额. 如果你要无变化时不通知, 这里可以设为 0.01"
},
{
  "环境变量名": "ChinaUnicom_10010v4_normal_limited_only",
  "key": "KEY_NORMAL_LIMITED_ONLY",
  "name": "仅在 [通用有限.用量] >= 最小用量通知阈值 时, 进行通知",
  "val": false,
  "type": "boolean",
  "desc": "默认关闭. 开启后, 仅在 [通用有限.用量] >= 最小用量通知阈值 时, 才会通知"
},
{
  "环境变量名": "ChinaUnicom_10010v4_new_pkg_notify_disabled",
  "key": "KEY_NEW_PKG_NOTIFY_DISABLED",
  "name": "关闭新增包通知",
  "val": false,
  "type": "boolean",
  "desc": "默认检测到新包时会发送通知"
},
{
  "环境变量名": "ChinaUnicom_10010v4_title",
  "key": "KEY_TITLE",
  "name": "通知标题模板",
  "val": "",
  "type": "textarea",
  "desc": "默认: [套餐], 例: 流邦卡19元套餐. 变量看文档"
},
{
  "环境变量名": "ChinaUnicom_10010v4_subt",
  "key": "KEY_SUBT",
  "name": "通知副标题模板",
  "val": "",
  "type": "textarea",
  "desc": "默认: [时长] 跳 [所有通用.用量] 免 [所有免流.用量], 例: 18分钟 跳 10M 免 10M. 变量看文档"
},
{
  "环境变量名": "ChinaUnicom_10010v4_desc",
  "key": "KEY_DESC",
  "name": "通知正文模板",
  "val": "",
  "type": "textarea",
  "desc": "默认: 通用剩 [通用有限.剩余] 免流剩 [免流有限.剩余], 例: 通用剩 5.03G 免流剩 26.35G. 若定向无限, 推荐使用: 剩 [通用有限.剩余] 今用 [所有通用.今日用量] 今免 [所有免流.今日用量] 变量看文档"
},
{
  "环境变量名": "ChinaUnicom_10010v4_bark",
  "key": "KEY_BARK",
  "name": "使用 Bark 通知",
  "val": "",
  "type": "textarea",
  "desc": "[推送标题]/[推送内容]会被自动替换 形如 https://api.day.app/XXXXXXXXX/[推送标题]/[推送内容]?group=10010&autoCopy=1&isArchive=1&icon=https%3A%2F%2Fraw.githubusercontent.com%2Fanker1209%2Ficon%2Fmain%2Fzglt.png&sound=shake&level=timeSensitive 具体看文档"
},
{
  "环境变量名": "ChinaUnicom_10010v4_config",
  "key": "KEY_CONFIG",
  "name": "设置(没需求不用设)",
  "val": "",
  "type": "text"
}]

效果图