1
0
mirror of synced 2026-10-21 23:36:18 +08:00

🎨 #4011 【企业微信】增加智能机器人 API 模式 JSON 回调消息类和相应的解析调用方法

This commit is contained in:
Copilot
2026-05-20 21:38:13 +08:00
committed by GitHub
parent 2dc2da061e
commit 93017a5ae0
6 changed files with 310 additions and 4 deletions

View File

@@ -119,4 +119,15 @@ public class WxCpIntelligentRobotServiceImplTest {
assert response.getSessionId().equals("session123");
assert response.getErrcode() == 0;
}
}
@Test
public void testParseCallbackMessage() {
String callbackJson = "{\"msgid\":\"msg_1\",\"aibotid\":\"bot_1\",\"chattype\":\"single\","
+ "\"from\":{\"userid\":\"user_1\"},\"msgtype\":\"text\",\"text\":{\"content\":\"hello\"}}";
WxCpIntelligentRobotMessage message = this.wxCpService.getIntelligentRobotService().parseCallbackMessage(callbackJson);
assert message.getMsgId().equals("msg_1");
assert message.getAiBotId().equals("bot_1");
assert message.getFrom().getUserid().equals("user_1");
assert message.getText().getContent().equals("hello");
}
}

View File

@@ -0,0 +1,76 @@
package me.chanjar.weixin.cp.bean.intelligentrobot;
import org.testng.annotations.Test;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertNull;
/**
* 智能机器人回调消息测试.
*/
public class WxCpIntelligentRobotMessageTest {
@Test
public void testFromJsonWithTextMessage() {
String json = "{"
+ "\"msgid\":\"msg_1\","
+ "\"aibotid\":\"bot_1\","
+ "\"chatid\":\"chat_1\","
+ "\"chattype\":\"group\","
+ "\"from\":{\"userid\":\"zhangsan\"},"
+ "\"response_url\":\"https://example.com/reply\","
+ "\"msgtype\":\"text\","
+ "\"text\":{\"content\":\"@robot hello\"}"
+ "}";
WxCpIntelligentRobotMessage message = WxCpIntelligentRobotMessage.fromJson(json);
assertEquals(message.getMsgId(), "msg_1");
assertEquals(message.getAiBotId(), "bot_1");
assertEquals(message.getChatId(), "chat_1");
assertEquals(message.getChatType(), "group");
assertNotNull(message.getFrom());
assertEquals(message.getFrom().getUserid(), "zhangsan");
assertEquals(message.getResponseUrl(), "https://example.com/reply");
assertEquals(message.getMsgType(), "text");
assertNotNull(message.getText());
assertEquals(message.getText().getContent(), "@robot hello");
assertNull(message.getMixed());
assertNull(message.getStream());
}
@Test
public void testFromJsonWithMixedAndQuote() {
String json = "{"
+ "\"msgid\":\"msg_2\","
+ "\"aibotid\":\"bot_2\","
+ "\"chattype\":\"single\","
+ "\"from\":{\"userid\":\"lisi\"},"
+ "\"msgtype\":\"mixed\","
+ "\"mixed\":{\"msg_item\":["
+ "{\"msgtype\":\"text\",\"text\":{\"content\":\"hello\"}},"
+ "{\"msgtype\":\"image\",\"image\":{\"url\":\"https://example.com/1.png\"}}"
+ "]},"
+ "\"quote\":{\"msgtype\":\"text\",\"text\":{\"content\":\"quoted\"}}"
+ "}";
WxCpIntelligentRobotMessage message = WxCpIntelligentRobotMessage.fromJson(json);
assertEquals(message.getMsgType(), "mixed");
assertNotNull(message.getMixed());
assertNotNull(message.getMixed().getMsgItem());
assertEquals(message.getMixed().getMsgItem().size(), 2);
assertEquals(message.getMixed().getMsgItem().get(0).getMsgType(), "text");
assertEquals(message.getMixed().getMsgItem().get(0).getText().getContent(), "hello");
assertEquals(message.getMixed().getMsgItem().get(1).getMsgType(), "image");
assertEquals(message.getMixed().getMsgItem().get(1).getImage().getUrl(), "https://example.com/1.png");
assertNotNull(message.getQuote());
assertEquals(message.getQuote().getMsgType(), "text");
assertEquals(message.getQuote().getText().getContent(), "quoted");
String serialized = message.toJson();
WxCpIntelligentRobotMessage deserialized = WxCpIntelligentRobotMessage.fromJson(serialized);
assertEquals(deserialized.getAiBotId(), "bot_2");
assertEquals(deserialized.getFrom().getUserid(), "lisi");
assertEquals(deserialized.getMixed().getMsgItem().size(), 2);
}
}