WhatsApp消息发送数据回传

一、 接口说明

商户需要提供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(); }
2024-04-17
0