Skip to content

Commit

Permalink
🎨 binarywang#3218【企业微信】增加获客助手事件回调通知
Browse files Browse the repository at this point in the history
  • Loading branch information
0katekate0 authored and boris.bao committed Mar 23, 2024
1 parent 936a70b commit c2cfcdd
Show file tree
Hide file tree
Showing 5 changed files with 220 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -302,10 +302,6 @@ public static class EventType {
public static final String VIEW = "VIEW";
public static final String MASS_SEND_JOB_FINISH = "MASSSENDJOBFINISH";

/**
* 微信客服消息事件推送
*/
public static final String KF_MSG_OR_EVENT = "kf_msg_or_event";
/**
* 扫码推事件的事件推送
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,27 @@ public class WxCpXmlMessage implements Serializable {
@XStreamConverter(value = XStreamCDataConverter.class)
private String openKfId;

/**
* 新增授权的客服账号列表,多个AuthAddOpenKfId节点表示多个新增账号
*/
@XStreamAlias("AuthAddOpenKfId")
@XStreamConverter(value = XStreamCDataConverter.class)
private String authAddOpenKfId;

/**
* 取消授权的客服账号列表,多个AuthDelOpenKfId节点表示多个取消账号
*/
@XStreamAlias("AuthDelOpenKfId")
@XStreamConverter(value = XStreamCDataConverter.class)
private String authDelOpenKfId;

/**
* 失效的获客链接ID
*/
@XStreamAlias("LinkId")
@XStreamConverter(value = XStreamCDataConverter.class)
private String linkId;

/**
* 通讯录变更事件.
* 请参考常量 me.chanjar.weixin.cp.constant.WxCpConsts.ContactChangeType
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,60 @@ public static class EventType {
*/
public static final String LIVING_STATUS_CHANGE = "living_status_change";

/**
* 微信客服消息事件
*/
public static final String KF_MSG_OR_EVENT = "kf_msg_or_event";

/**
* 客服账号授权变更事件
*/
public static final String KF_ACCOUNT_AUTH_CHANGE = "kf_account_auth_change";

/**
* 获客助手事件通知
*/
public static final String CUSTOMER_ACQUISITION = "customer_acquisition";

}

/**
* 获客助手事件通知CHANGE_TYPE
* https://developer.work.weixin.qq.com/document/path/97299
*/
@UtilityClass
public static class CustomerAcquisitionChangeType {

/**
* 获客额度即将耗尽事件
*/
public static final String BALANCE_LOW = "balance_low";

/**
* 使用量已经耗尽事件
*/
public static final String BALANCE_EXHAUSTED = "balance_exhausted";

/**
* 获客链接不可用事件
*/
public static final String LINK_UNAVAILABLE = "link_unavailable";

/**
* 微信客户发起会话事件
*/
public static final String CUSTOMER_START_CHAT = "customer_start_chat";

/**
* 删除获客链接事件
*/
public static final String DELETE_LINK = "delete_link";

/**
* 通过获客链接申请好友事件
*/
public static final String friend_request = "friend_request";

}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.google.common.collect.Lists;
import com.google.inject.Inject;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.common.util.XmlUtils;
import me.chanjar.weixin.cp.api.ApiTestModule;
import me.chanjar.weixin.cp.api.WxCpService;
import me.chanjar.weixin.cp.bean.WxCpBaseResp;
Expand All @@ -13,6 +14,9 @@
import me.chanjar.weixin.cp.bean.external.msg.AttachmentBuilder;
import me.chanjar.weixin.cp.bean.external.msg.Image;
import me.chanjar.weixin.cp.bean.external.msg.Video;
import me.chanjar.weixin.cp.bean.message.WxCpXmlMessage;
import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
import me.chanjar.weixin.cp.util.xml.XStreamTransformer;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.testng.annotations.Guice;
import org.testng.annotations.Test;
Expand Down Expand Up @@ -641,4 +645,124 @@ public void testCancelGroupMsgSend() throws WxErrorException {
this.wxCpService.getExternalContactService()
.cancelGroupMsgSend("msgGCAAAXtWyujaWJHDDGi0mACAAAA");
}

