系统配置
系统管理 → 系统配置 涵盖三块租户级设置:浏览器如何播放告警提示音、本租户的公共模型是否允许被下游节点拉取、以及注入所有脚本的共享环境变量(org_params)。
本页与系统平台 → 系统配置(管理员层:SMTP / 品牌 / OAuth)同名但作用域不同,两者互相独立。
告警配置
控制浏览器在新告警触发时如何播放提示音。
告警音频
从三种音频来源中选择一种:
| 选项 | 说明 |
|---|---|
| 远程地址 | 播放托管在外部 URL 的音频,在旁边的输入框填写完整 URL;填写后立即出现预览播放器。 |
| 自定义铃声 | 上传本地音频文件(mp3/wav),文件会保存到平台服务器。上传后出现预览播放器。若需移除已上传文件,点击删除音频链接。 |
| 默认铃声 | 使用平台内置的告警音频(audio/public.mp3),无需额外配置。 |
响铃时机
控制何时播放音频:
| 选项 | 说明 |
|---|---|
| 无 | 始终不播放音频。 |
| 新增告警 | 每次新告警记录创建时播放一次。 |
| 存在/新增告警 | 新增告警时播放,且在存在任何未处理告警期间持续播放。 |
告警音频在用户打开 ThinkLink 的浏览器标签页中播放,不会向移动端发送推送通知。
跨服务配置
租户级的远程数据拉取准入控制。下游 ThinkLink 节点(TKG 或 TKE)只有在以下设置允许的情况下,才能拉取本租户的公共模型和模板。
| 字段 | 说明 |
|---|---|
| 允许数据拉取 | 总开关。关闭后,所有对本租户的外部拉取请求一律拒绝。 |
| 秘钥 | 下游拉取时须携带的凭证。点击右侧重新生成按钮可轮换秘钥(立即使所有已有下游配置失效)。 |
这是租户级秘钥,与系统平台层的秘钥相互独立。每个希望对外暴露数据的租户需单独配置。
配置下游拉取步骤:
- 开启允许数据拉取,复制本页的秘钥。
- 在下游节点进入系统平台 → 远程数据拉取,填入本节点 URL、本组织的
tenant_code以及秘钥。 - 下游即可从本租户拉取公共模型、模板、插件和设备配置。
组织参数(Org Params)
组织(租户)级别的键值对"环境变量",配置一次后由平台自动注入本组织所有脚本的 org_params 入参:
- RPC 模型:
rpc_script({ device, params, alarms, logger, org_params }) - 物模型解析脚本:
payload_parser(device, msg, thingModelId, noticeAttrs, org_params) - 触发模型:
trigger_script(device, thingModelId, org_params) - MQTT 转发器脚本:
forwardScript({ topic, msg, org_params })
设计目的:把凭证、地址、业务标识从脚本逻辑里剥离——脚本只写逻辑,密钥放这里。换 webhook、轮换密钥、切换环境时只改一处,无需逐一修改 RPC/触发/转发器脚本。
与其他属性来源的区别
| 来源 | 作用域 | 写在哪里 | 谁能看到 |
|---|---|---|---|
params | 单次 RPC 调用 | 调用方传入 | 调用方 |
device.shared_attrs | 单个设备 | 设备 ↔ 平台双向同步 | 该设备运维 |
device.server_attrs | 单个设备 | 平台侧设备详情页 | 该设备运维 |
org_params | 整个组织 | 系统配置 → 组织参数 | 组织管理员(普通运维不可见) |
配置方式
编辑器以键值对表格呈现,每条记录包含:
| 字段 | 说明 |
|---|---|
| Key | 在脚本中通过 org_params.<key> 读取,建议小写下划线命名,如 wecom_webhook_url |
| Value | 字符串;若需结构化数据,填 JSON 字符串并在脚本中 JSON.parse |
| Remark | 给平台操作者看的说明,如"企业微信告警机器人 webhook,每季度轮换" |
点击提交,新值即刻对本组织所有脚本生效(无需重启)。
在脚本中读取
javascript
// RPC:从 org_params 拿企业微信 webhook
function rpc_script({ device, params, alarms, logger, org_params }) {
let webhook = org_params?.wecom_webhook_url;
if (!webhook) {
logger.error("wecom_webhook_url not configured in org_params");
return null;
}
return [{
sleepTimeMs: 0,
type: "axios",
dnMsg: {
method: "POST",
url: webhook,
headers: { "Content-Type": "application/json" },
data: { msgtype: "text", text: { content: params.content } },
timeout: 5000
}
}];
}安全提示
- 组织参数页面仅组织管理员可访问——普通运维看不到 webhook key/secret,可放心存放敏感凭证
- 若怀疑凭证泄露:在第三方平台重置密钥后,回本页更新 Value 即可;所有脚本自动使用新值
- 建议每季度轮换 webhook/access key,并在 Remark 里记录上次轮换时间
⚠️ 不要把
org_params的值写回到device.server_attrs或日志正文里——那等于把"安全藏起来的密钥"暴露给调用方/日志读者。