Webhook 自动化任务
设置入口
在问卷的全局设置中,选择"自动化"选项,然后点击"新建自动化任务"按钮。在执行动作中选择"发送 webhook"。
Webhook 配置说明
基础配置
- 请求地址:必填,输入要发送请求的目标 URL,例如:
https://api.example.com/webhook
- 请求方法:支持 POST、PUT、PATCH、GET、DELETE,默认为 POST
- 选择字段:必填,选择需要发送的数据字段,支持:
- 问卷中的所有字段
- 提交人信息
- 提交时间
- 更新时间
- 超时时间:请求超时时间,单位为毫秒,默认 5000ms,范围 1000-60000ms
请求头配置
可以添加自定义的 HTTP 请求头:
- Header 名称:请求头的键名
- Header 值:请求头的值
- 支持添加多个请求头
认证配置
支持以下认证方式:
- 无认证:默认选项,不使用认证
- Basic Auth:
- 需要配置用户名和密码
- Bearer Token:
- 需要配置 Token 值
- API Key:
- 需要配置 Header 名称(如:X-API-Key)
- 需要配置 API Key 值
重试配置
当请求失败时的重试策略:
- 启用重试:开启/关闭重试功能
- 重试次数:失败后重试的次数,默认 3 次,范围 1-10 次
- 重试间隔:两次重试之间的等待时间,单位为毫秒,默认 1000ms,范围 100-10000ms
使用说明
- 配置完成后,当用户提交问卷时,系统会自动向配置的 webhook 地址发送请求
- 请求中会包含所选择的字段数据
- 如果请求失败且启用了重试,系统会按照配置的重试策略进行重试
- 建议在正式使用前先测试 webhook 的连通性和数据格式
数据格式字典
webhook 请求体参数说明
{
"answer": {
"createTime": 1752764837570, // 创建时间戳
"updateTime": 1752764837584, // 更新时间戳
"creator": "1", // 创建者ID
"creatorName": "xx", // 创建者姓名
// 问题答案,key为题目ID,value为答案内容
"dmg6": {
// 单选题答案
"mevp": true // 选中选项ID
},
"g693": {
// 多选题答案
"ih3m": true // 选中选项ID
}
// ... 其他题目答案
},
"project": "Hs8ze3", // 项目ID
"survey": {
// 问卷结构定义
"id": "Hs8ze3", // 问卷唯一标识
"title": "问卷标题", // 问卷标题
"description": "问卷描述", // 问卷描述文本
"type": "survey", // 问卷类型
"repoId": 123, // 题库ID(如果是从题库创建)
"attribute": {
// 问卷属性
"mode": "survey", // 问卷模式
"submitButton": "提交", // 提交按钮文本
"suffix": "结束语", // 问卷结束语
"globalLogic": [] // 全局逻辑
},
"dataSource": [], // 数据源配置(用于级联、下拉等)
"tags": ["标签1", "标签2"], // 问卷标签
"children": [
// 问题列表
{
"id": "dmg6", // 题目ID
"type": "Radio", // 题目类型
"title": "单选题", // 题目标题
"attribute": {
// 题目属性
"required": true, // 是否必填
"width": 150 // 宽度设置(部分题型支持)
// ... 其他属性
},
"children": [
// 选项列表
{
"id": "mevp", // 选项ID
"title": "选项1", // 选项文本
"attribute": {} // 选项属性
}
],
"row": [
// 矩阵题行设置
{
"id": "row1",
"title": "行标题"
}
],
"optionGroupList": [
// 选项组(用于分组显示选项)
{
"title": "组标题",
"options": []
}
],
"locale": {
// 多语言配置
"en": {
// 语言代码
"title": "Title", // 对应语言的标题
"description": "Description" // 对应语言的描述
}
}
}
]
}
}
问卷结构类型说明
问卷结构(survey)包含以下主要字段:
-
基本信息
id
: string - 问卷唯一标识title
: string - 问卷标题description
: string - 问卷描述type
: string - 问卷类型repoId
: number - 题库 ID(可选)tags
: string[] - 问卷标签列表
-
问题配置
attribute
: 问卷属性对象mode
: 问卷模式submitButton
: 提交按钮文本suffix
: 结束语globalLogic
: 全局逻辑配置
dataSource
: 数据源配置(用于级联、下拉等题型)children
: 问题列表
-
问题结构 每个问题(children 中的元素)包含:
id
: string - 题目唯一标识type
: string - 题目类型title
: string - 题目标题attribute
: 题目属性对象required
: boolean - 是否必填width
: number - 宽度设置- 其他特定题型的属性
children
: 选项列表(适用于单选、多选等)row
: 矩阵题行配置optionGroupList
: 选项分组配置locale
: 多语言配置对象
-
选项结构 问题选项(children 中的元素)包含:
id
: string - 选项唯一标识title
: string - 选项文本attribute
: 选项属性对象
-
多语言支持
locale
对象支持多语言配置:{
"语言代码": {
"title": "对应语言的标题",
"description": "对应语言的描述"
}
}
题目类型说明
问卷支持多种题目类型,每种类型的答案格式说明如下:
-
Radio (单选题)
{
"题目ID": {
"选项ID": true
}
}示例:
{
"dmg6": {
"mevp": true // 选中了ID为mevp的选项
}
} -
Checkbox (多选题)
{
"题目ID": {
"选项ID1": true,
"选项ID2": "文本内容"
}
}示例:
{
"g693": {
"ih3m": true, // 选中了ID为ih3m的选项
"nn15": "1234" // 多选填空
}
} -
Select (下拉题)
{
"题目ID": {
"选项ID": true
}
}示例:
{
"icnf": {
"dmnx": true // 选中了ID为dmnx的选项
}
} -
Cascader (级联题)
{
"题目ID": {
"选项ID": ["值1", "值2", "值3"] // 数组表示级联选择的路径
}
}示例:
{
"lc8a": {
"e2ah": ["1", "1-1"] // 选择了第一级"选项1"和第二级"选项1-1"
}
} -
FillBlank (单行文本题)
{
"题目ID": {
"填空ID": "文本内容"
}
}示例:
{
"ldah": {
"s7hg": "用户输入的文本"
}
} -
Textarea (多行文本题)
{
"题目ID": {
"填空ID": "多行文本内容"
}
}示例:
{
"gv81": {
"mctm": "用户输入的\n多行文本"
}
} -
MultipleBlank (多项填空)
{
"题目ID": {
"填空1ID": "内容1",
"填空2ID": "内容2"
}
}示例:
{
"t4sn": {
"kvbp": "第一个填空的答案",
"y59p": "第二个填空的答案"
}
} -
MatrixFillBlank (矩阵填空)
{
"题目ID": {
"行ID": {
"列ID": "填空内容"
}
}
}示例:
{
"k8xl": {
"msuv": {
// 第一行
"wix0": "行1列1的答案",
"k0bo": "行1列2的答案"
},
"tdm2": {
// 第二行
"wix0": "行2列1的答案",
"k0bo": "行2列2的答案"
}
}
} -
MatrixRadio (矩阵单选)
{
"题目ID": {
"行ID": {
"选中的列ID": true
}
}
}示例:
{
"matrix1": {
"row1": {
"col2": true // 第一行选中了第二列
},
"row2": {
"col1": true // 第二行选中了第一列
}
}
} -
MatrixCheckbox (矩阵多选)
{
"题目ID": {
"行ID": {
"列ID1": true,
"列ID2": true
}
}
}示例:
{
"matrix2": {
"row1": {
"col1": true, // 第一行选中了第一列
"col2": true // 第一行选中了第二列
}
}
} -
Upload (文件上传)
{
"题目ID": {
"fileList": [
{
"name": "文件名",
"url": "文件URL"
}
]
}
}示例:
{
"upload1": {
"fileList": [
{
"name": "测试文件.pdf",
"url": "https://example.com/files/test.pdf"
}
]
}
}
注意事项
- 所有时间戳均为毫秒级时间戳
- 问卷 ID 和题目 ID 为系统自动生成的唯一标识
- 不同题目类型的答案格式会有所不同,请根据实际收到的数据进行解析
- 建议在开发时先通过测试数据了解具体的数据结构
- 矩阵类型题目的答案格式较为复杂,需要特别注意行 ID 和列 ID 的对应关系