/**
* 获客助手事件通知
* https://developer.work.weixin.qq.com/document/path/97299
*
* @throws WxErrorException
*/
@Test
public void testEvent() throws WxErrorException {

/**
* 获客额度即将耗尽事件
*/
String xml1 = "<xml>\n" +
"\t<ToUserName><![CDATA[toUser]]></ToUserName>\n" +
"\t<FromUserName><![CDATA[sys]]></FromUserName> \n" +
"\t<CreateTime>1403610513</CreateTime>\n" +
"\t<MsgType><![CDATA[event]]></MsgType>\n" +
"\t<Event><![CDATA[customer_acquisition]]></Event>\n" +
"\t<ChangeType><![CDATA[balance_low]]></ChangeType>\n" +
"</xml>";

WxCpXmlMessage msg1 = XStreamTransformer.fromXml(WxCpXmlMessage.class, xml1);
msg1.setAllFieldsMap(XmlUtils.xml2Map(xml1));
System.out.println("获客额度即将耗尽事件:" + WxCpGsonBuilder.create().toJson(msg1));

/**
* 使用量已经耗尽事件
*/
String xml2 = "<xml>\n" +
"\t<ToUserName><![CDATA[toUser]]></ToUserName>\n" +
"\t<FromUserName><![CDATA[sys]]></FromUserName> \n" +
"\t<CreateTime>1403610513</CreateTime>\n" +
"\t<MsgType><![CDATA[event]]></MsgType>\n" +
"\t<Event><![CDATA[customer_acquisition]]></Event>\n" +
"\t<ChangeType><![CDATA[balance_exhausted]]></ChangeType>\n" +
"</xml>";

WxCpXmlMessage msg2 = XStreamTransformer.fromXml(WxCpXmlMessage.class, xml2);
msg2.setAllFieldsMap(XmlUtils.xml2Map(xml2));
System.out.println("使用量已经耗尽事件:" + WxCpGsonBuilder.create().toJson(msg2));

/**
* 获客链接不可用事件
*/
String xml3 = "<xml>\n" +
"\t<ToUserName><![CDATA[toUser]]></ToUserName>\n" +
"\t<FromUserName><![CDATA[sys]]></FromUserName> \n" +
"\t<CreateTime>1403610513</CreateTime>\n" +
"\t<MsgType><![CDATA[event]]></MsgType>\n" +
"\t<Event><![CDATA[customer_acquisition]]></Event>\n" +
"\t<ChangeType><![CDATA[link_unavailable]]></ChangeType>\n" +
"\t<LinkId><![CDATA[cawcdea7783d7330b4]]></LinkId>\n" +
"</xml>";

WxCpXmlMessage msg3 = XStreamTransformer.fromXml(WxCpXmlMessage.class, xml3);
msg3.setAllFieldsMap(XmlUtils.xml2Map(xml3));
System.out.println("获客链接不可用事件:" + WxCpGsonBuilder.create().toJson(msg3));

/**
* 微信客户发起会话事件
*/
String xml4 = "<xml>\n" +
"<ToUserName><![CDATA[toUser]]></ToUserName>\n" +
"<FromUserName><![CDATA[sys]]></FromUserName> \n" +
"<CreateTime>1403610513</CreateTime>\n" +
"<MsgType><![CDATA[event]]></MsgType>\n" +
"<Event><![CDATA[customer_acquisition]]></Event>\n" +
"<ChangeType><![CDATA[customer_start_chat]]></ChangeType>\n" +
"<UserID><![CDATA[zhangsan]]></UserID>\n" +
"<ExternalUserID><![CDATA[woAJ2GCAAAXtWyujaWJHDDGi0mAAAA]]></ExternalUserID>\n" +
"</xml>";

WxCpXmlMessage msg4 = XStreamTransformer.fromXml(WxCpXmlMessage.class, xml4);
msg4.setAllFieldsMap(XmlUtils.xml2Map(xml4));
System.out.println("微信客户发起会话事件:" + WxCpGsonBuilder.create().toJson(msg4));

/**
* 删除获客链接事件
*/
String xml5 = "<xml>\n" +
"\t<ToUserName><![CDATA[toUser]]></ToUserName>\n" +
"\t<FromUserName><![CDATA[sys]]></FromUserName> \n" +
"\t<CreateTime>1403610513</CreateTime>\n" +
"\t<MsgType><![CDATA[event]]></MsgType>\n" +
"\t<Event><![CDATA[customer_acquisition]]></Event>\n" +
"\t<ChangeType><![CDATA[delete_link]]></ChangeType>\n" +
"\t<LinkId><![CDATA[cawcdea7783d7330b4]]></LinkId>\n" +
"</xml>";

WxCpXmlMessage msg5 = XStreamTransformer.fromXml(WxCpXmlMessage.class, xml5);
msg5.setAllFieldsMap(XmlUtils.xml2Map(xml5));
System.out.println("删除获客链接事件:" + WxCpGsonBuilder.create().toJson(msg5));

/**
* 通过获客链接申请好友事件
*/
String xml6 = "<xml>\n" +
"\t<ToUserName><![CDATA[toUser]]></ToUserName>\n" +
"\t<FromUserName><![CDATA[sys]]></FromUserName> \n" +
"\t<CreateTime>1689171577</CreateTime>\n" +
"\t<MsgType><![CDATA[event]]></MsgType>\n" +
"\t<Event><![CDATA[customer_acquisition]]></Event>\n" +
"\t<ChangeType><![CDATA[friend_request]]></ChangeType>\n" +
"\t<LinkId><![CDATA[cawcdea7783d7330b4]]></LinkId>\n" +
"\t<State><![CDATA[STATE]]></State>\n" +
"</xml>";

WxCpXmlMessage msg6 = XStreamTransformer.fromXml(WxCpXmlMessage.class, xml6);
msg6.setAllFieldsMap(XmlUtils.xml2Map(xml6));
System.out.println("通过获客链接申请好友事件:" + WxCpGsonBuilder.create().toJson(msg6));


/**
* 获客助手事件通知ChangeType
* @see me.chanjar.weixin.cp.constant.WxCpConsts.CustomerAcquisitionChangeType.CUSTOMER_START_CHAT
*/

}

}
Original file line number Diff line number Diff line change
Expand Up @@ -106,12 +106,28 @@ public void testAccountDel() throws Exception {
/**
* 测试回调事件
* https://developer.work.weixin.qq.com/document/path/94670
* https://developer.work.weixin.qq.com/document/path/97712
*
* @throws Exception
*/
@Test(priority = 6)
public void testEvent() throws Exception {

// 客服账号授权变更事件
String xml1 = "<xml>\n" +
" <ToUserName><![CDATA[toUser]]></ToUserName>\n" +
" <FromUserName><![CDATA[sys]]></FromUserName> \n" +
" <CreateTime>1348831860</CreateTime>\n" +
" <MsgType><![CDATA[event]]></MsgType>\n" +
" <Event><![CDATA[kf_account_auth_change]]></Event>\n" +
" <AuthAddOpenKfId><![CDATA[wkxxxx1]]></AuthAddOpenKfId>\n" +
" <AuthDelOpenKfId><![CDATA[wkxxxx2]]></AuthDelOpenKfId>\n" +
"</xml>";

WxCpXmlMessage xmlMsg1 = XStreamTransformer.fromXml(WxCpXmlMessage.class, xml1);
xmlMsg1.setAllFieldsMap(XmlUtils.xml2Map(xml1));
System.out.println(WxCpGsonBuilder.create().toJson(xmlMsg1));

String xml = "<xml>\n" +
" <ToUserName><![CDATA[ww12345678910]]></ToUserName>\n" +
" <CreateTime>1348831860</CreateTime>\n" +
Expand All @@ -124,13 +140,15 @@ public void testEvent() throws Exception {
WxCpXmlMessage xmlMsg = XStreamTransformer.fromXml(WxCpXmlMessage.class, xml);
xmlMsg.setAllFieldsMap(XmlUtils.xml2Map(xml));
System.out.println(WxCpGsonBuilder.create().toJson(xmlMsg));
System.out.println("token:" + xmlMsg.getToken());
System.out.println("openKfId:" + xmlMsg.getOpenKfId());

/**
* 微信客服事件推送
* @see WxConsts.EventType.KF_MSG_OR_EVENT
* @see me.chanjar.weixin.cp.constant.WxCpConsts.EventType.KF_MSG_OR_EVENT
* @see me.chanjar.weixin.cp.constant.WxCpConsts.EventType.KF_ACCOUNT_AUTH_CHANGE
*/
System.out.println("token:" + xmlMsg.getToken());
System.out.println("openKfId:" + xmlMsg.getOpenKfId());
System.out.println("微信客服事件:" + me.chanjar.weixin.cp.constant.WxCpConsts.EventType.KF_MSG_OR_EVENT);
}

}

0 comments on commit c2cfcdd

Please sign in to comment.