管理员可以配置Webhook,以便通过Webhook对接您的一方系统(如CRM)或三方系统,实现在Quick Audience控制台向用户发送优惠券等。触达营销、自动化营销模块均支持Webhook。
操作流程如下:
针对您的一方系统或三方系统完成Webhook接入开发,请参见Webhook接入文档。
若Webhook参数需要使用字符型参数调用的方式,包括采用常量或通过接口传参,管理员需要在新建Webhook前配置参数,请参见参数管理。
管理员新建Webhook,对接一方系统或三方系统,请参见新建Webhook。
管理员测试发送,确保能发送成功,请参见测试发送。
管理员向需要使用Webhook的非管理员授予Webhook的使用权限,请参见授权。
管理员、已授权成员在触达营销模块创建Webhook任务,或在自动化营销模块配置Webhook组件,调用一方系统或三方系统进行营销发送,具体操作,请分别参见创建Webhook任务、数据配置-Webhook组件。
新建Webhook
操作步骤:
选择工作空间>配置管理>营销配置>Webhook管理,进入Webhook列表。
单击右上角新建Webhook。
在弹窗中配置参数,如下表所示。
参数
说明
Webhook名称
输入Webhook名称。
鉴权方式
选择鉴权方式:
无:不进行鉴权。
密钥:通过验证密钥进行鉴权,需要在下方输入密钥。
请求地址
输入要接收消息推送的接口地址,必须是以http或https开头的完整地址。
建议使用HTTPS协议,以提高信息传输的安全性。
发送ID类型
选择允许发送的ID类型,可多选。但在创建任务时,每个任务仅可选择发送一种ID。
支持选择ID类型管理中所有已启用的ID类型。
Webhook参数
您可以定义Webhook参数,在使用该Webhook创建不同的营销任务时,可以灵活定义这些参数的值。例如:一方系统或三方系统设置的发送内容为“在{address}进行折扣活动”,{address}即为一个参数,在创建营销任务时,需要指定为具体内容。
参数名称
显示名称:显示在营销任务创建页面上的参数名称。
参数类型:参数的数据类型,支持字符型、数值型、文本型、日期型、字符型(参数调用)。
对于字符型(参数调用),需要选择参数使用的常量或接口,常量或接口需要事先配置,请参见参数管理。
是否必填:参数是否必传
单击添加模板参数,可以增加一个Webhook参数。
是否开启回执设置
选择是否开启回执设置,使一方系统或三方系统能够通过上报回执将发送结果返回本空间的分析源,显示在营销任务详情页面,或用于自动化营销的结果多分支组件。
若开启,您需要设置:
数据回收周期:超过该周期后,Quick Audience将不再接收发送结果。
状态code、状态值:回执中,状态code为发送结果代码,如:200;状态值为对应的发送结果,如:成功。
状态code、状态值可以有多对,单击新增状态,可以增加一对。
单击消息格式预览,下方将根据已配置的参数展示HTTP Post请求的消息体格式。详细说明,请参见Webhook接入文档。
单击确定,完成配置。
测试发送
使用Webhook进行营销前,您需要测试发送,确保其可用性。
您也可以在创建营销任务时测试发送,请参见创建Webhook任务、数据配置-Webhook组件。
操作步骤:
单击
图标。
在弹窗中选择要测试发送的ID类型,输入测试ID、测试Webhook参数值。
说明一次仅能测试一种ID类型。测试营销任务需要发送的ID类型即可。
单击确定,系统将通过Webhook调用一方系统或三方系统向测试ID发送消息。
弹窗将显示测试发送是否成功。
测试发送成功:请检查一方系统或三方系统是否收到了Webhook请求,测试ID是否收到消息。若未收到,请单击弹窗中的下载日志,排查原因。
测试发送失败:请单击弹窗中的下载日志,排查原因。
同时,最近一次的测试发送信息也将显示在Webhook列表,如下图所示。
授权
管理员以外的空间成员,若需要使用Webhook创建营销任务,必须加入含“用户营销-触达营销-Webhook”权限的角色,并由管理员授予该Webhook的使用权限。
授权操作步骤:
单击
>授权,进入授权页面,如下图所示。
选择授权方式:支持按成员和按成员组。
说明成员组可单击页面右上角
,选择空间管理>空间成员组进行添加。两种授权方式相互排斥,仅可选其中一种进行授权。若已按一种方式授权,再次授权时选择另一种方式,则使用旧授权方式的授权将解除,仅生效使用新授权方式的授权。
下方显示已授权成员账号/成员组,以及授权有效期。
解除授权:单击账号/成员组对应的移除,即可解除对该账号/成员组的授权,立即生效。
授权:选择要授权的账号/成员组,可多选,设置有效期,单击确定完成授权。
关闭/开启
Webhook创建后,默认为开启状态,此时可测试、使用Webhook;若需要编辑、删除Webhook,必须先关闭Webhook。
通过右侧的开关,您可以关闭、开启
Webhook。
编辑
在关闭Webhook后,您可以对其进行编辑。
单击"编辑"按钮,进入编辑界面,后续操作与创建时相同。
不支持编辑开启状态的Webhook,请先关闭。
若编辑前已开启回执设置,则不支持修改或删除已配置的状态code、状态值。
复制
单击>复制,进入新的配置页面,已默认填写与原Webhook相同的配置项,支持修改,单击确定完成复制。
复制生成的新Webhook,默认为关闭状态,需要手动开启,才能测试、使用。
删除
在关闭Webhook后,若该Webhook未被用于任何营销任务,您可以删除该Webhook。
单击>删除,确认后即删除该Webhook。
参数管理
若Webhook参数需要使用字符型参数调用的方式,包括采用常量或通过接口传参,管理员需要在新建Webhook前配置参数。
接口型:通过接口传递参数值。在创建Webhook任务时,Quick Audience将读取接口内的所有参数值,供创建时选择。
接口开发规范,请参见Webhook接口参数接入文档。
常量型:参数值固定。可以设置多个固定参数值,供创建Webhook任务时选择。
创建参数
选择工作空间>配置管理>营销配置>Webhook管理>Webhook参数管理,进入Webhook参数列表。
单击右上角新建Webhook参数。
在弹窗中配置参数,常量型、接口型参数的配置方法不同:
接口型:
参数
说明
参数名称
输入接口名称。
参数类型
选择接口型。
接口地址
输入传递参数的接口地址。
参数描述
输入参数描述。
鉴权方式
选择鉴权方式:
无:不进行鉴权。
密钥:通过验证密钥进行鉴权,需要在下方输入密钥。
是否关联其他参数
选择关联参数:
否:不关联
是:
参数值设置(支持添加多个,最多添加20个):
参数名称:参数名称必须为英文,支持输入英文、数字、下划线,且不能为空,长度不超过32个字符
显示名称:不超过32个字符
参数值:
下拉选项,支持选项:关联参数选择 、手动输入
关联参数选择
下拉全量透出参数管理下的参数
如接口型参数需要设置级联关系,接口里需包含参数之间级联关系
手动输入:选择手动输入时,支持手动输入多个参数值
若需一个参数传递多个值,可以在一个参数值里面填写,多个值之间用三方约定的分隔符分开,接收到后自己分隔
常量型:
参数
说明
参数名称
输入接口名称。
参数类型
选择常量型。
参数描述
输入参数描述。
是否关联其他参数
选择关联参数:
否:参数值设置(支持添加多个,最多添加20个)
参数值:至少配置一个模板参数,参数名称必须为英文,且不能为空,长度不超过32个字符
显示名称:不超过32个字符
是:参数值及关联参数设置(支持添加多个,最多添加20个)
单击确定,完成配置。
管理参数
参数列表提供以下操作按钮:
详情:单击后可查看参数详情。
编辑:单击后可编辑参数,配置方法与创建时相同。
删除:单击后,在弹窗中确认删除,即可删除该参数。仅支持删除当前未被使用的参数。
Webhook接入文档
Webhook接入开发包括以下几个方面,请参考我们给出的消息格式和样例进行开发。
HTTP Endpoint Server
为了与Quick Audience的Webhook对接,您需要开发一个HTTP Server。Quick Audience将发起Post请求,请求超时时间为10秒。Quick Audience发起的Post请求和接入方回执请求约定如下通用参数,为必传项。
URL参数 | 含义 | 示例 |
timestamp | 秒级时间戳 | 1631865523 |
nonce | 32位随机字符串 | 2e6eceb5737b473284c930c8ef79090e |
请求URL示例:
{Webhook配置的url}?timestamp=1631865523&nonce=2e6eceb5737b473284c930c8ef79090e
Header | 含义 | 说明 |
X-QA-Hmac-Signature | 鉴权签名 | 开启鉴权时使用,鉴权方式见下文。 未开启鉴权时,该Header填空字符串""。 |
鉴权方式
通过密钥进行鉴权。Webhook配置时开启鉴权,用户填写密钥。
Quick Audience内部会根据用户填写的密钥与URL请求参数timestamp和nonce进行HmacSHA256Hex签名并生成signature,并将此signature通过Request Header传递过去来做鉴权。您的服务接受到请求后,同样根据URL参数与Webhook通道配置的密钥进行HmacSHA256Hex算法加密。如果计算的值与从Request Header中传过来的signature相同,则可以确定是此请求是从Quick Audience中发送的。上报回执时同理。
参数 | 含义 | 示例 |
key | Webhook配置的密钥 | 123456789 |
签名算法示例:
import org.apache.commons.codec.digest.HmacUtils;
public String makeSignature(String key, String timestamp, String nonce) {
String str = generateStr(key, timestamp, nonce);
return HmacUtils.hmacSha256Hex(key, str.replaceAll("\\s+", ""));
}
/**
* 签名待处理的字符串拼接
*/
public static String generateStr(String key, String timestamp, String nonce) {
String[] array = new String[]{key, timestamp, nonce};
StringBuilder sb = new StringBuilder();
Arrays.sort(array);/* 字符串排序*/
for (int i = 0; i < 3; i++) {
sb.append(array[i]);
}
return sb.toString();
}
Webhook Request
请求为Quick Audience向接入方发起的HTTP Post请求。Request Body是单用户的触发请求信息,对于任何类型的数据(如整数、字符串、文本变量等类型),在发送请求时,将所有的字段全部转为字符串进行处理。
字段名 | 字段类型 | 说明 |
user_profile | Map<String,String> | KV类型,target_type的value值表示ID类型,支持ID类型见下文,为大写;target_id的value值表示具体目标ID值。 |
params | Map<String,Object> | KV类型,具体KV为Webhook配置时指定的。当文本类型中有变量时,变量值将直接填入params参数中,请参见下面的示例(在界面配置即可)。 |
callback_params | Map<String,String> | 为Quick Audience请求参数,需在上报回执时原样带回。 |
process_info | Map<String,String> | 流程信息中的部分实例信息,因为这些信息每个人不同 |
Post Body结构示例(单个用户,每批一般1~100个):
[
{
"user_profile": {
"target_type": "OPEN_ID",
"target_id": "1917810",
"customer_id": "客户的唯一ID,如果上报事件需要使用这个ID"
},
"params": {
"define_item1": "优惠券ID",
"define_item2": "优惠券内容示例,用户所在的地址是北京"
},
"callback_params": {
"webhook_id": "13312313",
"send_time": "1625037472000",
"nodeId": "节点Id",
"instanceId": "实例Id",
"batchId": "执行动作批次Id,可做批次幂等ID",
"actionId": "执行动作实例Id,可做单条幂等ID",
"customerId": "用户Id,customerId"
},
"process_info": {
"processInstanceId": "新版:旅程周期中,每个用户的旅程实例ID",
"processInstanceStartTime": "新版:旅程周期中,每个用户的旅程实例开始时间,时间戳格式",
"processNodeInstanceId": "新版:旅程节点实例ID(每次不同)",
"processNodeInstanceStartTime": "新版:旅程周期中,每个用户的旅程的节点实例开始时间,时间戳格式",
"groupName":"nodeId:nodeName:groupResult(node.result),groupName(node.resultExt);nodeId:nodeName:groupResult(node.result),groupName(node.resultExt)",
"@comment":{
"groupName" : "节点id:节点名称(界面配置的):分组结果(随机分组的百分比数字,两位小数):分组名称(界面配置的);多个用分号隔开"
}
}
}
]
支持的ID类型:
ID类型 | 含义 |
ONEID | OneID |
邮箱地址 | |
MOBILE | 手机号 |
TAOBAO_ID | 淘宝ID |
TAOBAO_NICK | 淘宝昵称 |
IMEI | 手机IMEI |
IMSI | 手机IMSI |
IDFA | 手机IDFA |
MAC_ORG | MAC地址 |
WEIBO_ID_ORG | 微博ID |
ALIPAY_ID | 支付宝ID |
UNION_ID | 微信UnionID |
OAID | OAID |
OPEN_ID | 微信OpenID |
接入方收到请求后,向Quick Audience返回响应消息。
响应体格式:
{
"code":"OK", //请求状态码:返回OK代表请求成功,必须为大写;返回其他为错误码,接入方自定义。
"message":"", //状态码描述,非必填。
}
回执上报
接入方执行营销任务后,向Quick Audience上报回执,反馈营销消息的发送结果。
接口调通说明参照:Quick Audience开放平台API
接口说明
接口描述 | 回执上报 | ||||
URL | /openapi/cloud/webhook/receiveWebHookCallBack | ||||
请求方式 | POST | ||||
参数名 | 数据类型 | 参数类型 | 是否必填 | 说明 | |
nonce | String | Query Params | 否 | 随机数 | |
X-QA-Hmac-Signature | String | Headers | 否 | 鉴权签名 | |
callBackMessageList | List<WebHookCallBackMessage> | Request Body | 是 | 为List,多个用户的回执信息合并在一起,WebHookCallBackMessage格式如下 |
状态码 | 说明 | ||||
200 | 接口请求成功 | ||||
其他 | 请求失败 |
返回属性名 | 类型 | 说明 | |||
1.traceId | string | 唯一id,qa开发人员以此定位链路上的问题 | |||
2.success | boolean | 服务器处理是否成功 | |||
3.errorCode | string | 错误码 | |||
4.errorDesc | string | 错误描述 | |||
5.data | WebHookCallBackResult | WebHookCallBackResult |
WebHookCallBackMessage如下:
字段 | 类型 | 说明 |
msg_id | String | 32位消息唯一ID,为接入方生成。 |
status | String | 结果状态,即Webhook配置中定义的状态code,如200。 |
cst_id | String | 触达的用户ID,为user_profile.customer_id。 |
send_time | String | 毫秒级时间戳。 |
callback_params | Map<String,String> | Webhook请求时携带的callback_params,原样待会即可 |
WebHookCallBackResult如下:
参数名 | 参数类型 | 参数说明 |
fieldId | String | 字段ID |
fieldName | String | 字段名 |
fieldAlias | String | 字段别名(列中文名) |
fieldClassify | Integer | 字段分类:维度指标(0:ID,1:维度字段,2:统计时间,3:指标字段)用户行为(0:ID,3:统计指标,11:行为时间,12:行为渠道,13:行为类型,14:行为对象,15:行为属性,16:统计指标) |
fieldType | Integer | 字段类型(0:枚举,1:文本,2:数值,3:时间,4:多值): 必填 |
fieldSeparator | String | 多值字段分隔符非必填,标签字段多值类型必填 |
identityType | String | 客户身份类型/ID类型 (oneid,email,mobile,taobao_id,taobao_nick,imei,imsi,mac_org,weibo_id_org,alipay_id,union_id,open_id) |
encryptionType | String | identityType |
OemImportTaskInfoResponse如下:
参数名 | 参数类型 | 参数说明 |
code | String | 返回码 |
message | String | 回执结果状态 |
请求示例
curl -H "X-QA-Hmac-Signature: 12" -H "Authorization: 57a824b183e54ddbca79170c00dd3f72" -H "Content-Type: application/json" -H "Cookie: csrf_token=f5013e65-0661-41ba-b2ad-8a396a775533" --data-binary "[
{
\"msgId\": \"1\"
}
]" --compressed "http://qa.qa-env09.aliyun.com/openapi/cloud/webhook/receiveWebHookCallBack?nonce=12&appId=686219778252592361&accessKey=c76f6d5cb309478ab9929616dba64148×tamp=1718352394665"
响应示例:
{
"data": {
"code": 200,
"message": "成功"
},
"errorCode": null,
"errorDesc": null,
"exStack": null,
"opers": [],
"solution": null,
"success": true,
"traceId": "0ada03af17183523948084322d00b4"
}
FAQ
Webhook参数、变量、常量、接口的区别是什么?
答:Webhook参数有多种类型,它们的区别和用法如下图所示。
其中:
常量、接口是字符型(参数调用)参数赋值的两种方式。
变量是文本型参数中插入的,可随用户而变的内容。