5.8 KiB
5.8 KiB
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返回的题目列表中获取,不能自行构造。
返回值
成功响应
{
"survey_id": 716128,
"question_id": "q-1-abcd1234",
"result": "success"
}
失败响应
{
"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 调用
# 更新单选题
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 是否正确 |
注意事项
- 先获取再更新:必须先调用
get_survey获取问卷详情,从返回的题目列表中获取正确的question_id - 单题更新:
text只需包含一道题目的内容,不要写问卷标题或多道题 - 非幂等操作:每次调用都会覆盖原题目内容
- 题型标签位置:
[题型]必须紧跟标题末尾,不能放在其他位置 - 问卷状态要求:问卷必须处于可编辑状态,正在回收中的问卷需先暂停才能编辑
- 换行用
\n:在 JSON 参数中,所有换行必须使用\n代替 - 选项无需字母前缀:选项直接写内容即可(如
满意),不需要写A. 满意
Annotations(工具注解)
| 注解 | 值 | 说明 |
|---|---|---|
readOnlyHint |
false | 非只读操作,会修改问卷内容 |
destructiveHint |
false | 非破坏性操作(更新而非删除) |
idempotentHint |
false | 非幂等,每次调用都覆盖题目内容 |
openWorldHint |
false | 内部调用 |