Webhook 配置接入文档
1. 简介
配置中心的 Webhook 通道旨在建立一种连接机制,用于与外部系统或内部其他模块进行交互通信。通过Webhook,配置中心能够将特定的数据发送到指定的接收端,接收端经过相应的处理后,可以实现与配置中心数据的同步、执行特定操作或进行数据的进一步分发等功能。
2. Webhook通道服务
2.1 入参出参格式定义
Webhook 通道 Request
- 入参方式:由配置中心构造生成,采用 POST 方式发送请求
- Content - Type:设定为 application/json
- 请求体结构:请求体 request_body 是一个 JSONArray,支持一批次发送多条消息数据。每条消息数据代表与一个特定 配置项 相关的消息
- 入参请求格式:默认请求参数格式如下
[{
"opType": "${opTypeValue}",
"configInfo": {
"configId": "${configIdValue}",
"templateId": "${templateIdValue}",
"strategyId": "${strategyIdValue}"
},
"targetType": "${targetTypeValue}",
"targetEnv": ${targetEnvValue},
"targetAudience": ${targetAudienceValue},
"configParams": ${configParamsValue},
"#ops_receipt_properties": ${#ops_receipt_propertiesValue},
"isEndPush": ${isEndPushValue}
}]
以上参数名支持自定义,如需调整请联系 ThinkingAI 售后
| 参数名 | 参数类型 | 参数描述 | 备注 |
|---|---|---|---|
opType | 字符串 | ${opTypeValue}为占位符(下同)。默认取值 online、suspend、offline,分别对应前台上线(编辑后再上线)、暂停生效、下线操作。 | 策略到期下线,默认不下发下线通知,如需开启,请联系 ThinkingAI 售后。 |
| configId | 字符串 | 配置项 ID 用于识别接入的一个业务模块 | 配置项相关说明见 配置项管理 |
| templateId | 字符串 | 模板 ID 用于识别具体的业务功能形式。 | 模板相关说明见 配置模板管理 |
| strategyId | 字符串 | 策略 ID 为配置策略的唯一 ID,用于策略的全生命周期管理。 | 策略相关说明见 配置策略管理 |
| targetType | 字符串 | targetType 可取值 all/targetEnv/targetAudience,对应全部、环境级配置、用户级配置。 | 关于目标环境、目标用户的介绍,见 配置策略管理的目标受众部分 |
systemId (可选) | JSON | 通过配置中心对接多下游系统时,可启用系统对接标识。开启后,用户级配置下发上线请求将根据系统对接标识字段值拆包下发;操作暂停或下线,请求中也将携带完整的目标系统取值。方便webhook服务做中转处理。 | 设置系统对接标识见 配置通道设置 |
| targetEnv | JSON | 前台配置的目标环境条件,需 webhook server 解析处理,环境条件格式示例见 2.2 中 策略上线请求。多条件间为 且 关系。 | 下发暂停生效和下线请求时不携带该参数 |
targetAudience | JSONArray | 目标用户列表。用户信息需在 Webhook 通道中添加 用户属性 作为自定义参数,见 配置通道设置 中「用户参数」部分。 | 下发暂停生效和下线请求时不携带该参数 |
| configParams | JSON | 使用配置模板配置的具体参数内容。 | 下发暂停生效和下线请求时不携带该参数 |
| #ops_receipt_properties | JSON | 透传参数,用于策略自动分析,暂时无需处理。 | AE 运营模块系统默认添加 |
| isEndPush | 布尔 | 本次推送是否结束标识,仅在用户级配置下发完成时下发。 |
注意:在 targetAudience 和 configParams 的参数中,对于所有类型的数据(如整数,小数,日期等类型),在发送请求时,都将以 “字符串” 类型进行发送。
2.2 示例
策略上线请求
环境级配置下发
以 “serverId” 为环境条件为例
[{
"opType": "online",
"configInfo": {
"configId": "demoConfig001",
"templateId": "demoTemplate001",
"strategyId": "2024121001"
},
"targetType": "targetEnv",
"syetemId": { // 仅开启系统对接标识时下发此参数
"serverId":["101","102"]
},
"targetEnv": {
"serverId":["101","102"]
},
"configParams": {
"title": "demoTitle",
"body": "demoBody"
},
"#ops_receipt_properties": {
"ops_project_id": 1,
"ops_request_id": "878c14fd1f266a16e8ba795085219ab0",
"ops_config_id": "demoConfig001",
"ops_template_id": "demoTemplate001",
"ops_strategy_id": "2024121001"
}
}]
用户级配置下发
[{
"opType": "online",
"configInfo": {
"configId": "demoConfig001",
"templateId": "demoTemplate001",
"strategyId": "2024121002"
},
"configParams": {
"title": "demoTitle",
"body": "demoBody"
},
"targetType": "targetAudience",
"syetemId": { // 仅开启系统对接标识有此参数,按照系统对接标识取值拆用户包下发
"serverId":["101"]
},
"targetAudience": [{
"#user_id": "996080782348914698",
"accountID": "jsxzdym",
"serverID": "12"
}, {
"#user_id": "1308438872845193216",
"accountID": "jsnjddk",
"serverID": "16"
}],
"#ops_receipt_properties": {
"ops_project_id": 1,
"ops_request_id": "e0c24f7e5b05bfbccb72bdf56903d1e3",
"ops_config_id": "demoConfig001",
"ops_template_id": "demoTemplate001",
"ops_strategy_id": "2024121002"
}
}]
开启系统对接标识后,当编辑策略发布新版本上线时,在上线请求前会先下发策略变更通知至所有该策略覆盖过的系统,用于下游历史数据处理。仅启用系统对接标识后有此通知。
[{
"opType": "online",
"configInfo": {
"configId": "demoConfig001",
"templateId": "demoTemplate001",
"strategyId": "2024121002"
},
"configParams": {
"title": "demoTitle",
"body": "demoBody"
},
"targetType": "targetAudience",
"syetemId": { // 策略覆盖过的系统值列表
"serverId":["101", "102", "103"]
},
"targetAudience": [],
"#ops_receipt_properties": {
"ops_project_id": 1,
"ops_request_id": "e0c24f7e5b05bfbccb72bdf56903d1e3",
"ops_config_id": "demoConfig001",
"ops_template_id": "demoTemplate001",
"ops_strategy_id": "2024121002"
}
}]
策略上线默认分批推送,以下为推送完成标识。
[{
"opType": "online",
"configInfo": {
"configId": "demoConfig001",
"templateId": "demoTemplate001",
"strategyId": "2024121001"
},
"isEndPush": true,
"#ops_receipt_properties": {
"ops_project_id": 1,
"ops_request_id": "9ea9b1f599774987d03c0a838b9aa14d",
"ops_config_id": "demoConfig001",
"ops_template_id": "demoTemplate001",
"ops_strategy_id": "2024121001"
}
}]
策略暂停生效请求
[{
"opType": "suspend",
"configInfo": {
"configId": "demoConfig001",
"templateId": "demoTemplate001",
"strategyId": "2024121001"
},
"syetemId": { // 仅开启系统对接标识有此参数
"serverId":["101","102"]
},
"#ops_receipt_properties": {
"ops_project_id": 1,
"ops_request_id": "0b33c3fc4b5c0a25c5a7122788f6c952",
"ops_config_id": "demoConfig001",
"ops_template_id": "demoTemplate001",
"ops_strategy_id": "2024121001"
}
}]
策略下线请求
[{
"opType": "offline",
"configInfo": {
"configId": "demoConfig001",
"templateId": "demoTemplate001",
"strategyId": "2024121001"
},
"syetemId": { // 仅开启系统对接标识有此参数
"serverId":["101","102"]
},
"#ops_receipt_properties": {
"ops_project_id": 1,
"ops_request_id": "0b33c3fc4b5c0a25c5a7122788f6c952",
"ops_config_id": "demoConfig001",
"ops_template_id": "demoTemplate001",
"ops_strategy_id": "2024121001"
}
}]
2.3 Webhook 通道 Response
请以如下参数格式响应请求。
{
"return_code": 0,
"return_message": "success",
"data": {
// fail_list 里面的每个元素是失败的对象信息,包含报错信息及报错对象的序号,报错对象序号从1开始。假设:发送5个对象信息,序号为1-5,成功3个 失败2个,其中第2个和第4个失败,则返回如下
"fail_list": [{
"index": 2,
"message": "system error"
}, {
"index": 4,
"message": "push id not found"
}]
}
}
| 参数名 | 参数类型 | 是否必有 | 参数说明 |
|---|---|---|---|
| return_code | Integer | 是 | 返回码 0 代表成功(或者部分成功) 1 代表失败 |
| return_message | String | 否 | 返回信息 |
| data | Object | 否 | 返回数据 |
data.fail_list | Array | 否 | 假如 return_code=0,
注意:
假如 return_code=1,无论 data.fail_list 里传了什么,都认为全部失败。 |
2.4 请求鉴权
这一步配置好后可以在 Webhook 通道产品界面上开启。
鉴权功能默认不开启。如果 Webhook 通道 server 无需鉴权可跳过此段。
如果要支持鉴权,需要在配置通道的时候打开鉴权开关,发送端会将签名添加到 http 请求头中,Key 为 X-AE-OPS-Signature。服务端需要根据密钥与 Request Body 进行 HmacSHA1 签名并生成 signature,然后和发送端的签名进行比对,比对一致代表认证通过。
签名算法的Java实现参考:
import org.apache.commons.codec.digest.HmacAlgorithms;
import org.apache.commons.codec.digest.HmacUtils;
/*
HmacSHA1签名算法
secretKey是客户配置的密钥
requestBody是请求内容的JSONString
*/
public static String HmacSHA1(String secretKey,String requestBody) throws Exception {
String signature = (new HmacUtils(HmacAlgorithms.HMAC_SHA_1,secretKey)).hmacHex(requestBody);
return signature;
}
签名算法的PHP实现参考:
/**
* HmacSHA1签名算法
* @param $secretKey : 客户配置的密钥
* @param $requestBody : 请求内容的JSONString
* @return string 签名值
*/
function HmacSHA1($secretKey, $requestBody) {
return hash_hmac('sha1', $requestBody, $secretKey);
}
2.5 请求并发性能
为了保证消息推送速度,Webhook 通道服务支持的并发越高越好,建议可以支持 100 以上TPS。同时,AE 的智能运营模块支持推送限流配置,可按照下游 Webhook 通道服务的并发能力上限进行调整。
3. Webhook 通道可配置参数介绍
以下参数默认后台配置,如需修改可联系 ThinkingAI 售后
| 配置项 | 可选值 | 默认值 | 配置描述 |
|---|---|---|---|
| 配置中心专用 host 节点 | 具体的 host | 无 | 默认不隔离;若需隔离,配置多个节点逗号分隔。 例如:ta4,ta5 |
| 配置中心 webhook 请求格式 | 具体 json | 无 | 默认格式模板见上方示例。若计划接入已存在接口,且不需要区分推送成功用户的场景时,可定制请求格式模板,来达到无需开发,直接接入现有服务的目的。 |
发送“一次发布结束”状态通知 | 开启,不开启 | 开启 | 当目标用户类型的上线推送,包含的用户人数较多时,会拆包推送到 Webhook 服务端,服务端需要判断此次推送完成时,可根据此请求判断。 |
自动下线是否下发请求 | 开启,不开启 | 不开启 | 策略按设定的时间自动下线时,默认不会发送下线请求到 Webhook 服务端。开启后,自动下线也会发送下线请求,格式与手动下线相同。 |
配置项下发命令类型 | 3种,5种 | 3种 | 默认为 online、offline、suspend 三种,可配置为区分编辑上线(re_online)和强制下线(force_offline)。 |
发送限流 | -1,[1,10000] | 不限流 | 单位:次/秒;设置为 -1,代表不限流;设置为 1-10000 的数字,例如 500,代表每秒最多向下游 Webhook 通道服务器发送 500 次请求。 |
| 发送批大小 | [1,5000] | 1000 | 表示一次调用参数的JsonArray里包含多少个元素 批次大小设置大,可以提高消息发送的效率 批次大小设置小,发送速度会比较慢,但是可靠性会更高 推荐设置为 1000,最大可设置 5000 |
超时时间 | [0,3600] | 60 | 单位:秒 http 请求 socket 超时时间,默认是 60s 如果设置了<=0,相当于不超时 |
| 失败重试次数 | [0,10] | 0 | 为了避免业务上重复推送,默认0次,即不重试 如果配置了 >0 的值,当接口超时或者接口返回 return_code!=0 会走重试逻辑 |
| 失败重试时间间隔 | [0,600] | 5 | 单位:秒 默认每隔 5s 重试一次 |
| 返回值强校验 | 开启,不开启 | 开启 | 开启后,AE 运营模块服务会校验下游服务器返回的 response 的格式,如果不符合上面 Webhook 通道 response 参数定义规范认为失败 例子:假设超时时间设置为 5s 如果不开启返回值强校验,Webhook 通道服务在5s内正常返回,且返回值 HTTP 200 无 Body,AE 运营模块认为本次调用成功 如果开启返回值强校验,Webhook 通道服务在5s内正常返回,且返回值 HTTP 200 无 Body 或者 Body 格式和约定的规范不一致,AE 运营模块认为本次调用失败 |

