Files
su-planning-office/skills/tencent-survey/references/update_question.md
T

155 lines
5.8 KiB
Markdown
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.
# update_question 工具参考
## 概述
更新问卷中的某一道题目。需要先用 `get_survey` 获取问卷详情以确认 `question_id`,再调用此接口更新指定题目的内容。只传入目标题目的纯文本(DSL 格式),系统会自动解析并覆盖该题。
## 参数
| 参数 | 类型 | 必填 | 说明 |
|------|------|:----:|------|
| `survey_id` | number | **是** | 问卷 ID |
| `question_id` | string | **是** | 要更新的题目 ID,格式形如 `q-1-xxxx`(从 `get_survey` 返回的题目列表中获取) |
| `text` | string | **是** | 该题目的新文本内容(DSL 格式),只需包含这一道题 |
> **重要**:`question_id` 必须从 `get_survey` 返回的题目列表中获取,不能自行构造。
## 返回值
### 成功响应
```json
{
"survey_id": 716128,
"question_id": "q-1-abcd1234",
"result": "success"
}
```
### 失败响应
```json
{
"survey_id": 716128,
"question_id": "q-1-abcd1234",
"result": "failed",
"error": "invalid_text_format: ..."
}
```
### 字段说明
| 字段 | 类型 | 说明 |
|------|------|------|
| `survey_id` | number | 问卷 ID |
| `question_id` | string | 更新的题目 ID |
| `result` | string | `"success"` 表示成功,`"failed"` 表示失败 |
| `error` | string | 仅失败时返回,错误描述信息 |
## text 语法说明
`text` 参数使用与 `create_survey` 相同的 DSL 语法,但**只需写一道题**(不需要写问卷标题)。
### 语法格式
```
题目标题[题型](描述)
选项A
选项B
```
> **关键规则**:`[题型]` 标签**必须紧跟在标题末尾**,后面不能再有文字。`(描述)` 部分为可选。
### 各题型示例
| 题型 | text 示例 |
|------|----------|
| 单选题 | `"您的性别[单选题]\n男\n女"` |
| 多选题 | `"您感兴趣的领域[多选题]\n技术\n设计\n产品\n运营"` |
| 下拉题 | `"请选择部门[下拉题]\n研发部\n市场部\n财务部"` |
| 排序题 | `"请排列优先级[排序题]\n功能\n性能\n安全\n体验"` |
| 单行文本题 | `"您的姓名[单行文本题]"` |
| 多行文本题 | `"您的建议[多行文本题]"` |
| 量表题 | `"请打分[量表题](5分非常满意)\n1~5"` |
| 多项填空题 | `"联系方式[多项填空题]\n手机号:____\n邮箱:____"` |
| 矩阵单选题 | `"满意度评价[矩阵单选题]\n非常满意 满意 一般 不满意\n服务态度\n响应速度"` |
| 段落说明 | `"以下为附加问题[段落说明]"` |
> 完整语法参考:`references/create_survey.md` 中的「text 文本语法详解」章节。
## 调用示例
### 典型工作流
```
# 1. 先获取问卷详情,确认题目 ID
get_survey(survey_id=716128)
# 返回中找到目标题目,例如 id="q-1-abcd1234",类型为单选题
# 2. 更新该题目
update_question(survey_id=716128, question_id="q-1-abcd1234", text="您的性别[单选题]\n男\n女\n其他")
```
### 更新量表题
```
update_question(survey_id=716128, question_id="q-1-efgh5678", text="请对服务打分[量表题](1分最低,10分最高)\n1~10")
```
### 更新多选题
```
update_question(survey_id=716128, question_id="q-1-ijkl9012", text="您常用的编程语言[多选题]\nGo\nPython\nJava\nTypeScript\nRust")
```
### mcporter 调用
```bash
# 更新单选题
mcporter call tencent-survey.update_question --args '{"survey_id": 716128, "question_id": "q-1-abcd1234", "text": "您的性别[单选题]\n男\n女\n其他"}'
# 更新多行文本题
mcporter call tencent-survey.update_question --args '{"survey_id": 716128, "question_id": "q-1-efgh5678", "text": "请填写您的建议[多行文本题]"}'
```
## 权限要求
调用此接口需要满足以下权限条件(逐级校验):
| 校验层 | 说明 |
|--------|------|
| `WithSurveyClaims` | 问卷归属校验:问卷必须属于当前 Token 绑定的团队 |
| `WithSurveyEditorClaims` | 编辑权限校验:当前用户需具有该问卷的编辑权限 |
| `WithSurveyEditableClaims` | 可编辑状态校验:问卷必须处于可编辑状态(如草稿状态) |
## 错误码
| error.type | 错误描述 | 解决方案 |
|------------|---------|---------|
| `invalid_text_format` | 文本内容格式错误 | 检查 text 语法是否正确,`[题型]` 需紧跟标题末尾 |
| `no_question_parsed` | 未能解析出任何题目 | 确认 text 包含了完整的题目内容 |
| `unknown_question_type` | 无法识别的题型 | 检查 `[题型]` 标签是否使用了支持的题型名称 |
| `save_question_failed` | 保存题目失败 | 服务端异常,请稍后重试 |
| `claim_error` | 权限校验错误 | 问卷不属于当前 Token 绑定的团队,或无编辑权限 |
| `survey_not_editable` | 问卷不可编辑 | 问卷可能正在回收中,需先暂停回收 |
| `invalid_argument` | 参数校验不通过 | 检查 survey_id、question_id、text 是否正确 |
## 注意事项
1. **先获取再更新**:必须先调用 `get_survey` 获取问卷详情,从返回的题目列表中获取正确的 `question_id`
2. **单题更新**:`text` 只需包含一道题目的内容,不要写问卷标题或多道题
3. **非幂等操作**:每次调用都会覆盖原题目内容
4. **题型标签位置**:`[题型]` 必须紧跟标题末尾,不能放在其他位置
5. **问卷状态要求**:问卷必须处于可编辑状态,正在回收中的问卷需先暂停才能编辑
6. **换行用 `\n`**:在 JSON 参数中,所有换行必须使用 `\n` 代替
7. **选项无需字母前缀**:选项直接写内容即可(如 `满意`),不需要写 `A. 满意`
## Annotations(工具注解)
| 注解 | 值 | 说明 |
|------|---|------|
| `readOnlyHint` | false | 非只读操作,会修改问卷内容 |
| `destructiveHint` | false | 非破坏性操作(更新而非删除) |
| `idempotentHint` | false | **非幂等**,每次调用都覆盖题目内容 |
| `openWorldHint` | false | 内部调用 |