pom.xml文件或下载对应的 jar 包,最新的 SDK 版本可以在这里查看和下载。<dependency>
<groupId>com.dingtalk.open</groupId>
<artifactId>app-stream-client</artifactId>
<version>{sdk-version}</version>
</dependency>public class BotExample {
public static void main(String[] args) {
OpenDingTalkClient client = OpenDingTalkStreamClientBuilder
.custom()
.credential(new AuthClientCredential("${ClientId}", "${ClientSecret}"))
.registerCallbackListener("${topic}", new RobotMsgCallbackConsumer())
.build();
client.start();
}
public static class RobotMsgCallbackConsumer implements OpenDingTalkCallbackListener<JSONObject, JSONObject> {
/*
* @param request
* @return
*/
@Override
public JSONObject execute(JSONObject request) {
System.out.println(JSON.toJSONString(request));
try {
JSONObject text = request.getJSONObject("text");
if (text != null) {
//机器人接收消息内容
String msg = text.getString("content").trim();
String openConversationId = request.getString("conversationId");
}
} catch (Exception e) {
log.error("receive group message by robot error:" +e.getMessage(), e);
}
return new JSONObject();
}
}
}| 参数名称 | 说明 |
|---|---|
| ClientId | 企业内部应用的应用凭证ClientId。 |
| ClientSecret | 企业内部应用的应用凭证ClientSecret。 |
| topic | 机器人回调名称,固定值:/v1.0/im/bot/messages/get。 |
{
"conversationId": "cidjMOsz******AhS4Jg==",
"atUsers": [
{
"dingtalkId": "$:LWCP_v1:$v*********f1+2ow21Zzg"
}
],
"chatbotCorpId": "ding9f50*****6741",
"chatbotUserId": "$:LWCP_v1:$v*********1+2ow21Zzg",
"msgId": "msg2*****p+w==",
"senderNick": "小钉",
"isAdmin": true,
"senderStaffId": "452523285939877041",
"sessionWebhookExpiredTime": 1695204671648,
"createAt": 1695199269062,
"senderCorpId": "ding9f50*****6741",
"conversationType": "2",
"senderId": "$:LWCP_v1:$C*********pnNGsP0HS+",
"conversationTitle": "统一应用模型-测试群",
"isInAtList": true,
"sessionWebhook": "https://oapi.dingtalk.com/robot/sendBySession?session=c610ee93e4d96899d9236bd4bea185dd",
"text": {
"content": " 你好"
},
"robotCode": "ding1f*******dabddc",
"msgtype": "text"
}| 参数名称 | 说明 |
|---|---|
| conversationId | 会话 ID。 |
| atUsers | 被@人的信息:dingtalkId:加密的发送者 ID。 |
| chatbotCorpId | 机器人所在的企业 corpId。 |
| chatbotUserId | 加密的机器人 ID,暂无使用场景,可忽略。 |
| msgId | 加密的消息 ID,暂无使用场景,可忽略。 |
| senderNick | 发送者昵称。 |
| isAdmin | 是否为管理员。 |
| senderStaffId | 企业内部群中@该机器人的用户 ID。 |
| sessionWebhookExpiredTime | 当前会话的 Webhook 地址过期时间。 |
| createAt | 消息的时间戳,单位毫秒。 |
| senderCorpId | 企业内部群有的发送者当前群的企业 corpId。 |
| conversationType | 会话类型:1:单聊2:群聊 |
| senderId | 加密的发送者 ID。说明使用 senderStaffId,为发送者 userId 值。 |
| conversationTitle | 群聊时才有的会话标题。 |
| isInAtList | 是否在@列表中。 |
| sessionWebhook | 当前会话的 Webhook 地址。 |
| text | 文本消息:content:文本内容 |
| robotCode | 机器人编码。 |
| msgtype | 消息类型。 |
@RestController
public class RobotsController {
// 下方 value = "/robots", 决定下方设置机器人消息接收地址,例如:https://example.com/robots
@RequestMapping(value = "/robots", method = RequestMethod.POST)
public String helloRobots(@RequestBody(required = false) JSONObject json) {
System.out.println(json);
//机器人接收消息内容
String content = json.getJSONObject("text").get("content").toString().replaceAll(" ", "");
return null;
}
}{
"conversationId": "cidjMOsz******AhS4Jg==",
"atUsers": [
{
"dingtalkId": "$:LWCP_v1:$v*********f1+2ow21Zzg",
"staffId": "452523285939877041"
}
],
"chatbotCorpId": "ding9f50*****6741",
"chatbotUserId": "$:LWCP_v1:$v*********1+2ow21Zzg",
"msgId": "msg2*****p+w==",
"senderNick": "小钉",
"isAdmin": true,
"senderStaffId": "452523285939877041",
"sessionWebhookExpiredTime": 1695204671648,
"createAt": 1695199269062,
"senderCorpId": "ding9f50*****6741",
"conversationType": "2",
"senderId": "$:LWCP_v1:$C*********pnNGsP0HS+",
"conversationTitle": "统一应用模型-测试群",
"isInAtList": true,
"sessionWebhook": "https://oapi.dingtalk.com/robot/sendBySession?session=c610ee93e4d96899d9236bd4bea185dd",
"content": " 你好"
"msgtype": "text"
}| 参数名称 | 说明 |
|---|---|
| conversationId | 会话 ID。 |
| atUsers | 被@人的信息:dingtalkId:加密的发送者 ID。staffId:当前企业内部群中员工 userId 值。 |
| chatbotCorpId | 机器人所在的企业 corpId。 |
| chatbotUserId | 加密的机器人 ID,暂无使用场景,可忽略。 |
| msgId | 加密的消息 ID,暂无使用场景,可忽略。 |
| senderNick | 发送者昵称。 |
| isAdmin | 是否为管理员。 |
| senderStaffId | 企业内部群中@该机器人的用户 ID。 |
| sessionWebhookExpiredTime | 当前会话的 Webhook 地址过期时间。 |
| createAt | 消息的时间戳,单位毫秒。 |
| senderCorpId | 企业内部群有的发送者当前群的企业 corpId。 |
| conversationType | 会话类型:1:单聊2:群聊 |
| senderId | 加密的发送者 ID。说明使用 senderStaffId,为发送者 userId 值。 |
| conversationTitle | 群聊时才有的会话标题。 |
| isInAtList | 是否在@列表中。 |
| sessionWebhook | 当前会话的 Webhook 地址。 |
| content | 消息文本。 |
| msgtype | 消息类型。 |