一、前言
在前端开发的江湖里,React 以其组件化的优雅身姿占据半壁江山,而Coze 工作流则像一位智能管家,能将复杂的 AI 流程编排得明明白白。今天咱们就来揭秘如何让这两位 "高手" 强强联手 ------ 用 React 调用 Coze 工作流,轻松实现智能化功能开发。无论你是想做图片生成、数据处理还是自动化任务,这篇指南都能带你入门,让开发效率 up up~
二、准备工作:工欲善其事,必先利其器
Coze 平台 "钥匙" 获取
要调用 Coze 的 API,有两个 "通行证" 必不可少:
关键信息 | 作用 | 获取步骤 |
---|---|---|
PAT Token | 身份验证凭证,API 调用的 "身份证" | 登录 Coze 平台 → 个人中心 → API 令牌 → 创建并复制 |
workflow_id | 指定要调用的工作流,相当于 "目标地址" | 进入 Coze 工作流编辑页 → 地址栏或详情页中获取 |
小提示:PAT Token 要妥善保管,千万别暴露在前端代码仓库里,用环境变量存储更安全哦~
三、代码实现:一步步拆解 React 与 Coze 的 "对话" 逻辑
(一)基础配置与状态管理
先看看组件的初始化设置,就像给房间铺好地板、摆好家具:
javascript
// 引入React核心工具
import { useRef, useState } from 'react'
import styles from './coze.module.css'
const Coze = () => {
// Coze API地址配置
const uploadUrl = 'https://api.coze.cn/v1/files/upload'; // 文件上传接口
const workflowUrl = 'https://api.coze.cn/v1/workflow/run'; // 工作流运行接口
// 敏感信息从环境变量获取
const patToken = import.meta.env.VITE_PAT_TOKEN;
const workflow_id = '7533076698960625679'; // 你的工作流ID
// DOM引用:用于操作文件输入框
const uploadImageRef = useRef(null)
// 状态管理:记录页面数据和操作状态
const [imgPreview, setImgPreview] = useState('https://res.bearbobo.com/resource/upload/W44yyxvl/upload-ih56twxirei.png'); // 图片预览
const [uniform_color, setUniformColor]=useState('红'); // 队服颜色
const [uniform_number, setUniformNumber] = useState(10); // 队服编号
const [position, setPosition] = useState(0); // 位置(0-守门员,1-前锋,2-后卫)
const [shooting_hand, setShootingHand] = useState(0); // 惯用手(0-左手,1-右手)
const [style, setStyle] = useState('写实'); // 生成风格
const [imgUrl, setImgUrl] = useState(''); // 生成结果图片
const [status, setStatus] = useState(''); // 操作状态提示
// ...后续方法
}
这里用useRef
获取文件输入框的引用,useState
管理各种交互状态,比如用户选择的队服颜色、生成进度等,都是构建交互界面的基础。
(二)文件上传:把图片送到 Coze 的 "仓库"
要让 Coze 处理图片,第一步得把图片传到它的服务器,uploadFile
函数就是干这个的:
javascript
const uploadFile = async () => {
// 创建表单数据对象,专门用来传文件
const formData = new FormData();
const input = uploadImageRef.current;
// 检查是否有选择文件
if (!input.files || input.files.length <= 0) return;
// 添加文件到表单数据
formData.append('file', input.files[0]);
// 调用Coze的文件上传接口
const res = await fetch(uploadUrl, {
method: 'POST',
headers: { 'Authorization': `Bearer ${patToken}` }, // 身份验证
body: formData,
});
const ret = await res.json();
console.log('上传结果:', ret);
// 处理错误
if (ret.code !== 0) {
setStatus(ret.msg);
return;
}
// 返回文件ID,后续调用工作流要用
return ret.data.id;
}
划重点:文件上传必须用
FormData
对象,且请求头不要加Content-Type: application/json
,浏览器会自动处理成multipart/form-data
~
上传成功后会得到一个file_id
,这就像给文件办了张 "身份证",后面调用工作流时凭着这个 ID 就能找到它啦。
(三)图片预览:让用户知道传了啥
用户选了图片后,得实时显示预览,updateImageData
函数负责这个:
javascript
const updateImageData = () => {
const input = uploadImageRef.current;
if (!input.files || input.files.length === 0) return;
const file = input.files[0];
// 用FileReader把文件转成可预览的URL
const reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = (e) => {
setImgPreview(e.target?.result); // 更新预览图
};
}
这样用户选完图片,马上就能看到效果,体验会好很多~
(四)调用工作流:让 Coze 开始 "干活"
最核心的一步来了 ------ 调用工作流处理图片,generate
函数就是总指挥:
javascript
const generate = async () => {
setStatus("图片上传中...");
// 先上传图片,拿到file_id
const file_id = await uploadFile();
if (!file_id) return; // 上传失败就退出
setStatus("图片上传成功,正在生成...");
// 准备工作流需要的参数
const parameters = {
picture: JSON.stringify({ file_id }), // 图片ID(要转成JSON字符串)
style: style,
uniform_number: uniform_number,
uniform_color: uniform_color,
position: position,
shooting_hand: shooting_hand,
};
// 调用工作流运行接口
const res = await fetch(workflowUrl, {
method: 'POST',
headers: {
Authorization: `Bearer ${patToken}`,
'Content-Type': 'application/json', // 这里要指定JSON类型
},
body: JSON.stringify({
workflow_id, // 工作流ID
parameters // 上面准备的参数
}),
});
const ret = await res.json();
console.log('工作流结果:', ret);
// 处理错误
if (ret.code !== 0) {
setStatus(ret.msg);
return;
}
// 处理成功结果
const data = JSON.parse(ret.data);
setStatus('');
setImgUrl(data.data); // 显示生成的图片
}
这里要注意参数的格式,特别是picture
字段需要转成 JSON 字符串,不然工作流可能认不出来哦。
四、页面交互:让用户用得顺手
(一)文件选择与预览区
用户选图片的地方,绑定了预览更新事件:
jsx
<div className={styles.fileInput}>
<input
ref={uploadImageRef}
type="file"
accept="image/*"
onChange={updateImageData} // 选完图片就更新预览
/>
</div>
<img
src={imgPreview}
alt="预览图"
className={styles.preview}
/>
(二)参数配置区
各种选项让用户自定义生成效果,每个输入框都绑定了状态更新函数:
jsx
<div className={styles.settings}>
<div className={styles.selection}>
<label>队服编号</label>
<input
value={uniform_number}
type="number"
onChange={(e) => setUniformNumber(e.target.value)}
/>
</div>
<div className={styles.selection}>
<label>队服颜色:</label>
<select
value={uniform_color}
onChange={(e) => setUniformColor(e.target.value)}
>
<option value="红">红</option>
<option value="蓝">蓝</option>
<option value="绿">绿</option>
</select>
</div>
{/* 位置、惯用手、风格选择类似,略 */}
</div>
(三)生成按钮与结果展示
一键生成按钮和结果显示区:
jsx
<div className={styles.generate}>
<button onClick={generate}>生成</button>
</div>
<div className={styles.output}>
{imgUrl && <img src={imgUrl} alt="生成结果" />}
{status && <div className={styles.status}>{status}</div>}
</div>
用户点 "生成" 按钮后,status
会显示进度,成功后就展示生成的图片,整个流程清晰明了~
五、踩坑指南:这些问题要注意
常见问题 | 原因 | 解决办法 |
---|---|---|
401 错误 | Token 无效或没传 | 检查 PAT Token 是否正确,请求头是否加了Authorization |
404 错误 | API 地址错了 | 确认uploadUrl 和workflowUrl 是否正确 |
图片不显示 | file_id 没传对 |
检查上传后是否正确获取file_id ,参数是否转成 JSON |
参数无效 | 工作流参数名不对 | 对照 Coze 工作流的参数配置,确保名称一致 |
六、总结:React + Coze = 开发加速器
今天我们一步步实现了用 React 调用 Coze 工作流的完整流程,核心步骤就是:配置环境→获取 Token 和工作流 ID→上传文件→调用工作流→处理结果。通过这种方式,你可以轻松把 Coze 的 AI 能力集成到 React 应用中,无论是图片生成、智能问答还是自动化处理,都能快速实现。
其实这只是个开始,Coze 工作流还有很多强大的功能等着你去探索,比如多步骤编排、条件判断等。把这些和 React 结合起来,能玩出更多花样哦~快去试试吧,说不定下一个爆款应用就出自你手呢!