diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/api/WxConsts.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/api/WxConsts.java index d7e8936e62..4924682e5e 100644 --- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/api/WxConsts.java +++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/api/WxConsts.java @@ -53,6 +53,7 @@ public static class XmlMsgType { public static final String DEVICE_STATUS = "device_status"; public static final String HARDWARE = "hardware"; public static final String TRANSFER_CUSTOMER_SERVICE = "transfer_customer_service"; + public static final String TRANSFER_BIZ_AI_IVR = "transfer_biz_ai_ivr"; public static final String UPDATE_TASKCARD = "update_taskcard"; public static final String UPDATE_BUTTON = "update_button"; } diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/message/WxMpXmlOutMessage.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/message/WxMpXmlOutMessage.java index 1f3143df7e..ace5b46c54 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/message/WxMpXmlOutMessage.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/message/WxMpXmlOutMessage.java @@ -131,6 +131,15 @@ public static TransferCustomerServiceBuilder TRANSFER_CUSTOMER_SERVICE() { return new TransferCustomerServiceBuilder(); } + /** + * 获得转接AI回复消息builder + * + * @return 转接AI回复消息构建器 + */ + public static TransferBizAiIvrBuilder TRANSFER_BIZ_AI_IVR() { + return new TransferBizAiIvrBuilder(); + } + /** * 获得设备消息builder * diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/message/WxMpXmlOutTransferBizAiIvrMessage.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/message/WxMpXmlOutTransferBizAiIvrMessage.java new file mode 100644 index 0000000000..504d45869a --- /dev/null +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/message/WxMpXmlOutTransferBizAiIvrMessage.java @@ -0,0 +1,29 @@ +package me.chanjar.weixin.mp.bean.message; + +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; +import com.thoughtworks.xstream.annotations.XStreamAlias; +import lombok.Data; +import lombok.EqualsAndHashCode; +import me.chanjar.weixin.common.api.WxConsts; + +/** + * 转接AI回复消息. + *
+ * 当用户发送消息给公众号时,公众号开发者服务器回复如下内容,会触发微信公众平台的AI回复。
+ * 注意:需要公众号在微信公众平台上已开启AI回复功能,并且AI已学习完毕历史发表文章。
+ * 官方文档:https://developers.weixin.qq.com/doc/subscription/guide/product/message/Passive_user_reply_message.html
+ * 
+ * + * @author copilot + */ +@Data +@XStreamAlias("xml") +@JacksonXmlRootElement(localName = "xml") +@EqualsAndHashCode(callSuper = true) +public class WxMpXmlOutTransferBizAiIvrMessage extends WxMpXmlOutMessage { + private static final long serialVersionUID = 8275281170988017563L; + + public WxMpXmlOutTransferBizAiIvrMessage() { + this.msgType = WxConsts.XmlMsgType.TRANSFER_BIZ_AI_IVR; + } +} diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/builder/outxml/TransferBizAiIvrBuilder.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/builder/outxml/TransferBizAiIvrBuilder.java new file mode 100644 index 0000000000..6e5a74d477 --- /dev/null +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/builder/outxml/TransferBizAiIvrBuilder.java @@ -0,0 +1,22 @@ +package me.chanjar.weixin.mp.builder.outxml; + +import me.chanjar.weixin.mp.bean.message.WxMpXmlOutTransferBizAiIvrMessage; + +/** + * 转接AI回复消息builder. + *
+ * 用法: WxMpXmlOutTransferBizAiIvrMessage m = WxMpXmlOutMessage.TRANSFER_BIZ_AI_IVR().toUser("").fromUser("").build();
+ * 
+ * + * @author copilot + */ +public final class TransferBizAiIvrBuilder + extends BaseBuilder { + + @Override + public WxMpXmlOutTransferBizAiIvrMessage build() { + WxMpXmlOutTransferBizAiIvrMessage m = new WxMpXmlOutTransferBizAiIvrMessage(); + setCommon(m); + return m; + } +} diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/xml/XStreamTransformer.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/xml/XStreamTransformer.java index 55e92700de..527fc722d5 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/xml/XStreamTransformer.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/xml/XStreamTransformer.java @@ -15,6 +15,7 @@ import me.chanjar.weixin.mp.bean.message.WxMpXmlOutNewsMessage; import me.chanjar.weixin.mp.bean.message.WxMpXmlOutTextMessage; import me.chanjar.weixin.mp.bean.message.WxMpXmlOutTransferKefuMessage; +import me.chanjar.weixin.mp.bean.message.WxMpXmlOutTransferBizAiIvrMessage; import me.chanjar.weixin.mp.bean.message.WxMpXmlOutVideoMessage; import me.chanjar.weixin.mp.bean.message.WxMpXmlOutVoiceMessage; @@ -30,6 +31,7 @@ public class XStreamTransformer { registerClass(WxMpXmlOutVideoMessage.class); registerClass(WxMpXmlOutVoiceMessage.class); registerClass(WxMpXmlOutTransferKefuMessage.class); + registerClass(WxMpXmlOutTransferBizAiIvrMessage.class); } /** diff --git a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/bean/message/WxMpXmlOutTransferBizAiIvrMessageTest.java b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/bean/message/WxMpXmlOutTransferBizAiIvrMessageTest.java new file mode 100644 index 0000000000..0ea0d3f6db --- /dev/null +++ b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/bean/message/WxMpXmlOutTransferBizAiIvrMessageTest.java @@ -0,0 +1,44 @@ +package me.chanjar.weixin.mp.bean.message; + +import org.testng.Assert; +import org.testng.annotations.Test; + +/** + * 转接AI回复消息测试. + * + * @author copilot + */ +public class WxMpXmlOutTransferBizAiIvrMessageTest { + + @Test + public void test() { + WxMpXmlOutTransferBizAiIvrMessage m = new WxMpXmlOutTransferBizAiIvrMessage(); + m.setCreateTime(1399197672L); + m.setFromUserName("fromuser"); + m.setToUserName("touser"); + + String expected = "" + + "" + + "" + + "1399197672" + + "" + + ""; + System.out.println(m.toXml()); + Assert.assertEquals(m.toXml().replaceAll("\\s", ""), expected.replaceAll("\\s", "")); + } + + @Test + public void testBuild() { + WxMpXmlOutTransferBizAiIvrMessage m = WxMpXmlOutMessage.TRANSFER_BIZ_AI_IVR() + .fromUser("fromuser").toUser("touser").build(); + m.setCreateTime(1399197672L); + String expected = "" + + "" + + "" + + "1399197672" + + "" + + ""; + System.out.println(m.toXml()); + Assert.assertEquals(m.toXml().replaceAll("\\s", ""), expected.replaceAll("\\s", "")); + } +}