一、 接口说明
商户需要提供webhook推送地址(一个机器人账号对应一个推送地址)
请求⽅式:POST
参数说明
字段 | 类型 | ⻓度 | 描述 |
param | 对象 | - | 具体消息信息参数对象(详⻅param参数说明) |
token | 字符串 | 32 | 根据param中参数结合secret⽣成,⽤于鉴权 |
param参数
字段 | 类型 | ⻓度 | 描述 |
channel | 字符串 | 20 | 渠道(例如:whatsapp) |
datetime | 字符串 | 19 | 时间(例如:2023-03-1912:32:43) |
messageId | 字符串 | 255 | 消息ID |
status | 字符串 | 20 | 状态• sent(已发送)• delivered(已送达)• read(已阅读)• failed(失败)• click(点击) |
statusDesc | 字符串 | 255 | 状态描述• failed(失败原因)• click(按钮名称) |
taskId | int | 20 | 调⽤OpenApi发送时返回的eventTaskId |
userId | 字符串 | 255 | 渠道ID(例如:whatsapp⼿机号) |
datetime 所取时区与机器人设置时区一致,可根据下图查询,通常默认为+08:00即北京时间

status 每种状态定义与 群发统计 一致
请求⽰例
{
"token": "6976d716b2c10707cdd10367e29394c8", // 用于鉴权
"param": {
"channel": "whatsapp", // 渠道
"datetime": "2023-03-19 12:32:43", // 时间
"messageId": "wamid.HBgNODYxNTI1MDA1Mzc2MBUCABIYFDNBNjE1MzZEMTA5RTgzRDEyNkQ5AA==", // 消息ID
"status": "sent", // 发送状态:sent、delivered、read、failed、click
"statusDesc": null, // 状态描述
"taskId": 2342,
"userId": "8613812344321"
}
}
二、鉴权说明
1. Meetbot会提供secret(例如:1d60f55f684f42f684f30b58a6d25d58)【注:商户请先提供webhook推送地址给Meetbot】
2. 对每个参数按照key=value的形式组装起来,value为null或者空字符串统⼀⽤空字符串替代。例如下列的param⽣成的结果即是
{
"token": "6976d716b2c10707cdd10367e29394c8", // 用于鉴权
"param": {
"channel": "whatsapp", // 渠道
"datetime": "2023-03-19 12:32:43", // 时间
"messageId": "wamid.HBgNODYxNTI1MDA1Mzc2MBUCABIYFDNBNjE1MzZEMTA5RTgzRDEyNkQ5AA==", // 消息ID
"status": "sent", // 发送状态:sent、delivered、read、failed、click
"statusDesc": null, // 状态描述
"taskId": 2342,
"userId": "8613812344321"
}
}
3. 将上⼀步组装好的数据按字⺟序排序,⽤"&"拼接(例如:channel=whatsapp&datetime=2023-03-1912:32:43&messageId=wamid.HBgNODYxNTI1MDA1Mzc2MBUCABIYFDNBNjE1MzZEMTA5RTgzRDEyNkQ5AA==&status=sent&statusDesc=&taskId=2342&userId=8613812344321)
4. 将上⼀步拼装好的数据加上&secret=(你的密钥)(例如:channel=whatsapp&datetime=2023-03-1912:32:43&messageId=wamid.HBgNODYxNTI1MDA1Mzc2MBUCABIYFDNBNjE1MzZEMTA5RTgzRDEyNkQ5AA==&status=sent&statusDesc=&taskId=2342&userId=8613812344321&secret=1d60f55f684f42f684f30b58a6d25d58)
5. 将上述字符串进⾏MD5加密,得到:3214c0ef8c80c82612d6b366ef7af5b6
⽣成MD5Java⽰例代码
public static String md5Encode(String inStr) throws Exception {
MessageDigest md5 = null;
try {
md5 = MessageDigest.getInstance("MD5");
} catch (Exception e) {
System.out.println(e.toString());
e.printStackTrace();
return "";
}
byte[] byteArray = inStr.getBytes("UTF-8");
byte[] md5Bytes = md5.digest(byteArray);
StringBuffer hexValue = new StringBuffer();
for (int i = 0; i < md5Bytes.length; i++) {
int val = ((int) md5Bytes[i]) & 0xff;
if (val < 16) {
hexValue.append("0");
}
hexValue.append(Integer.toHexString(val));
}
return hexValue.toString();
}