1. 调用工作流前的准备
1.1 获取访问凭证(Token)
首先需要获取调用API所需的权限凭证。进入系统的“API管理-授权”页面,根据实际使用场景选择合适的授权类型。若仅用于测试环境,推荐使用个人访问令牌即可满足需求。
以创建个人访问令牌为例,点击“添加”按钮开始生成:
在配置界面中,设置令牌的有效期限、所需权限范围以及关联的工作空间。
创建成功后,请务必立即复制并保存生成的token信息,系统不会再次展示该密钥,遗漏将导致需重新创建。
额外提示:如需长期有效凭证,建议采用服务身份方式创建,其支持更长的有效周期。
1.2 工作流的建立
关于如何创建一个完整的工作流,可参考官方或社区提供的相关教程,此处不再赘述。
在完成工作流编排后,注意记录浏览器地址栏中的 workflow_id,后续发起请求时需要用到此唯一标识符。
2. 发起工作流调用
系统提供SDK供开发者集成,但若希望简化流程,也可直接通过HTTP请求方式进行调用。本文采用后者,避免引入额外依赖。
/**
* 识别收件人信息
*/
public static SfContactInfo checkRecipient(String msg){
// 记录开始时间
long startTime = System.currentTimeMillis();
log.info("COZE AI 识别收件人信息>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n{}", msg);
String bodyStr = "{\"parameters\":{\"msg\":\"" + msg.replaceAll("\\s+", "") + "\"},\"workflow_id\":\"" + workflowId_check_recipient + "\"}";//用你自己的workflow_id
log.info("COZE AI bodyStr>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n{}", bodyStr);
// 创建HttpRequestConfig对象并设置超时时间
int time = 1000 * 60 * 3;//3分钟
HttpConfig config = new HttpConfig();
config.setConnectionTimeout(time); // 设置连接超时时间为5000毫秒
config.setReadTimeout(time); // 设置读取超时时间为10000毫秒
String result2 = "";
try {
result2 = HttpRequest.post("https://api.coze.cn/v1/workflow/run")
.header("Authorization", authToken)//令牌的token
.header("Content-Type", "application/json")
.body(bodyStr)//表单内容
.setConfig(config)
.execute().body();
}catch (Exception e){
throw new IllegalArgumentException("COZE AI 识别错误"+e.getMessage());
}
// 计算运行时间
long duration = System.currentTimeMillis() - startTime;
// 输出运行时间
System.out.println("COZE AI 识别时间: " + duration/1000 + " 秒");
log.info("COZE AI Agent回答>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n{}", result2);
if(!JSONObject.parseObject(result2).get("code").equals(0)) {
System.out.println("COZE AI ERROR");
throw new IllegalArgumentException("COZE AI ERROR:"+JSONObject.parseObject(result2).get("msg"));
}
//将其中的英文括号改为中文括号
result2 = result2.replaceAll("\\(", "(").replaceAll("\\)", ")");
// 第一层解析:获取整个响应
JSONObject response = JSONObject.parseObject(result2);
// 第二层解析:获取data字段
JSONObject data = response.getJSONObject("data");
if (data == null) {
throw new IllegalArgumentException("data字段不存在");
}
// 第三层解析:获取output字段并解析为JSONObject
String outputStr = data.getString("output");
if (outputStr == null) {
throw new IllegalArgumentException("output字段不存在");
}
JSONObject outputObj = JSON.parseObject(outputStr); // 解析output字符串
JSONObject sfContactInfoObj = outputObj.getJSONObject("sfContactInfo"); // 获取目标对象
SfContactInfo contactInfo = sfContactInfoObj.toJavaObject(SfContactInfo.class);
return contactInfo;
}
在构造请求时,需确保所有参数名称与工作流中定义的输入字段保持一致,否则可能导致数据无法正确传递。
同时,返回结果的结构也应与工作流输出配置相匹配,便于后续解析处理。
最终请根据具体业务需求调整请求内容和处理逻辑。


雷达卡


京公网安备 11010802022788号







