Files
smartDriveEE/src/main/java/com/rj/service/DifyWorkflowService.java
2025-09-20 09:45:18 +08:00

753 lines
34 KiB
Java
Raw 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.

package com.rj.service;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.rj.entity.bz.DifyWorkflowAnalysis;
import com.rj.entity.CustomerProfileAnalysis;
import com.rj.service.biz.ICustomerProfileAnalysisService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.*;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.Map;
/**
* Dify工作流服务类
* 用于调用Dify平台的工作流API
*
* @author 李中华
* @date 2025/1/3
*/
@Slf4j
@Service
public class DifyWorkflowService {
@Value("${dify.api.base-url}")
private String difyBaseUrl;
@Value("${dify.api.workflow-endpoint-consultingScenar}")
private String workflowEndpoint;
@Value("${dify.api.summary-qiwei-token}")// 企微(一句话+分类别) app-WPuiaYg0iVLc2ws0iOfsAUC6
private String summaryQiweiToken;
@Value("${dify.api.summary-ddc-token}")// DDC一句话+分类别) app-rgaQbIir7vrVb1473Z3Puz6w
private String summaryddcToken;
@Value("${dify.api.summary-nameplate-token}")// 铭牌(一句话+分类别) //app-cv5glaYrY4zgjq0XIidSoJea
private String summaryNameplateToken;
@Value("${dify.api.portrait-3in1-token}")// 客户画像 app-Tpz9ByHyj5X6QCNpPX53QoBt
private String portraitAllInToken;
private final RestTemplate restTemplate;
@Autowired
private ICustomerProfileAnalysisService customerProfileAnalysisService;
public DifyWorkflowService() {
this.restTemplate = new RestTemplate();
}
/**
* 调用企微对话分析工作流
*
* @param request 工作流请求参数
* @return 工作流响应结果
*/
public DifyWorkflowResponse callConsultingScenarioWorkflow(DifyWorkflowRequest request) {
try {
String url = difyBaseUrl + workflowEndpoint;
// 构建请求头
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.set("Authorization", "Bearer " + summaryQiweiToken);
// 构建请求体
Map<String, Object> requestBody = new HashMap<>();
requestBody.put("inputs", request.getInputs());
requestBody.put("response_mode", "blocking");
requestBody.put("user", request.getUserId());
HttpEntity<Map<String, Object>> entity = new HttpEntity<>(requestBody, headers);
log.info("调用Dify工作流API: {}", url);
log.info("请求参数: {}", JSON.toJSONString(requestBody));
ResponseEntity<String> response = restTemplate.exchange(
url,
HttpMethod.POST,
entity,
String.class
);
log.info("Dify工作流响应状态: {}", response.getStatusCode());
log.info("Dify工作流响应内容: {}", response.getBody());
if (response.getStatusCode() == HttpStatus.OK) {
JSONObject responseJson = JSON.parseObject(response.getBody());
return parseAndSaveWorkflowResponse(responseJson, request);
} else {
throw new RuntimeException("Dify工作流调用失败状态码: " + response.getStatusCode());
}
} catch (Exception e) {
log.error("调用Dify工作流异常", e);
throw new RuntimeException("调用Dify工作流异常: " + e.getMessage(), e);
}
}
/**
* 调用DCC对话分析工作流
*
* @param request 工作流请求参数
* @return 工作流响应结果
*/
public DifyWorkflowResponse callDCCScenarioWorkflow(DifyWorkflowRequest request) {
try {
String url = difyBaseUrl + workflowEndpoint;
// 构建请求头
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.set("Authorization", "Bearer " + summaryddcToken);
// 构建请求体
Map<String, Object> requestBody = new HashMap<>();
requestBody.put("inputs", request.getInputs());
requestBody.put("response_mode", "blocking");
requestBody.put("user", request.getUserId());
HttpEntity<Map<String, Object>> entity = new HttpEntity<>(requestBody, headers);
log.info("调用DCC Dify工作流API: {}", url);
log.info("DCC请求参数: {}", JSON.toJSONString(requestBody));
ResponseEntity<String> response = restTemplate.exchange(
url,
HttpMethod.POST,
entity,
String.class
);
log.info("DCC Dify工作流响应状态: {}", response.getStatusCode());
log.info("DCC Dify工作流响应内容: {}", response.getBody());
if (response.getStatusCode() == HttpStatus.OK) {
JSONObject responseJson = JSON.parseObject(response.getBody());
return parseAndSaveWorkflowResponse(responseJson, request);
} else {
throw new RuntimeException("DCC Dify工作流调用失败状态码: " + response.getStatusCode());
}
} catch (Exception e) {
log.error("调用DCC Dify工作流异常", e);
throw new RuntimeException("调用DCC Dify工作流异常: " + e.getMessage(), e);
}
}
/**
* 调用客户画像分析工作流
*
* @param request 工作流请求参数
* @return 工作流响应结果
*/
public DifyWorkflowResponse callCustomerProfileAnalysisWorkflow(DifyWorkflowRequest request) {
try {
String url = difyBaseUrl + workflowEndpoint;
// 构建请求头
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.set("Authorization", "Bearer " + portraitAllInToken);
// 构建请求体
Map<String, Object> requestBody = new HashMap<>();
requestBody.put("inputs", request.getInputs());
requestBody.put("response_mode", "blocking");
requestBody.put("user", request.getUserId());
HttpEntity<Map<String, Object>> entity = new HttpEntity<>(requestBody, headers);
log.info("调用客户画像分析Dify工作流API: {}", url);
log.info("客户画像分析请求参数: {}", JSON.toJSONString(requestBody));
ResponseEntity<String> response = restTemplate.exchange(
url,
HttpMethod.POST,
entity,
String.class
);
log.info("客户画像分析Dify工作流响应状态: {}", response.getStatusCode());
log.info("客户画像分析Dify工作流响应内容: {}", response.getBody());
if (response.getStatusCode() == HttpStatus.OK) {
JSONObject responseJson = JSON.parseObject(response.getBody());
return parseAndSaveCustomerProfileAnalysisResponse(responseJson, request);
} else {
throw new RuntimeException("客户画像分析Dify工作流调用失败状态码: " + response.getStatusCode());
}
} catch (Exception e) {
log.error("调用客户画像分析Dify工作流异常", e);
throw new RuntimeException("调用客户画像分析Dify工作流异常: " + e.getMessage(), e);
}
}
/**
* 解析工作流响应并保存数据
*/
private DifyWorkflowResponse parseAndSaveWorkflowResponse(JSONObject responseJson, DifyWorkflowRequest request) {
DifyWorkflowResponse response = new DifyWorkflowResponse();
if (responseJson.containsKey("data")) {
JSONObject data = responseJson.getJSONObject("data");
response.setWorkflowRunId(data.getString("workflow_run_id"));
response.setTaskId(data.getString("task_id"));
response.setData(data);
// 解析并保存分析结果到数据库
if (data.containsKey("outputs")) {
JSONObject outputs = data.getJSONObject("outputs");
log.info("Dify工作流响应数据 outputs : {}", outputs);
// 保存分析结果到数据库
saveAnalysisResultToDatabase(outputs, request);
}
}
if (responseJson.containsKey("metadata")) {
response.setMetadata(responseJson.getJSONObject("metadata"));
}
return response;
}
/**
* 保存分析结果到数据库
*/
private void saveAnalysisResultToDatabase(JSONObject outputs, DifyWorkflowRequest request) {
try {
DifyWorkflowAnalysis analysis = new DifyWorkflowAnalysis();
// 从outputs中提取数据
if (outputs.containsKey("data")) {
JSONObject analysisData = outputs.getJSONObject("data");
// 提取分析结果摘要
if (analysisData.containsKey("analysisResult")) {
analysis.setAnalysisResult(analysisData.getString("analysisResult"));
}
// 解析详细分析结果
if (analysisData.containsKey("analysisDetail")) {
JSONObject analysisDetail = analysisData.getJSONObject("analysisDetail");
// 解析客户需求
if (analysisDetail.containsKey("customerNeeds")) {
JSONObject customerNeeds = analysisDetail.getJSONObject("customerNeeds");
analysis.setCustomerSource(customerNeeds.getString("customerSource"));
analysis.setCustomerOccupation(customerNeeds.getString("customerOccupation"));
analysis.setCustomerHobbies(customerNeeds.getString("customerHobbies"));
analysis.setHomeAddress(customerNeeds.getString("homeAddress"));
analysis.setCarPurchaseNeed(customerNeeds.getString("carPurchase"));
analysis.setPurchaseType(customerNeeds.getString("purchaseType"));
analysis.setPurchaseBuyer(customerNeeds.getString("purchaseBuyer"));
analysis.setCarUser(customerNeeds.getString("carUser"));
analysis.setIntendedCarModel(customerNeeds.getString("intendedCarModel"));
analysis.setCarQualifications(customerNeeds.getString("carQualifications"));
analysis.setCarBudget(customerNeeds.getString("carBudget"));
analysis.setFinancialInstallment(customerNeeds.getString("financialInstallment"));
analysis.setPurchaseCycle(customerNeeds.getString("purchaseCycle"));
analysis.setFocusPoints(customerNeeds.getString("focus"));
analysis.setConcerns(customerNeeds.getString("concerns"));
analysis.setCarContrast(customerNeeds.getString("carContrast"));
}
// 解析顾问服务
if (analysisDetail.containsKey("customerService")) {
JSONObject customerService = analysisDetail.getJSONObject("customerService");
analysis.setProductDescription(customerService.getString("productDesc"));
analysis.setSolution(customerService.getString("solution"));
analysis.setQuotation(customerService.getString("quotation"));
}
// 解析后续行动和未解决问题
analysis.setAgreedFollowUpActions(analysisDetail.getString("agreedFollowUpActions"));
analysis.setUnresolvedIssues(analysisDetail.getString("unresolvedIssues"));
}
}
// 从outputs中提取其他字段
if (outputs.containsKey("unionId")) {
analysis.setUnionId(outputs.getString("unionId"));
}
if (outputs.containsKey("consultantId")) {
analysis.setConsultantId(outputs.getString("consultantId"));
}
if (outputs.containsKey("communicateDate")) {
try {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
analysis.setCommunicateDate(LocalDateTime.parse(outputs.getString("communicateDate"), formatter));
} catch (Exception e) {
log.warn("解析沟通时间失败: {}", outputs.getString("communicateDate"), e);
analysis.setCommunicateDate(LocalDateTime.now());
}
}
if (outputs.containsKey("analysisScene")) {
analysis.setAnalysisScene(outputs.getString("analysisScene"));
}
if (outputs.containsKey("analysisRecordId")) {
analysis.setAnalysisRecordId(outputs.getString("analysisRecordId"));
}
if (outputs.containsKey("version")) {
analysis.setVersion(outputs.getInteger("version"));
}
// 从request的inputs中提取原始对话内容
if (request.getInputs() != null && request.getInputs().containsKey("chat")) {
analysis.setOriginalCorpus((String) request.getInputs().get("chat"));
}
// 设置创建时间和更新时间
LocalDateTime now = LocalDateTime.now();
analysis.setCreatedAt(now);
analysis.setUpdatedAt(now);
// 保存到数据库
// boolean saveResult = difyWorkflowAnalysisService.save(analysis);
// if (saveResult) {
// log.info("分析结果保存成功ID: {}", analysis.getId());
// } else {
// log.error("分析结果保存失败");
// }
} catch (Exception e) {
log.error("保存分析结果到数据库失败", e);
}
}
/**
* 解析客户画像分析工作流响应并保存数据
*/
private DifyWorkflowResponse parseAndSaveCustomerProfileAnalysisResponse(JSONObject responseJson, DifyWorkflowRequest request) {
DifyWorkflowResponse response = new DifyWorkflowResponse();
if (responseJson.containsKey("data")) {
JSONObject data = responseJson.getJSONObject("data");
response.setWorkflowRunId(data.getString("workflow_run_id"));
response.setTaskId(data.getString("task_id"));
response.setData(data);
// 解析并保存客户画像分析结果到数据库
if (data.containsKey("outputs")) {
JSONObject outputs = data.getJSONObject("outputs");
log.info("客户画像分析Dify工作流响应数据 outputs : {}", outputs);
// 保存客户画像分析结果到数据库
saveCustomerProfileAnalysisResultToDatabase(outputs, request);
}
}
if (responseJson.containsKey("metadata")) {
response.setMetadata(responseJson.getJSONObject("metadata"));
}
return response;
}
/**
* 保存客户画像分析结果到数据库
*/
private void saveCustomerProfileAnalysisResultToDatabase(JSONObject outputs, DifyWorkflowRequest request) {
try {
CustomerProfileAnalysis analysis = new CustomerProfileAnalysis();
// 从request的inputs中提取基础信息
Map<String, Object> inputs = request.getInputs();
if (inputs != null) {
// 设置基础字段
analysis.setProfileAnalysisRecordId((String) inputs.get("aiAnalysisRequestld"));
analysis.setRelatedBusinessId((String) inputs.get("businessId"));
analysis.setAnalysisSceneType(parseAnalysisSceneType((String) inputs.get("analysisScene")));
// 解析沟通时间
if (inputs.containsKey("communicateDate")) {
try {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
analysis.setInteractionDate(LocalDateTime.parse((String) inputs.get("communicateDate"), formatter));
} catch (Exception e) {
log.warn("解析沟通时间失败: {}", inputs.get("communicateDate"), e);
analysis.setInteractionDate(LocalDateTime.now());
}
}
// 设置原始对话内容(用于后续分析)
if (inputs.containsKey("chat")) {
// 这里可以保存原始对话内容,但实体类中没有对应字段,可以扩展
log.info("原始对话内容: {}", inputs.get("chat"));
}
}
// 从outputs中提取客户画像分析结果字段
// Dify工作流现在直接输出与MySQL表字段名一致的JSON结构
if (outputs.containsKey("result")) {
JSONObject result = outputs.getJSONObject("result");
// 解析info部分客户基础信息
if (result.containsKey("info")) {
JSONObject info = result.getJSONObject("info");
// 直接使用MySQL表字段名进行赋值
if (info.containsKey("dealer_code")) {
analysis.setDealerCode(info.getString("dealer_code"));
}
if (info.containsKey("opportunity_id")) {
analysis.setOpportunityId(info.getString("opportunity_id"));
}
if (info.containsKey("client_id")) {
analysis.setClientId(info.getString("client_id"));
}
if (info.containsKey("client_name")) {
analysis.setClientName(info.getString("client_name"));
}
if (info.containsKey("client_phone")) {
analysis.setClientPhone(info.getString("client_phone"));
}
if (info.containsKey("home_address")) {
analysis.setHomeAddress(info.getString("home_address"));
}
if (info.containsKey("vehicle_usage")) {
analysis.setVehicleUsage(info.getString("vehicle_usage"));
}
if (info.containsKey("primary_driver")) {
analysis.setPrimaryDriver(info.getString("primary_driver"));
}
if (info.containsKey("family_composition")) {
analysis.setFamilyComposition(info.getString("family_composition"));
}
if (info.containsKey("family_size")) {
analysis.setFamilySize(info.getString("family_size"));
}
if (info.containsKey("monthly_income")) {
analysis.setMonthlyIncome(info.getString("monthly_income"));
}
if (info.containsKey("industry_sector")) {
analysis.setIndustrySector(info.getString("industry_sector"));
}
if (info.containsKey("job_title")) {
analysis.setJobTitle(info.getString("job_title"));
}
if (info.containsKey("company_type")) {
analysis.setCompanyType(info.getString("company_type"));
}
if (info.containsKey("hobby")) {
analysis.setHobby(info.getString("hobby"));
}
if (info.containsKey("education_level")) {
analysis.setEducationLevel(info.getString("education_level"));
}
if (info.containsKey("purchase_date")) {
analysis.setPurchaseDate(info.getString("purchase_date"));
}
if (info.containsKey("purchase_type")) {
analysis.setPurchaseType(info.getString("purchase_type"));
}
if (info.containsKey("budget_range")) {
analysis.setBudgetRange(info.getString("budget_range"));
}
if (info.containsKey("payment_way")) {
analysis.setPaymentWay(info.getString("payment_way"));
}
if (info.containsKey("current_brand")) {
analysis.setCurrentBrand(info.getString("current_brand"));
}
if (info.containsKey("competitor_brand")) {
analysis.setCompetitorBrand(info.getString("competitor_brand"));
}
if (info.containsKey("purchase_qualification")) {
analysis.setPurchaseQualification(info.getString("purchase_qualification"));
}
if (info.containsKey("interest_focus")) {
analysis.setInterestFocus(info.getString("interest_focus"));
}
if (info.containsKey("concern_point")) {
analysis.setConcernPoint(info.getString("concern_point"));
}
if (info.containsKey("notes")) {
analysis.setNotes(info.getString("notes"));
}
}
// 解析entities部分情感分析
if (result.containsKey("entities")) {
JSONObject entities = result.getJSONObject("entities");
// 直接使用MySQL表字段名进行赋值
if (entities.containsKey("entity_brand")) {
analysis.setEntityBrand(entities.getString("entity_brand"));
}
if (entities.containsKey("entity_brand_reason")) {
analysis.setEntityBrandReason(entities.getString("entity_brand_reason"));
}
if (entities.containsKey("entity_design")) {
analysis.setEntityDesign(entities.getString("entity_design"));
}
if (entities.containsKey("entity_design_reason")) {
analysis.setEntityDesignReason(entities.getString("entity_design_reason"));
}
if (entities.containsKey("entity_color")) {
analysis.setEntityColor(entities.getString("entity_color"));
}
if (entities.containsKey("entity_color_reason")) {
analysis.setEntityColorReason(entities.getString("entity_color_reason"));
}
if (entities.containsKey("entity_size")) {
analysis.setEntitySize(entities.getString("entity_size"));
}
if (entities.containsKey("entity_size_reason")) {
analysis.setEntitySizeReason(entities.getString("entity_size_reason"));
}
if (entities.containsKey("entity_space")) {
analysis.setEntitySpace(entities.getString("entity_space"));
}
if (entities.containsKey("entity_space_reason")) {
analysis.setEntitySpaceReason(entities.getString("entity_space_reason"));
}
if (entities.containsKey("entity_interior")) {
analysis.setEntityInterior(entities.getString("entity_interior"));
}
if (entities.containsKey("entity_interior_reason")) {
analysis.setEntityInteriorReason(entities.getString("entity_interior_reason"));
}
if (entities.containsKey("entity_audio")) {
analysis.setEntityAudio(entities.getString("entity_audio"));
}
if (entities.containsKey("entity_audio_reason")) {
analysis.setEntityAudioReason(entities.getString("entity_audio_reason"));
}
if (entities.containsKey("entity_ivinfo")) {
analysis.setEntityIvinfo(entities.getString("entity_ivinfo"));
}
if (entities.containsKey("entity_ivinfo_reason")) {
analysis.setEntityIvinfoReason(entities.getString("entity_ivinfo_reason"));
}
if (entities.containsKey("entity_fsd")) {
analysis.setEntityFsd(entities.getString("entity_fsd"));
}
if (entities.containsKey("entity_fsd_reason")) {
analysis.setEntityFsdReason(entities.getString("entity_fsd_reason"));
}
if (entities.containsKey("entity_mileage")) {
analysis.setEntityMileage(entities.getString("entity_mileage"));
}
if (entities.containsKey("entity_mileage_reason")) {
analysis.setEntityMileageReason(entities.getString("entity_mileage_reason"));
}
if (entities.containsKey("entity_safety")) {
analysis.setEntitySafety(entities.getString("entity_safety"));
}
if (entities.containsKey("entity_safety_reason")) {
analysis.setEntitySafetyReason(entities.getString("entity_safety_reason"));
}
if (entities.containsKey("entity_eco")) {
analysis.setEntityEco(entities.getString("entity_eco"));
}
if (entities.containsKey("entity_eco_reason")) {
analysis.setEntityEcoReason(entities.getString("entity_eco_reason"));
}
if (entities.containsKey("entity_liscense")) {
analysis.setEntityLiscense(entities.getString("entity_liscense"));
}
if (entities.containsKey("entity_liscense_reason")) {
analysis.setEntityLiscenseReason(entities.getString("entity_liscense_reason"));
}
if (entities.containsKey("entity_price")) {
analysis.setEntityPrice(entities.getString("entity_price"));
}
if (entities.containsKey("entity_price_reason")) {
analysis.setEntityPriceReason(entities.getString("entity_price_reason"));
}
if (entities.containsKey("entity_benefit")) {
analysis.setEntityBenefit(entities.getString("entity_benefit"));
}
if (entities.containsKey("entity_benefit_reason")) {
analysis.setEntityBenefitReason(entities.getString("entity_benefit_reason"));
}
if (entities.containsKey("entity_cost")) {
analysis.setEntityCost(entities.getString("entity_cost"));
}
if (entities.containsKey("entity_cost_reason")) {
analysis.setEntityCostReason(entities.getString("entity_cost_reason"));
}
if (entities.containsKey("entity_value")) {
analysis.setEntityValue(entities.getString("entity_value"));
}
if (entities.containsKey("entity_value_reason")) {
analysis.setEntityValueReason(entities.getString("entity_value_reason"));
}
if (entities.containsKey("entity_power")) {
analysis.setEntityPower(entities.getString("entity_power"));
}
if (entities.containsKey("entity_power_reason")) {
analysis.setEntityPowerReason(entities.getString("entity_power_reason"));
}
if (entities.containsKey("entity_control")) {
analysis.setEntityControl(entities.getString("entity_control"));
}
if (entities.containsKey("entity_control_reason")) {
analysis.setEntityControlReason(entities.getString("entity_control_reason"));
}
if (entities.containsKey("entity_tradein")) {
analysis.setEntityTradein(entities.getString("entity_tradein"));
}
if (entities.containsKey("entity_tradein_reason")) {
analysis.setEntityTradeinReason(entities.getString("entity_tradein_reason"));
}
if (entities.containsKey("entity_finance")) {
analysis.setEntityFinance(entities.getString("entity_finance"));
}
if (entities.containsKey("entity_finance_reason")) {
analysis.setEntityFinanceReason(entities.getString("entity_finance_reason"));
}
if (entities.containsKey("entity_warranty")) {
analysis.setEntityWarranty(entities.getString("entity_warranty"));
}
if (entities.containsKey("entity_warranty_reason")) {
analysis.setEntityWarrantyReason(entities.getString("entity_warranty_reason"));
}
if (entities.containsKey("entity_delivery")) {
analysis.setEntityDelivery(entities.getString("entity_delivery"));
}
if (entities.containsKey("entity_delivery_reason")) {
analysis.setEntityDeliveryReason(entities.getString("entity_delivery_reason"));
}
}
}
// 设置系统字段
LocalDateTime now = LocalDateTime.now();
analysis.setCreatedAt(now);
analysis.setUpdatedAt(now);
analysis.setRecordVersion(0);
analysis.setIsDeleted(0);
// 保存到数据库
boolean saveResult = customerProfileAnalysisService.saveCustomerProfileAnalysis(analysis);
if (saveResult) {
log.info("客户画像分析结果保存成功ID: {}", analysis.getId());
} else {
log.error("客户画像分析结果保存失败");
}
} catch (Exception e) {
log.error("保存客户画像分析结果到数据库失败", e);
}
}
/**
* 解析分析场景类型
*/
private Integer parseAnalysisSceneType(String analysisScene) {
if (analysisScene == null) {
return 1; // 默认企微会话
}
switch (analysisScene.toLowerCase()) {
case "wechat_chat":
case "企微会话":
return 1;
case "ai_call":
case "AI通话录音":
return 2;
case "ai_nameplate_flow":
case "AI铭牌(客流)":
return 3;
case "ai_nameplate_test_drive":
case "AI铭牌(试驾)":
return 4;
default:
return 1; // 默认企微会话
}
}
/**
* Dify工作流请求参数
*/
public static class DifyWorkflowRequest {
private Map<String, Object> inputs;
private String userId;
public DifyWorkflowRequest() {}
public DifyWorkflowRequest(Map<String, Object> inputs, String userId) {
this.inputs = inputs;
this.userId = userId;
}
public Map<String, Object> getInputs() {
return inputs;
}
public void setInputs(Map<String, Object> inputs) {
this.inputs = inputs;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
}
/**
* Dify工作流响应结果
*/
public static class DifyWorkflowResponse {
private String workflowRunId;
private String taskId;
private JSONObject data;
private JSONObject metadata;
public String getWorkflowRunId() {
return workflowRunId;
}
public void setWorkflowRunId(String workflowRunId) {
this.workflowRunId = workflowRunId;
}
public String getTaskId() {
return taskId;
}
public void setTaskId(String taskId) {
this.taskId = taskId;
}
public JSONObject getData() {
return data;
}
public void setData(JSONObject data) {
this.data = data;
}
public JSONObject getMetadata() {
return metadata;
}
public void setMetadata(JSONObject metadata) {
this.metadata = metadata;
}
}
}