菲亚特
1
java项目在钉钉官方有一个demo,可以先直接下载测试,后续自己可以迁移到项目里
-
企业机器人发送群聊消息 教程 demo地址
企业机器人发送群聊消息 教程 demo地址
需要用到钉钉appKey,appSecret,robotcode
-
maxkb请求问答
需要用到下面两个接口
-
demo需要调整的地方
我这里是调整了markdown格式,根据自己的需要调整,getMes()是我封装的向maxkb发送请求的方法
企业机器人发送消息的消息类型
别忘了修改配置
-
最后的效果
菲亚特
2
还有一些问题。钉钉的换行有点不整齐;图片的地址必须是公网能访问的地址,内网存储的图片即使实在内网环境里,钉钉也无法显示;回答有一点慢;
如何调用的maxkb接口啊,我看钉钉企业微信可以和机器人单聊,我用的那个模板
菲亚特
5
我当时是这个样子
public String getMes(String mes) {
String chatId = null;
// 根据应用id,获取会话id
String res1 = HttpRequest.get("http://192.168.0.48:8080/api/application/c5db0a36-7df5-11ef-a829-fe8fe793d99d/chat/open")
.header("Authorization", "application-f6ea8f77a206dd33e8ad3960208de4c4")
.timeout(20000)//超时,毫秒
.execute().body();
R<String> r = JSONUtil.toBean(res1, R.class);
if (r.getCode() == R.SUCCESS) {
chatId = r.getData();
}
RequestBodyParam requestBodyParam = new RequestBodyParam(mes, false, false);
// 发起会话
String res2 = HttpRequest.post("http://192.168.0.48:8080/api/application/chat_message/" + chatId)
.header("Authorization", "application-f6ea8f77a206dd33e8ad3960208de4c4")
.body(JSONUtil.toJsonStr(requestBodyParam))
.timeout(20000)//超时,毫秒
.execute().body();
// 回答结果
R respon = JSONUtil.toBean(res2, R.class);
Object data = respon.getData();
String jsonString = JSONUtil.toJsonStr(data);
ResponParam responParam = JSONUtil.toBean(jsonString, ResponParam.class);
// 替换minio图片地址为外网地址(需要先对minio地址配置内网穿透)
String content = responParam.getContent();
// String replace = content.replace(INWEB, OUTWEB);
return content;
}
菲亚特
6
请求头的是要创建api key
application_id就是
拿到的data
填到
返回结果 content字段就是回答内容,maxkb的这边是用 Unicode显示的,你可以用在线工具检查一下,idea里是可以正常看的
您好,我是本地化dokcer部署的MaxKB,使用MaxKB自带的API文档测试的时候,所有都是200,然后信息为未登录,我不太确定哪边没登录
我想请教一下,您的代码里R.java具体是什么内容
菲亚特
11
自定定义的返回类
package org.example;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* 响应信息主体
*
* @author Lion Li
*/
@Data
@NoArgsConstructor
public class R<T> implements Serializable {
/**
* 成功
*/
public static final int SUCCESS = 200;
/**
* 失败
*/
public static final int FAIL = 500;
private int code;
private String msg;
private T data;
public static <T> R<T> ok() {
return restResult(null, SUCCESS, "操作成功");
}
public static <T> R<T> ok(T data) {
return restResult(data, SUCCESS, "操作成功");
}
public static <T> R<T> ok(String msg) {
return restResult(null, SUCCESS, msg);
}
public static <T> R<T> ok(String msg, T data) {
return restResult(data, SUCCESS, msg);
}
public static <T> R<T> fail() {
return restResult(null, FAIL, "操作失败");
}
public static <T> R<T> fail(String msg) {
return restResult(null, FAIL, msg);
}
public static <T> R<T> fail(T data) {
return restResult(data, FAIL, "操作失败");
}
public static <T> R<T> fail(String msg, T data) {
return restResult(data, FAIL, msg);
}
public static <T> R<T> fail(int code, String msg) {
return restResult(null, code, msg);
}
/**
* 返回警告消息
*
* @param msg 返回内容
* @return 警告消息
*/
public static <T> R<T> warn(String msg) {
return restResult(null, 601, msg);
}
/**
* 返回警告消息
*
* @param msg 返回内容
* @param data 数据对象
* @return 警告消息
*/
public static <T> R<T> warn(String msg, T data) {
return restResult(data, 601, msg);
}
private static <T> R<T> restResult(T data, int code, String msg) {
R<T> r = new R<>();
r.setCode(code);
r.setData(data);
r.setMsg(msg);
return r;
}
public static <T> Boolean isError(R<T> ret) {
return !isSuccess(ret);
}
public static <T> Boolean isSuccess(R<T> ret) {
return R.SUCCESS == ret.getCode();
}
}
请问一下,我可以自己做一个页面对话机器人调用api接口吗
您好,针对您的代码,部分位置比如:HttpRequest、JSONUtil、RequestBodyParam、ResponParam、getContent()都标红,您是否还写了其他类文件或添加了其他的pom支持。
菲亚特
16
添加了hultool的工具类,然后自己写一下返回对象的接受类
菲亚特
18
@Data
@AllArgsConstructor
class RequestBodyParam {
private String message;
private Boolean reChat;
private Boolean stream;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public static class ResponParam implements Serializable {
private String chatId;
private String id;
private Boolean operate;
private String content;
private Boolean isEnd;
}
2025-03-12 17:55:31.843 ERROR 17868 — [lk-Consumer-1-1] o.e.c.chatbot.ChatBotCallbackListener : send private message by robot error:SocketTimeoutException: Connect timed out
超时是maxkb的原因还是钉钉的原因呢
菲亚特
20
你在maxkb那部分的发送消息方法打断点看看呗,如果maxkb回消息了就说明maxkb没问题