# 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` 插件文件:`simadmin_multi.py` ## 安装位置 复制到 Autman 的 Python 脚本插件目录,例如: ```text plugin/scripts/simadmin_multi.py ``` 插件头注已设置: ```text # [admin: true] # [rule: ^sim帮助$] # [rule: ^sim配置$] # [rule: ^sim管理$] # [rule: ^sim状态(?:\s+\S+)?$] # [rule: ^sim短信\s+\S+\s+\S+\s+[\s\S]+$] ``` 即:仅管理员可用。代码内也会再次判断 `sender.isAdmin()`。 ## 配置存储 插件配置存入 Autman 数据桶: - bucket:`otto` - key:`simadmin_instances` 插件会用 JSON 数组保存配置。也兼容读取旧的多行简写配置。 ## 多级菜单配置管理 发送: ```text sim配置 ``` 或: ```text sim管理 ``` 进入菜单: ```text SimAdmin 配置管理(多级菜单) 当前实例数:0 1. 查看实例列表 2. 添加实例 3. 编辑实例 4. 删除实例 5. 启用/禁用实例 6. 测试状态查询 7. 导出配置 JSON q. 退出 ``` ### 添加实例流程 ```text sim配置 2 请输入实例名称,例如:主卡 主卡 请输入 SimAdmin 地址,例如:http://192.168.68.1:3000 http://192.168.68.1:3000 请输入超时时间秒数,直接回车默认 10 10 请输入 token,可直接回车留空 是否启用?输入 1/是 启用,0/否 禁用;直接回车默认启用 1 确认添加? yes ``` ### 编辑实例流程 菜单选择 `3. 编辑实例` 后,选择实例编号,再进入二级菜单: ```text 编辑【主卡】 1. 修改名称 2. 修改地址 3. 修改 timeout 4. 修改 token 5. 切换启用/禁用(当前:启用) 6. 保存并返回 q. 放弃返回 ``` ### 删除实例流程 菜单选择 `4. 删除实例`,选择编号后,需要输入 `yes` 二次确认。 ### 启用/禁用实例 菜单选择 `5. 启用/禁用实例`,选择编号后立即切换。 ### 测试状态查询 菜单选择 `6. 测试状态查询`,选择编号后会调用该实例的状态接口并返回摘要。 ### 导出配置 菜单选择 `7. 导出配置 JSON`,会输出当前完整 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 ` 和 `X-API-Token` | | `enabled` | 否 | 是否启用,默认 true | | `headers` | 否 | 自定义请求头对象 | ### 旧版简写 ```text 主卡=http://192.168.68.1:3000 副卡=http://192.168.68.2:3000,token=xxx,timeout=10 ``` 插件能读取这种格式;通过菜单保存后会自动转换为 JSON 数组。 ## 日常指令 ```text sim帮助 sim配置 sim管理 sim状态 sim状态 主卡 sim短信 主卡 10086 CXLL sim短信 all 10086 测试短信 ``` 说明: - `sim状态`:查询全部启用实例。 - `sim状态 <实例名>`:查询指定实例;支持名称包含匹配。 - `sim短信 <实例名|all> <号码> <内容>`:发送短信。 - `all` 会向所有启用实例发送同一条短信,谨慎使用。 ## 返回示例 ```text 【主卡】 健康: ok 版本: 1.0.0 SIM: 13800138000 ICCID: 8986... IMSI: 460... 网络: China Mobile / registered / 信号:-70 系统: CPU 12.1% / MEM 45.2% / 温度 52 / 运行 1d2h 短信: 收 12 / 发 3 ``` 短信发送: ```text 短信发送结果: ✅ 主卡 发送成功 path=/xxx ❌ 副卡 发送失败: timed out ``` ## 安全约定 - 插件头注和代码内都做了管理员限制。 - 配置管理、短信发送都仅管理员可用。 - 不在源码中硬编码任何 SimAdmin 地址或密钥。 - `token` 只用于兼容反代/网关鉴权;当前 SimAdmin 本身 API 如无鉴权也可留空。 - 短信号码只允许数字、空格、`-`、国际区号 `+`。 - 短信内容最大 1000 字,避免误发超长内容。 - 删除实例需要输入 `yes` 二次确认。