> ## Documentation Index
> Fetch the complete documentation index at: https://enterprise-docs.dify.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# 开始

> 收集用户输入以启动 Workflow 和 Chatflow 应用程序

开始节点允许你定义从终端用户收集哪些内容作为应用程序的输入。

应用程序 **按需** 运行，可通过用户直接交互或 API 调用启动。

你还可以将这些应用程序发布为独立的 Web 应用程序，通过后端服务 API 公开它们，或在其他 Dify 应用程序中作为工具使用。

<Info>
  每个应用程序画布只能包含一个开始节点。
</Info>

## 输入变量

### 预设

预设输入变量由系统定义，默认可用。

* `sys.files`：终端用户运行应用程序时上传的文件。

  <Note>
    对于 Workflow 应用程序，此预设变量已被视为 **遗留** 变量，仅为向后兼容而保留。

    我们建议使用 [自定义文件输入字段](#文件输入) 来收集用户文件。
  </Note>

* `sys.query`（仅限 Chatflow）：从用户最新对话轮次自动捕获的文本消息。

### 自定义

你可以在开始节点中配置自定义输入字段，以收集不同类型的用户输入。每个字段都会成为下游节点可以引用的变量。

<Info>
  **标签名称** 会显示给你的终端用户。
</Info>

<Tip>
  若字段的值是你已知的（如产品标识符或租户 ID），且无需由终端用户输入，可将其标记为 **隐藏**，自行提供值。详见 [隐藏并预填输入字段](#隐藏并预填输入字段)。
</Tip>

#### 文本输入

<Tabs>
  <Tab title="短文本">
    接受最多 256 个字符。用于姓名、电子邮件地址、标题或任何单行的简短文本输入。
  </Tab>

  <Tab title="段落">
    允许无长度限制的长文本。它为用户提供多行文本区域，用于详细响应或描述。
  </Tab>
</Tabs>

#### 结构化输入

<Tabs>
  <Tab title="选择">
    显示带有预定义选项的下拉菜单。用户只能从列出的选项中选择，确保数据一致性并防止无效输入。
  </Tab>

  <Tab title="数字">
    仅限数值输入，适用于数量、评分、ID 或任何需要数学处理的数据。
  </Tab>
</Tabs>

#### 文件输入

<Tabs>
  <Tab title="单个文件">
    允许用户上传任何支持类型的一个文件，可以从设备上传或通过文件 URL。上传的文件作为包含文件元数据（名称、大小、类型等）的变量可用。
  </Tab>

  <Tab title="文件列表">
    支持一次上传多个文件。它适用于批量处理文档、图像或其他文件。

    <Tip>
      使用列表操作节点来过滤、排序或提取上传文件列表中的特定文件以进行进一步处理。
    </Tip>
  </Tab>
</Tabs>

**文件处理**

由于开始节点仅收集文件，不读取或解析其内容，上传的文件必须由后续节点适当处理。例如：

* 文档文件可以路由到文档提取器节点以进行文本提取，以便 LLM 能够理解其内容。

* 图像可以发送到具有视觉能力的 LLM 节点或专门的图像处理工具节点。

* CSV 或 JSON 等结构化数据文件可以使用代码执行节点进行解析和转换。

<Tip>
  当用户上传混合类型的多个文件（例如，图像和文档）时，你可以使用列表操作节点按文件类型分离它们，然后将它们路由到不同的处理分支。
</Tip>

## 隐藏并预填输入字段

工作流有时需要一些你已知的输入，让终端用户手动填写只会增加摩擦。可将此类字段标记为 **隐藏**：值由你预先填好，终端用户看不到该字段，而工作流仍能拿到值。

假设你的公司有多个产品的落地页，每个页面都嵌入了 AI 聊天机器人。这些聊天机器人背后的工作流基本相同，只是处理的产品不同。

与其为每个产品维护一个独立的工作流，不如只用一个，并为其添加隐藏的 `productName` 字段，然后为各个落地页预填不同的值。在终端用户看来，每个页面都有专属的产品聊天机器人，但实际上各个页面只是向同一个工作流传入了不同的 `productName`。

<Warning>
  隐藏字段 **并不保密**。字段值会出现在 URL 查询字符串中，浏览器地址栏、历史记录和网络流量中都能看到。凭据和 API 密钥需改用 [环境变量](/zh/3.1.x/learn/key-concepts#变量)。
</Warning>

<Info>
  单个文件和文件列表字段不支持此功能。
</Info>

<Steps>
  <Step title="启用功能">
    1. 在 **编辑变量** 窗口中，取消勾选 **必填**（若已勾选）。这两个选项互斥。
    2. 勾选 **隐藏**。

    隐藏字段不会显示在 **预览** 面板中。若需在发布前测试流程，可暂时取消勾选 **隐藏**。
  </Step>

  <Step title="预填字段值">
    1. 发布应用。
    2. 根据终端用户访问应用的方式，选择对应的方法。

           <Tabs>
             <Tab title="可分享的链接">
               适用于终端用户通过链接直接打开 WebApp 的场景。

               将隐藏字段作为 URL 查询参数追加到 WebApp 链接之后即可，可自行编写，也可让第三方系统自动生成：

               ```text wrap theme={null}
               {WEBAPP_URL}?{VARIABLE_NAME}={VALUE}&{VARIABLE_NAME}={VALUE}

               # 示例：{WEBAPP_URL}/chat/abc123?productName=Acme&region=us-east
               ```

               <Note>
                 含空格或特殊字符的值需要 URL 编码（例如 `Acme Corp` 写作 `Acme%20Corp`）。
               </Note>

               <Accordion title="示例：CRM 自动填入客户 ID">
                 客服团队可在 CRM 的工单回复模板中，将 `?customerId={{customer.id}}` 追加到 WebApp URL 末尾。

                 客服发送链接时，CRM 会自动替换成实际的客户 ID，聊天机器人无需再询问即可识别客户。
               </Accordion>
             </Tab>

             <Tab title="在网站中嵌入">
               适用于将应用以 iframe 或脚本形式嵌入网站的场景。

               在网站的嵌入脚本中，把每个隐藏字段加到 `window.difyChatbotConfig` 的 `inputs` 对象里。写入固定值时所有访客拿到相同的预填内容；在渲染时根据页面上下文动态计算，则每位访客拿到各自的值。

               ```html theme={null}
               <script>
                 window.difyChatbotConfig = {
                   token: 'YOUR_TOKEN',
                   inputs: {
                     productName: getCurrentProduct(),    // 来自当前页面
                     tenantId: getCurrentTenant(),        // 来自你的认证系统
                   },
                 };
               </script>
               ```
             </Tab>
           </Tabs>
  </Step>
</Steps>
