1
0
mirror of synced 2026-10-14 03:09:54 +08:00
Files
WxJava/weixin-java-cp/INTELLIGENT_ROBOT.md
2026-08-22 11:57:44 +08:00

158 lines
5.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 企业微信智能机器人接口
本模块提供企业微信智能机器人相关的 API 接口实现。
> `createRobot`、`chat`、`sendMessage` 等既有方法走企业应用 `access_token` 接口,
> 需要在 `WxCpConfigStorage` 中配置应用 `agentId` 和 `secret`。它们不适用于机器人后台创建的新版 API 模式。
## 官方文档
- [企业微信智能机器人接口](https://developer.work.weixin.qq.com/document/path/101039)
## 接口说明
### 获取服务实例
```java
WxCpService wxCpService = ...; // 初始化企业微信服务
WxCpIntelligentRobotService robotService = wxCpService.getIntelligentRobotService();
```
### 创建智能机器人
```java
WxCpIntelligentRobotCreateRequest request = new WxCpIntelligentRobotCreateRequest();
request.setName("我的智能机器人");
request.setDescription("这是一个智能客服机器人");
request.setAvatar("http://example.com/avatar.jpg");
WxCpIntelligentRobotCreateResponse response = robotService.createRobot(request);
String robotId = response.getRobotId();
```
### 更新智能机器人
```java
WxCpIntelligentRobotUpdateRequest request = new WxCpIntelligentRobotUpdateRequest();
request.setRobotId("robot_id_here");
request.setName("更新后的机器人名称");
request.setDescription("更新后的描述");
request.setStatus(1); // 1:启用, 0:停用
robotService.updateRobot(request);
```
### 查询智能机器人
```java
String robotId = "robot_id_here";
WxCpIntelligentRobot robot = robotService.getRobot(robotId);
System.out.println("机器人名称: " + robot.getName());
System.out.println("机器人状态: " + robot.getStatus());
```
### 智能对话
```java
WxCpIntelligentRobotChatRequest request = new WxCpIntelligentRobotChatRequest();
request.setRobotId("robot_id_here");
request.setUserid("user123");
request.setMessage("你好,请问如何使用这个功能?");
request.setSessionId("session123"); // 可选,用于保持会话连续性
WxCpIntelligentRobotChatResponse response = robotService.chat(request);
String reply = response.getReply();
String sessionId = response.getSessionId();
```
### 重置会话
```java
String robotId = "robot_id_here";
String userid = "user123";
String sessionId = "session123";
robotService.resetSession(robotId, userid, sessionId);
```
### 旧版 access_token 主动发送消息
智能机器人可以主动向用户发送消息,用于推送通知或提醒。
```java
WxCpIntelligentRobotSendMessageRequest request = new WxCpIntelligentRobotSendMessageRequest();
request.setRobotId("robot_id_here");
request.setUserid("user123");
request.setMessage("您好,这是来自智能机器人的主动消息");
request.setSessionId("session123"); // 可选,用于保持会话连续性
WxCpIntelligentRobotSendMessageResponse response = robotService.sendMessage(request);
String msgId = response.getMsgId();
String sessionId = response.getSessionId();
```
### 新版 API 模式:接收回调与回复消息
在机器人后台开启 API 模式后,配置 URL、Token、EncodingAESKey。企业微信会推送加密 JSON 回调;
它不是 XML,也不需要企业应用 `secret`。从请求参数取得 `msg_signature`、`timestamp`、`nonce`,
从请求体取得 `encrypt` 字段后,可以直接解密和解析:
```java
WxCpIntelligentRobotMessage callbackMessage =
robotService.parseEncryptedCallbackMessage(
msgSignature, timestamp, nonce, encryptedJson,
token, encodingAesKey, aiBotId);
String responseUrl = callbackMessage.getResponseUrl();
String content = callbackMessage.getText().getContent();
```
回复时使用回调中的短期 `response_url`,不调用基于 `access_token` 的 `sendMessage`:
```java
String replyJson = "{\"msgtype\":\"text\",\"text\":{\"content\":\"您好\"}}";
robotService.replyMessage(
responseUrl, replyJson, token, encodingAesKey, aiBotId,
String.valueOf(System.currentTimeMillis() / 1000), java.util.UUID.randomUUID().toString());
```
### 删除智能机器人
```java
String robotId = "robot_id_here";
robotService.deleteRobot(robotId);
```
## 主要类说明
### 请求类
- `WxCpIntelligentRobotCreateRequest`: 创建机器人请求
- `WxCpIntelligentRobotUpdateRequest`: 更新机器人请求
- `WxCpIntelligentRobotChatRequest`: 智能对话请求
- `WxCpIntelligentRobotSendMessageRequest`: 主动发送消息请求
### 响应类
- `WxCpIntelligentRobotCreateResponse`: 创建机器人响应
- `WxCpIntelligentRobotChatResponse`: 智能对话响应
- `WxCpIntelligentRobotSendMessageResponse`: 主动发送消息响应
- `WxCpIntelligentRobot`: 机器人信息实体
### 消息接收
- `WxCpIntelligentRobotMessage`: 智能机器人 API 模式的已解密 JSON 回调消息
- `WxCpIntelligentRobotCryptUtil`: 智能机器人 API 模式的消息加解密工具
### 服务接口
- `WxCpIntelligentRobotService`: 智能机器人服务接口
- `WxCpIntelligentRobotServiceImpl`: 智能机器人服务实现
## 注意事项
1. 新版 API 模式的 Token、EncodingAESKey 和机器人 ID 由机器人后台配置,不要填写企业应用 secret。
2. `response_url` 是回调附带的临时地址,应及时使用,且不应持久化。
3. `parseCallbackMessage` 仅用于已解密的 JSON;HTTP 回调入口应使用 `parseEncryptedCallbackMessage`。