From ce3a4a3da5da157dad1358a64f513f9f96c414e3 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 25 Feb 2026 03:17:13 +0000
Subject: [PATCH 1/3] Initial plan
From e423183df0b35f86777e8b41b7d4ef3aa7f5b698 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 25 Feb 2026 03:20:26 +0000
Subject: [PATCH 2/3] =?UTF-8?q?feat(mp):=20=E6=B7=BB=E5=8A=A0=E8=A2=AB?=
=?UTF-8?q?=E5=8A=A8=E5=9B=9E=E5=A4=8D=E6=B6=88=E6=81=AF=E4=B8=AD=E7=9A=84?=
=?UTF-8?q?=E8=BD=AC=E6=8E=A5AI=E5=9B=9E=E5=A4=8D=E5=8A=9F=E8=83=BD(transf?=
=?UTF-8?q?er=5Fbiz=5Fai=5Fivr)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 在 WxConsts.XmlMsgType 中新增 TRANSFER_BIZ_AI_IVR 常量
- 新增 WxMpXmlOutTransferBizAiIvrMessage 消息类
- 新增 TransferBizAiIvrBuilder 构建器类
- 在 WxMpXmlOutMessage 中添加 TRANSFER_BIZ_AI_IVR() 工厂方法
- 在 XStreamTransformer 中注册新消息类型
- 新增单元测试 WxMpXmlOutTransferBizAiIvrMessageTest
Co-authored-by: binarywang <1343140+binarywang@users.noreply.github.com>
---
.../chanjar/weixin/common/api/WxConsts.java | 1 +
.../mp/bean/message/WxMpXmlOutMessage.java | 9 ++++
.../WxMpXmlOutTransferBizAiIvrMessage.java | 29 ++++++++++++
.../outxml/TransferBizAiIvrBuilder.java | 22 ++++++++++
.../mp/util/xml/XStreamTransformer.java | 2 +
...WxMpXmlOutTransferBizAiIvrMessageTest.java | 44 +++++++++++++++++++
6 files changed, 107 insertions(+)
create mode 100644 weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/message/WxMpXmlOutTransferBizAiIvrMessage.java
create mode 100644 weixin-java-mp/src/main/java/me/chanjar/weixin/mp/builder/outxml/TransferBizAiIvrBuilder.java
create mode 100644 weixin-java-mp/src/test/java/me/chanjar/weixin/mp/bean/message/WxMpXmlOutTransferBizAiIvrMessageTest.java
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..0148e128d2
--- /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 Binary Wang
+ */
+@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..f9f69c2f52
--- /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 Binary Wang
+ */
+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..eb9f476c56
--- /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 Binary Wang
+ */
+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", ""));
+ }
+}
From 05ac5ee670bb1dad9bebdd30963c3d96f1274c38 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Sat, 28 Feb 2026 08:58:24 +0000
Subject: [PATCH 3/3] =?UTF-8?q?fix(mp):=20=E5=B0=86=E6=96=B0=E5=A2=9E?=
=?UTF-8?q?=E6=96=87=E4=BB=B6=E7=9A=84=E4=BD=9C=E8=80=85=E6=A0=87=E8=AE=B0?=
=?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B8=BAcopilot?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Co-authored-by: binarywang <1343140+binarywang@users.noreply.github.com>
---
.../mp/bean/message/WxMpXmlOutTransferBizAiIvrMessage.java | 2 +-
.../weixin/mp/builder/outxml/TransferBizAiIvrBuilder.java | 2 +-
.../mp/bean/message/WxMpXmlOutTransferBizAiIvrMessageTest.java | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
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
index 0148e128d2..504d45869a 100644
--- 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
@@ -14,7 +14,7 @@
* 官方文档:https://developers.weixin.qq.com/doc/subscription/guide/product/message/Passive_user_reply_message.html
*
*
- * @author Binary Wang
+ * @author copilot
*/
@Data
@XStreamAlias("xml")
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
index f9f69c2f52..6e5a74d477 100644
--- 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
@@ -8,7 +8,7 @@
* 用法: WxMpXmlOutTransferBizAiIvrMessage m = WxMpXmlOutMessage.TRANSFER_BIZ_AI_IVR().toUser("").fromUser("").build();
*
*
- * @author Binary Wang
+ * @author copilot
*/
public final class TransferBizAiIvrBuilder
extends BaseBuilder {
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
index eb9f476c56..0ea0d3f6db 100644
--- 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
@@ -6,7 +6,7 @@
/**
* 转接AI回复消息测试.
*
- * @author Binary Wang
+ * @author copilot
*/
public class WxMpXmlOutTransferBizAiIvrMessageTest {