# 调用工作流

Source: https://openflow.run/zh-cn/docs/nodes/workflow/
Language: zh-CN
Product version: 0.1.0-beta.77

通过已声明的输入和输出，复用另一个已发布工作流。

调用工作流节点（Call Workflow）可以调用当前账号名下、已发布且具有开始节点接口的工作流。平台根据目标已发布的接口生成端口，调用方无需重建目标的内部执行图。

## 选择目标

```json
{
  "op": "node.add", "as": "greeting", "type": "workflow", "name": "Call greeting",
  "config": { "flowId": "TARGET_FLOW_ID" },
  "inputs": { "name": { "kind": "value", "value": "Ada" } }
}
```

公开节点类型是 `workflow`。选择的目标应具有调用方要传入的字段。没有工作流输出节点的目标，会返回空的业务结果。

## 保存的接口

节点会保存所选目标的接口快照。普通编辑不会更新它；需要加载目标当前已发布的接口时，使用 `node.refresh`。

```json
{ "op": "node.refresh", "node": "CALL_NODE_REFERENCE" }
```

如果目标的新修订版本保留了相同的字段名、schema 和 null 约束，调用方无需刷新即可继续调用。接口变化时则需要刷新。字段按名称精确匹配，无法解析的引用会保留，以便诊断。

调用工作流节点向另一个工作流传入姓名，并读取对方声明的业务结果。

**输入**
{"name":"Ada"}

**预期结果**
被调用工作流的 message 输出成为当前工作流的 message 结果。

**运行前准备**
选择当前账号名下、已启用且已发布、具有匹配的 name/message 接口的工作流，再刷新节点。案例中的目标 ID 仅作示意。

[下载工作流](https://openflow.run/docs/examples/call-workflow.openflow.json)

## 运行时行为

执行时，部署端检查目标当前已启用的 Live 版本，并创建版本固定的子运行。子运行成功后，调用方接收它声明的业务输出。子工作流中的等待属于子运行；父运行取消或失败时，尚未完成的后代运行也会被取消。

不允许自调用和递归调用链。草稿可以保留当前不可用的目标，但实际执行仍需要符合条件的已发布目标。调用工作流节点不支持普通任务的重试策略。

Agent 和代码节点也可以使用明确声明的工作流工具。详见 [Agent](https://openflow.run/zh-cn/docs/nodes/agent/index.md) 和[代码节点](https://openflow.run/zh-cn/docs/nodes/code/index.md)。

## 资料来源

*   [docs/authoring/node-authoring.md](https://github.com/oomol-lab/open-flow/blob/e25a738d170322734572a0b8a1323cb00b9d355a/docs/authoring/node-authoring.md)
*   [docs/control/contracts/control-api.md](https://github.com/oomol-lab/open-flow/blob/e25a738d170322734572a0b8a1323cb00b9d355a/docs/control/contracts/control-api.md#call-workflow)
*   [docs/architecture.md](https://github.com/oomol-lab/open-flow/blob/e25a738d170322734572a0b8a1323cb00b9d355a/docs/architecture.md#workflow-calls)
*   [packages/open-flow/src/workbench/browser/runtime/editor/addNodeOptions.ts](https://github.com/oomol-lab/open-flow/blob/e25a738d170322734572a0b8a1323cb00b9d355a/packages/open-flow/src/workbench/browser/runtime/editor/addNodeOptions.ts)
