规则的定义

规则是一个安全、高度可自定义、自动化的接口,允许开发商编写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 设备激活后事件 当设备被激活后执行 点击跳转
0x0401 any:on_error 请求异常事件 当客户端请求有异常时执行 点击跳转

触发器

触发器使用JavaScript语言编写(ECMAScript 5.1标准,且不能用"const"和"let"),要求返回一个布尔值, 在触发器返回了true的时候会执行后续的动作,否则跳过本条规则。

作为一个可以使用代码实现的功能,触发器具有十分强大的扩展能力,但是为了保障信息安全,我们对运行环境做了一些限制。例如:无法调用任何的IO接口,没有提供console.log的输出,无法使用window、document、location等系统对象。

在保存规则之前,建议先使用调试功能测试脚本的正确性!为提升可维护性,可以在代码上添加适当的注释。

触发器调试功能

触发器参数详情

每个事件有不同的触发器入参参数,详细内容如下:

云保保客户端会话失效事件

一级节点 二级节点 类型 解释
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 授权码已激活设备总数

请求异常事件

一级节点 二级节点 类型 解释
error_code integer 错误码
error_msg string 错误消息
sn string 授权码
user 用户信息
loginName string 用户帐号
email string 邮箱地址
phone string 联系电话

动作

动作使用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"
  }
}