Files

SimAdmin 多实例 Autman 插件

管理员专用 Python 插件,支持多个 SimAdmin 实例:

  • 多级菜单交互式配置管理
  • 查询全部或指定实例状态
  • 通过指定实例发送短信
  • 兼容 SimAdmin API
    • GET /api/health
    • GET /api/sim
    • GET /api/network
    • GET /api/stats
    • GET /api/sms/stats
    • POST /api/sms/send

插件文件:

  • 推荐实机文件:py/simadmin_multi.py
  • 归档说明文件:plugins/simadmin/simadmin_multi.py

安装位置

参考仓库里已有可用插件(py/rb-aut.pypy/mi10rb-aut.pypy/jd_rabbit_账密.py),实机请优先复制 py/simadmin_multi.py 到 Autman 的 Python 脚本插件目录,例如:

plugin/scripts/simadmin_multi.py

不要只复制 plugins/simadmin/ 整个目录;部分 Autman 部署只扫描脚本目录的一层 .py 文件,子目录里的文件可能不会被加载。

插件头注已设置:

#[admin: false]
#[rule: ^sim帮助$]
#[rule: ^sim配置$]
#[rule: ^sim管理$]
#[rule: ^sim状态.*$]
#[rule: ^sim短信.*$]
#[priority: 999]
#[platform: qq,qb,wx,wb,tg,tb,fs,we,web,wxmp]

说明:头注里故意设置 #[admin: false],只让框架负责触发规则;插件代码内仍会调用 sender.isAdmin() 做管理员校验,非管理员会回复 仅管理员可用。这样可以避免部分实机环境框架层管理员识别失败时直接拦截、导致完全无回应。

实机排查修复:参考已有可用 Python 插件,头注采用 Autman 常见的 #[key: value] 无空格格式,优先级提升到 999,并将复杂规则降级为 ^sim状态.*$ / ^sim短信.*$。复杂正则里的 (?:...)\S[\s\S] 在某些规则解析器里可能不兼容,导致插件不触发。平台扩展到 qq,qb,wx,wb,tg,tb,fs,we,web,wxmp,避免适配器 imType 不匹配。

配置存储

插件配置存入 Autman 数据桶:

  • bucketotto
  • keysimadmin_instances

插件会用 JSON 数组保存配置。也兼容读取旧的多行简写配置。

多级菜单配置管理

发送:

sim配置

或:

sim管理

进入菜单:

SimAdmin 配置管理(多级菜单)
当前实例数:0
1. 查看实例列表
2. 添加实例
3. 编辑实例
4. 删除实例
5. 启用/禁用实例
6. 测试状态查询
7. 导出配置 JSON
q. 退出

实例列表页快捷操作

菜单选择 1. 查看实例列表 后,不再只是展示文本,而是进入实例列表操作页:

SimAdmin 实例列表:
1. 主卡 [启用]
   http://192.168.68.1:3000 timeout=10s token=未设置
2. 副卡 [禁用]
   http://192.168.68.2:3000 timeout=10s token=abc***xyz

列表操作:
输入实例编号:进入该实例操作菜单
a. 新增实例
e <编号>. 编辑实例,例如 e 1
d <编号>. 删除实例,例如 d 1
t <编号>. 测试状态,例如 t 1
on <编号> / off <编号>. 启用或禁用
r. 刷新列表
b. 返回上级菜单
q. 退出配置管理

也就是说,查看列表后可以直接继续操作:

1      # 进入 1 号实例操作菜单
e 1    # 直接编辑 1 号实例
d 2    # 直接删除 2 号实例
t 1    # 直接测试 1 号实例
on 2   # 启用 2 号实例
a      # 新增实例

单实例操作菜单

在列表页输入实例编号后,进入该实例的二级操作菜单:

实例操作:【主卡】
主卡 [启用]
   http://192.168.68.1:3000 timeout=10s token=未设置
1. 测试状态
2. 编辑实例
3. 删除实例
4. 启用/禁用
5. 复制/新增一个实例
b. 返回实例列表
q. 退出配置管理

添加实例流程

可从主菜单选择 2. 添加实例,也可在列表页输入 a

