工作流可把记录字段持续发送到任意外部 HTTP 地址
原文依据:4 处工作流协议支持 URL、请求头和请求体中的动态字段引用。示例把线索名称、手机号、公司、负责人和记录 ID 拼入请求体并 POST 到外部 CRM。虽然这是示例而非自动安装的后门,但创建并启用类似工作流后,每次触发都会执行该传输。
客户资料、个人信息或内部记录可能离开飞书并进入第三方系统;错误或不可信的目标地址会造成持续数据泄露。
该能力不是自动安装的后门,而是用户创建的 Workflow 中可配置的活动行为。HTTPClientAction 允许任意请求方法、动态 URL、请求头和由前序记录字段拼接的正文;示例确实把姓名、手机号、公司、负责人和记录 ID 发往外部 CRM。创建并启用此类流程后,每次匹配触发都可能外传数据。用户应要求明确列出目标域名、字段、触发条件和凭据处理,并限制允许的外部主机。
### HTTPClientAction```json{ "method": "POST", "url": [{ "value_type": "text", "value": "https://api.example.com/webhook" }], "queries": [ { "key": "source", "value": [{ "value_type": "text", "value": "workflow" }] } ], "headers": [ { "key": "Content-Type", "value": [{ "value_type": "text", "value": "application/json" }] } ], "body_type": "raw", "raw_body": [ { "value_type": "text", "value": "{\"record_id\":\"" }, { "value_type": "ref", "value": "$.step_1.recordId" }, { "value_type": "text", "value": "\"}" } ], "response_type": "json", "response_value": "{\"success\":true,\"message\":\"data fetched successfully\"}"}```| 字段 | 必填 | 说明 ||------|-----|------|| `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` 时必填 |查看另外 3 个位置
"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": "\"}" } ],|------|-----|------|| `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` 时使用 | "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": "\"}" } ],