Skip to content

Commit 60f7497

Browse files
authored
🆕 #3879 【公众号】被动回复消息增加「转接AI回复」支持
1 parent 389f178 commit 60f7497

File tree

6 files changed

+107
-0
lines changed

6 files changed

+107
-0
lines changed

weixin-java-common/src/main/java/me/chanjar/weixin/common/api/WxConsts.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ public static class XmlMsgType {
5353
public static final String DEVICE_STATUS = "device_status";
5454
public static final String HARDWARE = "hardware";
5555
public static final String TRANSFER_CUSTOMER_SERVICE = "transfer_customer_service";
56+
public static final String TRANSFER_BIZ_AI_IVR = "transfer_biz_ai_ivr";
5657
public static final String UPDATE_TASKCARD = "update_taskcard";
5758
public static final String UPDATE_BUTTON = "update_button";
5859
}

weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/message/WxMpXmlOutMessage.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,15 @@ public static TransferCustomerServiceBuilder TRANSFER_CUSTOMER_SERVICE() {
131131
return new TransferCustomerServiceBuilder();
132132
}
133133

134+
/**
135+
* 获得转接AI回复消息builder
136+
*
137+
* @return 转接AI回复消息构建器
138+
*/
139+
public static TransferBizAiIvrBuilder TRANSFER_BIZ_AI_IVR() {
140+
return new TransferBizAiIvrBuilder();
141+
}
142+
134143
/**
135144
* 获得设备消息builder
136145
*
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package me.chanjar.weixin.mp.bean.message;
2+
3+
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
4+
import com.thoughtworks.xstream.annotations.XStreamAlias;
5+
import lombok.Data;
6+
import lombok.EqualsAndHashCode;
7+
import me.chanjar.weixin.common.api.WxConsts;
8+
9+
/**
10+
* 转接AI回复消息.
11+
* <pre>
12+
* 当用户发送消息给公众号时,公众号开发者服务器回复如下内容,会触发微信公众平台的AI回复。
13+
* 注意:需要公众号在微信公众平台上已开启AI回复功能,并且AI已学习完毕历史发表文章。
14+
* 官方文档:https://developers.weixin.qq.com/doc/subscription/guide/product/message/Passive_user_reply_message.html
15+
* </pre>
16+
*
17+
* @author copilot
18+
*/
19+
@Data
20+
@XStreamAlias("xml")
21+
@JacksonXmlRootElement(localName = "xml")
22+
@EqualsAndHashCode(callSuper = true)
23+
public class WxMpXmlOutTransferBizAiIvrMessage extends WxMpXmlOutMessage {
24+
private static final long serialVersionUID = 8275281170988017563L;
25+
26+
public WxMpXmlOutTransferBizAiIvrMessage() {
27+
this.msgType = WxConsts.XmlMsgType.TRANSFER_BIZ_AI_IVR;
28+
}
29+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package me.chanjar.weixin.mp.builder.outxml;
2+
3+
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutTransferBizAiIvrMessage;
4+
5+
/**
6+
* 转接AI回复消息builder.
7+
* <pre>
8+
* 用法: WxMpXmlOutTransferBizAiIvrMessage m = WxMpXmlOutMessage.TRANSFER_BIZ_AI_IVR().toUser("").fromUser("").build();
9+
* </pre>
10+
*
11+
* @author copilot
12+
*/
13+
public final class TransferBizAiIvrBuilder
14+
extends BaseBuilder<TransferBizAiIvrBuilder, WxMpXmlOutTransferBizAiIvrMessage> {
15+
16+
@Override
17+
public WxMpXmlOutTransferBizAiIvrMessage build() {
18+
WxMpXmlOutTransferBizAiIvrMessage m = new WxMpXmlOutTransferBizAiIvrMessage();
19+
setCommon(m);
20+
return m;
21+
}
22+
}

weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/xml/XStreamTransformer.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutNewsMessage;
1616
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutTextMessage;
1717
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutTransferKefuMessage;
18+
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutTransferBizAiIvrMessage;
1819
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutVideoMessage;
1920
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutVoiceMessage;
2021

@@ -30,6 +31,7 @@ public class XStreamTransformer {
3031
registerClass(WxMpXmlOutVideoMessage.class);
3132
registerClass(WxMpXmlOutVoiceMessage.class);
3233
registerClass(WxMpXmlOutTransferKefuMessage.class);
34+
registerClass(WxMpXmlOutTransferBizAiIvrMessage.class);
3335
}
3436

3537
/**
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package me.chanjar.weixin.mp.bean.message;
2+
3+
import org.testng.Assert;
4+
import org.testng.annotations.Test;
5+
6+
/**
7+
* 转接AI回复消息测试.
8+
*
9+
* @author copilot
10+
*/
11+
public class WxMpXmlOutTransferBizAiIvrMessageTest {
12+
13+
@Test
14+
public void test() {
15+
WxMpXmlOutTransferBizAiIvrMessage m = new WxMpXmlOutTransferBizAiIvrMessage();
16+
m.setCreateTime(1399197672L);
17+
m.setFromUserName("fromuser");
18+
m.setToUserName("touser");
19+
20+
String expected = "<xml>" +
21+
"<ToUserName><![CDATA[touser]]></ToUserName>" +
22+
"<FromUserName><![CDATA[fromuser]]></FromUserName>" +
23+
"<CreateTime>1399197672</CreateTime>" +
24+
"<MsgType><![CDATA[transfer_biz_ai_ivr]]></MsgType>" +
25+
"</xml>";
26+
System.out.println(m.toXml());
27+
Assert.assertEquals(m.toXml().replaceAll("\\s", ""), expected.replaceAll("\\s", ""));
28+
}
29+
30+
@Test
31+
public void testBuild() {
32+
WxMpXmlOutTransferBizAiIvrMessage m = WxMpXmlOutMessage.TRANSFER_BIZ_AI_IVR()
33+
.fromUser("fromuser").toUser("touser").build();
34+
m.setCreateTime(1399197672L);
35+
String expected = "<xml>" +
36+
"<ToUserName><![CDATA[touser]]></ToUserName>" +
37+
"<FromUserName><![CDATA[fromuser]]></FromUserName>" +
38+
"<CreateTime>1399197672</CreateTime>" +
39+
"<MsgType><![CDATA[transfer_biz_ai_ivr]]></MsgType>" +
40+
"</xml>";
41+
System.out.println(m.toXml());
42+
Assert.assertEquals(m.toXml().replaceAll("\\s", ""), expected.replaceAll("\\s", ""));
43+
}
44+
}

0 commit comments

Comments
 (0)