diff --git a/msh_crmeb_22/crmeb-service/src/main/java/com/zbkj/service/service/impl/tool/ToolCommunityServiceImpl.java b/msh_crmeb_22/crmeb-service/src/main/java/com/zbkj/service/service/impl/tool/ToolCommunityServiceImpl.java index 2e91d2b..ee392fd 100644 --- a/msh_crmeb_22/crmeb-service/src/main/java/com/zbkj/service/service/impl/tool/ToolCommunityServiceImpl.java +++ b/msh_crmeb_22/crmeb-service/src/main/java/com/zbkj/service/service/impl/tool/ToolCommunityServiceImpl.java @@ -703,19 +703,49 @@ public class ToolCommunityServiceImpl implements ToolCommunityService { @SuppressWarnings("unchecked") private Map parseWorkflowResponse(Object data) { if (data == null) return null; + + Map result = new HashMap<>(); + Map dataMap = null; + if (data instanceof Map) { - return (Map) data; - } - // 如果是 JSON 字符串,尝试解析 - if (data instanceof String) { + dataMap = (Map) data; + } else if (data instanceof String) { try { - return JSON.parseObject((String) data, Map.class); + dataMap = JSON.parseObject((String) data, Map.class); } catch (Exception e) { log.warn("Failed to parse workflow response as JSON: {}", e.getMessage()); return null; } } - return null; + + if (dataMap == null) return null; + + // 处理 Coze 工作流返回的 output 字段(可能是双编码的 JSON 字符串) + Object outputField = dataMap.get("output"); + if (outputField != null) { + try { + // 第一次解析:从字符串去掉外层引号(因为 output 本身是 JSON 字符串) + String outputStr = outputField instanceof String + ? (String) outputField + : outputField.toString(); + + // 第二次解析:解析内部的 JSON 对象 + Map output = JSON.parseObject(outputStr, Map.class); + result.put("output", output); + } catch (Exception e) { + log.warn("Failed to parse workflow output field: {}", e.getMessage()); + result.put("output", outputField); + } + } + + // 保留其他字段 + dataMap.forEach((key, value) -> { + if (!"output".equals(key)) { + result.put(key, value); + } + }); + + return result; } /**