持久化 Workflow 可把记录字段发送到任意外部 HTTP 地址
原文依据:5 处Workflow 支持 HTTP 请求,其 URL、请求头和请求体都可由文本与前序步骤的字段引用拼接。示例明确把姓名、手机号、公司、负责人和记录 ID 发送到外部 CRM。
如果目标域名、字段范围或触发条件选择错误,工作流每次触发都可能持续向外部系统披露客户或业务数据;错误配置在启用后会重复执行。
该能力本身构成合理的数据外发风险,但示例不是自动执行的恶意代码。用户创建并启用含 `HTTPClientAction` 的持久化 Workflow 后,URL、请求头和正文可混入前序记录字段并发送到外部服务;示例确实包含手机号、公司、负责人和记录 ID。用户应在授权前确认目标域名、字段清单、触发条件及 Workflow 是否启用。
Workflow 本身是 Base Block,其内部是一张由 `next` / `children` 连接的 steps 执行图;触发器、动作、条件分支和循环都是 step 类型。它适合定时执行、Record 新增或变更联动、消息通知、记录读写和跨系统调用。Workflow 分为三条操作路径:1. **读取配置:** `+workflow-list` 定位流程,`+workflow-get` 读取 `title`、`status` 和完整 `steps` 执行图。2. **写入配置:** `+workflow-create` 创建完整定义,`+workflow-update` 更新完整定义;构造或修改配置前读取 [Workflow](references/lark-base-workflow.md),由该入口继续路由 step 类型和 schema。3. **运行状态控制:** `+workflow-enable` / `+workflow-disable` 启用或停用已有 Workflow,不修改 steps 执行图。查看另外 4 个位置
{ "id": "step_call_crm_api", "type": "HTTPClientAction", "title": "调用 CRM 同步接口", "next": "step_add_sync_log", "data": { "method": "POST", "url": [ { "value_type": "text", "value": "https://api.example-crm.com/v1/leads/sync" } ], "headers": [ { "key": "Content-Type", "value": [{ "value_type": "text", "value": "application/json" }] }, { "key": "X-System", "value": [{ "value_type": "text", "value": "lark_base_workflow" }] } ], "body_type": "raw", "raw_body": [ { "value_type": "text", "value": "{\"lead_name\":\"" }, { "value_type": "ref", "value": "$.step_button_trigger.fldLeadName" }, { "value_type": "text", "value": "\",\"mobile\":\"" }, { "value_type": "ref", "value": "$.step_button_trigger.fldMobile" }, { "value_type": "text", "value": "\",\"company\":\"" }, { "value_type": "ref", "value": "$.step_button_trigger.fldCompany" }, { "value_type": "text", "value": "\",\"owner\":\"" }, { "value_type": "ref", "value": "$.step_button_trigger.fldOwner" }, { "value_type": "text", "value": "\",\"source_record_id\":\"" }, { "value_type": "ref", "value": "$.step_button_trigger.recordId" }, { "value_type": "text", "value": "\"}" } ], "response_type": "json", "response_value": "{\"success\":true,\"message\":\"lead synced successfully\"}" }## Workflow BlockWorkflow 本身是 Base Block,其内部是一张由 `next` / `children` 连接的 steps 执行图;触发器、动作、条件分支和循环都是 step 类型。它适合定时执行、Record 新增或变更联动、消息通知、记录读写和跨系统调用。Workflow 分为三条操作路径:1. **读取配置:** `+workflow-list` 定位流程,`+workflow-get` 读取 `title`、`status` 和完整 `steps` 执行图。2. **写入配置:** `+workflow-create` 创建完整定义,`+workflow-update` 更新完整定义;构造或修改配置前读取 [Workflow](references/lark-base-workflow.md),由该入口继续路由 step 类型和 schema。3. **运行状态控制:** `+workflow-enable` / `+workflow-disable` 启用或停用已有 Workflow,不修改 steps 执行图。| 字段 | 必填 | 说明 ||------|-----|------|| `method` | 否 | 请求方法:`GET` / `POST` / `PUT` / `PATCH` / `DELETE`,默认 `POST` || `url` | 是 | ValueInfo[],请求 URL,支持 `text` / `ref` 拼接 || `queries` | 否 | KeyValue[],查询参数 || `headers` | 否 | KeyValue[],请求头 || `body_type` | 否 | 请求体类型:`none` / `raw` / `form-data` / `form-urlencoded`,默认 `raw` || `raw_body` | 否 | ValueInfo[],原始请求体,仅 `body_type=raw` 时使用 || `form_body` | 否 | KeyValue[],表单数据,仅 `body_type=form-data` 或 `body_type=form-urlencoded` 时使用 || `response_type` | 否 | 响应类型:`none` / `text` / `json`,默认 `json` || `response_value` | 否 | string,JSON 字符串形式的响应结果示例;仅当 `response_type=json` 时必填 | "method": "POST", "url": [ { "value_type": "text", "value": "https://api.example-crm.com/v1/leads/sync" } ], "headers": [ { "key": "Content-Type", "value": [{ "value_type": "text", "value": "application/json" }] }, { "key": "X-System", "value": [{ "value_type": "text", "value": "lark_base_workflow" }] } ], "body_type": "raw", "raw_body": [ { "value_type": "text", "value": "{\"lead_name\":\"" }, { "value_type": "ref", "value": "$.step_button_trigger.fldLeadName" }, { "value_type": "text", "value": "\",\"mobile\":\"" }, { "value_type": "ref", "value": "$.step_button_trigger.fldMobile" }, { "value_type": "text", "value": "\",\"company\":\"" }, { "value_type": "ref", "value": "$.step_button_trigger.fldCompany" }, { "value_type": "text", "value": "\",\"owner\":\"" }, { "value_type": "ref", "value": "$.step_button_trigger.fldOwner" }, { "value_type": "text", "value": "\",\"source_record_id\":\"" }, { "value_type": "ref", "value": "$.step_button_trigger.recordId" }, { "value_type": "text", "value": "\"}" } ],