交互优化说明:很多聊天端/Autman sender.listen() 不能捕获“空回车”,所以插件不再要求直接回车。需要默认值时输入 d / default / 默认 / 跳过;需要留空或清空 token 时输入 clear / 清空

示例:

sim配置
1
a
请输入实例名称,例如:主卡
主卡
请输入 SimAdmin 地址,例如:http://192.168.68.1:3000
http://192.168.68.1:3000
请输入超时时间秒数
输入 d/default/默认 使用默认值:10
d
请输入 token
输入 d/default/默认 使用默认值:留空
输入 clear/清空 表示留空
clear
是否启用?输入 1/是 启用,0/否 禁用
输入 d/default/默认 使用默认值:启用
d
确认添加?输入 yes/y/确认,输入 n/no/取消 放弃
yes

编辑实例流程

可从主菜单选择 3. 编辑实例,也可在列表页输入 e 1,或输入实例编号后选择 2. 编辑实例。编辑 token 时:输入 d 保持当前 token,输入 clear 清空 token。

编辑二级菜单:

编辑【主卡】
1. 修改名称
2. 修改地址
3. 修改 timeout
4. 修改 token
5. 切换启用/禁用(当前:启用)
6. 保存并返回
q. 放弃返回

删除实例流程

可从主菜单选择 4. 删除实例,也可在列表页输入 d 1,或进入单实例操作菜单选择 3. 删除实例。删除前需要输入 yes 二次确认。

启用/禁用实例

可从主菜单选择 5. 启用/禁用实例,也可在列表页输入 on 1 / off 1,或进入单实例操作菜单选择 4. 启用/禁用

测试状态查询

可从主菜单选择 6. 测试状态查询,也可在列表页输入 t 1,或进入单实例操作菜单选择 1. 测试状态

导出配置

菜单选择 7. 导出配置 JSON,会输出当前完整 JSON,方便备份或迁移。

兼容的手工配置格式

虽然推荐直接使用菜单管理,但仍可手工写入数据桶。

JSON 数组

[
  {
    "name": "主卡",
    "base_url": "http://192.168.68.1:3000",
    "timeout": 10,
    "token": "可选,如果前面有反代/网关鉴权",
    "enabled": true
  }
]

字段:

字段 必填 说明
name 实例别名,指令里使用
base_url SimAdmin 地址,不要以 / 结尾
timeout 请求超时秒数,默认 10,范围 3-60
token 可选;会同时带 Authorization: Bearer <token>X-API-Token
enabled 是否启用,默认 true
headers 自定义请求头对象

旧版简写

主卡=http://192.168.68.1:3000
副卡=http://192.168.68.2:3000,token=xxx,timeout=10

插件能读取这种格式;通过菜单保存后会自动转换为 JSON 数组。

日常指令

sim帮助
sim配置
sim管理
sim状态
sim状态 主卡
sim短信 主卡 10086 CXLL
sim短信 all 10086 测试短信

说明:

  • sim状态:查询全部启用实例。
  • sim状态 <实例名>:查询指定实例;支持名称包含匹配。
  • sim短信 <实例名|all> <号码> <内容>:发送短信。
  • all 会向所有启用实例发送同一条短信,谨慎使用。

返回示例

【主卡】
健康: ok  版本: 1.0.0
SIM: 13800138000
ICCID: 8986...
IMSI: 460...
网络: China Mobile / registered / 信号:-70
系统: CPU 12.1% / MEM 45.2% / 温度 52 / 运行 1d2h
短信: 收 12 / 发 3

短信发送:

短信发送结果:
✅ 主卡 发送成功 path=/xxx
❌ 副卡 发送失败: timed out

安全约定

  • 插件头注和代码内都做了管理员限制。
  • 配置管理、短信发送都仅管理员可用。
  • 不在源码中硬编码任何 SimAdmin 地址或密钥。
  • token 只用于兼容反代/网关鉴权;当前 SimAdmin 本身 API 如无鉴权也可留空。
  • 短信号码只允许数字、空格、-、国际区号 +
  • 短信内容最大 1000 字,避免误发超长内容。
  • 删除实例需要输入 yes 二次确认。