规则的定义
规则是一个安全、高度可自定义、自动化的接口,允许开发商编写JavaScript代码来扩展比特授权云的业务逻辑,以实现一些私有化的定制功能。
一个规则分为触发器和动作两个部分,开发商可以编写多个规则作用于不同的事件上。
- 事件:定义一系列入口可以将规则注入到业务逻辑中。
- 触发器:使用JavaScript代码编写的判断逻辑。
- 动作:规则被触发后执行的操作,如回调、禁用等。
规则执行流程如图所示:
创建规则
在控制台左侧点击"规则",再点击"+规则"开始创建规则(如果您无法看到规则,请联系管理员开通权限),您会看到一个提示框,输入对应的信息即可完成创建。如图所示:
- 规则的名称用于显示区分,不允许重复且只允许包含中文、英文、数字、下划线、中横线等字符。
- 一条规则只能对应一个事件。
在创建规则后进入属性页,在事件处理部分,可以选择触发器和动作的模板以快速添加配置,修改完配置后记得要点击保存,否则修改就会丢失。
最后,返回到规则列表页面启动规则,在下一次有事件被执行时时,就会触发启动的规则。
事件
事件作为规则的入口,会为规则提供一个名为"event"的对象,对象中包含触发器所必需的一些属性数据,开发商可以使用这个对象实现触发逻辑,如:event.sn === "xxx",不同的事件的"event"对象不完全相同。
已定义的事件
ID | 代码 | 名称 | 解释 | 对象属性 |
---|---|---|---|---|
0x0001 | yunbaobao:session_logout | 云保保客户端会话失效事件 | 在云保保客户端会话登出、踢出、过期时执行 | 点击跳转 |
0x0101 | sn:pre_activate | 授权码激活前事件 | 在授权码第一次被激活时执行 | 点击跳转 |
0x0102 | sn:post_activate | 授权码激活后事件 | 在授权码第一次被激活后执行 | 点击跳转 |
0x0301 | device:pre_activate | 设备激活前事件 | 在设备被激活前执行,当设备重新激活时也会执行 | 点击跳转 |
0x0302 | device:post_activate | 设备激活后事件 | 当设备被激活后执行 | 点击跳转 |
云保保客户端会话失效事件
一级节点 | 二级节点 | 类型 | 解释 |
---|---|---|---|
sn | string | 授权码 | |
sid | string | 会话ID | |
type | string | 失效类型:LOGOUT,EXPIRED,CLEAR,OTHER | |
logout_time | long | 会话失效时间戳 |
授权码激活前事件
一级节点 | 二级节点 | 类型 | 解释 |
---|---|---|---|
snInfo | 授权码信息 | ||
sn | string | 授权码 | |
type | string | 授权码的类型,如:FLOAT | |
volumeNumber | integer | 终端限制 | |
activeDate | long | 激活时间,没激活的授权码没有此节点 | |
startDate | long | 起始日期 | |
endDate | long | 结束日期,是endDate和expirationDays合计的值 | |
expirationDays | integer | 有效期天数 | |
userNumber | integer | 用户数 | |
transferVolume | integer | 浮动机器 | |
transferNumber | integer | 浮动次数 | |
status | string | 授权码状态,如:NORMAL | |
customInfo | string | 终端标识 | |
ip | string | 请求的IP地址 |
授权码激活后事件
一级节点 | 二级节点 | 类型 | 解释 |
---|---|---|---|
snInfo | 授权码信息 | ||
sn | string | 授权码 | |
type | string | 授权码的类型,如:FLOAT | |
volumeNumber | integer | 终端限制 | |
activeDate | long | 激活时间,没激活的授权码没有此节点 | |
startDate | long | 起始日期 | |
endDate | long | 结束日期,是endDate和expirationDays合计的值 | |
expirationDays | integer | 有效期天数 | |
userNumber | integer | 用户数 | |
transferVolume | integer | 浮动机器 | |
transferNumber | integer | 浮动次数 | |
status | string | 授权码状态,如:NORMAL | |
customInfo | string | 终端标识 | |
ip | string | 请求的IP地址 | |
device | 设备信息 | ||
regDate | long | 添加设备的时间,客户端激活可作为激活事件 | |
mid | string | 设备指纹 | |
status | integer | 设备的状态码 | |
deviceCount | integer | 授权码已激活设备总数 |
设备激活前事件
一级节点 | 二级节点 | 类型 | 解释 |
---|---|---|---|
snInfo | 授权码信息 | ||
sn | string | 授权码 | |
type | string | 授权码的类型,如:FLOAT | |
volumeNumber | integer | 终端限制 | |
activeDate | long | 激活时间,没激活的授权码没有此节点 | |
startDate | long | 起始日期 | |
endDate | long | 结束日期,是endDate和expirationDays合计的值 | |
expirationDays | integer | 有效期天数 | |
userNumber | integer | 用户数 | |
transferVolume | integer | 浮动机器 | |
transferNumber | integer | 浮动次数 | |
status | string | 授权码状态,如:NORMAL | |
customInfo | string | 终端标识 | |
ip | string | 请求的IP地址 | |
deviceCount | integer | 授权码已激活设备总数 |
设备激活后事件
一级节点 | 二级节点 | 类型 | 解释 |
---|---|---|---|
snInfo | 授权码信息 | ||
sn | string | 授权码 | |
type | string | 授权码的类型,如:FLOAT | |
volumeNumber | integer | 终端限制 | |
activeDate | long | 激活时间,没激活的授权码没有此节点 | |
startDate | long | 起始日期 | |
endDate | long | 结束日期,是endDate和expirationDays合计的值 | |
expirationDays | integer | 有效期天数 | |
userNumber | integer | 用户数 | |
transferVolume | integer | 浮动机器 | |
transferNumber | integer | 浮动次数 | |
status | string | 授权码状态,如:NORMAL | |
customInfo | string | 终端标识 | |
ip | string | 请求的IP地址 | |
device | 设备信息 | ||
regDate | long | 添加设备的时间,客户端激活可作为激活事件 | |
mid | string | 设备指纹 | |
status | integer | 设备的状态码 | |
deviceCount | integer | 授权码已激活设备总数 |
触发器
触发器使用JavaScript语言编写(ECMAScript 5.1标准,且不能用"const"和"let"),要求返回一个布尔值,在触发器返回了true的时候会执行后续的动作,否则跳过本条规则。
作为一个可以使用代码实现的功能,触发器具有十分强大的扩展能力,但是为了保障信息安全,我们对运行环境做了一些限制。例如:无法调用任何的IO接口,没有提供console.log的输出,无法使用window、document、location等系统对象。
在保存规则之前,建议先使用调试功能测试脚本的正确性!为提升可维护性,可以在代码上添加适当的注释。
动作
动作使用JSON配置,在触发器触发后执行响应的动作。一条规则可以设置多个动作,采用数组的形式编写,动作的执行没有严格顺序。为方便使用,我们预先定义了一些模板,开发商可在模板的基础上扩充内容。动作允许为空,为空时什么也不做,继续执行下一条规则。
目前可配置的动作类型有:
- 回调(Callback)
回调(Callback)
[
{
"callback": {
"url": "<回调地址>",
"headers": {
"x-bitanswer-token":"<认证Key>"
}
}
}
]
- 回调是异步执行的,"url"对应的服务的响应结果会被忽略。
- "x-bitanswer-token"用于回调的认证,可以以此拦截请求。
- 回调会将事件中定义的数据发给响应的地址,使用 POST 请求以JSON格式发送
回调内容示例:
{
"event": "sn:pre_activate",
"rule": "SN激活前callback",
"data": {
"snInfo": {
"sn": "xxx",
"type": "FLOAT, Smart",
"volumeNumber": 1,
"endDate": 1715356799000,
"expirationDays": 90,
"transferVolume": 7,
"status": "Normal"
},
"ip": "127.0.0.1"
}
}