# 前端调用Coze工作流API示例
## 接口信息
**接口地址**: `POST /api/coze/generate-questions`
**功能**: 在设定学习目标页面点击保存目标后调用该接口,生成学习题目并自动存储到goal_of_detail表中
**重要更新**:
- ✅ **修复重复生成**: 已修复保存目标时重复生成题目的问题(v1.1.0)
- ⚠️ **调用说明**: 请确保只在前端调用此接口,服务器端已禁用自动生成逻辑
## 请求参数
### CozeWorkflowRequest 对象结构
```json
{
"userId": 1, // 必填:用户ID
"goalId": 1, // 可选:目标ID,用于关联已创建的目标
"subject": "物理", // 必填:学习主题/科目
"difficulty": "中等", // 必填:题目难度(简单/中等/困难)
"type": "选择题", // 必填:目标类型(选择题/填空题/单词题)
"totalQuantity": 3, // 必填:题目数量(1-20)
"knowledgePoint": "万有引力定律" // 必填:目标描述/知识点
}
```
## 前端调用示例
### JavaScript/TypeScript 示例
```javascript
// 保存目标并生成题目的函数
async function saveGoalAndGenerateQuestions(goalData) {
try {
// 构建请求参数
const requestData = {
userId: getCurrentUserId(), // 获取当前用户ID
goalId: goalData.goalId, // 目标ID(如果已创建目标)
subject: goalData.subject, // 学习科目
difficulty: goalData.difficulty, // 难度级别
type: goalData.type, // 题目类型
totalQuantity: goalData.quantity, // 题目数量
knowledgePoint: goalData.description // 知识点描述
};
// 调用API
const response = await fetch('/api/coze/generate-questions', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${getAuthToken()}` // 如果需要认证
},
body: JSON.stringify(requestData)
});
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const result = await response.json();
if (result.success) {
console.log(`成功生成 ${result.questions.length} 道题目`);
// 处理成功响应
handleGenerateSuccess(result);
} else {
console.error('题目生成失败:', result.message);
// 处理失败响应
handleGenerateError(result.message);
}
} catch (error) {
console.error('调用API失败:', error);
handleGenerateError(error.message);
}
}
// 在保存目标按钮点击事件中调用
document.getElementById('saveGoalBtn').addEventListener('click', async () => {
const goalData = {
goalId: document.getElementById('goalId').value || null,
subject: document.getElementById('subject').value,
difficulty: document.getElementById('difficulty').value,
type: document.getElementById('type').value,
quantity: parseInt(document.getElementById('quantity').value),
description: document.getElementById('description').value
};
// 验证必填字段
if (!goalData.subject || !goalData.difficulty || !goalData.type ||
!goalData.quantity || !goalData.description) {
alert('请填写所有必填字段');
return;
}
await saveGoalAndGenerateQuestions(goalData);
});
```
### Vue.js 示例
```vue
```
## 响应格式
### 成功响应
```json
{
"success": true,
"message": "题目生成成功",
"questions": [
{
"question": "题目内容",
"options": ["选项A", "选项B", "选项C", "选项D"],
"answer": "正确答案",
"explanation": "解析说明",
"knowledgePoint": "知识点",
"type": "选择题",
"difficulty": "中等"
}
],
"totalCount": 3
}
```
### 失败响应
```json
{
"success": false,
"message": "错误信息描述"
}
```
## 注意事项
1. **必填字段验证**: 前端需要验证所有必填字段
2. **数量限制**: 题目数量必须在1-20之间
3. **错误处理**: 需要处理网络错误和业务错误
4. **加载状态**: 建议显示加载状态,因为API调用可能需要一些时间
5. **自动存储**: 调用成功后,题目会自动存储到goal_of_detail表中,每道题目都有唯一的detail_id
## API文档地址
完整的API文档可以访问: http://localhost:8080/api/docs