获取APP的消息点赞和反馈列表

This commit is contained in:
2025-08-05 09:05:00 +08:00
parent 9752538400
commit 64505fed04

View File

@@ -13,6 +13,7 @@ import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
import java.io.BufferedReader;
import java.io.IOException;
import java.time.Duration;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -60,6 +61,7 @@ public class DifyChatController extends BaseController {
* 配置了5分钟的读取超时时间用于与Dify API进行通信
*/
private final OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(Duration.ofSeconds(30)) // 添加连接超时时间
.readTimeout(Duration.ofMinutes(5))
.build();
@@ -340,6 +342,96 @@ public class DifyChatController extends BaseController {
}
}
/**
* 获取APP的消息点赞和反馈列表
* <p>
* 该接口用于获取应用的终端用户反馈、点赞列表
* </p>
*
* @param page 页码默认值1
* @param limit 每页数量默认值20
* @return 包含点赞、反馈列表的统一响应结果
*/
@GetMapping("/app/feedbacks")
public AjaxResult getAppFeedbacks(
@RequestParam(value = "page", defaultValue = "1") String page,
@RequestParam(value = "limit", defaultValue = "20") String limit) {
try {
// 构建请求URL
String url = "https://api.dify.ai/v1/app/feedbacks?page=" + page + "&limit=" + limit;
// 构建请求
Request request = new Request.Builder()
.url(url)
.addHeader("Authorization", "Bearer " + DIFY_API_KEY)
.addHeader("Content-Type", "application/json")
.get()
.build();
// 发送请求
try (Response response = client.newCall(request).execute()) {
if (response.isSuccessful()) {
String responseBody = response.body().string();
JsonNode rootNode = mapper.readTree(responseBody);
// 解析数据
JsonNode dataNode = rootNode.get("data");
List<Map<String, Object>> feedbackList = new ArrayList<>();
if (dataNode != null && dataNode.isArray()) {
for (JsonNode feedbackNode : dataNode) {
Map<String, Object> feedbackItem = new HashMap<>();
// 提取反馈信息
feedbackItem.put("id", feedbackNode.has("id") ? feedbackNode.get("id").asText() : null);
feedbackItem.put("message_id", feedbackNode.has("message_id") ? feedbackNode.get("message_id").asText() : null);
feedbackItem.put("rating", feedbackNode.has("rating") ? feedbackNode.get("rating").asText() : null);
feedbackItem.put("content", feedbackNode.has("content") ? feedbackNode.get("content").asText() : null);
feedbackItem.put("created_at", feedbackNode.has("created_at") ? feedbackNode.get("created_at").asLong() : null);
feedbackItem.put("app_id", feedbackNode.has("app_id") ? feedbackNode.get("app_id").asText() : null);
feedbackItem.put("conversation_id", feedbackNode.has("conversation_id") ? feedbackNode.get("conversation_id").asText() : null);
// 提取用户信息
if (feedbackNode.has("from_end_user")) {
JsonNode userNode = feedbackNode.get("from_end_user");
Map<String, Object> userMap = new HashMap<>();
userMap.put("id", userNode.has("id") ? userNode.get("id").asText() : null);
userMap.put("name", userNode.has("name") ? userNode.get("name").asText() : null);
userMap.put("email", userNode.has("email") ? userNode.get("email").asText() : null);
feedbackItem.put("from_end_user", userMap);
}
feedbackList.add(feedbackItem);
}
}
// 构建返回结果
Map<String, Object> result = new HashMap<>();
result.put("data", feedbackList);
result.put("page", rootNode.has("page") ? rootNode.get("page").asInt() : Integer.parseInt(page));
result.put("limit", rootNode.has("limit") ? rootNode.get("limit").asInt() : Integer.parseInt(limit));
result.put("has_more", rootNode.has("has_more") ? rootNode.get("has_more").asBoolean() : false);
return AjaxResult.success(result);
} else {
String errorMsg = "获取反馈列表失败: " + response.code();
try (ResponseBody errorBody = response.body()) {
if (errorBody != null) {
errorMsg += " - " + errorBody.string();
}
} catch (IOException e) {
errorMsg += " (无法读取错误详情)";
}
return AjaxResult.error(errorMsg);
}
}
} catch (Exception e) {
return AjaxResult.error("获取反馈列表时发生异常: " + e.getMessage());
}
}
/**
* 获取会话历史消息的端点
* <p>