AIButton
根据描述自动生成符合规范的Vision Node AI按钮控件ZIP包。
用于在MindStudio中安全配置HTTP请求,支持API调用与外部服务对接。
openclaw skills install @sol1986/mindstudio-http-request-block-skill命令、参数、文件名以原文为准
用于在任意 MindStudio 工作流中正确、可靠且安全地配置 HTTP 请求模块的生产级参考。
在编写任何配置之前,先确定用户的目标。将他们的意图匹配到以下五个场景之一,然后仅提出该场景对应的提问。不要询问其他场景的问题。不要猜测变量名称——使用用户提供的完全一致的名称。
如果用户意图已从上下文中明确(例如他们说“将我的 AI 输出 POST 到 Make 的 webhook”),可直接跳过场景确认,进入对应场景的提问环节。
触发条件: 用户希望从 API 获取数据——天气信息、股票价格、用户记录、CRM 联系人等。
请向用户提问:
Authorization、X-Api-Key)?symbol=AAPL、user_id={{userId}})方法: GET
正文: 无
内容类型: none
触发条件: 用户希望向外部系统提交数据——表单提交、JSON 数据包、潜在客户捕获、AI 输出交付等。
请向用户提问:
{{customer_name}}、{{ai_output}}、{{email}})。方法: POST
内容类型: application/json(默认值,除非用户另有说明)
触发条件: 用户希望更新外部系统中的现有记录——CRM 联系人、数据库行、项目记录等。
请向用户提问:
https://api.example.com/contacts){{contact_id}}、{{record_id}})——该变量将附加到 URL 后方法: PATCH(部分更新)或 PUT(完整替换)
内容类型: application/json
触发条件: 用户希望从外部系统中移除一条记录或资源。
请向用户提问:
方法: DELETE
正文: 无
内容类型: none
安全规则: 在未获得用户明确确认删除操作为预期行为前,不得生成 DELETE 配置。
触发条件: 用户希望在工作流中某个事件发生时,向外部系统发送信号——Webhook、Make/Zapier 触发器、通知、流程启动、跨工作流调用等。
请向用户提问:
{"accepted": true},有些返回 200 但无内容)方法: POST
内容类型: application/json
在用户回答完其场景的所有问题后,输出一个完整的、可直接复制粘贴的模块配置,结构如下:
URL : [完整 URL,包含所需变量]
Method : [GET / POST / PATCH / PUT / DELETE]
Content-Type : [application/json / none / 其他]
Headers:
[Key] : [Value]
[Key] : [Value]
Parameters (仅 GET):
[key] : [value]
Body:
[使用确切变量名称的 JSON 或表单结构]
Output Variable: [描述性名称]随后立即接上下游处理模块:
On success (ok = true):
- [对响应的处理方式]
- [如何访问特定字段]
On failure (ok = false):
- 检查 {{outputVar.status}} 获取错误码
- [推荐的分支或备用方案]每个 HTTP 请求模块无论方法或端点如何,都会返回四个字段:
| 字段 | 类型 | 描述 |
|---|---|---|
ok | 布尔值 | 响应状态码在 2xx 范围内时为 true |
status | 数字 | 数值型 HTTP 状态码(如 200、404、500) |
statusText | 字符串 | 状态描述(如 "OK"、"Not Found") |
response | 字符串 | 响应体的原始字符串形式 |
在下游使用时通过以下方式访问:
{{outputVar.ok}}
{{outputVar.status}}
{{outputVar.statusText}}
{{outputVar.response}}如果响应体为 JSON 格式,应将 {{outputVar.response}} 传递给下游的“生成文本”或“运行函数”模块以进行解析和字段提取。切勿直接从原始响应字符串中访问嵌套字段。
https://https://api.example.com/users/{{userId}}| 方法 | 使用场景 |
|---|---|
GET | 获取数据 —— 无请求体 |
POST | 创建资源或触发操作 |
PATCH | 部分更新现有资源 |
PUT | 完全替换现有资源 |
DELETE | 删除资源 —— 无请求体 |
HEAD | 仅获取响应头 |
OPTIONS | 探测可用的方法 |
Content-Type : application/json
Authorization : Bearer {{apiKey}}
Accept : application/json
X-Api-Key : {{serviceKey}}Content-TypeAuthorization{{variable}} 语法查询字符串中的键值对,通常用于 GET 请求。
symbol : {{ticker}}
token : {{apiKey}}
from : {{startDate}}| 选项 | 使用场景 |
|---|---|
application/json | 结构化 JSON 数据(最常见) |
application/x-www-form-urlencoded | HTML 表单提交 |
multipart/form-data | 文件上传或混合表单数据 |
text/plain | 原始文本负载 |
application/xml | 基于 XML 的 API |
custom | 上述列表中未包含的任意内容类型 |
none | GET、HEAD、DELETE —— 无请求体 |
**当内容类型为 application/json 时:**
{
"customer_name": "{{customer_name}}",
"email": "{{email}}",
"ai_output": "{{generatedText}}",
"submitted_at": "{{timestamp}}"
}**当内容类型为 application/x-www-form-urlencoded 时:**
customer_name={{customer_name}}&email={{email}}对于 GET / DELETE 请求: 请留空请求体,并将内容类型设为 none。
始终设置。使用能反映数据来源的描述性名称。
makeResponse
crmResult
stockData
userRecord
patchResultContent-Type;需要认证时必须包含鉴权头;不得省略必需的请求头{{variableName}} 语法;使用点号表示法访问上游块中的嵌套数据response 前务必检查 ok 状态{{outputVar.ok}} 是否为 true{{outputVar.response}} 访问原始响应体| 状态码 | 含义 | 解决方案 |
|---|---|---|
400 | 错误请求 | 请求体格式错误或缺少必填字段 |
401 | 未授权 | 缺失或无效的 API 密钥/令牌 |
403 | 禁止访问 | 密钥有效但权限不足 |
404 | 未找到 | URL 错误或资源不存在 |
422 | 无法处理的实体 | JSON 格式正确但字段值无效 |
429 | 请求频率受限 | 请求过多 —— 添加等待块 |
500 | 服务器错误 | 外部 API 问题 —— 重试或发送告警 |
503 | 服务不可用 | 外部 API 崩溃 —— 稍后重试 |
{{outputVar.response}} 以供调试关键数据缺失:
API 调用失败:
{{outputVar.ok}}重试逻辑:
响应验证:
{{outputVar.response}} 非空绝对禁止。无例外。
Content-Type —— 类型不匹配会导致静默失败URL : https://finnhub.io/api/v1/quote?symbol={{ticker}}&token={{finnhubApiKey}}
Method : GET
Content-Type : none
Headers :
Accept : application/json
Body : (空)
Output Variable: stockData成功时:解析 {{stockData.response}} —— 字段 "c" 为当前价格
失败时:记录 {{stockData.status}} —— 检查 API 密钥和股票代码URL : https://hook.us1.make.com/{{webhookId}}
Method : POST
Content-Type : application/json
Headers :
Content-Type : application/json
Body:
{
"customer_name": "{{customer_name}}",
"email": "{{email}}",
"ai_output": "{{generatedText}}",
"submitted_at": "{{timestamp}}"
}
输出变量: makeResponse成功时:Make 返回 {"accepted": true} — 记录日志并继续执行
失败时:记录 {{makeResponse.status}} — 确认 webhook 地址是否有效URL : https://api.hubspot.com/crm/v3/objects/contacts/{{contact_id}}
Method : PATCH
Content-Type : application/json
Headers :
Content-Type : application/json
Authorization : Bearer {{hubspotApiKey}}
Body:
{
"properties": {
"lead_score": "{{lead_score}}",
"last_contacted": "{{timestamp}}",
"notes": "{{ai_summary}}"
}
}
输出变量: crmResult成功时:{{crmResult.ok}} = true — 记录已更新
404 错误时:contact_id 不正确 — 检查变量源块的值
422 错误时:字段名称不匹配 — 验证 HubSpot 的属性名称是否正确URL : https://api.example.com/records/{{record_id}}
Method : DELETE
Content-Type : 无
Headers :
Authorization : Bearer {{apiKey}}
Body : (空)
输出变量: deleteResult成功时:状态码为 204 — 无返回内容,删除成功
404 错误时:record_id 不存在或已被删除
403 错误时:API 密钥无删除权限URL : https://hooks.zapier.com/hooks/catch/{{zapId}}/{{hookId}}/
Method : POST
Content-Type : application/json
Headers :
Content-Type : application/json
Body:
{
"event": "workflow_completed",
"user_email": "{{email}}",
"result": "{{ai_output}}",
"timestamp": "{{timestamp}}"
}
输出变量: zapierResponse成功时:Zapier 返回 {"status": "success"} — 触发确认
失败时:记录 {{zapierResponse.status}} — 确认 Zap 是否启用且 URL 正确URL 和方法:
https:// 开头{{variableName}} 语法请求头:
Content-Type 已设置,并与请求体格式匹配请求体:
Content-Type 头一致输出:
{{outputVar.response}} 前检查 {{outputVar.ok}}ok = false 的错误处理分支已收录 1 个 Skill