snapshot of https://github.com/twentyhq/twenty.git (main, 2026-09-17; blobs > 131072B omitted)
Some checks failed
App Prod-Parity E2E Dispatch / dispatch (push) Failing after 10s
CD Storybook UI / build (push) Failing after 3m25s
CD Storybook UI / dispatch (push) Has been skipped
CD deploy main / website-changed-files (push) Successful in 18m8s
CI Agent Skills / changed-files-check (push) Successful in 18m9s
CI Create App E2E minimal / changed-files-check (push) Successful in 24s
CI Create App / changed-files-check (push) Successful in 26s
CI Docs / changed-files-check (push) Successful in 26s
CI Emails / changed-files-check (push) Successful in 28s
CI Example App Hello World / changed-files-check (push) Successful in 23s
CI Front / changed-files-check (push) Has been skipped
CI Example App Postcard / changed-files-check (push) Successful in 27s
CI UI / changed-files-check (push) Has been skipped
CI Utils Test / changed-files-check (push) Successful in 45s
CI Twenty Apps / discover (push) Successful in 1m3s
CD deploy main / deploy-main (push) Failing after 3s
CI Agent Skills / agent-skills-validate (push) Has been skipped
CI Create App / create-app-test (lint) (push) Has been skipped
CI Emails / emails-test (push) Has been skipped
CI Front / front-task (lingui:compile) (push) Has been skipped
CI Front / front-task (lint) (push) Has been skipped
CI Example App Postcard / example-app-postcard (push) Has been skipped
CI UI / ui-task (lint) (push) Has been skipped
CI UI / ui-task (pack-size) (push) Has been skipped
CI UI / ui-task (size) (push) Has been skipped
CI UI / ui-task (test) (push) Has been skipped
CI UI / ui-task (typecheck) (push) Has been skipped
CI Utils Test / utils-test (push) Has been skipped
CI Twenty Apps / ${{ matrix.app.name }} (push) Has been skipped
CI Emails / ci-emails-status-check (push) Successful in 2s
CI Example App Hello World / ci-example-app-hello-world-status-check (push) Successful in 2s
CI Example App Postcard / ci-example-app-postcard-status-check (push) Successful in 3s
CI UI / ui-sb-test (push) Has been skipped
CI Utils Test / ci-utils-test-status-check (push) Successful in 2s
CI Twenty Apps / ci-twenty-apps-status-check (push) Successful in 2s
CI UI / ci-ui-status-check (push) Successful in 2s
CI Desktop / desktop (push) Failing after 1m8s
Push docs to Crowdin / Push documentation to Crowdin (push) Failing after 55s
Push translations to Crowdin / Extract and upload translations (push) Failing after 5s
Push website translations to Crowdin / Extract and upload website translations (push) Failing after 5s
CI Create App / create-app-test (test) (push) Has been skipped
CI Create App / create-app-test (typecheck) (push) Has been skipped
CI Docs / docs-lint (push) Has been skipped
CI Example App Hello World / example-app-hello-world (push) Has been skipped
CI Front / front-task (lingui:extract) (push) Has been skipped
CI Front / front-task (test) (push) Has been skipped
CI Front / front-task (typecheck) (push) Has been skipped
CI UI / ui-sb-build (push) Failing after 1m32s
CI Twenty Apps / ${{ matrix.app.name }} (${{ matrix.server-source }}) (push) Has been skipped
CI Agent Skills / agent-skills-publish (push) Has been skipped
CI Create App / ci-create-app-status-check (push) Successful in 2s
CI Agent Skills / agent-skills-remote-source (push) Has been skipped
CI Create App E2E minimal / create-app-e2e-minimal (push) Has been cancelled
CI E2E Main / e2e-test (push) Has been cancelled
CI Front / front-sb-build (push) Has been cancelled
CI Front / front-build (push) Has been cancelled
CI Create App E2E minimal / ci-create-app-e2e-minimal-status-check (push) Has been cancelled
CI E2E Main / ci-e2e-main-status-check (push) Has been cancelled
CI E2E Main / notify-main-ci-failure (push) Has been cancelled
CI E2E Main / qa-scout-comment (push) Has been cancelled
CI Front / front-sb-test (push) Has been cancelled
CI Front / front-sb-screenshots (push) Has been cancelled
CI Front / ci-front-status-check (push) Has been cancelled
DPA Sub-Processor Sync / sync-subprocessors (push) Failing after 3s
AI Catalog Sync / sync-catalog (push) Failing after 2s

This commit is contained in:
upstream-mirror
2026-09-17 23:28:13 +05:00
commit e7da97194a
32688 changed files with 4208681 additions and 0 deletions

View File

@@ -0,0 +1,30 @@
---
title: AI 代理
description: 将 AI 功能直接集成到您的自动化工作流中。
---
## 概览
将 AI 功能直接集成到您的自动化工作流中,以实现智能数据处理和决策。
## 功能
| 功能 | 描述 |
| --------- | ------------------- |
| **AI 操作** | 将 AI 驱动的步骤添加到任何工作流中 |
| **数据充实** | 自动使用外部数据充实记录 |
| **分类** | 基于内容分析对记录进行分类 |
| **摘要** | 从文本字段生成摘要 |
| **自定义提示** | 精确定义 AI 如何处理您的数据 |
## 使用场景
* **线索评分**:自动为入站线索打分并设定优先级
* **数据清理**:标准化公司名称和联系信息
* **电子邮件草稿**:基于会议记录生成后续电子邮件
* **记录路由**:根据内容将记录分配给合适的团队成员
## 相关内容
* [工作流概览](/l/zh/user-guide/workflows/overview) — 自动化基础
* [AI 权限](/l/zh/user-guide/ai/capabilities/permissions-access-control) — AI 代理的访问控制

View File

@@ -0,0 +1,37 @@
---
title: AI 聊天机器人
description: 一个智能助手,帮助你使用自然语言与 CRM 数据进行交互。
---
## 概览
用自然语言和助手检索并解释您的 CRM 数据。
## 功能
| 功能 | 描述 |
| ---------- | ------------------------ |
| **自然语言查询** | 无需构建筛选器,直接用英文提问 |
| **完全数据访问** | 在你的工作区内查询记录、关系和指标 |
| **页面上下文** | 可根据你当前的视图引用“这家公司”或“这个商机” |
| **对话式** | 后续问题会保留之前查询的上下文 |
## 交互示例
### 查找记录
* "显示所有超过 $50,000 的商机"
* "查找我过去 2 周未发送过电子邮件的联系人"
* "列出医疗保健行业的公司"
### 获取洞察
* "我的销售管道总价值是多少?"
* "上个月成交了多少笔交易?"
* "哪个阶段滞留的商机最多?"
### 使用页面上下文
* "总结我与此人的互动" (在联系人页面)
* "与这家公司关联的商机有哪些?" (在公司页面)
* "这笔交易上次是什么时候更新的?" (在商机页面)

View File

@@ -0,0 +1,137 @@
---
title: MCP服务器
description: 使用 Model Context Protocol 将 AI 助手连接到你的 Twenty 工作区。
---
Twenty 提供一个 [MCP](https://modelcontextprotocol.io/) 服务器,使 AI 助手——Claude Desktop、Claude Code、Cursor、ChatGPT 等——能够通过自然语言读取和写入您的 CRM 数据。
将您的**工作区 URL**(用于访问 Twenty 的 URL)用作 MCP 端点。 在 Twenty Cloud 上,您的工作区 URL 可能是 `https://{mycompany}.twenty.com`,也可能是自定义域名。 服务器可通过以下地址访问:
| 环境 | MCP 端点 |
| ------- | -------------------------------------------------------------------------- |
| **云端** | `https://{your-workspace-url}/mcp` (例如 `https://mycompany.twenty.com/mcp`) |
| **自托管** | `https://{your-domain}/mcp` |
## 身份验证方法
您可以通过两种方式对 MCP 客户端进行身份验证:**OAuth**(推荐)或 **API 密钥**。
### 选项 A — OAuth(推荐)
使用 OAuth 时,您的 MCP 客户端会打开浏览器窗口供您登录。 不会在配置文件中存储任何机密,令牌会自动刷新。
<Note>
OAuth 需要支持[MCP 授权规范](https://modelcontextprotocol.io/specification/2025-03-26/basic/authorization)的 MCP 客户端。 Claude Desktop、Claude Code、Cursor 和 ChatGPT 均支持它。
</Note>
将以下内容添加到 MCP 客户端配置中,并将 `{your-workspace-url}` 替换为您的工作区主机(例如 `mycompany.twenty.com`):
```json
{
"mcpServers": {
"twenty": {
"type": "streamable-http",
"url": "https://{your-workspace-url}/mcp"
}
}
}
```
就这样——无需 API 密钥。 客户端首次连接时将:
1. 通过 `/.well-known/oauth-protected-resource` 和 `/.well-known/oauth-authorization-server` 发现 Twenty 的 OAuth 元数据
2. 通过动态客户端注册(RFC 7591)将自身注册为 OAuth 客户端
3. 打开您的浏览器以授权访问
4. 接收令牌并连接到 MCP 服务器
后续连接会重用已存储的令牌并自动刷新。
### 选项 B — API 密钥
如果您的 MCP 客户端不支持 OAuth,或您更喜欢静态凭据,请在 `Authorization` 请求头中传递 API 密钥:
```json
{
"mcpServers": {
"twenty": {
"type": "streamable-http",
"url": "https://{your-workspace-url}/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}
```
<Warning>
您的 API 密钥可访问工作区数据。 请不要将其纳入版本控制,也不要放入共享的 dotfiles。
</Warning>
要创建 API 密钥,请前往 **Settings → MCP & APIs → API → + Create key**。 详见[API](/l/zh/developers/extend/api#create-an-api-key)。
## 快速开始
### 1. 复制配置
在 Twenty 中前往 **Settings → MCP & APIs → MCP**。 选择您的身份验证方式(OAuth 或 API 密钥),复制 JSON 片段(其中已包含您的工作区 URL),并将其粘贴到 MCP 客户端的配置文件中。
| 客户端 | 配置文件位置 |
| ------------------ | ----------------------------------------------------------------------------------------------------------------------------------- |
| **Claude Desktop** | `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) 或 `%APPDATA%\Claude\claude_desktop_config.json` (Windows) |
| **Claude Code** | `~/.claude.json` (用户) 或 `.mcp.json` (项目) |
| **Cursor** | 在您的项目中为 `.cursor/mcp.json`,或全局为 `~/.cursor/mcp.json` |
| **ChatGPT** | 在 **Settings → Apps & Connectors → Advanced settings** 中开启开发者模式,然后在 **Settings → Apps & Connectors** 中使用 **Create** 添加 MCP 服务器 |
### 2. 连接
重启您的 MCP 客户端(或重新加载配置)。 如果使用 OAuth,您将被重定向到 Twenty 以授权访问。 如果使用 API 密钥,连接会立即建立。
### 3. 开始使用
让您的 AI 助手与您的 CRM 交互:
* *"给我展示最近创建的 5 家公司"*
* *"在 Acme Corp 新建一位名为 Jane Doe 的联系人"*
* *"查找所有价值超过 $10k 的未关闭商机"*
## 可用工具
连接后,MCP 服务器会提供与 Twenty API 一一对应的工具。 推荐的工作流程是:
1. **`learn_tools`** — 获取特定工具的输入模式
2. **`execute_tool`** — 运行工具
您无需记住工具名称。 询问您的 AI 助手它能做什么,它会自动调用 `learn_tools`。
## 权限
MCP 连接将继承已通过身份验证的用户(OAuth)的权限,或继承分配给 API 密钥的角色。 要限制 MCP 服务器的操作范围:
* **OAuth**:生效的是该用户在工作区中的角色。
* **API 密钥**:在 **Settings → Members → Roles** 下为该 API 密钥分配角色。 参见[权限](/l/zh/user-guide/permissions-access/capabilities/permissions)。
## 自托管配置
对于自托管实例,请将 `{your-workspace-url}` 替换为您的服务器 URL。 请确保您环境中的 `SERVER_URL` 与 Twenty 实例的公共 URL 一致——该值用于生成 OAuth 发现元数据。
```bash
SERVER_URL=https://twenty.yourcompany.com
```
MCP 端点、OAuth 端点以及发现元数据都基于该值生成。
## 故障排除
**"Unauthorized" 或 401 错误**
* OAuth:清除 MCP 客户端中存储的令牌并重新连接以重新授权。
* API 密钥:验证该密钥有效且未过期。 如有需要,请重新生成。
**OAuth 流程未打开浏览器**
* 确保您的 MCP 客户端支持 MCP 授权。 如果不支持,请改用 API 密钥方法。
**连接超时**
* 确认从您的机器可以访问 MCP 端点 URL。 对于自托管实例,请检查服务器是否正在运行,并确认 `SERVER_URL` 设置正确。

View File

@@ -0,0 +1,35 @@
---
title: 权限与访问控制
description: 控制 AI 代理在您的工作区中可以访问和修改的内容。
---
## 概览
AI 代理遵循您现有的权限结构。 对于希望精确控制自动化 AI 流程在其工作区中能够访问或修改内容的团队来说,这一点尤为重要。
## 将角色分配给 AI 代理
1. 转到 **设置 → 成员 → 角色**
2. 单击您要分配的角色
3. 打开 **分配** 选项卡
4. 在 **AI 代理** 下,单击 **+ 分配给 AI 代理**
5. 从列表中选择 AI 代理
6. 确认分配
## 为什么要将角色分配给 AI 代理?
| 优势 | 描述 |
| -------- | ------------------ |
| **安全** | 限制 AI 代理可以访问或修改的数据 |
| **合规** | 确保 AI 代理仅处理其所需的数据 |
| **控制** | 防止 AI 自动化执行非预期操作 |
| **可审计性** | 跟踪各项操作由哪个 AI 代理执行 |
<Note>
对于在工作流中运行的 AI 代理,角色分配可确保该代理无法访问或修改其预期范围之外的数据—即使该工作流具有更广泛的权限。
</Note>
## 相关
* [权限](/l/zh/user-guide/permissions-access/capabilities/permissions) — 有关创建和管理角色的详细信息
* [AI 代理](/l/zh/user-guide/ai/capabilities/ai-agents) — 工作流中的 AI 功能

View File

@@ -0,0 +1,31 @@
---
title: AI 常见问题
description: 关于 Twenty 中 AI 功能的常见问题。
---
<AccordionGroup>
<Accordion title="有哪些可用的 AI 功能?">
AI 的两项主要功能是:
1. **AI 聊天机器人**:一个具备上下文感知能力的助手,可访问你的 Twenty 数据并协助你进行查询
2. **工作流中的 AI 代理**:智能自动化功能,能够在你的工作流内处理数据、做出决策并执行任务
</Accordion>
<Accordion title="AI 代理会访问我所有的数据吗?">
AI 代理人是在许可系统下运作的。 你可以在 **设置 → 成员 → 角色** 下为 AI 代理分配特定角色,从而完全控制其可访问的数据以及可以执行的操作。
</Accordion>
<Accordion title="AI 额度如何运作?">
AI 操作会根据任务的复杂度和所使用的 AI 模型消耗工作流额度。
</Accordion>
<Accordion title="我可以使用自己的 AI 模型吗?">
在云端,你只能使用 Twenty 提供的 AI 模型。 在你的自托管实例中,获取 Organization 许可证后,你可以使用自己的 AI 模型。
</Accordion>
<Accordion title="我看不出我分配给一个 AI 代理人的角色在哪里?">
默认情况下,角色列表会被过滤为仅显示可分配给工作区成员的角色。 如果一个角色只能分配给AI 代理,您需要更改过滤器以包含AI代理角色。
</Accordion>
</AccordionGroup>

View File

@@ -0,0 +1,58 @@
---
title: AI
description: Twenty 中的 AI 驱动功能。
---
<Frame>
<img src="/images/user-guide/workflows/robot.png" alt="AI" />
</Frame>
## 功能
当前,Twenty 提供:
### 1. AI 聊天机器人
一款能理解你的上下文并可访问你在 Twenty 中所有数据的对话式助手。
**关键功能:**
* **完整数据访问**:查询你工作区中的任何记录、关系或指标
* **页面上下文感知**:可根据你在 Twenty 中所处的位置引用 "this company" 或 "this opportunity"
* **自然语言**:无需在菜单中导航即可提问并获得答案
**示例提示:**
* "本月将要成交的商机有哪些?"
* "哪些交易在谈判阶段已超过 30 天?"
* "总结我与此人的互动"
### 2. 工作流中的 AI 代理
通过由 AI 驱动的操作和自主代理扩展你的工作流。
**关键功能:**
* **AI 操作**:使用 AI 丰富数据、分类记录、生成摘要等
* **自主代理**:允许代理在工作流内执行多步任务
* **自定义提示词**:精确定义 AI 应如何处理你的数据
**使用场景:**
* 自动分类入站线索
* 从公共来源丰富公司数据
* 基于会议记录生成后续电子邮件草稿
* 根据互动模式为商机评分
## 权限与访问控制
AI 代理通过现有的权限系统进行管理:
1. 转到 **设置 → 成员 → 角色**
2. 配置每个 AI 代理可访问的数据
3. 为每个对象设置读/写权限
这可确保 AI 代理遵守你的数据治理策略,并且只访问其所需的数据。
* 关注我们的 [GitHub](https://github.com/twentyhq/twenty) 获取开发更新
* 加入我们的 [Discord](https://discord.gg/UfGNZJfAG6) 分享反馈和功能需求

View File

@@ -0,0 +1,74 @@
---
title: 积分
description: 一个简单的余额,为你的工作流、AI 代理和 AI 聊天提供支持——涵盖积分的价值、可用范围,以及管理方式。
---
## 什么是积分?
积分是一种统一的余额,用于支付我们代表你运行且实际产生成本的所有内容:**工作流自动化**、**AI 代理** 和 **AI 聊天**。 你无需再同时处理“自动化运行次数”和“AI 令牌”的单独配额,而只需关注一个简单的余额。
**1 积分 = $1 的用量。** 一个积分就相当于一美元的用量,因此你的余额很好理解——不需要折算任何抽象单位。
## 一个积分能用多少?
成本会随着工作量而变化。 日常自动化和快速 AI 消息只会消耗极小部分积分;大型的多步骤 AI 代理任务则会消耗更多积分。 大致情况如下:
| 你要做什么 | 大致花费 | 含义 |
| --------------------------------------------------- | ------------------- | -------------------- |
| 运行标准工作流程步骤 (搜索、创建或更新记录) 或触发应用程序逻辑函数 | $0.0001 | **每个积分可运行 10,000 次** |
| 调用一个外部 API 或运行一个代码节点 | 一个积分的一小部分 | 每个积分可运行数千次 |
| 发送一条快速 AI 聊天消息或执行一个简单的 AI 步骤 | 几分之一美分 | 每个积分可运行数百次 |
| 运行一个大型 AI 代理任务(例如 "configure 10 workspace objects") | 成本可能高达 **约 $1 或更多** | 每个积分可运行几次 |
| 运行一次 AI 网络搜索 | 按每次搜索收取固定费用 | 每个积分可进行数百次搜索 |
<Note>
对大多数团队来说,标准自动化几乎等同于免费——只有在大量使用 AI 功能或运行高负载代码节点时,你的积分余额才会出现明显消耗。 这是有意为之:包含的积分旨在让你在构建时无需时刻盯着计量表。
</Note>
<Note>
并非每个应用都会对其运行收费。 通话录制器和最后联系人对导入到您工作区的每个电子邮件和日历事件做出反应,所以他们的逻辑函数运行是免费的。 你仍然需要为它们执行的按量计费工作付费,例如已记录的通话分钟数。
</Note>
## AI 使用如何计量
当某个操作调用 AI 模型时,我们会精确测量所使用的 token 数量,并按**模型提供商公布的费率**计价,然后将该美元金额直接折算为积分——因此你消耗的积分对应的是实际工作成本,而不是经过加价的内部费率。 一条简短的聊天消息只会花费几分之一美分。 一个庞大的代理任务——例如配置10个工作空间物体——在一个日益增长的环境中进行了许多模式呼叫。 这样它就可以添加到一美元或更多。 你的计费完全基于实际使用量,精确到单个 token。
成本会因模型而异:轻量模型每条消息的价格远低于顶级推理模型。 你可以在 **设置 → 账单** 中查看每个操作的详细拆分——包括使用了哪种模型。
## 包含内容
每个订阅都包含积分,数量取决于你的**计费周期**,而不是订阅套餐:
| 计费周期 | 包含的积分 | 等效使用 |
| ---- | ----- | ------------ |
| 每月 | 5/月 | 每月约 $5 的使用量 |
| 每年 | 50/年 | 每年约 $50 的使用量 |
这些积分旨在从容覆盖日常自动化。 五个信用额度涵盖成千上万标准自动化步骤或数百个快速的 AI 信息——尽管其中有少数几个。 多步骤代理任务可以更快地使用它们。 你可以随时充值(见下文)。
## 积分结转
未使用的积分会自动结转到下一个计费周期。
* **Cap**: Rollover 被限制在一个周期的全额分配上,所以您将永远不会超过您的计费周期为每个周期提供的时间。
* **可见性**:当结转积分可用时,它们会在 **设置 → 账单** 中显示为单独的 **结转积分** 一行,并与 **可用总额** 余额并列。
## 监测使用情况
随时掌握你的积分余额及其去向:
1. 前往 **设置 → 账单**
2. 查看你的**剩余积分**和**当前周期的使用量**
3. 深入查看明细,了解哪些工作流和 AI 操作在消耗积分,以及这些 AI 操作使用了哪些模型
定期查看这些信息,可以让你及早发现高负载的工作流,并决定是对其进行优化还是充值。
## 需要更多积分吗?
如果你的积分用完了——或者在进行大规模自动化之前想要多一些余量——可以随时购买额外积分包:
1. 前往 **设置 → 账单**
2. 点击 **增加** 按钮
3. 选择您需要的金额并接受更改
购买的积分会立即计入你的可用余额。

View File

@@ -0,0 +1,100 @@
---
title: 定价方案
description: 了解 Twenty 的定价方案以及如何在它们之间切换。
---
## 概览
无论您选择云托管还是自托管,Twenty 为各种规模的团队提供灵活的定价。
## 云端方案
### Pro(云端)
适用于准备扩展的团队:
* 所有核心 CRM 功能
* 电子邮件和日历同步
* 工作流和自动化
* 标准支持
<Note>
高级功能(SSO、行级权限、AI 使用数据等)不包含在 Pro 方案中。
</Note>
### 组织计划(云端)
适用于具有高级需求的大型团队:
* 包含 Pro 的全部内容
* **高级功能**:SSO 集成、行级权限、AI 使用数据等
* 优先支持
## 自托管方案
### 免费(自托管)
在您自己的基础设施上免费部署 Twenty:
* 包含所有 Pro 功能
* 通过 Discord 获得社区支持
* 对您的数据拥有完全控制权
### 组织计划(自托管)
适用于在自托管同时需要高级功能的团队:
* 所有 Pro 功能
* **高级功能**:SSO 集成、行级权限、AI 使用数据等
* Twenty 团队支持
* 分发前无需将自定义代码开源
## 高级功能
高级功能仅在组织计划(云端或自托管)中提供:
* **SSO 集成**:与您的身份提供商进行单点登录
* **行级权限**:在记录级别进行细粒度访问控制
* **AI 使用数据**:在整个工作区跟踪 AI 消耗
* **审计日志**:查看每位工作区成员的操作记录
* **电子邮件营销活动**:规划需要发送的电子邮件(即将可用)
* **无限工作区**:创建任意数量的工作区(仅限自托管)
* **私有源代码**:无需将更改发布到公开可用的代码库(仅限自托管)
## 切换计划
### 升级到组织计划
1. 前往**设置 → 结算 → 方案**
2. 点击**切换到组织计划**
3. 确认升级
### 降级到 Pro
1. 前往**设置 → 结算 → 方案**
2. 单击 **切换到 Pro 方案**
3. 确认降级
### 切换至年度计费
1. 前往**设置 → 结算**
2. 单击 **升级为按年计费**
3. 使用年度计费可节省费用
### 切换为按月计费
1. 前往**设置 → 结算**
2. 单击 **降级为按月计费**
3. 通过按月计费节省费用
## 为 Organization (Self-Hosted) 获取企业密钥
要使用 Organization (Self-Hosted) 方案,您需要获取企业密钥:
1. 转到 **设置 → 管理员面板 → 企业版**
<img src="/images/user-guide/billing/enterprise-key.png" alt="企业密钥" />
2. 单击 **获取企业密钥**
3. 当您被重定向到 Stripe 时,输入您的付款信息并确认
4. 当显示出您的企业密钥时,将其粘贴到企业版设置页面并激活 Organization 许可证

View File

@@ -0,0 +1,105 @@
---
title: 账单常见问题
description: 关于 Twenty 定价和账单的常见问题。
---
## 定价
<AccordionGroup>
<Accordion title="自托管的情况下,我可以免费使用Twenty吗?">
是的,自托管时您可以免费使用Twenty。 除了我们的核心团队的支持之外,您将能够访问所有包含在Pro (Cloud)计划中的内容。 支持可通过我们的Discord社区获得。
如果您希望自行托管并需要高级功能(SSO、行级权限等),可以选择付费的 Organization(自托管)许可证。 这还包括来自 Twenty 团队的支持,并取消在分发前将自定义代码以开源形式发布的要求。
</Accordion>
<Accordion title="高级功能有哪些?">
高级功能仅适用于 Organization 计划(云端或自托管):
* **SSO 集成**:与您的身份提供商进行单点登录
* **行级权限**:在记录级别进行细粒度的访问控制
* **AI 使用数据**:在整个工作区跟踪 AI 消耗
* **审计日志**:查看每位工作区成员的操作记录
* **电子邮件营销活动**:规划需要发送的电子邮件(即将可用)
* **无限工作区**:创建任意数量的工作区(仅限自托管)
* **私有源代码**:无需发布更改到公开可用的存储库 (仅自托管)
</Accordion>
<Accordion title="云端和自托管组织也计划这样做?">
它们提供相同的高级功能。 但是,云端订阅不能用于自托管部署。 自托管需要 Enterprise 密钥。
</Accordion>
<Accordion title="你们是否为只读用户提供免费席位?">
我们不提供免费席位。 每个用户定价,每个用户需要许可证才能访问 20。
</Accordion>
<Accordion title="我在哪里可以将我的订阅切换到组织计划?">
您可以在 `Settings → Billing → Plans` 下进行操作。 然后点击`切换到组织计划`。
</Accordion>
<Accordion title="我在哪里可以将我的订阅切换到Pro计划?">
您可以在 `Settings → Billing → Plans` 下进行操作。 然后点击 `Switch to Pro`。
</Accordion>
<Accordion title="我在哪里可以将我的订阅切换到包年?">
您可以在`设置 → 账单`下进行操作。 然后点击 `Upgrade to yearly`。
</Accordion>
<Accordion title="我在哪里可以将我的订阅切换到包月?">
您可以在`设置 → 账单`下进行操作。 然后点击 `Downgrade to monthly`。
</Accordion>
<Accordion title="我在哪里可以查看我的信用使用情况?">
您将在`设置 → 账单`下找到此内容。
</Accordion>
<Accordion title="我们有多少工作流积分?">
积分以您的计费周期为准,而非您的计划:
* **按月订阅**:每月5积分
* **按年订阅**:每年50积分
</Accordion>
<Accordion title="工作流积分的消耗是如何运作的?">
每个工作流程操作根据其复杂性消耗积分:
* **基本内部操作** (例如搜索、更新或创建记录) 消耗极少数积分
* **更复杂的操作**如代码节点和对外部服务的请求消耗更多积分
* **AI 提示**也会根据使用情况消耗更多积分
* **Apps** 也消耗更多的信用,类似于代码节点
当工作流或应用执行时,积分会实时扣除。 您可以在**设置 → 账单**中监控您的使用情况以跟踪消耗和剩余积分。
</Accordion>
<Accordion title="我可以购买更多的工作流积分吗?">
您可以在`设置 → 账单`下购买额外的积分。
</Accordion>
<Accordion title="我可以只为 1 个月购买更多的工作流积分吗?">
是的,前往`设置 -> Billing`,单击`提升`按钮,选择你想要多少积分,然后确认。 他们将在目前的计费期内提出申请。 然后再次单击"提升"按钮,将该值更改为原始值, 确认——降级将从下一个计费期开始。
</Accordion>
</AccordionGroup>
## 账单
<AccordionGroup>
<Accordion title="我在哪里可以管理账单细节?">
您可以在`设置 → 账单`下进行操作。
</Accordion>
<Accordion title="我在哪里可以更新我的支付方式?">
您可以在`设置 → 账单`下进行操作。 然后点击`查看账单详情`。 在那里您可以添加新的支付方式。
</Accordion>
<Accordion title="我在哪里可以更新我的账单信息?">
您可以在`设置 → 账单`下进行操作。 然后点击`查看账单详情`。 在那里您可以编辑账单信息。
</Accordion>
<Accordion title="我在哪里可以访问我的发票?">
您可以在`设置 → 账单`下进行操作。 然后点击`查看账单详情`。 您将看到屏幕底部的所有发票。
</Accordion>
<Accordion title="为什么我的席位数与工作区中的用户数不同?">
工作区席位数量每 6 小时与支付系统同步一次;发票会根据差额进行调整。
</Accordion>
<Accordion title="为什么我收到了关于新工作区成员的发票?">
当一个新的工作区成员被添加到工作区时,将发出一份发票来弥补差额。 当移除某个工作区成员时,更改会在下一张标准的月度/年度发票中生效。
</Accordion>
</AccordionGroup>

View File

@@ -0,0 +1,39 @@
---
title: 账单
description: 了解 Twenty 的定价并管理你的订阅。
---
Twenty 提供灵活的定价方案,满足你的团队需求。 你可以在 **设置 → 账单** 中管理订阅、跟踪工作流额度并访问发票。
## 本节内容
<CardGroup cols={2}>
<Card title="定价方案" icon="tags" href="/l/zh/user-guide/billing/capabilities/pricing-plans">
了解 Twenty 的定价方案及其包含内容。
</Card>
<Card title="常见问题" icon="circle-question" href="/l/zh/user-guide/billing/how-tos/billing-faq">
关于定价和账单的常见问题。
</Card>
</CardGroup>
## 一览
| 计划 | 关键功能 |
| ----------- | --------------------------------------------------------------- |
| **免费(自托管)** | 包含所有 Pro 功能,社区支持 |
| **Pro(云端)** | 除高级功能(SSO、行级权限等)外的所有功能,提供标准支持 |
| **组织(云端)** | 包含 Pro 的所有功能 + 高级功能(SSO、行级权限等),优先支持 |
| **组织(自托管)** | 包含 Pro 的所有功能 + 高级功能(SSO、行级权限等),Twenty 团队支持,分发前无需将你的自定义代码以开源形式发布 |
## 快速解答
**我在哪里管理账单?**
前往 **设置 → 账单** 查看你的套餐、更新支付方式并访问发票。
**我可以免费使用 Twenty 吗?**
可以! 自托管 Twenty,可免费获得所有 Pro 功能。
**如何升级?**
前往 **设置 → 账单**,点击 **切换到组织版** 或 **切换为年付**。
更多问题,请查看[账单常见问题](/l/zh/user-guide/billing/how-tos/billing-faq)。

View File

@@ -0,0 +1,43 @@
---
title: 日历
description: 了解 Twenty 中的日历集成功能。
---
**注意**:要连接您的日历并配置同步设置,请访问[电子邮件和日历设置](/l/zh/user-guide/calendar-emails/overview)。
## 日历集成如何运作
Twenty 会自动同步您的日历事件,并将其链接到相关的 CRM 记录,让您全面了解与联系人和公司的会议历史。
## 日历选项卡
在记录的“邮件”选项卡旁,您将看到一个`日历`选项卡,其中包含与该记录安排的会议历史。
### 适用于
* **联系人**:查看与特定联系人安排的所有会议
* **公司**:查看与公司及其员工有关的所有会议
* **机会**:访问与该机会所关联公司的会议历史
### 查看会议历史
1. **导航至某一记录**:前往任何联系人、公司或机会记录
2. **选择日历选项卡**:点击`日历`选项卡,位于邮件选项卡旁边
3. **浏览会议历史**:查看所有安排的会议及其详细信息
4. **访问会议上下文**:查看会议参与者、时间和相关信息
## 可见性设置
日历数据遵循与电子邮件相同的可见性设置,确保在这两种通信渠道中保持一致的隐私控制。
## 同步内容
* **外部会议**:与组织外部联系人的所有会议
* **自动链接**:根据与会者的电子邮件地址,将会议链接到现有的联系人和公司记录
* **会议详细信息**:主题、时间、时长和参与者
* **更新**:新的日历事件会自动同步
## 不同步的内容
* **内部会议**:仅与同事(同一域)进行的会议保持私密
* **私密事件**:在您的日历中标记为私密的事件

View File

@@ -0,0 +1,102 @@
---
title: 邮箱
description: 了解 Twenty 中的电子邮件集成功能。
---
**注意**:要连接您的电子邮件账户并配置同步设置,请访问[电子邮件和日历设置](/l/zh/user-guide/calendar-emails/overview)。
## 电子邮件集成如何运作
Twenty自动将来自您已连接邮箱的电子邮件链接到相关的CRM记录,将所有通信历史保存在一个位置。
### 包含电子邮件的对象
电子邮件会话出现在三个主要对象中:
* **联系人**:查看与特定联系人的所有电子邮件
* **公司**:查看与公司及其员工有关的所有电子邮件
* **Opportunities**: 访问与企业关联的电子邮件线程。 来自参与该商机的个人的电子邮件会话尚未显示。
### 查看电子邮件线程
1. **导航至某一记录**:前往任何联系人、公司或机会记录
2. **选择邮件选项卡**:单击`邮件`选项卡以查看同步的电子邮件
3. **打开电子邮件线程**:点击任意电子邮件以打开并阅读完整的对话
4. **浏览历史记录**:滚动查看该联系人的完整电子邮件历史
<img src="/images/user-guide/emails/show-inbox.png" style={{width:'100%'}} />
## 您将会看到什么
### 电子邮件线程视图
打开电子邮件线程时,您可以:
* **阅读完整对话**:查看完整的电子邮件交流
* **查看参与者**:查看电子邮件线程中所有参与者
* **检查时间戳**:准确了解每封电子邮件的发送时间
* **访问上下文**:了解完整的通讯历史
### 电子邮件可见性
根据您的邮箱设置,您可能会看到:
* **完整内容**:完整的电子邮件文本和详细信息
* **主题+元数据**:主题行、发件人、收件人和时间戳
* **仅元数据**:没有电子邮件内容的基本信息
## 电子邮件同步行为
### 同步速率
Twenty 导入邮件的速度约为**每分钟 400 封**。 该速率目前受 Gmail API 速率限制(其他提供商也有类似限制)。
供参考:
* 1,000 封邮件 → ~2.5 分钟
* 10,000 封邮件 → ~25 分钟
* 50,000 封邮件 → ~2 小时
### 同步内容
* **外部电子邮件**:与组织外部联系人的所有电子邮件
* **自动链接**:将电子邮件连接到现有的联系人和公司记录
* **多地址**:任何地址发来的电子邮件都链接到同一联系人记录
* **更新**:新电子邮件会立即显示
### 不同步的内容
* **内部电子邮件**:默认情况下,同事之间(同一域名)的电子邮件将保持私密(可在 设置 → 通用 → 安全 中配置)
* **群发邮件**:分发列表和群发邮件被排除
* **排除文件夹**:您选择不进行同步的文件夹(配置于 设置 → 帐户 → 电子邮件)
### 内部电子邮件
选择是否在 Twenty 中同步内部电子邮件:
1. 转到 **设置 → 通用 → 安全**
2. 将 **同步内部电子邮件** 开关开启/关闭
### 选择性文件夹同步
控制哪些电子邮件文件夹与Twenty同步:
1. 前往**设置 → 账户**并选择您已连接的电子邮件账户
2. 在电子邮件部分配置文件夹
3. 选择特定文件夹进行包含或排除(收件箱、已发送、归档、自定义文件夹)
## 电子邮件同步故障排除
### 常见同步问题
* **同步延迟**:电子邮件会立即显示,但初始导入需要更长时间
* **丢失的电子邮件**:检查以下几项:
* 在您消息文件夹设置中排除的文件夹
* 自动创建联系人被禁用(电子邮件需要现有的Twenty记录)
* 电子邮件来自同事(同一域)或群发列表
* 邮箱仍在完成初次同步
### 电子邮件限制
* **系统文件夹**:某些电子邮件文件夹可能无法同步
* **别名**:只能连接真实邮箱(而不是电子邮件别名)

View File

@@ -0,0 +1,25 @@
---
title: 我可以从 Twenty 预订会议吗?
description: 关于直接从 Twenty 预订会议的信息。
---
## 当前状态
Twenty 的日历集成旨在**同步并显示**你现有的日历事件。
## 通过工作流安排会议
虽然无法手动安排会议,但你可以在 Twenty 中使用工作流来安排会议。
1. 创建新的工作流
2. 根据你的需求选择任意触发器
3. 添加 **创建日历事件** 节点
4. 配置所有必要的数据
5. 激活工作流
## 你可以做什么
* **在“人员”、“公司”和“机会”记录中查看会议历史**
* **在你的 CRM 中查看与联系人的即将举行的会议**
* **跟踪会议上下文**,与电子邮件沟通一并查看
* **从会议参与者中自动创建联系人**

View File

@@ -0,0 +1,53 @@
---
title: 我可以从 Twenty 发送电子邮件吗?
description: 关于直接从 Twenty 发送电子邮件的信息。
---
## 当前状态
Twenty 的电子邮件集成旨在**同步并显示**你的电子邮件历史记录,并用于撰写和发送电子邮件。
当你在记录页面查看电子邮件会话并点击**回复**时,你可以直接撰写并发送电子邮件。
## 如何从 Twenty 发送消息
前提条件:已连接具有发送电子邮件功能的邮件账户
1. 使用 **Ctrl+K** 或 **Cmd+K** 快捷键打开 Command 菜单
2. 点击 "Compose email" 选项
3. 选择收件人,并为电子邮件添加主题、正文和附件
4. 点击 "Send" 按钮发送电子邮件
## 你现在可以做什么
* **在“人员”、“公司”和“机会”记录中查看电子邮件历史**
* **在你的 CRM 中阅读与联系人的完整电子邮件会话**
* **与日历事件一并跟踪沟通上下文**
* **从电子邮件互动中自动创建联系人**
* **通过重定向进行回复** — 点击“回复”跳转到你的邮箱
## 通过工作流发送电子邮件
你**可以使用工作流自动发送电子邮件**。 这在以下场景中很有用:
* 自动跟进
* 向联系人发送通知
* 基于记录更改触发的沟通
通过工作流发送的电子邮件将通过你已连接的邮箱账户发送。
→ 了解[“发送电子邮件”操作](/l/zh/user-guide/workflows/capabilities/workflow-actions#send-email)
## 电子邮件序列和新闻通讯
对于电子邮件序列和新闻通讯,我们建议使用工作流将 Twenty 连接到专用的电子邮件营销工具。
<Warning>
为保护你的域名信誉,不应直接从你的邮箱发送群发邮件。 请使用专用工具进行批量沟通。
</Warning>
→ 请参阅[如何通过工作流发送电子邮件](/l/zh/user-guide/workflows/capabilities/send-emails-from-workflows)以获取设置说明
## 未来计划
在 Twenty 内原生撰写电子邮件已在我们的路线图上。 加入我们的[GitHub 讨论](https://github.com/twentyhq/twenty/discussions),分享你的用例并帮助我们为此功能确定优先级。

View File

@@ -0,0 +1,35 @@
---
title: 我可以在所有对象上跟踪电子邮件活动吗?
description: 了解跨不同对象的电子邮件活动跟踪。
---
## 受支持的对象
电子邮件活动目前适用于**三个标准对象**:
| 对象 | 您将会看到什么 |
| ------ | -------------------------- |
| **人员** | 与该特定联系人往来的所有电子邮件 |
| **公司** | 与该公司任何人之间的所有电子邮件(基于电子邮件域名) |
| **机会** | 与该商机关联的公司相关的电子邮件 |
## 为什么只有这些对象?
人员、公司和商机是核心关系对象,电子邮件上下文在其中最能发挥价值。 电子邮件会话将根据以下内容自动关联:
* **电子邮件地址** → 匹配到人员记录
* **电子邮件域名** → 匹配到公司记录
* **公司关系** → 关联到商机
## 自定义对象
**自定义对象不支持电子邮件跟踪**(目前)。
如果您需要在自定义对象上使用电子邮件上下文,请考虑:
* 使用关系字段将您的自定义对象链接到人员或公司
* 在关联的人员/公司记录上查看电子邮件历史
## 未来计划
我们正在考虑将电子邮件可见性扩展到自定义对象。 在我们的[GitHub 讨论](https://github.com/twentyhq/twenty/discussions)中分享您的用例,以帮助确定该功能的优先级。

View File

@@ -0,0 +1,42 @@
---
title: 每位用户可连接多个邮箱
description: 为单个用户连接多个电子邮件账户。
---
## 概览
Twenty 支持**每个用户拥有无限多个电子邮件账户**。 如果你需要管理多个收件箱,这将非常有用,例如:
* 个人工作邮箱 + 团队共享收件箱
* 多个面向客户的电子邮件地址
* 针对不同角色使用不同的电子邮件账户
## 如何添加多个邮箱
1. 前往**设置→账户**
2. 点击**添加账户**
3. 连接一个额外的 Google 或 Microsoft 帐号,或任何其他支持 IMAP/SMTP 协议的邮件服务提供商
4. 配置此邮箱的同步设置
5. 对每个你想连接的邮箱重复上述步骤
## 管理多个账户
每个已连接的邮箱都有各自的设置:
* **电子邮件可见性**:选择团队成员可以看到的内容
* **联系人自动创建**:可按邮箱启用/禁用
* **文件夹选择**:选择要同步的文件夹
## 电子邮件如何显示
来自所有已连接邮箱的电子邮件会同步到 Twenty,并显示在:
* **联系人记录**:基于联系人的电子邮件地址
* **公司记录**:基于电子邮件域名
* **商机**:基于关联公司
<Note>每封电子邮件都会显示其是从哪个邮箱发送或在哪个邮箱中接收的,因此你可以跟踪每次沟通使用的是哪个账户。</Note>
## 重要说明
<Warning>只能连接真实的邮箱。 将邮件转发到其他邮箱的电子邮件别名无法单独连接——它们会通过主邮箱进行同步。</Warning>

View File

@@ -0,0 +1,53 @@
---
title: 我在记录中看不到邮件
description: 排查记录中缺失的邮件。
---
## 常见原因
### 1. 初始同步仍在进行中
邮件同步需要时间,尤其是邮箱较大时。 Twenty 导入邮件的速度约为**每分钟 400 封**(受 Gmail API 速率限制)。
* **日历同步**:几分钟内完成
* **邮件同步**:取决于邮箱大小(例如,10,000 封邮件 ≈ 25 分钟,50,000 封邮件 ≈ 2 小时)
**解决方案**:等待初始导入完成。 你可以根据邮箱大小预估所需时间。
### 2. Twenty 中不存在该联系人
邮件只会显示在已存在的联系人记录上。 如果尚未创建联系人:
* 在邮箱设置中启用**联系人自动创建**
* 或先手动创建联系人记录
**解决方案**:前往 **Settings → Accounts**,选择你的邮箱并启用联系人自动创建。
### 3. 内部邮件不参与同步
为维护隐私,同事之间的邮件(相同邮件域名)绝不会同步。
**解决方案**:这是预期行为。 仅同步外部邮件。
### 4. 邮件来自群组或通讯组
群组邮件和通讯组不参与同步。
**解决方案**:这是预期行为。
### 5. 未选择用于同步的文件夹
如果你正在使用消息文件夹功能,某些文件夹可能被排除。
**解决方案**:前往 **Settings → Accounts**,选择你的邮箱并检查文件夹同步设置。
### 6. 记录中的邮箱地址错误
联系人记录中的邮箱地址可能与邮件中使用的不一致。
**解决方案**:将正确的邮箱地址添加到联系人记录。
## 仍然无法正常工作?
1. 尝试断开并重新连接你的邮箱
2. 如果问题仍然存在,请联系支持

View File

@@ -0,0 +1,58 @@
---
title: 限制导入的电子邮件
description: 控制哪些电子邮件被导入Twenty。
---
## 概览
默认情况下,Twenty 会从您已连接的邮箱同步所有外部电子邮件。 您可以使用**文件夹选择**和**可见性设置**来限制导入的内容。
## 方法一:文件夹选择(推荐)
控制哪些电子邮件文件夹与Twenty同步:
1. 进入 **设置 → 账户**
2. 选择您已连接的电子邮件账户
3. 选择要同步的文件夹:
| 文件夹 | 描述 |
| ---------- | ----------- |
| **收件箱** | 主要的收件电子邮件 |
| **已发送** | 您发送的外发电子邮件 |
| **存档** | 已存档的电子邮件 |
| **自定义文件夹** | 您想要的任何特定文件夹 |
4. 排除您不希望同步的文件夹(垃圾邮件、回收站、个人文件夹)
<Note>这使您可以精确控制哪些电子邮件显示在您的CRM中,而无需同步所有内容。</Note>
## 方法二:联系人自动创建设置
控制何时从电子邮件创建联系人:
1. 前往**设置→账户**
2. 选择您已连接的邮箱
3. 选择一个选项:
* **已停用**:不会创建联系人,但电子邮件仍会同步到现有联系人。
* **已发送和已接收**:从所有外部电子邮件创建联系人
* **仅限已发送**:仅根据您发送的电子邮件创建联系人
## 内部电子邮件
同事之间(同一域名)的邮件可以在 Twenty 中同步:
1. 转到 **设置 → 通用 → 安全**
2. 将 **同步内部电子邮件** 开关开启/关闭
<Note>默认情况下,此选项处于关闭状态。</Note>
## 始终排除的内容
无论设置如何,这些电子邮件都不会被同步:
* **群组邮件**:分发列表和群组消息
* **垃圾邮件/回收站**:系统文件夹通常会被排除
## 重要提示
<Note>我们暂时尚未提供用于选择性同步的 CC 电子邮件地址。 请使用上面的文件夹选择功能来实现同等程度的控制。</Note>

View File

@@ -0,0 +1,144 @@
---
title: 日历与电子邮件
description: 将您的电子邮件和日历账户连接到 Twenty。
---
## 连接选项
### Google账号(Gmail和Google日历)
1. 转到 **设置 → 账户**
2. 点击**添加账户**
3. 选择**继续使用Google**
4. 授权 Twenty 访问您的 Gmail 和 Google 日历
5. 配置电子邮件同步设置(可见性、自动创建)→ 点击 **下一步**
6. 配置日历同步设置(可见性、自动创建)→ 点击 **添加账户**
7. 您的电子邮件和日历事件将自动开始同步
### Microsoft 账户(Outlook 和 Microsoft 日历)
1. 转到 **设置 → 账户**
2. 点击**添加账户**
3. 选择**继续使用Microsoft**
4. 授权 Twenty 访问您的 Outlook 和 Microsoft 日历
5. 配置电子邮件同步设置(可见性、自动创建)→ 点击 **下一步**
6. 配置日历同步设置(可见性、自动创建)→ 点击 **添加账户**
7. 您的电子邮件和日历事件将自动开始同步
### IMAP/SMTP/CalDAV设置(其他提供商)
对于其他电子邮件和日历提供商:
1. 前往**设置→账户**
2. 配置 IMAP 设置以同步接收邮件,并配置 SMTP 设置以发送邮件
3. 配置日历的CalDAV设置
4. 测试连接
<Note>
**在物理隔离或内部网络中自托管**:默认情况下,Twenty 会拒绝到私有/内部 IP 地址的出站连接(SSRF 保护)。 如果你的邮件或日历服务器运行在本地/私有 IP 上(例如局域网中的本地部署服务器),与其的连接将会被阻止。 要允许这些连接,请在服务器上设置以下环境变量:
```
OUTBOUND_HTTP_SAFE_MODE_ENABLED=false
```
这会为**所有**出站请求(HTTP 工作流操作、Webhook,以及 IMAP/SMTP/CalDAV 连接)禁用安全模式,因此只应在无需 SSRF 保护的受信任、隔离网络中进行此设置。
</Note>
### 多个邮箱
* **无限账户**:每用户可连接多个电子邮件账户
* **账户管理**:在不同邮箱之间切换
* **同步设置**:为各邮箱配置不同设置
<Warning>
只能连接真正的邮箱(如:support@domain.com及其独立收件箱)。 电子邮件别名转发到其他邮箱不能连接到Twenty。
</Warning>
## 电子邮件配置
### 邮件可见性
为您的电子邮件选择不同的可见性级别:
* **仅元数据**:仅分享基本信息(发件人、收件人、日期、时间)
* **主题和元数据**:分享主题行以及元数据
* **所有电子邮件内容**:分享全部电子邮件内容,包括附件
### 联系人自动创建
* **已停用**:无自动联系人创建
* **发送和接收消息**:为所有外部电子邮件交互创建联系人
* **仅用于发送的消息**:仅为您发送的电子邮件创建联系人
* **注意**:默认情况下,内部电子邮件(所有参与者都使用你的域名)不会被同步,以保护隐私
<Note>启用后,联系人会根据其电子邮件域名自动关联到其公司记录。 如果该公司尚不存在,Twenty 会为您创建该公司。</Note>
<Note>
**同步内部电子邮件**:"未同步内部电子邮件" 的行为是默认设置,但可以关闭。 该切换位于高级设置中:
1. 打开 **设置**,并在设置页面底部启用 **高级** 切换开关
2. 转到 **常规 → 安全**
3. 启用 **同步内部电子邮件** 切换开关,以包含所有参与者共享同一域名的电子邮件
这是一个针对整个工作区的设置(对大学或共享域组织非常有用)。
</Note>
### 通过消息文件夹选择控制哪些电子邮件同步
控制哪些电子邮件文件夹与Twenty同步:
1. 前往**设置 → 账户**并选择您已连接的电子邮件账户
2. 选择要同步的文件夹:
* **收件箱**:主要的收入电子邮件
* **已发件箱**:您发送的外发电子邮件
* **自定义文件夹**:您希望包含的任意特定文件夹
* **排除文件夹**:跳过像垃圾邮件、垃圾桶或个人文件夹这样的文件夹
这样您无需同步所有内容,即可精确控制哪些电子邮件会出现在您的客户关系管理系统中。
**同步内容**:
* **外部电子邮件**:所有具有外部联系人的电子邮件来自选择的文件夹
* **内部电子邮件**:默认不进行同步(同域邮件保留隐私)。 在 **设置** 底部启用 **高级** 切换开关,然后在 **常规 → 安全** 下打开 **同步内部电子邮件**,即可在整个工作区内将其包含在内。
* **附件**:2026年H1推出
**注意**:我们不提供选择性同步的CC电子邮件地址。 相反,使用上述消息文件夹功能来实现同样水平的电子邮件同步控制。
## 日历配置
### 事件可见性
选择其他用户在您的工作区中可见的内容:
* **Everything**:整个事件的详细信息将与您的团队分享
* **Metadata**:只有日期和参与者将共享给您的团队
### 会议的联系人自动创建
* **是**:自动为非CRM中的会议参与者创建联系人
* **否**:仅将会议链接到现有联系人
<Note>启用后,联系人会根据其电子邮件域名自动关联到其公司记录。 如果该公司尚不存在,Twenty 会为您创建该公司。</Note>
### 控制哪些事件被同步
* **会议导入**:自动导入日历事件
* **联系人链接**:将会议链接到人员和公司记录
**同步内容**:
* **会议**:包含外部参与者的日历事件
* **联系人链接**:事件自动链接到CRM记录
* **团队事件**:共享日历可见性
## 同步频率
**每5分钟更新**:电子邮件和日历数据在首次导入后每5分钟自动同步。
<Note>
**初始同步耗时**: 日历同步完成很快 (通常在几分钟内),而对于大型邮箱,邮件同步耗时更长。 Twenty 以约**每分钟 400 封**的速度导入邮件 (受 Gmail API 速率限制),因此包含 10,000 封邮件的邮箱大约需要 25 分钟。 如果您看到来自日历事件的联系人早于电子邮件联系人出现,请不必担心;这是正常行为。
</Note>
## 下一步
* [邮箱功能](/l/zh/user-guide/calendar-emails/capabilities/mailbox)
* [排查缺失的电子邮件](/l/zh/user-guide/calendar-emails/how-tos/i-dont-see-emails-on-records)

View File

@@ -0,0 +1,275 @@
---
title: 图表设置
description: 配置您的图表,使其按您的需求准确显示数据。
---
import { ChartIcon } from '/snippets/chart-icon.mdx';
## 访问图表设置
1. 单击仪表盘右上角的 **编辑** 按钮
<img src="/images/user-guide/dashboard/dashboard-edit.png" alt="编辑模式" />
2. 仪表盘进入编辑模式
3. 单击任意小部件以选择它
4. 右侧将打开设置面板
设置分为以下部分:
* **数据**:要提取哪些数据以及如何筛选
* **X 轴**:如何对类别进行分组和排序(柱状图/折线图)
* **Y 轴**:要度量什么以及如何显示(柱状图/折线图)
* **样式**:颜色、标签和视觉选项
<Note>
某些设置仅在配置了其他设置时才会出现。 例如,仅当您选择了日期字段时,才会显示 **日期粒度**。
</Note>
---
## 数据设置
### <span style={{ display: 'inline-flex', alignItems: 'center', gap: '8px' }}> <ChartIcon icon="database" />来源 </span>
选择要从哪个对象提取数据。
1. 单击 **来源**
2. 选择一个对象(商机、人员、公司等)
您所有的标准对象和自定义对象都可用。 更改来源会重置其他设置,因为字段选项取决于所选对象。
<img src="/images/user-guide/dashboard/dashboard-chart-settings-source.png" alt="来源" />
### <span style={{ display: 'inline-flex', alignItems: 'center', gap: '8px' }}> <ChartIcon icon="filter" />筛选器 </span>
限定图表中包含的记录。
1. 单击 **Filter**
2. 将打开筛选器构建器
3. 单击 **+ 添加筛选器**
4. 选择字段、条件和值
5. 根据需要添加更多筛选器
筛选器的用法与表格视图中的相同。 使用它们聚焦于数据的特定分段。
**示例**:筛选阶段等于“赢单”的商机,仅显示已成交的交易。
<img src="/images/user-guide/dashboard/dashboard-chart-settings-filters.png" alt="过滤" />
<Tip>
对于日期字段,尝试使用 **相对** 来创建会自动更新的动态筛选,如“过去 7 天”或“本月”。
</Tip>
<Tip>
支持高级筛选——可添加多个筛选规则,并使用 **And** 或 **Or** 逻辑进行组合。
</Tip>
---
## X 轴设置
这些设置用于控制柱状图和折线图的横轴——通常用于定义数据如何分组为各个类别。
### <span style={{ display: 'inline-flex', alignItems: 'center', gap: '8px' }}> <ChartIcon icon="axis-x" />显示的数据 </span>
选择用于对数据分组的字段。 这将决定 X 轴上显示的类别。
**示例**:选择“阶段”以按销售流程阶段分组查看数据;或选择“创建日期”以按时间查看数据。
<img src="/images/user-guide/dashboard/dashboard-chart-settings-x-data-on-display.png" alt="显示的数据" />
### <span style={{ display: 'inline-flex', alignItems: 'center', gap: '8px' }}> <ChartIcon icon="calendar" />日期粒度 </span>
按日期字段分组时,选择用于分组的时间粒度。
| 选项 | 分组方式 | 示例输出 |
| ---------- | -------- | ------------------------- |
| **日** | 按日历中的每一天 | 1 月 1 日、1 月 2 日、1 月 3 日…… |
| **周** | 按日历周 | 第 1 周、第 2 周、第 3 周…… |
| **月** | 按日历月 | 1 月、2 月、3 月…… |
| **季度** | 按财务季度 | Q1、Q2、Q3、Q4 |
| **年** | 按日历年 | 2023、2024、2025 |
| **星期几** | 星期几(汇总) | 星期一、星期二…… (将所有星期一合并) |
| **年份中的月份** | 月份(汇总) | 1 月、2 月…… (将所有 1 月合并) |
| **年度的季度** | 季度(汇总) | Q1、Q2、Q3、Q4(将所有 Q1 合并) |
“周/年中”的选项会跨所有时间进行汇总。 使用 **星期几** 查看通常哪一天的成交量最多。 使用 **月份** 按月查看趋势。
### <span style={{ display: 'inline-flex', alignItems: 'center', gap: '8px' }}> <ChartIcon icon="arrows-sort" />排序方式 </span>
控制 X 轴上类别的顺序。
* **位置** – 使用您在选择字段设置中定义的顺序
* **按字母顺序** – A 到 Z(对于日期为按时间顺序)
* **按数值** – 按度量值排序(最高或最低优先)
* **手动** – 通过拖动设置自定义顺序
<img src="/images/user-guide/dashboard/dashboard-chart-settings-x-sort.png" alt="排序" />
**提示**:对于销售流程阶段,使用 **位置** 按您的销售流程顺序显示各阶段(线索 → 合格 → 方案 → 赢单)。
<Note>
显示的选项取决于字段类型。 选择字段包含所有选项;日期和文本字段的选项较少。
</Note>
<Tip>
使用 **手动** 排序时,可拖动类别以创建自定义顺序——非常适合突出特定分段或用数据讲述故事。
</Tip>
### <span style={{ display: 'inline-flex', alignItems: 'center', gap: '8px' }}> <ChartIcon icon="eye-off" />省略零值 </span>
隐藏值为零或没有数据的类别。
* **开启**:隐藏没有记录的类别
* **关闭**:显示所有类别,即便为空
使用此选项可清理数据稀疏的图表。
---
## Y 轴设置
这些设置控制要度量的内容及其显示方式。
### <span style={{ display: 'inline-flex', alignItems: 'center', gap: '8px' }}> <ChartIcon icon="axis-y" />显示的数据 </span>
选择字段和运算来计算度量值。
* **计数** – 计数全部、计数为空、计数非空、计数唯一值
* **数学** – 求和、平均值、最小值、最大值(数字字段)
* **百分比** – 空值百分比、非空百分比
布尔字段会增加“计数 true/false”。 带日期字段的汇总图表会显示“最早/最晚”。
**示例**:选择“金额”并使用“求和”以查看每个类别的交易总额,或使用“计数全部”查看交易数量。
<img src="/images/user-guide/dashboard/dashboard-chart-settings-y-data-on-display.png" alt="显示的数据" />
<Note>
显示的选项取决于您的字段和图表类型。 如果未看到预期的运算,请检查字段类型。
</Note>
### 比例
对于选择、多选或布尔字段,您可以计算特定取值所占的百分比。
1. 选择一个选择、多选或布尔字段
2. 启用 **比率**
3. 选择要度量的选项
**示例**:将“赢单”交易显示为占所有商机的百分比。 如果共有 50 个且其中 10 个为赢单,则图表显示 20%。
### <span style={{ display: 'inline-flex', alignItems: 'center', gap: '8px' }}> <ChartIcon icon="filters" />分组依据 </span>
添加第二个维度以创建多个系列(多根柱/多条线)。
1. 先设置 X 轴字段
2. 单击 **分组依据**
3. 选择第二个字段
**示例**:按阶段(X 轴)和所有者(分组依据)对交易进行分组,以并排查看每个人的销售流程拆分。
<img src="/images/user-guide/dashboard/dashboard-chart-settings-y-group-by.png" alt="分组依据" />
设置“分组依据”后,图表将显示多种颜色,并出现图例。
### <span style={{ display: 'inline-flex', alignItems: 'center', gap: '8px' }}> <ChartIcon icon="calendar" />日期粒度 </span>
当“分组依据”为日期字段时,选择时间粒度(与 X 轴相同的选项)。
### <span style={{ display: 'inline-flex', alignItems: 'center', gap: '8px' }}> <ChartIcon icon="arrows-sort" />排序方式 </span>
设置 **分组依据** 后,可控制分组系列的顺序(例如在每个类别中哪个所有者的柱先显示)。
与 X 轴排序的选项相同——位置、按字母顺序和手动——但对于二级分组,**不提供基于数值的排序**。
### <span style={{ display: 'inline-flex', alignItems: 'center', gap: '8px' }}> <ChartIcon icon="chart-bar-popular" />累计 </span>
显示累计总和,而非单个值。
* **关闭**:每个柱/点显示自身的数值
* **开启**:每个柱/点显示其自身与之前所有数值之和
**示例**:1 月 = 10,2 月 = 15
* 关闭累计:显示 10 和 15
* 开启累计:显示 10 和 25(10 + 15)
使用累计可随时间跟踪目标进展。
<img src="/images/user-guide/dashboard/dashboard-chart-settings-y-cumulative.png" alt="累计" />
### <span style={{ display: 'inline-flex', alignItems: 'center', gap: '8px' }}> <ChartIcon icon="math-min" />最小范围 / <ChartIcon icon="math-max" />最大范围 </span>
为 Y 轴设置固定的最小值和最大值。
* 留空以自动缩放
* 输入数字以固定边界
**适用场景:**
* 将最小值设为 0 以进行准确的视觉比较
* 同时设置两者以在多个图表间保持一致的刻度
* 同时设置两者以聚焦特定数值范围
---
## 样式设置
### <span style={{ display: 'inline-flex', alignItems: 'center', gap: '8px' }}> <ChartIcon icon="color-swatch" />颜色 </span>
为图表设置配色方案。 可从多种颜色调色板中选择。
<Note>
按选择字段分组时,图表会自动使用字段设置中为各选项定义的颜色。
</Note>
### <span style={{ display: 'inline-flex', alignItems: 'center', gap: '8px' }}> <ChartIcon icon="gizmo" />轴名称 </span>
选择要显示的轴标签:**无**、**X 轴**、**Y 轴** 或 **两者**(仅适用于柱状图和折线图)。
### <span style={{ display: 'inline-flex', alignItems: 'center', gap: '8px' }}> <ChartIcon icon="stack-2" />堆叠柱/堆叠线 </span>
设置“分组依据”后,选择多个系列的显示方式。
* **关闭(分组显示)**:系列并排显示。 适用于比较各组之间的确切数值。
* **开启(堆叠)**:系列相互堆叠显示。 适用于展示构成——各部分如何组成整体。
**示例**:按阶段统计的交易,按所有者分组
* 分组显示:并排查看每位所有者的确切数值
* 堆叠显示:查看各阶段的交易总量,并叠加展示每位所有者的贡献
### <span style={{ display: 'inline-flex', alignItems: 'center', gap: '8px' }}> <ChartIcon icon="badge-2k" />数据标签 </span>
在图表元素(柱、点、扇区)上直接显示数值。
* **开启**:在图表上显示数值
* **关闭**:不显示数值(更简洁)
### <span style={{ display: 'inline-flex', alignItems: 'center', gap: '8px' }}> <ChartIcon icon="text-caption" />图例 </span>
显示或隐藏图例(仅在设置了“分组依据”时出现)。
* **开启**:图例显示每种颜色所代表的含义
* **关闭**:不显示图例
<Tip>
将鼠标**悬停**在图例项上可高亮显示该分组。 **单击** 可在图表中临时隐藏该分组。
</Tip>
---
## 图表特定说明
### 饼图
* <span style={{ display: 'inline-flex', verticalAlign: 'middle' }}><ChartIcon icon="chart-pie" size={16} /></span> **每个扇区表示** – 定义扇区的分组方式
* <span style={{ display: 'inline-flex', verticalAlign: 'middle' }}><ChartIcon icon="eye-off" size={16} /></span> **隐藏空类别** – 移除零值扇区
* <span style={{ display: 'inline-flex', verticalAlign: 'middle' }}><ChartIcon icon="number-123" size={16} /></span> **在中心显示数值** – 显示汇总值(求和、平均、计数等)
### 汇总图表
* <span style={{ display: 'inline-flex', verticalAlign: 'middle' }}><ChartIcon icon="caret-left" size={16} /></span> **前缀** – 在数字前添加文本(例如“$”)
* <span style={{ display: 'inline-flex', verticalAlign: 'middle' }}><ChartIcon icon="caret-right" size={16} /></span> **后缀** – 在数字后添加文本(例如“%”)

View File

@@ -0,0 +1,92 @@
---
title: 仪表板
description: 使用选项卡创建并组织仪表板,以可视化你的 CRM 数据。
---
## 概览
Twenty 中的仪表板按层级组织:**仪表板 → 选项卡 → 小部件**。 每个仪表板可包含多个选项卡,每个选项卡包含小部件(图表、数字、iFrame)。
## 创建仪表板
1. 前往导航中的 **仪表板**
2. 点击 **+ 新建记录**
<img src="/images/user-guide/dashboard/dashboard-create-new.png" alt="创建新的仪表板" />
3. 为你的仪表板命名
4. 开始添加选项卡和小部件
## 使用选项卡
选项卡可帮助你将仪表板组织为逻辑部分。
### 创建选项卡
1. 在编辑模式下,点击标签栏中的 **+**,侧面板将在右侧打开
2. 为你的选项卡命名(例如,"销售管道概览"、"团队绩效")
3. 向该选项卡添加小部件
### 重新排序选项卡
1. 在编辑模式下,点击并按住你要移动的选项卡
2. 拖放到新位置
3. 您也可以单击标签页并使用命令菜单将标签移至左侧或右侧。
### 删除选项卡
1. 在编辑模式下,点击你要删除的选项卡
2. 点击命令菜单中的 **删除** 按钮
### 复制选项卡
1. 点击你要复制的选项卡
2. 点击侧边面板中的 **复制** 按钮
<img src="/images/user-guide/dashboard/dashboard-tabs.png" alt="仪表板选项卡" />
## 仪表板布局
### 排列小部件
* 拖放以定位
* 调整大小以突出重点
* 将相关图表分组在一起
### 复制仪表板
1. 选择你要复制的仪表板
2. 按 **Cmd + K** 打开命令栏(Windows 上为 **Ctrl + K**)
3. 选择 **复制仪表板**
<img src="/images/user-guide/dashboard/dashboard-duplicate.png" alt="复制仪表板" />
### 最佳实践
* **逻辑流程**:按从概览到细节的顺序排列
* **视觉层级**:关键指标使用更大的图表
* **样式一致**:使用协调的颜色和字体
## 可见性与访问
### 仪表板可见性
凡能访问你的 Twenty 工作区的所有人都可以查看仪表板。 目前没有私有仪表板选项。
### 收藏夹
你可以将仪表板添加到收藏以便快速访问。 这是个人设置——你的收藏对其他用户不可见。
要将仪表板添加到收藏,打开该仪表板并点击星形图标。
### 时区行为
仪表板目前根据查看者的时区显示数据。 这意味着,不同地区的团队成员(例如,APAC 与 US)看到的同一仪表板可能会显示不同的指标。
<Note>
**即将推出**:我们将新增为仪表板设置特定时区的功能,这样无论用户身在何处,所有人看到的数据都将保持一致。
</Note>
<Note>
**即将推出**:仪表板级别的筛选器将允许你一次性对所有小部件应用筛选,从而更快速地探索你的数据。
</Note>

View File

@@ -0,0 +1,169 @@
---
title: 小部件
description: 探索 Twenty 中的小部件类型和可视化选项。
---
import { ChartIcon } from '/snippets/chart-icon.mdx';
## 可用小部件
Twenty 提供多种小部件类型,用于可视化您的 CRM 数据。
### <span style={{ display: 'inline-flex', alignItems: 'center', gap: '8px' }}><ChartIcon icon="chart-bar-popular" />条形图</span>
以水平或垂直条形显示数据。
<Frame>
<img src="/images/user-guide/dashboard/dashboard-widget-bar-chart.png" alt="条形图" />
</Frame>
**适用于:**
* 比较不同类别的数值
* 显示排名
* 按时间段跟踪指标
**示例用法:**
* 按阶段的交易
* 按销售代表的收入
* 每月新增联系人
<Note>
**显示限制**:使用 Group By 时,条形图最多可显示 100 个条形,每个条形最多 50 个分组。 如果您看到警告 "未显示的数据:每个图表最多 X 个条形",请添加筛选器以缩小数据范围,或更改分组方式(例如按周分组而非按天)。
</Note>
### <span style={{ display: 'inline-flex', alignItems: 'center', gap: '8px' }}><ChartIcon icon="chart-pie" />饼图</span>
显示整体中各部分所占比例。
<Frame>
<img src="/images/user-guide/dashboard/dashboard-widget-pie-chart.png" alt="饼图" />
</Frame>
**适用于:**
* 展示构成或分布
* 比较部分与整体
* 突出显示主要部分
**示例用法:**
* 按来源划分的交易分布
* 联系人按行业细分
* 按负责人划分的销售管道构成
### <span style={{ display: 'inline-flex', alignItems: 'center', gap: '8px' }}><ChartIcon icon="chart-line" />折线图</span>
显示随时间变化的趋势。
<Frame>
<img src="/images/user-guide/dashboard/dashboard-widget-line-chart.png" alt="折线图" />
</Frame>
**适用于:**
* 跟踪随时间的变化
* 识别趋势
* 比较多个指标
**示例用法:**
* 每月交易数量趋势
* 各季度收入增长
* 随时间变化的活动水平
### <span style={{ display: 'inline-flex', alignItems: 'center', gap: '8px' }}><ChartIcon icon="sum" />汇总图表</span>
以醒目方式显示单个关键数值。
<Frame>
<img src="/images/user-guide/dashboard/dashboard-widget-aggregate-chart.png" alt="汇总图表" />
</Frame>
**适用于:**
* 突出显示 KPI
* 显示总计或平均值
* 快速查看状态
**示例用法:**
* 销售管道总价值
* 未关闭的商机数量
* 转化率
**高级选项:**
* **比例**:对于 Select 字段,计算各值之间的比例。 转到 **显示的数据** → 选择您的字段 → 启用 **比例** 选项。
* **前缀与后缀**:在数字前或后添加自定义文本(例如 "$" 前缀或 "%" 后缀),以提升可读性。
### <span style={{ display: 'inline-flex', alignItems: 'center', gap: '8px' }}><ChartIcon icon="frame" />iFrame</span>
将外部工具和内容直接嵌入到仪表板中。
<Frame>
<img src="/images/user-guide/dashboard/dashboard-widget-table.png" alt="表格图表" />
</Frame>
**适用于:**
* 搜索单个项目
* 检查精确数值
* 审计或参考
**示例用法:**
* 本月即将成交的交易
* 本周新增潜在客户
* 逾期发票
### <span style={{ display: 'inline-flex', alignItems: 'center', gap: '8px' }}><ChartIcon icon="table" />表格</span>
在仪表盘中直接查看已筛选的记录。
<Frame>
<img src="/images/user-guide/dashboard/dashboard-widget-iframe.png" alt="iFrame" />
</Frame>
**适用于:**
* 显示外部报告或仪表板
* 集成第三方销售工具
* 显示来自其他系统的实时内容
**示例用法:**
* 来自支持工具的指标
* 来自拨号器的指标
* 来自销售序列工具的实时内容
### <span style={{ display: 'inline-flex', alignItems: 'center', gap: '8px' }}><ChartIcon icon="align-box-left-top" />富文本</span>
在仪表板中直接添加格式化文本和内容。
<Frame>
<img src="/images/user-guide/dashboard/dashboard-widget-rich-text.png" alt="富文本" />
</Frame>
**适用于:**
* 添加上下文或说明
* 仪表板描述
* 备注和注释
**功能:**
* 富文本格式(加粗、斜体、列表等)
* 图片和文件上传
* Markdown 风格编辑
<Note>
**即将推出**:仪表图尚不可用,但已在我们的路线图中。
</Note>
### 复制小部件
1. 单击该小部件
2. 打开 **选项**
3. 单击 **复制小部件**

View File

@@ -0,0 +1,54 @@
---
title: 仪表板常见问题
description: 关于 Twenty 中仪表板的常见问题。
---
<AccordionGroup>
<Accordion title="我可以创建私有仪表板吗?">
不能。目前,凡能访问你的 Twenty 工作区的所有人都可以查看仪表板。 私有仪表板尚不可用。
</Accordion>
<Accordion title="为什么我的指标与同事的不一样?">
仪表板目前根据查看者的时区显示数据。 如果你们位于不同地区(例如 APAC 与 US),即使是同一个仪表板,看到的数值也可能略有不同。 我们正在开发按仪表板设置时区的功能,以确保跨团队的数据一致。
</Accordion>
<Accordion title="我可以导出我的仪表板吗?">
目前不支持导出仪表板。 此功能已在我们的路线图中。
</Accordion>
<Accordion title="我可以与外部用户共享仪表板吗?">
不能。目前不支持与 Twenty 工作区外的用户(非 Twenty 用户)共享仪表板。
</Accordion>
<Accordion title="如何将仪表板添加到我的收藏?">
打开你想收藏的仪表板,然后点击星形图标。 收藏是个人设置——不会影响其他用户。
</Accordion>
<Accordion title="选项卡与小部件有什么区别?">
* **选项卡**将你的仪表板组织成多个部分(类似于仪表板内的页面)
* **小部件**是每个选项卡中的独立可视化(图表、数值、iFrames)
结构:仪表板 → 选项卡 → 小部件
</Accordion>
<Accordion title="我可以一次性筛选整个仪表板吗?">
仪表板级筛选尚不可用,但该功能已在我们的路线图中。 目前需要分别对每个小部件应用筛选器。
</Accordion>
<Accordion title="是否提供仪表图?">
还不可以。 仪表图已在我们的路线图中,将在后续版本中加入。
</Accordion>
<Accordion title="如何复制一个仪表板?">
1. 请确保处于查看模式(而非编辑模式)
2. 按 **Cmd + K** 打开命令栏(Windows 上为 **Ctrl + K**)
3. 选择 **复制仪表板**
</Accordion>
<Accordion title="仪表板数据多久刷新一次?">
随着你的客户关系管理(CRM)数据变化,小部件会自动更新:
* 大多数指标实时更新
* 如有需要,可使用刷新按钮手动更新
* 历史数据会被保留以用于趋势分析
</Accordion>
</AccordionGroup>

View File

@@ -0,0 +1,67 @@
---
title: 组件常见问题
description: 常见问题与错误消息说明。
---
<AccordionGroup>
<Accordion title="如何显示百分比而不是计数?">
三种方式:
* **空值百分比/非空值百分比**: 在“显示数据”下,选择“空值百分比”或“非空值百分比”
* **比例**: 对于“选择”或“复选框”字段,启用“比例”,将某个特定选项显示为占所有记录的百分比
* **后缀**: 对于聚合图表,在“样式设置”中添加 `%` 作为后缀
</Accordion>
<Accordion title="分组与堆叠柱状图有什么区别?">
使用**分组依据**时,可以通过两种方式显示系列:
* **分组**: 柱形并排显示—最适合比较精确数值
* **堆叠**: 柱形相互叠加—最适合展示构成
在“样式设置”中切换**堆叠**选项即可。
</Accordion>
<Accordion title="为什么看不到“求和”或“平均值”选项?">
可用的运算取决于**字段类型**:
* **数字字段**: 求和、平均值、最小值、最大值
* **日期字段**: 最早、最晚(仅限聚合图表)
* **复选框字段**: 计数为真、计数为假
如果看不到某个选项,请检查是否已选择兼容的字段类型。
</Accordion>
<Accordion title="为什么某些设置显示为灰色或缺失?">
许多设置仅在满足前提条件时才会出现:
* **日期粒度**: 请先选择一个日期字段
* **分组依据、图例、堆叠**: 请先设置“来源”
* **图例、堆叠开关**: 请先设置“分组依据”
如果某个设置缺失,请先配置其前提条件。
</Accordion>
<Accordion title="“无数据”是什么意思?">
图表未找到与您的配置匹配的记录。
**解决方法:** 删除或调整筛选器,确认您选择了正确的来源对象,或检查在所选日期范围内是否存在记录。
</Accordion>
<Accordion title="“配置无效”是什么意思?">
缺少必需的设置,或存在不兼容的设置。
**解决方法:** 确保已设置来源、配置了显示数据,并选择了所需的分组字段。
</Accordion>
<Accordion title="“未显示的数据”是什么意思?">
您的数据超出显示限制(100 个柱、100 个数据点或 100 个扇区)。
**解决方法:** 添加筛选器以缩小数据范围,或将日期粒度从“天”更改为“周”或“月”。
</Accordion>
<Accordion title="为什么某个坐标轴不显示数据?">
所选字段在您的筛选条件中的记录没有值,或者字段类型与预期数据不匹配。
**解决方法:** 尝试使用其他字段,或检查记录在所选字段上是否有值。
</Accordion>
</AccordionGroup>

View File

@@ -0,0 +1,75 @@
---
title: 仪表板
description: 了解 Twenty 中报表和仪表板的基础知识。
---
## 了解仪表板
Twenty 中的仪表板提供了一种可视化方式,帮助你跟踪关键绩效指标,并从你的 CRM 数据中获取洞察。
<img src="/images/user-guide/dashboard/dashboards_v2.png" alt="仪表板" />
## 关键概念
### 仪表板
仪表板是一组选项卡的集合,可一目了然地展示你的 CRM 数据。 你可以为不同目的创建多个仪表板:
* 销售业绩
* 团队活动
* 销售管道健康状况
* 自定义指标
### 标签
选项卡可让你将仪表板组织为多个部分。 每个选项卡包含一个或多个小部件。
### 小部件
小部件是用于展示特定数据的独立可视化。 类型包括:
* 条形图
* 饼图
* 折线图
* 汇总图表
* iFrame
* 富文本
<Note>
**当前限制**:
* 目前不支持导出仪表板和与外部用户(非 Twenty 用户)共享。
* 仪表图尚不可用。
</Note>
## 开始使用
### 创建你的第一个仪表板
1. 转到 **仪表板** 部分
2. 点击 **+ 新建仪表板**
3. 为你的仪表板命名
4. 添加选项卡以组织你的内容
5. 添加小部件以展示你的数据
6. 保存
### 添加小部件
1. 在仪表板上打开一个选项卡
2. 点击 **+ 添加小部件**
3. 选择小部件类型
4. 选择数据源(对象)
5. 配置小部件设置
6. 保存并查看你的小部件
## 最佳实践
* **从简单开始**:先从几个关键指标入手,再逐步添加更多
* **聚焦可操作的数据**:展示能驱动决策的指标
* **定期审查**:定期查看你的仪表板以发现趋势
* **与团队共享**:使仪表板对相关团队成员可见
## 下一步
* [小部件与可视化](/l/zh/user-guide/dashboards/capabilities/widgets)
* [图表设置参考](/l/zh/user-guide/dashboards/capabilities/chart-settings)
* [仪表板常见问题](/l/zh/user-guide/dashboards/how-tos/dashboards-faq)

View File

@@ -0,0 +1,76 @@
---
title: 错误处理与验证
description: 在确认之前,直接在 UI 中查看并修复导入错误。
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
## 导入前验证
上传文件并完成字段映射后,Twenty 会在导入**之前**验证你的数据。 这样可以在不影响现有数据的情况下捕捉并修复错误。
## 工作原理
1. **上传**您的 CSV 文件
2. **映射**您的列到 Twenty 的字段
3. **查看**黄色高亮的潜在错误
4. 可直接在 UI 中**修复错误**
5. **确认**导入
<VimeoEmbed videoId="1145273857" title="视频演示" />
## 错误显示
存在问题的行会被高亮为**黄色**。 您可以:
* **直接编辑单元格**以修复错误
* **删除该行**以完全跳过该行
这种行内编辑可节省时间——无需返回电子表格、修复错误并重新上传。
## 常见错误类型
### 重复值
**原因**:唯一字段(电子邮件、域名)已在 Twenty 中存在,或在您的文件中出现了两次。
**修复**:
* 在导入 UI 中编辑重复值
* 删除其中一条重复的行
关于如何实施唯一性,详见[唯一性约束](/l/zh/user-guide/data-migration/capabilities/uniqueness-constraints)。
### 格式无效
**原因**:数据与期望的格式不匹配(例如,电子邮件无效、日期格式错误)。
**修复**:编辑单元格,使其符合正确格式。
请参见[字段映射](/l/zh/user-guide/data-migration/capabilities/field-mapping),了解每种字段类型的期望格式。
### 缺少必填字段
**原因**:必填字段为空。
**修复**:在必填字段中输入值,或删除该行。
### 未找到关系
**原因**:被引用的记录不存在(例如,公司域名尚未导入)。
**修复**:
* 先导入父级记录
* 或更正引用值
有关正确的导入顺序及如何关联记录,参见[导入关系](/l/zh/user-guide/data-migration/capabilities/import-relations)。
## 减少错误的建议
1. **下载模板** 以在导入文件前查看预期格式
2. 先在电子表格中,**清理您的数据**
3. **按正确顺序导入文件**以导入关系(公司 → 联系人 → 商机)
4. **用小批量进行测试**,再进行完整导入
5. 在上传前,**检查重复项**
6. **将每个文件限制为1万条记录**

View File

@@ -0,0 +1,198 @@
---
title: 字段映射
description: 数据导入期间字段映射的工作原理。
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
## 字段映射的工作原理
当您上传文件时,Twenty 会分析您的列,并尝试将其与现有字段匹配。
### 自动映射
Twenty 将根据以下内容尝试匹配列:
* 列标题名称(精确或相似匹配)
* 数据类型检测(日期、数字、电子邮件)
* 常见字段模式
<Note>**快速提示:** 从您要导入的对象中导出几行数据。 导出的文件将包含 Twenty 期望的精确列名,从而在导入时实现无缝的自动映射。</Note>
### 手动映射选项
对于每一列,您可以:
* **映射到字段**:从下拉列表中选择匹配的 Twenty 字段
* **不进行映射**:完全跳过该列(不会导入数据)
<Note>**字段必须在导入前已存在。** 导入会创建记录,而不是创建字段。 请在导入前于 **设置 → 数据模型** 中创建自定义字段。</Note>
## 字段类型兼容性
数据模型中可用的所有字段类型都支持导入。
您也可以导入 `id` 值,以便为新记录指定特定 ID,或更新现有记录。
<img src="/images/user-guide/fields/all-field-types.png" style={{width:'100%'}} />
## 数据格式要求
<Note>**某些字段有特殊语法。** 我们建议在准备导入之前下载示例文件,以查看每种字段类型的预期语法。</Note>
### 地址字段
地址是一个嵌套字段,包含多个列。 其中一些可以留空。
* **Address / Address 1**:街道地址第 1 行
* **Address / Address 2**:街道地址第 2 行
* **Address / City**:城市名称
* **Address / State**:州或省
* **Address / Country**:国家名称
* **Address / Post Code**:邮政/ZIP 编码
### 数组字段
使用以下格式:
```
["value1","value2"]
```
### 布尔字段
使用 `TRUE` 或 `FALSE`(大写),不要使用 `true` 或 `false`
### 货币字段
货币是一个**嵌套字段**,需要两列,且**两列都必须填写**:
* **Amount / Amount**:数值(例如,`1234.56`)
* **Amount / Currency**:货币代码(例如,`USD`、`EUR`)
### 日期字段
支持的格式:
* `YYYY-MM-DD`(推荐)
* `MM/DD/YYYY`
* `DD/MM/YYYY`
* ISO 8601 格式
### 域名字段
* 建议使用 `https://domain.com` 格式以避免创建重复,因为通过邮箱和日历同步创建的公司会使用该格式
* 可以填写 `Domain Label` 和 `Domain URL`:最佳做法是在标签中填写 `domain.com`,在 url 中填写 `https://domain.com`
* 在 Companies 对象内,域名必须唯一
* **待导入文件中的域名必须唯一**
### 电子邮件字段
* 必须为有效的电子邮件格式
* 在 People 对象内,电子邮件必须唯一
* **待导入文件中的电子邮件必须唯一**
* 对于附加邮箱:主邮箱请使用 **Emails / Primary Email**,附加邮箱请使用 **Emails / Additional Emails**,并采用以下格式:
```
["jane@twenty.com","jane.doe@twenty.com"]
```
### ID 字段
在导入过程中指定 `id` 是可选的。 如未提供,Twenty 将自动生成 ID。
映射 `id` 列的用例:
* **设置特定 ID**:为新创建的记录选择 UUID
* **更新现有记录**:与现有记录进行匹配以更新它们,而不是创建重复项。 在这种情况下,建议不要映射其他唯一字段:仅映射一个唯一字段可确保导入更顺畅。
<Note>如果您提供 `id`,其必须为 UUID 格式(例如,`c776ee49-f608-4a77-8cc8-6fe96ae1e43f`)。</Note>
### JSON 字段
使用有效的 JSON 格式:
```
{"key":"value","key2":"value2"}
```
### 链接字段
与域名字段类似:
* 同时填写标签和 URL 两列:**Links / Link URL** 和 **Links / Link Label**
* 使用完整的 URL 格式:`https://example.com`
* 对于次要链接,请使用 **Links / Secondary Links** 列,并采用以下格式:
```
[{"url":"https://twenty.com","label":"Twenty"}]
```
### 多选字段
使用**API 名称**(而非显示标签),格式如下:
```
["VALUE1","VALUE2"]
```
请参见[此处](#finding-api-names-for-select-fields)了解如何查找 API 名称。
<Note>新的选择项不会通过导入自动创建。 请在导入前于 **设置 → 数据模型** 中添加它们。</Note>
<Warning>
**导入会覆盖,不会追加。**
如果一条记录已选择了 `VALUE2` 和 `VALUE3`,而您导入了 `["VALUE1"]`,则导入后该记录将只保留 `VALUE1`。 之前的选择会被替换,而不是合并。
</Warning>
### 数字字段
* 仅限数字
* 小数使用点号:`1234.56`
* 不使用千位分隔符
### 电话字段
电话是一个包含多列的嵌套字段,且**必须填写**
* **Phones / Primary Phone Number**:电话号码(例如,`4159095555`)
* **Phones / Primary Phone Country Code**:国家代码(例如,`US`)
* **Phones / Primary Phone Calling Code**:拨号代码(例如,`+1`)
### 评分字段
使用 API 名称格式:`RATING_1`、`RATING_2`、`RATING_3`、`RATING_4`、`RATING_5`
### 关系字段
请参阅我们的专门文章:[在对象之间导入关联](/l/zh/user-guide/data-migration/capabilities/import-relations)
### 选择字段
使用选项的**API 名称**(而不是显示标签):
```
VALUE1
```
请参见[此处](#finding-api-names-for-select-fields)了解如何查找 API 名称。
<Note>新的选择项不会通过导入自动创建。 请在导入前于 **设置 → 数据模型** 中添加它们。</Note>
### 文本字段
* 无需特殊格式
* 首尾空格会被移除
## 查找 API 名称
对于具有预定义选项的 Select、Multi-Select 和 Array 字段,必须使用 **API 名称**,而不是显示标签。
### 如何查找 API 名称
1. 进入 **设置 → 数据模型**
2. 选择对象和字段
3. 启用 **高级模式**(在设置页面右下角切换)
4. 查看每个选项的 API 名称
<VimeoEmbed videoId="1144910809" title="视频演示" />

View File

@@ -0,0 +1,48 @@
---
title: 支持的文件格式
description: 在 Twenty 中用于数据导入的受支持文件格式。
---
## 支持的格式
Twenty 支持三种导入文件格式:
| 格式 | 扩展名 | 备注 |
| ------------- | ----- | ----------- |
| **CSV** | .csv | 推荐,兼容性最佳 |
| **Excel** | .xlsx | 现代 Excel 格式 |
| **Excel(旧版)** | .xls | 旧版 Excel 格式 |
## 文件要求
| 要求 | 值 |
| -------- | ----------------- |
| **编码** | 推荐使用 UTF-8 |
| **记录上限** | 每个文件最多 10,000 条记录 |
| **结构** | 第一行必须包含列标题 |
| **内容** | 每个文件仅包含一种对象类型 |
## CSV 最佳实践
* **分隔符**:使用逗号(`,`)或分号(`;`)
* **文本限定符**:对于包含逗号的文本,请使用双引号(`"`)
* **行结束符**:支持 Windows(CRLF)或 Unix(LF)
* **空值**:将单元格留空,不要使用 "NULL" 或 "N/A"
## Excel 最佳实践
从 Excel 导出时:
* 移除公式(仅导出值)
* 删除末尾的空行
* 确保没有合并单元格
* 仅使用第一个工作表
## 大型数据集
对于超过 10,000 条记录的数据集:
* 拆分为多个文件
* 或者使用 [API 导入](/l/zh/user-guide/data-migration/how-tos/import-data-via-api) 以导入无限数量的记录
<Note>对于非常大的迁移(100,000+ 条记录),API 比 CSV 导入明显更快且更可靠。</Note>

View File

@@ -0,0 +1,148 @@
---
title: 导入对象之间的关系
description: 通过 CSV 导入记录之间的关系。
---
## 概览
Twenty 支持在 CSV 导入过程中导入对象之间的关系。 这使您可以在数据迁移过程中关联记录(例如,将人员关联到公司)。
<Note>**当前支持导入**:两侧均指向单一对象类型的一对多关系(例如,人员 → 公司)。 指向多个对象类型的关系目前尚不支持导入/导出。</Note>
## Twenty 中关系的工作方式
### 一对多 / 多对一
Twenty 支持一条记录关联到多条记录的标准关系:
* **一个公司 → 多个人员**:一家公司可以有多名员工,但每个人只隶属于一家公司
* **一个公司 → 多个商机**:一家公司可以有多个商机,但每个商机只属于一家公司
### 可指向多种对象类型的关系
某些关系可以连接到不同类型的对象。 这有两种方式:
**模式 1:来自不同对象类型的多条记录,各自链接到一条记录**
几个笔记或任务可以同时附加到多个对象类型:
* **笔记** 可以同时关联到一个人员、一个公司和一个商机
* **任务** 可以同时关联到一个人员、一个公司和一个商机
在此场景中,笔记/任务位于“多”的一侧。 每条记录在每种对象类型上都仅链接到一条记录。
<img src="/images/user-guide/fields/many-to-one-morph.png" style={{width:'100%'}} />
**模式 2:一条记录接收来自不同对象类型的多条记录的链接**
一个项目可以接收来自不同对象类型的多条记录的链接:
* **一个项目** 可以关联到许多人员、许多公司,并附加许多笔记
在此场景中,项目位于“一”的一侧。 来自不同对象的多条记录都可以链接到同一个项目。
<img src="/images/user-guide/fields/one-to-many-morph.png" style={{width:'100%'}} />
<Warning>
**导入/导出限制**:指向多个对象类型的关系(如 笔记 → 人员/公司/商机)在 CSV 导入或导出中**尚不支持**。
* **导入**:仅支持导入两侧均指向单一对象类型的一对多关系
* **导出**:指向多个对象类型的关系列目前会留空
此功能已在我们的路线图中。
</Warning>
### 当前不支持的内容
**多对多关系** 目前尚不可用。 例如,您目前无法创建如下关系:
* 多个人员关联到多个项目
<Note>多对多关系计划在 2026 年下半年推出。</Note>
## 在导入过程中关联记录
<Note>**提醒**:仅可导入指向单一对象类型的一对多关系(例如,人员 → 公司)。 指向多个对象类型的关系(例如,笔记 → 人员/公司/商机)目前尚不支持。</Note>
### 步骤 1:确定“一”和“多”两侧
首先,确定关系中哪个对象位于“一”侧,哪个对象位于“多”侧。
**示例**:
* **公司** 位于“一”侧(一个公司有许多员工)
* **人员** 位于“多”侧(每个人都隶属于一家公司)
### 步骤 2:确保“一”侧的记录已存在
在导入“多”侧之前,“一”侧的记录必须已在 Twenty 中存在。
* 请先导入或创建“一”侧的记录(例如,公司)
* 验证其唯一标识符。 可以是:
* `id`(Twenty 的 UUID)
* 一个被设置为唯一的字段(例如,公司的 `domain`,或您先前系统中的外部 ID)
<Warning>若引用了不存在的记录,导入将失败。</Warning>
### 步骤 3:准备您的 CSV 文件
在“多”侧的 CSV 文件中添加一列,用于引用“一”侧的记录。
**示例**:对于将人员关联到公司的 CSV 文件:
```
firstName,lastName,email,companyDomain
John,Smith,john@acme.com,https://acme.com
Jane,Doe,jane@widgets.co,https://widgets.co
```
**重要**:
* 该值必须与公司记录上的唯一字段**完全匹配**
* 对于域名,请使用**域名 URL**(例如,`https://acme.com`),而不是域名标签
* 每个关系只映射**一个**唯一标识符:这将使导入更顺畅
### 步骤 4:核实关系字段是否存在
在上传文件之前,确保对象之间已存在关系字段。
如果不存在:
1. 进入 **设置 → 数据模型**
2. 选择您的对象(例如,人员)
3. 创建一个指向目标对象(例如,公司)的关系字段
### 步骤 5:上传并映射关系
1. 通过导入界面上传您的 CSV 文件
2. 在字段映射步骤中,找到您的关系列(例如,`companyDomain`)
3. 将其映射到关系字段(例如,公司)
4. Twenty 将自动把每条记录关联到匹配的父级
### 可用于关系的唯一字段
| 对象 | 可用的唯一字段 |
| ---------------- | ----------------------- |
| **公司** | `id`、`domain`,任何自定义唯一字段 |
| **人员** | `id`、`email`,任何自定义唯一字段 |
| **工作区成员** | `id`、`email`(而非姓名) |
| **其他标准对象和自定义对象** | `id`,或任何标记为唯一的字段 |
<Note>**关联到工作区成员**:当关系指向工作区成员(您的团队登录 Twenty)时,请使用其**电子邮件地址**进行引用,而不是姓名。</Note>
<Note>我们建议对公司使用 `domain`,对人员使用 `email`,因为这些字段可读性强,且易于在电子表格中维护。</Note>
<Note>**提醒**:软删除的记录(可在“命令菜单 → 查看已删除的记录”中查看)计入唯一性判定标准。 如果您导入的记录与某条已删除记录具有相同的唯一值,该已删除记录将被还原。 详见[唯一性约束](/l/zh/user-guide/data-migration/capabilities/uniqueness-constraints)。</Note>
## 导入顺序规则
<Warning>
**务必先导入“一”端!**
1. **公司** 优先(无依赖关系)
2. **人员** 其次(关联到公司)
3. **商机** 第三(关联到公司/人员)
4. **自定义对象**(按其依赖关系)
在引用之前,父级记录必须已存在。
</Warning>

View File

@@ -0,0 +1,72 @@
---
title: 唯一性约束
description: Twenty 如何在导入过程中强制确保数据唯一性。
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
## 概览
Twenty 会在特定字段上强制唯一性,以防止重复记录并确保数据完整性。 了解这些约束对于成功导入至关重要。
## 默认唯一字段
| 对象 | 唯一字段 |
| --------- | -------------- |
| **人员** | `id`, `email` |
| **公司** | `id`, `domain` |
| **自定义对象** | 仅 `id`(默认) |
<Note>`id` 字段是 Twenty 的内部标识符,为每条记录自动生成。 它使用 UUID 格式(例如,`c776ee49-f608-4a77-8cc8-6fe96ae1e43f`)。</Note>
## 自定义唯一字段
您可以在 **设置 → 数据模型** 下定义其他唯一字段:
1. 进入 **设置 → 数据模型**
2. 选择一个对象
3. 点击某个字段
4. 在字段设置中启用 **Unique**
### 自定义唯一字段的使用场景
* **外部 ID**:存储来自其他系统的 ID(Salesforce ID、HubSpot ID)
* **业务标识符**:员工编号、客户代码
* **替代联系方式**:LinkedIn 资料、电话号码
<Note>字段名 `id` 保留给 Twenty 的内部 ID。 外部标识符请使用 `externalId` 或 `legacyId` 等其他名称。</Note>
## 导入行为
### 创建新记录
如果唯一字段的值不存在,将创建一条新记录。
### 更新现有记录
如果唯一字段的值与现有记录匹配,该记录将使用新数据进行**更新**。
<Warning>要**更新现有记录**,建议**仅匹配一个唯一字段**。</Warning>
### 软删除的记录
<Warning>
**已删除的记录也会计入唯一性。**
软删除的记录(可在“命令菜单 → 查看已删除的记录”中查看)会包含在唯一性检查中。 如果您导入的记录与某条已删除记录具有相同的唯一值,该已删除记录将被**还原**,并使用新数据。
</Warning>
## 导入过程中的重复检测
在验证阶段:
* 文件中的重复项会以黄色高亮显示
* 开始导入前,您可以在界面中编辑或移除重复的行
<VimeoEmbed videoId="1145246326" title="视频演示" />
## 最佳实践
1. 在导入前,**从文件中移除重复项**
2. 在导入前,在 Twenty 中**检查是否存在现有记录**
3. 从其他系统迁移时,**使用外部 ID**
4. 如果您希望更新现有记录,请**包含唯一字段**

View File

@@ -0,0 +1,32 @@
---
title: 导出常见问题
description: 经常询问有关导出数据的问题。
---
<AccordionGroup>
<Accordion title="我们能否在取消之前导出所有工作区数据,包括自定义对象、自定义领域、关系、说明、任务、机会、附件、工作流、权限和审计历史?">
取消之前可以导出工作区数据,但有一些例外:必须手动转移仪表板、工作流量和权限;不能转移审计日志。
</Accordion>
<Accordion title="哪些元素目前不能导出或迁移?">
大多数元素可以导出或迁移,但有一些例外:
* 工作流、仪表板和所有设置 (API 键、网络钩子、审计日志、用户设置等) 必须手动迁移
* 应用程序创建的对象和字段可以通过在不同的工作区中安装所说的应用进行迁移。 他们不应手动迁移
* 一些记录,如工作流版本和工作流运行,根本无法转移,预计会丢失
* 某些对象,如消息和日历相关对象不应被导出,因为它们是在帐户连接并定期同步时创建的。 一旦您连接到您的帐户,他们将再次同步(只要您有权访问该帐户)。 如果是离开您公司的团队成员的帐户,那么这些消息必须导出,不然就会丢失)
</Accordion>
<Accordion title="是否有自收自留的移徙程序的官方云,或得到协助的移徙服务?">
到目前为止,还没有正式的由云端对自我接纳的移徙程序。 总的想法是:
* 首先,安装应用程序来引入应用拥有的对象和字段
* 复制用户添加的自定义对象和字段
* 使用 API 密钥或 AI 工具的脚本将所有数据从一个工作区迁移到另一个工作区
* 所有不可转移对象必须手动迁移
请注意以下几件事:
* 您可以在 Pro 计划中每分钟发送最多50个请求,或者在本组织计划中每分钟发送100个请求,然后点击请求/最小限制
* 每个API请求最多可以有 200 条记录
* 一些字段中的数据创建者, 时间线活动和更新者将在导入过程中丢失, 并被系统覆盖
</Accordion>
<Accordion title="导出的文件是否以开放和有文件记录的格式提供?">
在UI中导出的文件使用Excel格式,所有API请求都可以保存为 JSON 格式。
</Accordion>
</AccordionGroup>

View File

@@ -0,0 +1,209 @@
---
title: 导出您的数据
description: 从 Twenty 导出数据的完整分步指南。
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
## 概览
将您的工作区数据导出为 CSV,用于备份、报表或迁移。
**使用场景:**
* **定期备份** — 保留您的数据副本
* **外部报表** — 在 Excel、Google 表格或 BI 工具中分析数据
* **迁移** — 将数据迁移到其他系统
* **批量更新** — 通过导出、编辑并重新导入来更新记录
## 您需要了解的内容
### 导出限制
* **每次导出最多 20,000 条记录**
* 仅导出**可见列**
* 仅导出**筛选后的记录**(基于您当前视图)
<Note>对于更大的导出(20,000+ 条记录),请使用筛选器分批导出,或使用 [API](/l/zh/developers/extend/api)。</Note>
### 权限
导出数据需要拥有 **"Export CSV"** 权限。 如果您没有此选项,请联系您的工作区管理员。
## 步骤 1:导航到对象
前往您要导出的对象:
* **People** — 用于联系人
* **Companies** — 用于组织
* **Opportunities** — 用于商机
* **自定义对象** — 您创建的任意对象
## 步骤 2:配置您的视图
\*\*重要:\*\*导出仅包含您当前视图中可见的内容。
### 添加/移除列
1. 单击 **Options → Fields**(或单击列末尾的 **+**)
2. 勾选您要导出的字段
3. 取消勾选不需要的字段
### 筛选记录(可选)
如果您只需要数据的一个子集:
1. 单击 **Filter**
2. 添加筛选条件(例如:"Created date > January 1, 2024")
3. 仅会导出匹配的记录
### 排序记录(可选)
1. 单击列标题进行排序
2. 导出将遵循您的排序顺序
<Note>**创建专用的导出视图。** 保存一个专为导出配置的视图,这样每次就无需重新配置。</Note>
## 步骤 3:导出数据
1. 单击表格右上角的 **⋮** 图标
2. 选择 **Export view**
3. 选择 CSV 文件的保存位置
4. 等待下载完成
## 导出内容
| 包含 | 不包含 |
| ------------ | -------- |
| 所有可见列 | 隐藏列 |
| 与当前筛选条件匹配的记录 | 被过滤掉的记录 |
| 自定义字段值 | 不在视图中的字段 |
| 记录 ID | 文件附件 |
| 关系 ID | 图片 |
### 关系字段
关系 ID 仅在关系的\*\*“多”端\*\*导出:
* **People 导出** 包含一个 `companyId` 列(People → Company 关系)
* **Companies 导出** 不包含 `peopleIds`(Companies 是“一”端)
这意味着您可以使用 People 的导出来重新导入并保持与 Company 的链接,但您需要在导入 Companies 之后再次导入 People 以重新创建这些关系。
## 针对特定目的的导出
### 用于备份
1. 创建一个显示**所有字段**的视图
2. 移除所有筛选器以包含所有记录
3. 分别导出每种对象类型
4. 将导出文件存储在安全位置
5. 设置重复提醒(每周/每月)
### 用于外部报表
1. 只包含您进行分析所需的字段
2. 应用筛选器以聚焦相关数据
3. 考虑按您将要分析的字段进行排序
### 用于批量更新
1. 导出您要更新的记录
2. 包含唯一标识符(`email`、`domain` 或 `id`)
3. 编辑导出的文件
4. 重新导入以更新记录
参见:[如何更新现有记录](/l/zh/user-guide/data-migration/how-tos/update-existing-records-via-import)
### 用于迁移
如果您为迁移到其他系统而进行导出:
1. **分别导出每个对象** — People、Companies、Opportunities 等。
2. **包含 ID 字段** — 有助于维护关系
3. **记录字段映射** — 记录 Twenty 字段如何映射到您的目标系统
## 处理大型数据集(20,000+ 条记录)
导出限制为 20,000 条记录。 对于更大的数据集:
### 选项 1:分批导出
1. 添加一个筛选器(例如 "Created date" 范围)
2. 导出第一批
3. 更改筛选器
4. 导出下一批
5. 在电子表格中合并文件
**用于分批的示例筛选器:**
* 按日期范围(1 月、2 月、3 月……)
* 按所有者(团队成员 A、团队成员 B……)
* 按状态(活跃、非活跃……)
### 选项 2:使用 API
API 没有记录数量限制:
1. 在 **Settings → Developers** 中获取您的 API 密钥
2. 使用 GraphQL API 查询记录
3. 在您的应用程序中处理结果
参见:[API 文档](/l/zh/developers/extend/api)
## 技巧与最佳实践
### 创建导出视图
保存专为导出配置的视图:
1. 配置列和筛选器
2. 单击 **View options** → **Save as new view**
3. 将其命名为 "Export - [Purpose]"
### 保护您的导出文件安全
导出的文件可能包含敏感数据:
* 存放在安全位置
* 不再需要时删除旧的导出文件
* 共享导出文件时请谨慎
### 导出前检查
<Check>显示了正确的列</Check>
<Check>筛选器设置正确(或为完整导出已移除)</Check>
<Check>您具有导出权限</Check>
## 常见问题
<AccordionGroup>
<Accordion title="为什么我的导出缺少某些列?">
仅导出可见列。 在导出之前通过 **Options → Fields** 添加所需的列。
</Accordion>
<Accordion title="为什么我的导出没有包含所有记录?">
检查您的筛选器。 导出仅包含与您当前视图筛选条件匹配的记录。 移除筛选器以导出所有记录。
</Accordion>
<Accordion title="我可以导出超过 20,000 条记录吗?">
单次导出不可以。 使用筛选器分批导出,或使用 API 处理更大的数据集。
</Accordion>
<Accordion title="导出文件是什么格式?">
CSV(逗号分隔值)。 可在 Excel、Google 表格或任何电子表格应用中打开。
</Accordion>
<Accordion title="是否包含关系 ID?">
包含,但仅限于关系的“多”端。 例如,People 的导出包含 `companyId`,但 Companies 的导出不包含人员 ID。
</Accordion>
<Accordion title="我可以自动化导出吗?">
无法直接通过 UI 实现。 使用 API 构建自动化的导出工作流。
</Accordion>
</AccordionGroup>
## 下一步
* [如何更新现有记录](/l/zh/user-guide/data-migration/how-tos/update-existing-records-via-import) — 编辑并重新导入您的导出文件
* [如何通过 API 导入数据](/l/zh/user-guide/data-migration/how-tos/import-data-via-api) — 适用于大型数据集
* [API 文档](/l/zh/developers/extend/api) — 构建自定义导出工作流

View File

@@ -0,0 +1,430 @@
---
title: 修复导入错误
description: 解决 CSV 导入错误的完整故障排除指南。
---
## 概览
导入无法正常工作? 本指南将逐步帮助你识别并修复常见的导入错误。
## 导入验证的工作原理
上传文件并完成列映射后,Twenty 会对你的数据进行验证:
1. **开始验证** — Twenty 会逐行检查是否存在错误
2. **错误会被高亮** — 有问题的行将以**黄色**显示
3. **可就地修复** — 可在导入界面中直接编辑单元格
4. **或移除行** — 完全跳过有问题的记录
<Note>**在界面中修复错误。** 无需返回电子表格。 在导入过程中直接编辑单元格以节省时间。</Note>
## 分步故障排查
### 步骤 1:确定错误类型
点击高亮的行查看具体的错误信息。 常见错误类型:
| 错误消息 | 含义 |
| ------------------------------------------------------------ | ---------------------------- |
| 重复值以黄色高亮显示 | 该值已存在于 Twenty 中,或在你的文件中出现了两次 |
| `{field} is not a valid {type}`(将鼠标悬停在黄色单元格上) | 数据与预期格式不匹配 |
| 必填字段被高亮显示 | 必填字段为空 |
| `Can't connect to {object}. No unique record found...`(导入失败) | 被引用的记录不存在 |
| `Too many records. Up to 10000 allowed`(已阻止上传) | 文件包含超过 10,000 条记录 |
### 步骤 2:修复错误
根据下面针对每种错误类型的具体说明进行处理。
---
## 错误:重复值
### 您将会看到什么
在开始导入之前,导入界面中包含重复值的行会被**黄色高亮**。
### 含义
唯一字段(电子邮件、域名)可能:
* 已存在于 Twenty 中
* 在你的文件中出现了两次
### 修复方法
**选项 1:编辑重复值**
1. 点击包含错误的单元格
2. 更改为唯一值
3. 继续导入
**选项 2:移除重复行**
1. 点击该行旁的 X
2. 导入时将跳过该行
**选项 3:让 Twenty 更新现有记录**
1. 确保你的文件包含唯一标识符(`email`、`domain` 或 `id`)
2. 映射该唯一标识符字段
3. Twenty 将更新现有记录,而不是创建重复项
<Note>
**你也可以更新唯一字段。**
* 如果保留 `id` 但更改 `email` → 将更新该电子邮件
* 如果保留 `email` 但更改 `id` → 将更新该 id
只要至少有一个唯一标识符匹配,Twenty 就会更新该记录。
</Note>
### 如何避免此错误
导入前:
1. 按唯一字段对电子表格进行排序
2. 删除重复行
3. 检查 Twenty 中是否已存在这些记录
<Warning>
**软删除的记录也会计入唯一性。**
检查 Command Menu → 查看已删除的记录。 其中的记录仍会参与唯一性校验。 将其永久删除,或还原后再更新。
</Warning>
了解更多详情:[唯一性约束](/l/zh/user-guide/data-migration/capabilities/uniqueness-constraints)
---
## 错误:格式无效
### 您将会看到什么
该单元格的值会以黄色高亮显示。 将鼠标悬停其上以查看错误信息:
```
{field name} is not a valid {field type}
```
### 含义
该数据与该字段类型的预期格式不匹配。
### 修复方法 — 按字段类型
#### 电子邮件
**问题:** 电子邮件格式无效
**解决方案:** 使用 `name@domain.com` 格式
```
❌ john.smith@
❌ john smith@acme.com
✓ john.smith@acme.com
```
#### 域
**问题:** 格式不一致可能导致重复
**解决方案:** 使用 `https://domain.com` 格式(推荐)
```
⚠️ acme.com (valid, but not recommended)
⚠️ www.acme.com (valid, but not recommended)
✅ https://acme.com (recommended)
```
<Note>所有格式都有效,但推荐使用 `https://domain.com`,因为它与电子邮件/日历同步所用的格式一致。 使用其他格式可能会创建重复的公司。</Note>
#### 日期
**问题:** 无法识别的日期格式
**解决方案:** 在整个文件中一致使用 `YYYY-MM-DD` 格式
```
✓ 2024-03-15 (YYYY-MM-DD)
❌ 03/15/2024 (MM/DD/YYYY)
❌ 15/03/2024 (DD/MM/YYYY)
```
#### 电话
**问题:** 缺少必需的列
**解决方案:** 包含所有电话相关列
| 列 | 示例 |
| --------------------------------------- | ------------ |
| **Phones / Primary Phone Number** | `4159095555` |
| **Phones / Primary Phone Country Code** | `US` |
| **Phones / Primary Phone Calling Code** | `+1` |
#### 布尔值
**问题:** 布尔值不正确
**解决方案:** 使用大写的 `TRUE` 或 `FALSE`
```
❌ true
❌ yes
❌ 1
✓ TRUE
✓ FALSE
```
#### 选择/多选
**问题:** 值与现有选项不匹配
**解决方案:** 使用**API 名称**,而非显示标签
如何查找 API 名称:
1. 进入 **设置 → 数据模型**
2. 选择对象和字段
3. 启用 **高级模式**(右下角切换)
4. 使用 API 名称(例如:`OPTION_1`,而不是 "Option 1")
```
❌ High Priority
✓ HIGH_PRIORITY
```
#### 货币
**问题:** 缺少金额或货币代码
**解决方案:** 同时填写这两列
| 列 | 示例 |
| --------------------- | --------- |
| **Amount / Amount** | `1234.56` |
| **Amount / Currency** | `USD` |
#### 数字
**问题:** 含非数字字符
**解决方案:** 只能使用数字,小数点用英文句点
```
❌ $1,234.56
❌ 1,234.56
✓ 1234.56
```
完整格式参考:[字段映射](/l/zh/user-guide/data-migration/capabilities/field-mapping)
---
## 错误:缺少必填字段
### 您将会看到什么
该行将以黄色高亮,并标出缺失的必填字段单元格。
### 含义
此行存在必填字段为空。
### 修复方法
**选项 1:输入一个值**
1. 点击空白单元格
2. 输入值
3. 继续导入
**选项 2:移除该行**
1. 如果没有该数据,点击 X 跳过该行
### 如何避免此错误
在导入之前,确定必填字段:
1. 进入 **设置 → 数据模型**
2. 选择你的对象
3. 检查哪些字段被标记为必填
---
## 错误:未找到关系
### 您将会看到什么
该错误会在**导入开始之后**出现 — 导入将因如下消息而失败:
```
Can't connect to company. No unique record found with condition: id = 7776ee49-f608-4a77-8cc8-6fe96ae1e43f
```
这意味着 Twenty 中没有具有该特定标识符的公司。
<Note>与其他错误不同,此错误不会在数据审核步骤中被捕获。 导入会开始执行,但在遇到缺失的关联时失败。</Note>
### 含义
你正在尝试关联一条在 Twenty 中不存在的记录。
### 修复方法
**选项 1:先导入父级记录**
1. 取消当前导入
2. 导入父级记录(例如,公司)
3. 然后导入子级记录(例如,人员)
**选项 2:修正引用值**
1. 检查文件中的引用值
2. 确保其与现有记录完全匹配
3. 核对格式:域名应为 `https://domain.com`
**选项 3:移除该关联**
1. 清空该单元格,以不带关联地进行导入
2. 稍后手动添加该关联
### 如何避免此错误
1. **按正确顺序导入:**
* 先导入公司
* 其次导入人员(包含公司引用)
* 第三导入机会
2. **核对引用值:**
* 导出父级记录以获取精确的标识符
* 使用域名格式 `https://domain.com`
* 检查拼写错误和大小写是否一致
<Warning>
**若引用了不存在的记录,导入将失败。**
始终先导入父对象,再导入子对象。
</Warning>
了解更多详情:[导入关系](/l/zh/user-guide/data-migration/capabilities/import-relations)
---
## 错误:文件过大
### 您将会看到什么
在上传文件时会出现该错误 — 上传将被完全阻止:
```
Too many records. Up to 10000 allowed
```
在减小文件大小之前,你将无法进入数据审核步骤。
### 含义
你的文件包含超过 10,000 条记录。
### 修复方法
**选项 1:拆分为多个文件**
1. 将数据分成每个不超过 10,000 条记录的文件
2. 分别导入每个文件
3. 保持导入顺序(先公司,后人员)
**选项 2:使用 API 导入**
对于非常大的数据集,请使用没有记录数量限制的 API。
参见:[如何通过 API 导入数据](/l/zh/user-guide/data-migration/how-tos/import-data-via-api)
---
## 错误:无法识别字段
### 含义
文件中的某一列无法映射,因为 Twenty 中不存在该字段。
### 修复方法
1. 进入 **设置 → 数据模型**
2. 选择你要导入的对象
3. 点击 **+ 添加字段**
4. 创建具有适当类型的自定义字段
5. 重新上传你的文件
<Note>CSV 导入会创建记录,而不是字段。 在导入之前,所有字段都必须已存在。</Note>
---
## 错误:用户关联为空
### 含义
你正在尝试将记录分配给某个用户(所有者、被指派者),但该关联未被映射。
### 常见原因
1. **用户尚未接受邀请** — 该用户在 Twenty 中尚不存在
2. **使用旧系统的用户 ID** — Twenty 无法匹配来自其他系统的 ID
3. **电子邮件格式错误** — 该邮箱与用户的 Twenty 账户不匹配
### 修复方法
1. 确保所有用户都已接受邀请加入你的 Twenty 工作区
2. 使用用户的电子邮箱地址(而不是姓名或旧系统的 ID)
3. 使用他们用于加入 Twenty 的同一邮箱
<Warning>
**在导入之前,用户必须先接受邀请。**
如果某个用户尚未接受邀请,引用该用户的记录将出现空的用户关联。
</Warning>
---
## 导入前清单
导入前检查以下项目以避免错误:
### 文件要求
<Check>文件为 CSV、XLSX 或 XLS 格式</Check>
<Check>文件少于 10,000 条记录</Check>
<Check>文件使用 UTF-8 编码</Check>
### 数据质量
<Check>无重复电子邮件(针对联系人)</Check>
<Check>无重复域名(针对公司)</Check>
<Check>所有日期采用一致的格式</Check>
<Check>所有域名使用 `https://domain.com` 格式</Check>
### 字段格式
<Check>布尔字段使用 `TRUE` 或 `FALSE`(大写)</Check>
<Check>选择字段使用 API 名称,而非显示标签</Check>
<Check>电话字段包含所有必需的列</Check>
<Check>货币字段同时包含金额和货币代码</Check>
### 关系
<Check>先导入父级记录,再导入子级记录</Check>
<Check>关联列引用现有记录</Check>
<Check>域名格式与 Twenty 的格式完全一致</Check>
### 数据模型
<Check>设置 → 数据模型 中已存在所有自定义字段</Check>
<Check>在导入前先创建所有选择项</Check>
---
## 仍有问题?
如果你已尝试以上解决方案:
1. **下载示例文件** — 了解 Twenty 期望的确切格式
2. **导出现有记录** — 将你的文件与可用数据进行对比
3. **用小批量测试** — 先尝试 5-10 行
4. **查看参考文章:**
* [字段映射](/l/zh/user-guide/data-migration/capabilities/field-mapping)
* [唯一性约束](/l/zh/user-guide/data-migration/capabilities/uniqueness-constraints)
* [导入关系](/l/zh/user-guide/data-migration/capabilities/import-relations)
* [错误处理](/l/zh/user-guide/data-migration/capabilities/error-handling)

View File

@@ -0,0 +1,201 @@
---
title: 通过 CSV 导入公司
description: 将公司导入 Twenty 的完整分步指南。
---
## 概览
本指南将引导您将公司导入 Twenty。 **应先导入公司**,因为 People 和 Opportunities 会关联到公司。
## 开始之前
### 先决条件清单
<Check>
您的文件为 CSV、XLSX 或 XLS 格式
</Check>
<Check>
文件包含少于 10,000 条记录
</Check>
<Check>
您的文件中没有重复的域名
</Check>
<Check>
所有自定义字段已存在于 **设置 → 数据模型**
</Check>
<Note>
需要导入超过 10,000 家公司? 拆分为多个文件,或使用 [API 导入](/l/zh/user-guide/data-migration/how-tos/import-data-via-api)。
</Note>
## 步骤 1:准备您的公司数据
### 必填与推荐字段
| 字段 | 是否必填? | 格式 | 备注 |
| ---------- | ----- | -------------------- | ---------- |
| **Name** | 推荐 | 文本 | 公司显示名称 |
| **Domain** | 推荐 | `https://domain.com` | 唯一标识符 |
| **地址** | 可选 | 多列 | 详见下文 |
| **员工** | 可选 | 数字 | 员工数量 |
| **自定义字段** | 可选 | 因情况而异 | 必须存在于数据模型中 |
### 域名格式
<Warning>
**域名请使用 `https://domain.com` 格式。**
这与通过电子邮件/日历同步自动创建公司时使用的格式一致,从而防止之后出现重复。
</Warning>
**域名列:**
* **Domain / Domain Label**: `acme.com`
* **Domain / Domain URL**: `https://acme.com`
### 地址格式
地址是一个嵌套字段,包含多个列:
```
Address / Address 1,Address / City,Address / State,Address / Country,Address / Post Code
123 Main Street,San Francisco,CA,USA,94105
```
### 示例 CSV 结构
```csv
name,Domain / Domain URL,Domain / Domain Label,Address / City,Address / Country,employees
Acme Corp,https://acme.com,acme.com,San Francisco,USA,250
Widget Co,https://widgets.co,widgets.co,New York,USA,50
```
<Note>
**专业提示:** 在导入过程中单击 **Download sample file**,以查看 Twenty 期望的确切列名。
</Note>
## 步骤 2:进入导入功能
**选项 1:从 Companies 视图**
1. 在左侧边栏中导航到 **Companies**
2. 单击右上角的 **⋮** 图标
3. 选择 **Import records**
**选项 2:使用命令菜单**
1. 按 `Cmd + K`(Mac)或 `Ctrl + K`(Windows)
2. 输入 "import"
3. 选择 **Import records**
4. 选择 **Companies**
## 步骤 3:上传您的文件
1. 单击 **Select file**
2. 选择您的 CSV、XLSX 或 XLS 文件
3. 等待 Twenty 分析您的文件
## 步骤 4:映射您的列
Twenty 会自动尝试将您的列与字段匹配。 检查并调整:
1. **检查自动映射** — 核实其是否正确
2. **修正不正确的映射** — 单击下拉菜单选择正确的字段
3. **跳过列** — 对不想导入的列选择 **Do not map**
### 重要的映射规则
* **Domain**:映射到 **Domain / Domain URL**(而非 Domain Label)
* **地址**:将每个部分映射到其对应的列(City、State 等)
* **选择型字段**:其值必须与现有选项匹配(否则您将在下一步进行映射)
<img src="/images/user-guide/import-export-data/match-columns.png" style={{width:'100%'}} />
## 步骤 5:映射选择字段的值
如果您有选择或多选字段:
1. Twenty 会将您的值与现有选项并列显示
2. 将文件中的每个值与一个 Twenty 选项匹配
3. 或在需要时创建新选项
<Note>
选择型选项使用 **API 名称**,而不是显示标签。 在 **Settings → Data Model** 中启用 **Advanced mode** 以查看 API 名称。
</Note>
## 步骤 6:检查并修复错误
在完成导入之前,Twenty 会验证您的数据:
1. 单击 **Next Steps**
2. 有错误的行会被高亮为**黄色**
3. **直接修复错误** — 单击单元格并编辑其值
4. **移除有问题的行** — 单击 X 以跳过该行
### 常见公司导入错误
| 错误 | 原因 | 解决方案 |
| ---------- | --------------- | ----------------------- |
| **域名重复** | 域名已存在于 Twenty 中 | 从文件中删除或更新现有记录 |
| **域名格式无效** | 格式错误 | 使用 `https://domain.com` |
| **缺少必填字段** | 必填字段为空 | 填写该值或删除该行 |
## 步骤 7:完成导入
1. 查看导入摘要
2. 单击 **Confirm** 以进行导入
3. 等待导入完成
4. 通过抽查几条记录进行验证
## 导入公司之后
现在您可以导入与公司关联的记录:
1. **[导入 People](/l/zh/user-guide/data-migration/how-tos/import-contacts-via-csv)** — 使用域名将其关联到公司
2. **导入机会** — 将其关联到公司
3. **验证导入** — 抽查几条记录以确保数据正确
## 更新现有公司
若要更新公司而非创建新公司:
1. 在文件中包含 `domain` 或 `id` 列
2. Twenty 将根据此唯一标识符匹配记录
3. 现有公司会被更新;新公司会被创建
详情请参见 [如何更新现有记录](/l/zh/user-guide/data-migration/how-tos/update-existing-records-via-import)。
## 常见问题
<AccordionGroup>
<Accordion title="为什么两个公司不能使用相同的域名?">
在 Twenty 中,域名是唯一标识符。 这可防止重复公司,并确保电子邮件同步将邮件正确关联到对应的公司。
</Accordion>
<Accordion title="如果有公司没有域名怎么办?">
您可以将域名留空。 不过,我们建议在可能的情况下添加域名,以获得更好的数据质量和自动邮件关联功能。
</Accordion>
<Accordion title="我可以在未关联任何联系人的情况下导入公司吗?">
是! 您可以先导入公司,随后再导入联系人,并通过公司域名将其关联起来。
</Accordion>
<Accordion title="如果我导入了一个已存在的域名,会发生什么?">
如果您包含与现有公司匹配的唯一标识符(域名或 id),Twenty 会更新该公司,而不是创建重复项。
</Accordion>
<Accordion title="如何修复“重复域名”错误?">
您可以从文件中移除重复项,或包含公司的 `id` 以更新现有记录。
</Accordion>
</AccordionGroup>
## 故障排除
遇到问题? 请查看:
* [如何修复导入错误](/l/zh/user-guide/data-migration/how-tos/fix-import-errors)
* [字段映射参考](/l/zh/user-guide/data-migration/capabilities/field-mapping)
* [唯一性约束](/l/zh/user-guide/data-migration/capabilities/uniqueness-constraints)

View File

@@ -0,0 +1,242 @@
---
title: 通过 CSV 导入联系人
description: 将人员/联系人导入 Twenty 的完整分步指南。
---
## 概览
本指南将引导您将联系人(People)导入 Twenty。
## 开始之前
### 先决条件清单
<Check>
您的文件为 CSV、XLSX 或 XLS 格式
</Check>
<Check>
文件包含少于 10,000 条记录
</Check>
<Check>
您的文件中没有重复的电子邮件地址
</Check>
<Check>
**先导入公司**(如果要将 People 关联到公司)
</Check>
<Check>
所有自定义字段已存在于 **设置 → 数据模型**
</Check>
<Warning>
**先导入公司,再导入 People**
如果您想将 People 关联到公司,请先导入公司。 在引用之前,公司必须已存在。
</Warning>
## 步骤 1:准备您的联系人数据
### 必填与推荐字段
| 字段 | 是否必填? | 格式 | 备注 |
| --------- | ----- | ----------------- | ---------- |
| **电子邮件** | 推荐 | `name@domain.com` | 必须唯一 |
| **名字** | 推荐 | 文本 | |
| **姓氏** | 推荐 | 文本 | |
| **公司** | 可选 | 域名或 ID | 链接到现有公司 |
| **电话** | 可选 | 多列 | 详见下文 |
| **职位** | 可选 | 文本 | |
| **自定义字段** | 可选 | 因情况而异 | 必须存在于数据模型中 |
### 电子邮件格式
* 必须为有效的电子邮件格式:`name@domain.com`
* **必须唯一** — 您的文件或 Twenty 中不得重复
* 对于附加电子邮件,请使用 **Emails / Additional Emails** 列:
```
["jane@twenty.com","jane.doe@twenty.com"]
```
### 电话格式
电话是一个 **嵌套字段**,需要多列:
| 列 | 示例 |
| --------------------------------------- | ------------ |
| **Phones / Primary Phone Number** | `4159095555` |
| **Phones / Primary Phone Country Code** | `US` |
| **Phones / Primary Phone Calling Code** | `+1` |
### 关联到公司
添加包含公司唯一标识符的列:
| 列名 | 格式 | 示例 |
| --------------- | ------ | -------------------------------------- |
| `companyDomain` | URL 格式 | `https://acme.com` |
| `companyId` | UUID | `c776ee49-f608-4a77-8cc8-6fe96ae1e43f` |
<Note>
**使用域名 URL 格式**(`https://acme.com`),而不是标签。 这与公司在 Twenty 中的存储方式一致。
</Note>
### 示例 CSV 结构
```csv
firstName,lastName,email,jobTitle,companyDomain,Phones / Primary Phone Number,Phones / Primary Phone Country Code
John,Smith,john@acme.com,CEO,https://acme.com,4159095555,US
Jane,Doe,jane@widgets.co,CTO,https://widgets.co,2125551234,US
```
<Note>
**专业提示:** 在导入过程中单击 **Download sample file**,或导出现有的一些 People,以查看 Twenty 期望的确切列名。
</Note>
## 步骤 2:进入导入功能
**选项 1:从 People 视图**
1. 在左侧边栏中导航到 **People**
2. 单击右上角的 **⋮** 图标
3. 选择 **Import records**
**选项 2:使用命令菜单**
1. 按 `Cmd + K`(Mac)或 `Ctrl + K`(Windows)
2. 输入 "import"
3. 选择 **Import records**
4. 选择 **People**
## 步骤 3:上传您的文件
1. 单击 **Select file**
2. 选择您的 CSV、XLSX 或 XLS 文件
3. 等待 Twenty 分析您的文件
## 步骤 4:映射您的列
Twenty 会自动尝试将您的列与字段匹配。 检查并调整:
1. **检查自动映射** — 核实其是否正确
2. **修正不正确的映射** — 单击下拉菜单选择正确的字段
3. **跳过列** — 对不想导入的列选择 **Do not map**
### 重要的映射规则
| 列类型 | 映射到 | 备注 |
| ------ | ------------------------------ | ------------------ |
| 公司引用 | **Company** 关系字段 | 仅使用域名或 ID,不要同时使用二者 |
| 电子邮件 | **电子邮件** | 主要电子邮件地址 |
| 附加电子邮件 | **Emails / Additional Emails** | 数组格式 |
| 电话 | 分列 | 号码、国家代码、拨号代码 |
<img src="/images/user-guide/import-export-data/match-columns.png" style={{width:'100%'}} />
### 映射公司关系
当映射公司列时:
1. 找到您的公司引用列(例如,`companyDomain`)
2. 将其映射到 **Company** 关系字段
3. Twenty 会将每个 Person 关联到匹配的 Company
<Warning>
**仅为关系映射一个唯一标识符。**
不要同时映射 `companyId` 和 `companyDomain`。 选择其一——最好使用域名,因为它更易读。
</Warning>
## 步骤 5:映射选择字段的值
如果您有选择或多选字段(如 Lead Source):
1. Twenty 会将您的值与现有选项并列显示
2. 将文件中的每个值与一个 Twenty 选项匹配
3. 或在需要时创建新选项
<Note>
选择型选项使用 **API 名称**,而不是显示标签。 在 **Settings → Data Model** 中启用 **Advanced mode** 以查看 API 名称。
</Note>
## 步骤 6:检查并修复错误
在完成导入之前,Twenty 会验证您的数据:
1. 单击 **Next Steps**
2. 有错误的行会被高亮为**黄色**
3. **直接修复错误** — 单击单元格并编辑其值
4. **移除有问题的行** — 单击 X 以跳过该行
### 常见联系人导入错误
| 错误 | 原因 | 解决方案 |
| ------------ | -------------------- | --------------------- |
| **电子邮件重复** | 电子邮件在 Twenty 或文件中已存在 | 删除重复项或更新现有记录 |
| **电子邮件格式无效** | 电子邮件格式不正确 | 更正为 `name@domain.com` |
| **未找到关系** | 公司不存在 | 先导入公司,或修复引用 |
| **缺少必填字段** | 必填字段为空 | 填写该值或删除该行 |
## 步骤 7:完成导入
1. 查看导入摘要
2. 单击 **确认** 以进行导入
3. 等待导入完成
4. 通过检查一些记录及其公司关联来验证
## 导入联系人之后
您的联系人现已在 Twenty 中! 后续步骤:
1. **验证公司关联** — 打开一些 People 记录,确认它们已关联到正确的公司
2. **导入机会** — 如有需要,将其关联到 People 和 Companies
3. **设置电子邮件同步** — 连接您的邮箱,以在联系人记录中查看电子邮件历史
## 更新现有联系人
若要更新联系人而非创建新联系人:
1. 在文件中包含 `email` 或 `id` 列
2. Twenty 将根据此唯一标识符匹配记录
3. 现有联系人会被更新;新的联系人会被创建
详情请参见 [如何更新现有记录](/l/zh/user-guide/data-migration/how-tos/update-existing-records-via-import)。
## 常见问题
<AccordionGroup>
<Accordion title="为什么两个 People 不能使用相同的电子邮件?">
在 Twenty 中,电子邮件是唯一标识符。 这可防止重复联系人,并确保电子邮件同步将邮件正确关联到对应的人。
</Accordion>
<Accordion title="如果有人员没有电子邮件怎么办?">
您可以将电子邮件留空。 不过,我们建议在可能的情况下添加电子邮件,以获得更好的数据质量和电子邮件同步功能。
</Accordion>
<Accordion title="在导入过程中如何将 People 关联到 Companies?">
添加包含公司域名(例如 `https://acme.com`)或 ID 的列。 在映射过程中,将此列连接到 Company 关系字段。
</Accordion>
<Accordion title="如果该 Company 还不存在怎么办?">
先导入 Companies,再导入 People。 在引用之前,该 Company 必须已存在。
</Accordion>
<Accordion title="我可以导入之前 CRM 中的 ID 吗?">
是! 在您的数据模型中创建一个标记为“唯一”的自定义字段,用于存储外部 ID。 注意:字段名 `id` 保留给 Twenty 的内部 ID。
</Accordion>
<Accordion title="如何修复“未找到关系”的错误?">
您引用的 Company 不存在。 先导入该 Company,或检查域名/ID 是否与现有 Company 完全匹配。
</Accordion>
</AccordionGroup>
## 故障排除
遇到问题? 请查看:
* [如何修复导入错误](/l/zh/user-guide/data-migration/how-tos/fix-import-errors)
* [如何导入关系](/l/zh/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv)
* [字段映射参考](/l/zh/user-guide/data-migration/capabilities/field-mapping)

View File

@@ -0,0 +1,176 @@
---
title: 通过 API 导入数据
description: 何时以及如何使用 Twenty 的 API 进行大规模数据导入。
---
## 概览
Twenty 提供 **GraphQL** 和 **REST API**,用于以编程方式导入数据。 当 CSV 导入不适合您的数据量,或您需要自动化、定期的导入时,请使用 API。
## 何时使用 API 导入
| 场景 | 推荐方法 |
| ------------------- | --------------- |
| 少于 10,000 条记录 | CSV 导入 |
| 10,000 - 50,000 条记录 | CSV 导入(拆分为多个文件) |
| **50,000+ 条记录** | **API 导入** |
| 一次性迁移 | 两者皆可(取决于数据量) |
| **定期导入** | **API 导入** |
| **实时同步** | **API 导入** |
| **与其他系统集成** | **API 导入** |
<Note>对于包含数十万条记录的数据集,API 比多次 CSV 导入显著更快且更可靠。</Note>
## API 速率限制
Twenty 实施速率限制以确保系统稳定性:
| 限制 | 值 |
| -------------- | ------------- |
| **每分钟请求数** | 100 |
| **每次批量调用的记录数** | 60 |
| **最大吞吐量** | ~6,000 条记录/分钟 |
<Warning>
**围绕这些限制规划您的导入。**
在最大吞吐量下,导入 100,000 条记录预计约需 17 分钟。 为错误处理和重试预留缓冲时间。
</Warning>
## 开始使用
### 步骤 1:获取您的 API 密钥
1. 前往 **设置 → 开发者**
2. 点击 **+ 创建 API 密钥**
3. 为您的密钥指定一个描述性名称
4. 立即复制该 API 密钥(不会再次显示)
5. 将其安全存储
<Warning>
**请保密您的 API 密钥。**
任何获得您 API 密钥的人都可以访问并修改您的工作区数据。 切勿将其提交到代码仓库或公开分享。
</Warning>
### 步骤 2:选择您的 API
Twenty 支持两种 API 类型:
| 接口 | 最适合 | 文档 |
| ----------- | ----------------------- | -------------------------------- |
| **GraphQL** | 灵活查询、获取关联数据、复杂操作 | [API 文档](/l/zh/developers/extend/api) |
| **REST** | 简单的 CRUD 操作、熟悉的 REST 模式 | [API 文档](/l/zh/developers/extend/api) |
两种 API 都支持:
* 创建、读取、更新和删除记录
* **批量操作** — 每次调用最多创建或更新 60 条记录
**对于导入,请使用批量操作**,以在速率限制内最大化吞吐量。
### 步骤 3:规划您的导入顺序
与 CSV 导入一样,对于关联关系,**顺序很重要**:
1. **公司** 优先(无依赖)
2. **人员** 其次(可关联到公司)
3. **商机** 第三(可关联到公司和人员)
4. **任务/笔记**(可关联到以上任一项)
5. **自定义对象**(按照其依赖关系)
## 最佳实践
### 批量处理请求
* 不要逐条发送记录
* 每次 API 调用最多分组处理 **60 条记录**
* 这可在速率限制内最大化吞吐量
### 处理速率限制
* 在请求之间实施延迟(持续导入时至少 600ms)
* 达到限制时使用指数退避
* 监控 429(请求过多)响应
### 先验证数据
* 在导入前清洗并验证数据
* 检查必填字段是否已填写
* 验证格式是否符合 Twenty 的要求 (参见 [字段映射](/l/zh/user-guide/data-migration/capabilities/field-mapping))
### 记录一切
* 记录每一条导入的记录(包括 ID)
* 记录错误及其完整上下文
* 这有助于调试问题并验证完成情况
### 先进行测试
* 使用小批量进行测试(10-20 条记录)
* 验证数据在 Twenty 中显示是否正确
* 然后执行完整导入
### 使用合并插入避免重复
GraphQL API 支持**批量合并插入** — 若记录已存在则更新,不存在则创建。 这可以在重新运行导入时防止重复。
## 查找对象和字段名称
查看可用的对象和字段:
1. 前往 **设置 → API 和 Webhooks**
2. 浏览 **Metadata API**
3. 查看所有标准和自定义对象及其字段
文档展示了所有标准和自定义对象、它们的字段以及预期的数据类型。
## 专业服务
对于复杂的 API 迁移,我们的合作伙伴可以提供帮助:
| 服务 | 包含内容 |
| ---------- | ---------- |
| **数据模型设计** | 设计最优的数据结构 |
| **迁移脚本** | 编写并运行导入脚本 |
| **数据转换** | 处理复杂的映射与清理 |
| **验证与 QA** | 验证迁移是否完成 |
**适用于:**
* 迁移 100,000+ 条记录
* 复杂的数据转换
* 紧迫的时间安排
* 缺乏开发人员资源的团队
请通过 [contact@twenty.com](mailto:contact@twenty.com) 与我们联系,或查看我们的 [实施服务](/l/zh/user-guide/getting-started/capabilities/implementation-services)。
## 常见问题
<AccordionGroup>
<Accordion title="GraphQL 与 REST 有何区别?">
GraphQL 允许您在一次查询中准确请求所需数据,并且更适合复杂操作。 REST 使用标准的 HTTP 方法(GET、POST、PUT、DELETE),如果您使用过传统 API,可能会更熟悉。
</Accordion>
<Accordion title="我可以通过 API 更新现有记录吗?">
是! 使用 update mutation(GraphQL)或带有记录 `id` 的 PUT/PATCH 请求(REST)。
</Accordion>
<Accordion title="如何处理重复数据?">
首先使用唯一标识符(email、domain)查询现有记录。 存在则更新,不存在则创建。
</Accordion>
<Accordion title="我可以通过 API 删除记录吗?">
可以,使用 delete mutation(GraphQL)或 DELETE 请求(REST)。
</Accordion>
<Accordion title="是否提供 Python 或 Node.js 的 SDK?">
目前没有,但这两种 API 可与任何语言中的任意 HTTP 客户端配合使用。
</Accordion>
</AccordionGroup>
## API 文档
有关完整的实现细节、代码示例和架构参考:
* [API 文档](/l/zh/developers/extend/api)

View File

@@ -0,0 +1,225 @@
---
title: 通过 CSV 导入对象之间的关系
description: 在 CSV 导入过程中关联记录的完整分步指南。
---
## 概览
本指南将引导您导入对象之间的关系——例如,将人员与公司关联,或将商机与人员关联。
<Note>\*\*可导入内容:\*\*仅限指向单个对象类型的一对多关系。 指向多个对象类型的关系(例如,笔记同时关联到人员和公司)目前尚不支持导入。</Note>
## 了解关系
### 什么是“一对多”关系?
在一对多关系中:
* **一个**公司拥有**多个**人员(员工)
* **一个**公司拥有**多个**商机
* **一个**人拥有**多个**任务
“一”侧为**父级**。 “多”侧为**子级**。
### Twenty 中的常见关系
| 关系 | “一”侧(父级) | “多”侧(子级) |
| ------- | -------- | -------- |
| 公司 → 人员 | 公司 | 人员 |
| 公司 → 商机 | 公司 | 机会 |
| 人员 → 任务 | 人员 | 任务 |
| 人员 → 笔记 | 人员 | 备注 |
## 步骤 1:确定“一”和“多”两侧
在导入之前,确定哪个对象是父级,哪个是子级。
**自问:**“是否一个[对象 A]拥有多个[对象 B]?”
* 一个公司 → 多个人员 ✓(公司为父级)
* 一个人 → 多个公司 ✗(这是错误的——一个人隶属于一个公司)
## 步骤 2:先导入父级记录
在引用之前,父级(“一”侧)必须已存在于 Twenty 中。
**导入顺序:**
1. **公司** 优先(无依赖关系)
2. **人员** 其次(关联到公司)
3. **商机** 第三(关联到公司和/或人员)
4. **任务/笔记**(可关联到以上任一项)
<Warning>
**如果父级记录不存在,导入将失败。**
在导入包含公司引用的人员之前,请务必确认公司已导入。
</Warning>
## 步骤 3:记录父级的唯一标识符
您需要使用**唯一标识符**来引用父级记录。 可用选项:
| 父级对象 | 可用的唯一标识符 |
| --------- | --------------------------------- |
| **公司** | `id`(UUID)、`domain`(推荐)或任何自定义唯一字段 |
| **人员** | `id`(UUID)、`email`,或任何自定义唯一字段 |
| **工作区成员** | `id`(UUID)、`email`(而非姓名) |
| **自定义对象** | `id`(UUID),或任何标记为唯一的字段 |
<Note>\*\*建议:\*\*公司使用 `domain`,人员使用 `email`。 这些字段可读性强,且在电子表格中易于核对。</Note>
### 查找标识符
如果您需要 `id`:
1. 从 Twenty 导出父级记录
2. 导出结果包含 `id` 列
3. 在子级记录文件中使用这些 ID
## 步骤 4:核实关系字段是否存在
在导入之前,确保对象之间存在关系字段。
**检查或创建的方法:**
1. 进入 **设置 → 数据模型**
2. 选择您的子级对象(例如,人员)
3. 查找指向父级的关系字段(例如,公司)
4. 如果不存在,请创建:
* 点击 **+ 添加字段**
* 选择 **关系** 类型
* 选择父级对象
## 步骤 5:准备您的 CSV 文件
在子级 CSV 中添加一列,使用父级的唯一标识符进行引用。
### 示例:人员关联到公司
**您的人员 CSV:**
```csv
firstName,lastName,email,jobTitle,companyDomain
John,Smith,john@acme.com,CEO,https://acme.com
Jane,Doe,jane@widgets.co,CTO,https://widgets.co
Bob,Johnson,bob@techstart.io,Developer,https://techstart.io
```
`companyDomain` 列引用公司的域名。
### 格式要求
| 标识符 | 格式 | 示例 |
| ---- | ------ | -------------------------------------- |
| 域 | URL 格式 | `https://acme.com` |
| 电子邮件 | 标准邮箱 | `john@acme.com` |
| 编号 | UUID | `c776ee49-f608-4a77-8cc8-6fe96ae1e43f` |
<Warning>
**域名格式很重要!**
请使用 `https://domain.com`(而不是仅 `domain.com`)。 这与 Twenty 存储公司域名的方式一致,并可避免匹配错误。
</Warning>
### 重要规则
1. **需要精确匹配** — 值必须与父级记录完全一致
2. **仅映射一个唯一标识符** — 不要同时包含 `companyId` 和 `companyDomain`
3. **区分大小写** — `Acme.com` ≠ `acme.com`
## 步骤 6:上传并映射关系
1. 前往子级对象(例如,人员)
2. 点击 **⋮** → **导入记录**
3. 上传您的 CSV 文件
4. 在字段映射步骤中:
* 找到您的关系列(例如,`companyDomain`)
* 将其映射到 **Company** 关系字段
5. 完成其余映射
6. 检查错误并确认
Twenty 将自动把每条子级记录关联到匹配的父级。
## 步骤 7:验证导入结果
导入后:
1. 打开几条子级记录(例如,人员)
2. 确认关系字段显示正确的父级(例如,公司)
3. 打开一条父级记录并检查相关记录部分
## 常见错误及避免方法
| 错误 | 问题 | 解决方案 |
| ---------- | -------------------------------------- | -------------------------- |
| **导入顺序错误** | 在公司之前导入人员 | 始终先导入父级,再导入子级 |
| **域名格式错误** | 使用 `acme.com` 而非 `https://acme.com` | 使用带有 `https://` 的完整 URL 格式 |
| **多个唯一字段** | 同时映射 `companyId` 和 `companyDomain` | 仅映射一个唯一标识符 |
| **缺少关系字段** | 数据模型中不存在该关系字段 | 请在导入前于 **设置 → 数据模型** 中创建 |
| **记录不存在** | 父级记录在 Twenty 中不存在 | 先导入父级记录,或检查是否有拼写错误 |
| **大小写不匹配** | 文件中为 `Acme.com`,但 Twenty 中为 `acme.com` | 确保大小写完全一致 |
## 关联到工作区成员
当关联到工作区成员(您的团队)时:
* 使用他们的**电子邮箱地址**,而不是姓名
* 例如:`owner@yourcompany.com`,而不是 "John Smith"
```csv
taskName,assignedTo
Follow up with client,john@yourcompany.com
Review proposal,jane@yourcompany.com
```
## 常见问题
<AccordionGroup>
<Accordion title="如果我的父级记录没有域名或邮箱怎么办?">
您有两个选项:
1. 使用 Twenty 的 `id`(导出父级记录以获取其 ID)
2. 在数据模型中创建自定义唯一字段,用于存储来自旧系统的外部 ID
</Accordion>
<Accordion title="我可以更新现有记录上的关系吗?">
是! 包含子级记录的唯一标识符(例如,人员的 `email`)以及新的关系值。 导入将更新该关系。
</Accordion>
<Accordion title="我可以导入多对多关系吗?">
目前尚不支持导入多对多关系。 计划于 2026 年上半年推出。
</Accordion>
<Accordion title="我可以关联到多个对象类型吗(例如,笔记同时关联到人员和公司)?">
指向多个对象类型的关系目前尚不支持导入/导出。 此功能已在我们的路线图中。
</Accordion>
<Accordion title="如果父级记录不存在会怎样?">
导入会为该行显示错误。 您可以:
* 先导入父级记录,然后重新导入
* 修正引用值
* 从导入中移除该行
</Accordion>
<Accordion title="为什么我的关系没有正确关联?">
常见原因:
* 格式错误(域名请使用 `https://domain.com`)
* 大小写不匹配(检查拼写是否完全一致)
* 父级不存在(请先导入父级)
* 映射了多个标识符(仅使用一个)
</Accordion>
</AccordionGroup>
<Warning>
**请注意:软删除的记录也会计入唯一性。**
如果您收到“not found”错误,但记录似乎存在,请检查命令菜单 → 查看已删除的记录。 父级可能已被软删除。
</Warning>
## 故障排除
遇到问题? 请查看:
* [如何修复导入错误](/l/zh/user-guide/data-migration/how-tos/fix-import-errors)
* [导入关系功能](/l/zh/user-guide/data-migration/capabilities/import-relations)
* [唯一性约束](/l/zh/user-guide/data-migration/capabilities/uniqueness-constraints)

View File

@@ -0,0 +1,289 @@
---
title: 从其他CRM迁移
description: 分步指南:将您的数据从任何客户关系管理系统迁移到 Twenty。
---
## 概览
本指南将引导您将数据从任何客户关系管理系统迁移到 Twenty。 该过程包括审核您的数据、准备您的 Twenty 工作区、从当前系统导出,并导入到 Twenty。
<Note>视图、工作流和权限必须在迁移后手动重新创建。 为这些配置工作预留时间。</Note>
## 步骤 1:审核您现有的数据
迁移是一个重新开始的机会。 不要把冗余内容带过来。
**应保留的内容:**
* 活跃的联系人和公司
* 进行中的机会和交易
* 重要的备注和活动
* 实际使用的自定义字段
**应舍弃的内容:**
* 过时的联系人(超过 2 年无任何活动)
* 重复记录
* 测试数据
* 未使用的自定义字段
## 步骤 2:映射您的数据模型
在您当前的客户关系管理系统与 Twenty 之间创建一份映射文档:
| 您的客户关系管理系统 | Twenty |
| ---------- | --------------- |
| 账户 / 组织 | **公司** |
| 联系人 / 人员 | **人员** |
| 交易 / 机会 | **商业机会** |
| 活动 | **任务** 或 **注意** |
| 自定义对象 | **自定义对象** |
**对于每个字段,文档:**
* 源字段名称
* 目标20领域
* 任何需要的格式转换 (日期, 电话号码等)
<Note>在导入过程中保持此映射文档的便捷性—您将在映射列时引用。</Note>
## 第 3 步:设置您的20个工作区
在导入数据之前,准备您的20个工作区:
### 创建自定义对象和字段
1. 转到**设置 -> 数据模型**
2. 创建您需要的任何自定义对象
3. 将自定义字段添加到标准和自定义对象
4. 配置字段设置 (独特,需要选择选项等)
<Warning>
**字段必须在导入前存在。**
CSV 导入创建记录,而不是字段。 在导入前在 设置 -> 数据模型中创建所有自定义字段。
</Warning>
### 邀请您的团队
<Warning>
**邀请用户BERE导入数据。**
如果您的数据包含用户引用(帐户所有者、受让人等),那么这些用户必须在20个时间内才能导入。 否则,就无法确定这些关系。
</Warning>
1. 转到 **设置 → 成员**
2. 邀请所有团队成员
3. **等待所有人接受**他们的邀请
4. 验证所有用户出现在您的会员列表
## 第 4 步:从您当前的 CRM 导出
从您当前的 CRM 导出数据:
1. 寻找一个 **导出** 函数 (通常在设置、 数据管理或管理下)
2. 尽可能导出为 **CSV 格式**
3. 单独导出每个对象类型 (公司、联系人、交易等)
4. 包括你想要迁移的所有字段
**导出这些对象(按此顺序作为参考):**
1. 公司/帐户 / 组织
2. 联系人 / 人员
3. 交易/机会
4. 说明和活动
5. 自定义对象
## 第 5 步:清理和格式化您的数据
在电子表格应用程序中打开每个导出的 CSV 并为20做准备。
### 删除重复项
1. 按唯一字段排序 (个人电子邮件,公司域)
2. 删除或合并重复的行
3. 验证不存在重复的 20 个已经存在
### 正确格式字段
| 字段类型 | 所需格式 |
| ----------- | -------------------------- |
| **域** | `https://domain.com` |
| **电子邮件** | `name@domain.com` (必须是唯一的) |
| **日期** | `YYY-MM-DD` |
| **电话** | 三列:数字,国家代码,呼叫代码 |
| **Boolean** | `TRUE` 或 `FALSE` (大写) |
| **选择字段** | 使用 API 名称,不显示标签 |
<Warning>
**域格式是关键。**
使用 `https://domain.com` (不是 `domain.com` 或 `www.domain.com` )。 这匹配20个格式,并且在您连接电子邮件/日历同步时防止重复。
</Warning>
查看[如何准备您的 CSV 文件](/l/zh/user-guide/data-migration/how-tos/prepare-your-csv-files) 以获取所有字段类型的完整格式要求。
### 添加关系列
要连接记录(例如人与公司),添加一列与母公司唯一标识符。
**示例:有公司链接的人CSV**
```csv
firstName,lastName,email,companyDomain
John,Smith,john@acme.com,https://acme.com
Jane,Doe,jane@widgets.co,https://widgets.co
```
查看[如何导入关系](/l/zh/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) 获取链接记录的详细说明。
### 更新用户引用
如果您的数据包含用户指派(Owner,指派):
1. 在 **用户的电子邮件** 中添加一列(不仅仅是旧系统中的他们的 ID)
2. 使用用户用来加入你的20个工作区的相同电子邮件地址
参见 [如何准备 CSV 文件](/l/zh/user-guide/data-migration/how-tos/prepare-your-csv-files) 以获取完整的格式指南。
## 步骤6:导入到 20
<Warning>
**导入订单事项!**
总是按此顺序导入:
1. **Companies** 优先(无依赖)
2. **People** 秒(链接到公司)
3. **Opportunities** 第三个(链接到公司/人民)
4. **便笺和任务** (链接到记录)
5. **自定义对象** 跟随他们的依赖关系
在您可以引用之前必须存在父记录。
</Warning>
### 导入每个对象
对于每个CSV文件,先后顺序:
1. 在 20 中导航到对象
2. 单击**视图-> 导入记录**
3. 上传CSV文件
4. 映射列到字段:
* 映射用户电子邮件列到适当的关系字段
* 映射关系列(例如`companyDomain`) 到关联字段
5. 审核并修复界面中的任何错误
6. 确认导入
7. 在继续到下一个文件之前验证几个记录
**详细指南:**
* [如何导入公司](/l/zh/user-guide/data-migration/how-tos/import-companies-via-csv)
* [如何导入联系人](/l/zh/user-guide/data-migration/how-tos/import-contacts-via-csv)
* [如何导入关系](/l/zh/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv)
## 步骤7:大型迁移(50 000+个记录)
对于大型迁移:
| 音量 | 建议的办法 |
| ---------------- | ---------- |
| 不足1万份记录 | 单独导入 CSV |
| 10,000-50,000份记录 | 拆分成多个CSV文件 |
| 50,000多条记录 | 使用 API |
**用于API导入:**
* 更快、更可靠的大型数据集
* 支持批量操作 (每次呼叫最多60个记录)
* 查看[如何通过 API 导入数据](/l/zh/user-guide/data-migration/how-tos/import-data-via-api)
## 步骤8:迁移后设置
导入数据后,完成您的工作区配置:
### 重新创建视图
* 使用过滤器、排序和列配置设置已保存的视图
* 创建您需要的 kanban 或日历视图
### 重新创建工作流
* 在 **设置 -> Workflow** 中重建您的automatic
* 以最关键的工作流开始
* 在依赖之前测试每一个
### 配置角色和权限
* 在 **设置 → 成员 → 角色** 中设置角色
* 分配用户到适当的角色
### 连接电子邮件和日历
* 每个用户在 **设置 -> 帐户** 中连接自己的帐户
* 20个将开始同步电子邮件到联系记录
* 查看[电子邮件和日历](/l/zh/user-guide/calendar-emails/overview)
### 训练你的团队
* 通过新接口一起移动
* 记录任何特定团队的进程
## 常见问题及解决方案
| 问题 | 原因 | 解答 |
| ---------- | --------- | --------------------------- |
| **复制错误** | 电子邮件/域已存在 | 从文件中删除重复,或者包含唯一的标识符来更新现有记录 |
| **找不到关系** | 父记录不存在 | 首先导入父对象 (People之前的公司) |
| **缺少字段** | 自定义字段不存在 | 在导入前在设置 -> 数据模型中创建字段 |
| **选择字段错误** | 使用显示标签 | 使用 API 名称 (在设置中启用高级模式来查找他们) |
| **用户关系为空** | 用户未接受邀请 | 确保所有用户在导入前接受邀请 |
请参阅[如何修复导入错误](/l/zh/user-guide/data-migration/how-tos/fix-import-errors)详细故障排除步骤。
## 迁移后检查表
### 数据的完整性
<Check>所有记录均已导入(与源系统的数量进行比较)</Check>
<Check>关联工作正常(人员已关联到公司)</Check>
<Check>用户分配映射正确(Owner、Assignee)</Check>
<Check>自定义字段已填充</Check>
<Check>没有意外的重复项</Check>
### 配置
<Check>视图已重新创建</Check>
<Check>工作流已重新创建并通过测试</Check>
<Check>角色和权限已配置</Check>
<Check>邮件/日历同步已连接</Check>
### 团队准备情况
<Check>团队在新系统</Check>
<Check>老的 CRM 访问计划已决定 (保留以供参考吗? 何时禁用?)</Check>
## 常见问题
<AccordionGroup>
<Accordion title="我可以自动迁移工作流吗?">
不是当前的。 工作流必须在 20 中手动重新创建。
</Accordion>
<Accordion title="文件附件是什么?">
文件附件不包含在 CSV 导出中。 您需要手动重新上传他们,通过API迁移,或联系我们的团队寻求帮助。
</Accordion>
<Accordion title="我能在迁移期间保持两个系统运行吗?">
是的,我们建议保持您旧的 CRM 运行,直到您验证迁移完成。 请注意不要在这两个地方建立新的数据。
</Accordion>
<Accordion title="移徙通常需要多长时间?">
取决于数据量和复杂性。 可在几个小时内进行小规模移徙(不到10 000项记录)。 大规模迁移可能需要几天时间,包括数据清理和测试。
</Accordion>
</AccordionGroup>
## 需要帮助?
<Tip>
想在迁移过程中获得帮助吗? [查找认证的20个合作伙伴](https://twenty.com/partners/list?categories=SOLUTIONING\&ref=docs-migrate-crm) 以移动您的数据、管道和用户端到结束。
</Tip>

View File

@@ -0,0 +1,173 @@
---
title: 从自托管迁移到云
description: 分步指南:将您的 Twenty 自托管实例迁移到 Twenty Cloud。
---
## 概览
本指南将引导您把数据从 Twenty 自托管实例迁移到 Twenty Cloud。 该过程包括设置您的云端工作区、导出数据并重新导入。
<Note>视图、工作流和角色必须在迁移后手动重新创建。 为这些配置工作预留时间。</Note>
## 步骤 1:创建您的云端工作区
1. 访问 [app.twenty.com](https://app.twenty.com) 并创建一个新的工作区
2. 完成初始设置向导
3. 记录您的新工作区 URL
## 步骤 2:重新创建您的数据模型
在导入数据之前,重新创建您的自定义对象和字段:
1. 在您的云端实例中进入 **设置 → 数据模型**
2. 创建与自托管设置相匹配的自定义对象
3. 向标准对象和自定义对象添加自定义字段
4. 配置字段设置(唯一、必填等)
<Note>为便于参考,请截取自托管数据模型的屏幕截图,或并排打开两个实例。</Note>
## 步骤 3:邀请所有用户
<Warning>
**至关重要:在导入数据之前邀请用户。**
在您导入任何引用到他们的记录(例如“账户所有者”字段)之前,用户必须先接受邀请。 如果用户尚不存在,则无法映射这些关系。
</Warning>
1. 在您的云端实例中进入 **设置 → 成员**
2. 邀请所有在自托管环境中拥有账户的团队成员
3. **等待所有人接受** 邀请
4. 核实所有用户都出现在您的“成员”列表中
## 步骤 4:从自托管导出数据
从您的自托管实例中导出每个对象:
1. 导航到每个对象(公司、人员、商机等)
2. 将视图配置为显示您希望迁移的**所有列**
3. 点击 **⋮** → **导出视图**
4. 将每个 CSV 文件保存为清晰的名称(例如,`companies-export.csv`)
**按以下顺序导出**(供导入时参考):
1. 公司
2. 人员
3. 机会
4. 自定义对象(按其依赖关系顺序)
5. 任务、笔记
## 步骤 5:更新工作区成员引用
导出的 CSV 包含来自您自托管实例的用户 ID。 这些 ID 与您的云端实例不匹配,因此需要将其替换为邮箱地址。
**对于每个包含用户引用(所有者、被指派人等)的 CSV 文件:**
1. 在电子表格应用中打开该 CSV
2. 在每个用户 ID 列旁边添加一个新列(例如,在 `accountOwnerId` 旁添加 `accountOwnerEmail`)
3. 填写每位用户的邮箱地址
4. 您可以删除旧的 ID 列或保留它(导入时会被跳过)
**示例:**
之前:
```csv
name,domain,accountOwnerId
Acme Corp,https://acme.com,old-uuid-123
```
之后:
```csv
name,domain,accountOwnerEmail
Acme Corp,https://acme.com,john@yourcompany.com
```
<Note>请使用用户接受云端工作区邀请时所使用的相同邮箱地址。</Note>
## 步骤 6:规划您的导入顺序
按正确顺序导入文件以保持关系:
1. **公司** 优先(无依赖关系)
2. **人员** 其次(关联到公司)
3. **商机** 第三(关联到公司和人员)
4. **自定义对象**(按其依赖关系)
5. **任务和笔记** 最后(关联到其他记录)
有关维护关系的详细信息,请参见[如何导入关系](/l/zh/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv)。
## 步骤 7:导入到云端
针对每个 CSV 文件,按顺序进行:
1. 在云端实例中导航到该对象
2. 点击 **⋮** → **导入记录**
3. 上传 CSV 文件
4. 将列映射到字段:
* 将用户邮箱列映射到相应的关系字段
* 按常规方式映射其他列
5. 检查并修复任何错误
6. 确认导入
7. 在继续下一个文件之前,先核对几条记录
## 步骤 8:重新创建配置
导入数据后,请手动重新创建:
### 视图
* 根据筛选、排序和列配置重新创建已保存的视图
* 设置任何看板或日历视图
### 工作流
* 在 **设置 → 工作流** 中重新创建自动化
* 在依赖之前先测试每个工作流
### 角色和权限
* 在 **设置 → 成员 → 角色** 中设置角色
* 将用户分配到合适的角色
### 集成
* 为每位用户重新连接邮件和日历同步
* 使用新的 API 密钥重新配置任何 API 集成
## 迁移后检查表
<Check>所有数据均已成功导入</Check>
<Check>对象之间的关系运行正常</Check>
<Check>用户分配(所有者、被指派人)映射正确</Check>
<Check>视图已重新创建</Check>
<Check>工作流已重新创建并通过测试</Check>
<Check>角色和权限已配置</Check>
<Check>邮件/日历同步已重新连接</Check>
<Check>API 集成已使用新密钥更新</Check>
## 常见问题
<AccordionGroup>
<Accordion title="我可以自动迁移工作流吗?">
目前不可以。 必须在您的云端实例中手动重新创建工作流。
</Accordion>
<Accordion title="文件附件和图片怎么办?">
CSV 导出不包含文件附件。 您需要手动重新上传任何附件、通过 API 迁移它们,或联系我方团队获取大规模迁移的协助。
</Accordion>
<Accordion title="迁移期间我可以同时运行两个实例吗?">
可以。我们建议在您确认云端迁移完成之前,保持自托管实例运行。 只要注意不要在两个环境中同时创建新数据即可。
</Accordion>
<Accordion title="如果某个用户尚未接受邀请怎么办?">
引用该用户的记录将导入失败,或其关系字段为空。 在导入数据之前,确保所有用户都已接受邀请。
</Accordion>
</AccordionGroup>
## 需要帮助?
<Tip>
正在迁移大型或复杂的工作区? [寻找经过认证的 Twenty 合作伙伴](https://twenty.com/partners/list?categories=HOSTING\&ref=docs-migrate-cloud) 来端到端处理整个迁移。 *(或者联系我们的团队: [contact@twenty.com](mailto:contact@twenty.com)。)*
</Tip>

View File

@@ -0,0 +1,267 @@
---
title: 准备您的 CSV 文件
description: 完整的分步指南,指导您将数据格式化以导入 Twenty。
---
## 概览
本指南将引导您准备 CSV 文件,以成功完成导入。 请按照以下步骤操作以避免错误。
## 步骤 1:检查文件要求
开始之前,请确保您的文件满足以下要求:
| 要求 | 详情 |
| -------- | ----------------- |
| **格式** | CSV、XLSX 或 XLS |
| **大小限制** | 每个文件最多 10,000 条记录 |
| **编码** | 建议使用 UTF-8 |
| **结构** | 每个文件仅一种对象类型 |
<Note>对于超过 10,000 条记录的数据集,请拆分为多个文件,或使用[API 导入](/l/zh/user-guide/data-migration/how-tos/import-data-via-api)。</Note>
## 步骤 2:下载示例文件
**这是最重要的一步。** 示例文件展示了 Twenty 期望的准确列名和格式。
1. 进入对象视图(人员、公司等)
2. 点击 **⋮** → **导入记录**
3. 点击 **下载示例文件**
4. 将此文件用作模板
<Note>**专业提示:** 改为导出少量现有记录。 这将为您提供数据应如何格式化的真实示例,并且在导入过程中列名会自动映射。</Note>
## 步骤 3:移除重复值
Twenty 会对某些字段强制唯一性。 重复项会导致导入错误。
| 对象 | 唯一字段 |
| --------- | ------------------ |
| **人员** | `id`, `email` |
| **公司** | `id`, `domain` |
| **自定义对象** | `id`,以及任何您标记为唯一的字段 |
**导入之前:**
1. 按唯一字段(email 或 domain)对电子表格排序
2. 删除或合并重复的行
3. 检查 Twenty 中是否已存在重复项
<Warning>**软删除的记录计入唯一性。** 位于“命令菜单 → 查看已删除的记录”中的记录会导致重复错误。 请永久删除这些记录,或将其恢复并更新。</Warning>
## 步骤 4:正确格式化各字段类型
不同的字段类型需要特定格式。 以下是完整参考:
### 文本字段
* 无需特殊格式
* 首尾空格将自动去除
### 电子邮件字段
* 必须是有效的电子邮件格式:`name@domain.com`
* 必须唯一(文件内及 Twenty 中不得重复)
* 对于附加电子邮件,请在 **Emails / Additional Emails** 列中使用此格式:
```
["jane@twenty.com","jane.doe@twenty.com"]
```
### 域名字段
* **推荐格式**:`https://domain.com`
* 这与邮箱/日历同步所使用的格式一致(可防止重复)
* 填写这两列:
* **Domain / Domain Label**:`domain.com`
* **Domain / Domain URL**:`https://domain.com`
* 在您的文件内以及在 Twenty 中必须唯一
### 电话字段
电话是一个**嵌套字段**,需要多列:
| 列 | 示例 |
| --------------------------------------- | ------------ |
| **Phones / Primary Phone Number** | `4159095555` |
| **Phones / Primary Phone Country Code** | `US` |
| **电话 / 主电话号码国际区号** | `+1` |
### 地址字段
地址是一个**嵌套字段**,包含多个列(有些可以留空):
* **Address / Address 1**:街道地址第 1 行
* **Address / Address 2**:街道地址第 2 行(可选)
* **Address / City**:城市名称
* **Address / State**:州或省
* **Address / Country**:国家名称
* **Address / Post Code**:邮政/ZIP 编码
### 日期字段
在整个文件中使用一致的格式:
* `YYYY-MM-DD`(推荐):`2024-03-15`
* ISO 8601:`2024-03-15T10:30:00Z`
### 数字字段
* 仅数字(无文本)
* 小数使用点号:`1234.56`
* 不使用千位分隔符(不要写成 `1,234.56`)
### 货币字段
货币是一个**嵌套字段**,需要两列,且**两列都必须填写**:
| 列 | 示例 |
| --------------------- | --------- |
| **Amount / Amount** | `1234.56` |
| **Amount / Currency** | `USD` |
### 布尔字段
使用大写:`TRUE` 或 `FALSE`
<Warning>小写的 `true` 或 `false` 将无法使用。</Warning>
### 选择字段
使用选项的**API 名称**,而不是显示标签。
**如何查找 API 名称:**
1. 进入 **设置 → 数据模型**
2. 选择对象和字段
3. 启用**高级模式**(右下角切换)
4. 复制该 API 名称(例如:`OPTION_1`,而不是 "Option 1")
<Note>新的选择项不会自动创建。 请在导入前于 **设置 → 数据模型** 中添加它们。</Note>
### 多选字段
以数组格式使用 API 名称:
```
["VALUE1","VALUE2"]
```
### 数组字段
使用 JSON 数组格式:
```
["value1","value2"]
```
### 评分字段
使用以下格式:`RATING_1`、`RATING_2`、`RATING_3`、`RATING_4` 或 `RATING_5`
### 链接/URL 字段
填写两列:
* **Links / Link Label**:`Twenty`
* **Links / Link URL**:`https://twenty.com`
对于次要链接,请使用 **Links / Secondary Links** 列:
```
[{"url":"https://twenty.com","label":"Twenty"}]
```
### JSON 字段
使用有效的 JSON 格式:
```
{"key":"value","key2":"value2"}
```
### ID 字段
* **可选**:如未提供,Twenty 将自动生成 ID
* **格式**:UUID(例如:`c776ee49-f608-4a77-8cc8-6fe96ae1e43f`)
* **使用场景**:包含 ID 以更新现有记录,而不是创建新记录
## 步骤 5:添加关系列(如果要关联记录)
要将记录关联到其他对象(例如,将人员关联到公司),请添加包含关联记录唯一标识符的列。
**示例**:将人员关联到公司
在您的人员 CSV 中添加一列:
```
firstName,lastName,email,companyDomain
John,Smith,john@acme.com,https://acme.com
Jane,Doe,jane@widgets.co,https://widgets.co
```
**关系的重要规则:**
* 父记录必须已存在于 Twenty 中
* 使用**域名 URL** 格式(`https://domain.com`),而不是标签
* 仅映射一个唯一标识符(不要同时包含 `companyId` 和 `companyDomain`)
* 对于工作区成员,请使用其**电子邮箱**(而不是姓名)
<Warning>
**导入顺序很重要!**
先导入“1”端,再导入“多”端:
1. **公司** 优先
2. **人员** 其次(包含公司引用)
3. **机会** 第三
在引用之前,父记录必须已存在。
</Warning>
详细说明请参见[如何导入关系](/l/zh/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv)。
## 步骤 6:确保 Twenty 中存在这些字段
导入会创建**记录**,而非**字段**。 要导入的所有字段必须已在您的数据模型中存在。
**导入前:**
1. 进入 **设置 → 数据模型**
2. 选择您的对象
3. 创建所需的任何自定义字段
4. 记录准确的字段名称(必须与列标题匹配)
## 步骤 7:最终检查清单
在上传文件之前,请确认:
<Check>文件为 CSV、XLSX 或 XLS 格式</Check>
<Check>文件少于 10,000 条记录</Check>
<Check>编码为 UTF-8</Check>
<Check>没有重复的电子邮箱(针对人员)或域名(针对公司)</Check>
<Check>日期在全篇使用一致的格式</Check>
<Check>域名使用 `https://domain.com` 格式</Check>
<Check>布尔字段使用 `TRUE` 或 `FALSE`(大写)</Check>
<Check>选择字段使用 API 名称,而非显示标签</Check>
<Check>所有自定义字段已存在于 设置 → 数据模型 中</Check>
<Check>父记录先于子记录导入</Check>
<Check>关系列引用现有记录</Check>
## 常见错误及避免方法
| 错误 | 解决方案 |
| ------------------- | ---------------------------- |
| 使用 `true` 而非 `TRUE` | 布尔值必须为大写 |
| 在选择字段中使用显示标签 | 在“设置”中查找并使用 API 名称 |
| 在公司之前导入人员 | 始终先导入父对象 |
| 货币字段缺少货币代码 | 填写金额和货币两列 |
| 域名格式错误 | 始终使用 `https://domain.com` 格式 |
| 为关系映射了多个唯一字段 | 仅映射一个(域名或 ID,不要同时映射) |
## 下一步
您的文件已准备就绪! 现在:
* [导入公司](/l/zh/user-guide/data-migration/how-tos/import-companies-via-csv)(先导入这些)
* [导入联系人](/l/zh/user-guide/data-migration/how-tos/import-contacts-via-csv)
* [修复任何导入错误](/l/zh/user-guide/data-migration/how-tos/fix-import-errors)

View File

@@ -0,0 +1,198 @@
---
title: 通过导入更新现有记录
description: 使用 CSV 导入批量更新记录的完整分步指南。
---
## 概览
需要一次更新许多记录吗? 与其逐个编辑,不如使用 CSV 导入批量更新现有记录。
**使用场景:**
* 为多人更新职位名称
* 批量更改公司信息
* 向新的自定义字段添加数据
* 更正多条记录中的数据错误
## 工作原理
当您导入的文件包含与现有记录匹配的**唯一标识符**时,Twenty 会更新该记录,而不是创建重复项。
| 如果唯一标识符... | Twenty 将... |
| ---------- | -------------------- |
| 与现有记录匹配 | **更新**现有记录 |
| 与任何记录都不匹配 | **创建**新记录 |
| 您的文件中缺少 | **创建**新记录(带自动生成的 ID) |
<Warning>
**多选字段会被覆盖,而不是合并。**
如果一条记录已选择了 `Option A` 和 `Option B`,而您导入了 `["Option C"]`,则导入后该记录将只保留 `Option C`。 导入会替换之前的所有选择——不会在其基础上追加。
若要保留现有值,请在导入中包含它们全部:`["Option A","Option B","Option C"]`
</Warning>
## 步骤 1:导出现有数据
首先,导出您要更新的记录:
1. 导航到对象(人员、公司等)
2. **添加所需列** — 点击 **Options → Fields** 以显示您要更新的字段
3. **如有需要,进行筛选** — 将范围缩小到仅包含您要更新的记录
4. 点击 **⋮** → **导出视图**
5. 保存 CSV 文件
<Note>**为什么先导出?** 导出的文件具有正确的格式,包含唯一标识符,并且在导入时可自动映射。</Note>
### 导出内容
* 当前视图中所有可见列
* 记录的唯一标识符(`id`、`email`、`domain`)
* 可供您修改的当前字段值
## 步骤 2:编辑 CSV 文件
在电子表格应用(Excel、Google 表格等)中打开导出的文件:
1. **保留唯一标识符列** — 不要删除 `id`、`email` 或 `domain`
2. 在您要更改的列中**更新这些值**
3. **移除不需要更新的列**(可选,但更简洁)
4. **不要更改唯一标识符的值** — 否则 Twenty 将创建新记录
### 示例:更新职位名称
**导出的文件:**
```csv
id,email,firstName,lastName,jobTitle
550e8400-e29b-41d4-a716-446655440001,john@acme.com,John,Smith,Sales Rep
550e8400-e29b-41d4-a716-446655440002,jane@acme.com,Jane,Doe,Sales Rep
550e8400-e29b-41d4-a716-446655440003,bob@acme.com,Bob,Johnson,Sales Rep
```
**进行编辑后:**
```csv
id,email,firstName,lastName,jobTitle
550e8400-e29b-41d4-a716-446655440001,john@acme.com,John,Smith,Account Executive
550e8400-e29b-41d4-a716-446655440002,jane@acme.com,Jane,Doe,Senior Account Executive
550e8400-e29b-41d4-a716-446655440003,bob@acme.com,Bob,Johnson,Account Executive
```
<Warning>
**不要更改唯一标识符的值。**
如果您将 `john@acme.com` 更改为 `john.smith@acme.com`,Twenty 将创建新记录,而不是更新现有记录。
</Warning>
## 步骤 3:导入已更新的文件
1. 导航到对象
2. 点击 **⋮** → **导入记录**
3. 上传您已编辑的 CSV 文件
4. **确保唯一标识符已映射** — 确认 `email`、`domain` 或 `id` 映射正确
5. 检查字段映射
6. 检查是否存在错误
7. 点击 **确认**
Twenty 根据唯一标识符匹配记录,并使用新值进行更新。
## 选择合适的唯一标识符
| 对象 | 推荐 | 备选 | 备注 |
| --------- | ------ | ---- | ----------- |
| **人员** | `电子邮件` | `id` | 电子邮件便于阅读 |
| **公司** | `域` | `id` | 域名便于阅读 |
| **自定义对象** | 任何唯一字段 | `id` | 使用您的自定义唯一字段 |
<Note>**仅使用一个唯一标识符。** 不要同时映射 `email` 和 `id`。 这可能会引起混淆和错误。</Note>
### 使用自定义唯一字段
如果您有标记为唯一的自定义字段(例如来自其他系统的外部 ID):
1. 在导出和导入中包含该字段
2. 在导入过程中进行映射
3. Twenty 将基于该字段进行匹配
## 步骤 4:验证更新结果
导入后:
1. 打开几条已更新的记录
2. 确认更改已生效
3. 检查是否未创建重复记录
## 文件中未包含的字段会怎样?
**未包含在导入文件中的字段将保持不变。**
| 您的文件包含... | 结果 |
| -------------------------- | -------------------------- |
| `email`,`jobTitle` | 只有 `jobTitle` 被更新;其他字段保持不变 |
| `email`,`jobTitle`,`phone` | `jobTitle` 和 `phone` 被更新 |
这意味着您只需包含想要更改的字段(以及唯一标识符)。
## 同时进行更新与创建新记录
您可以在同一次导入中更新现有记录并创建新记录:
```csv
email,firstName,lastName,jobTitle
john@acme.com,John,Smith,Senior Manager ← Updates existing (email matches)
newperson@acme.com,New,Person,Analyst ← Creates new (email doesn't match)
```
## 常见错误及避免方法
| 错误 | 问题 | 结果 | 解决方案 |
| ----------- | ------------------------------------------------ | ---------- | ---------------------------- |
| **更改唯一标识符** | 将 `john@acme.com` 更改为 `john.smith@acme.com` | 创建新记录而不是更新 | 保持唯一标识符不变 |
| **多个唯一字段** | 同时映射 `email` 和 `id` | 可能出现匹配冲突 | 仅映射一个唯一标识符 |
| **没有唯一标识符** | 文件仅包含 `firstName`、`lastName`、`jobTitle` | 所有行都会创建新记录 | 务必包含 `email`、`domain` 或 `id` |
| **大小写不匹配** | 文件中为 `John@acme.com`,但 Twenty 中为 `john@acme.com` | 创建新记录 | 从 Twenty 导出以获取精确值 |
## 常见问题
<AccordionGroup>
<Accordion title="如果某些记录尚不存在怎么办?">
具有唯一标识符但与现有记录不匹配的记录将被创建为新记录。 这样您就可以在同一次导入中同时进行更新和创建。
</Accordion>
<Accordion title="我可以清除/清空字段值吗?">
可以,在 CSV 中将该单元格留空即可。 导入会清除现有记录中该字段的值。
</Accordion>
<Accordion title="我未包含在导入中的字段会怎样?">
未包含在导入文件中的字段在现有记录上将保持不变。 只有您包含的字段会被更新。
</Accordion>
<Accordion title="我可以更新关联字段(例如公司)吗?">
是! 包含该关联对象的唯一标识符(例如 `companyDomain`),并将其映射到该关联字段。 该关联将被更新。
</Accordion>
<Accordion title="我如何知道哪些记录会被更新、哪些会被创建?">
在导入审核步骤中,Twenty 会根据唯一标识符的匹配情况,显示将被更新与被创建的记录数量。
</Accordion>
<Accordion title="我可以撤销一次批量更新吗?">
无法自动撤销。 我们建议在进行批量更新之前导出数据作为备份。
</Accordion>
</AccordionGroup>
## 最佳实践
1. **先导出** — 始终从导出开始,以确保格式正确
2. **更新前先备份** — 在进行批量更改之前导出您的数据
3. **先用少量记录进行测试** — 在进行大规模批量处理前,先尝试更新 5-10 条记录
4. **使用便于阅读的标识符** — `email` 和 `domain` 比 `id` 更容易核对
5. **只包含必要的列** — 列越少,出错的可能性越低
## 故障排除
遇到问题? 请查看:
* [如何修复导入错误](/l/zh/user-guide/data-migration/how-tos/fix-import-errors)
* [唯一性约束](/l/zh/user-guide/data-migration/capabilities/uniqueness-constraints)
* [字段映射参考](/l/zh/user-guide/data-migration/capabilities/field-mapping)

View File

@@ -0,0 +1,83 @@
---
title: 数据迁移
description: 通过 CSV 文件或 API 导入和导出您的 CRM 数据。
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
## 导入方法
Twenty 支持两种主要的数据导入方法:
| 方法 | 最佳适用 | 数量上限 |
| ---------- | --------- | --------------- |
| **CSV 导入** | 标准迁移,定期更新 | 每个文件 10,000 条记录 |
| **API 导入** | 大规模迁移,自动化 | 无限制 |
<Note>对于非常大的数据集(数十万条记录),请使用 API。 我们的[实施合作伙伴](/l/zh/user-guide/getting-started/capabilities/implementation-services)如有需要,可帮助运行这些脚本。</Note>
## CSV 导入基础知识
您可以使用 CSV、XLSX 或 XLS 文件导入任何对象的数据。 每个文件应**仅包含一种对象类型**(例如,仅包含“人员”记录)。
<Note>**字段必须在导入前已存在。** 上传 CSV 会创建记录,但不会创建字段。 如果您需要自定义字段,请先在**设置 → 数据模型**中创建它们。</Note>
### 步骤
1. 导航到您要导入数据的对象
2. 点击右上角的 **⋮** 图标(命令菜单),然后点击 **导入记录**
3. 下载模板文件以确保您的数据符合预期格式
4. 上传已按格式整理的 CSV 文件
5. 将您的列映射到 Twenty 字段
6. 检查错误(以黄色高亮),并在 UI 中直接编辑进行修复
7. 确认导入
### 导入对象之间的关系
您可以使用 CSV 导入功能来导入对象之间的关系。 您需要使用此对象中的唯一字段来引用相关对象:`id`;对于人员和工作区成员,使用 `email`;对于公司,使用 `domain`;对于其他对象,则使用数据模型中设置为唯一的任何字段。
<Note>**已删除的记录也计入唯一性。** 软删除的记录(在“命令菜单 → 查看已删除记录”下可见)会包含在唯一性检查中。 如果您导入的记录与某个已删除记录具有相同的唯一值,该已删除记录将被还原。</Note>
<Warning>
**导入顺序很重要!**
在导入相关对象时,请按以下顺序上传文件:
1. 首先导入**公司**(关系中的“一”端)
2. **人员** 第二(通过 companyId 关联到公司)
3. **商机** 第三(关联到公司/人员)
4. 最后导入有关系的**自定义对象**
为什么? 在一对多关系中,“一”端必须先存在,才能被引用。 例如,在导入带有该公司 ID 的人员之前,必须先存在该公司的记录。
</Warning>
有关操作的分步指南,请参阅[这篇文章](/l/zh/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv)。
## 导出数据
导出您的工作区数据,用于备份、报告或迁移。
### 步骤
1. 导航到您要导出的对象
2. 在视图中配置所需的列
3. 点击 **⋮** → **导出视图**
4. 保存该 CSV 文件
<Note>**仅导出可见列。** CSV 文件只包含当前视图中显示的列。 导出前添加或隐藏列以控制包含的数据。</Note>
<Note>**导出限制**:每次导出最多 20,000 条记录。</Note>
## 权限
数据导入和导出需要特定权限:
* **导入**:需要“导入 CSV”权限
* **导出**:需要“导出 CSV”权限
如果您没有这些权限,请联系您的工作区管理员。
## 下一步
* [准备您的 CSV 文件](/l/zh/user-guide/data-migration/how-tos/prepare-your-csv-files)
* [通过 CSV 导入对象之间的关系](/l/zh/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv)
* [通过 API 导入大型数据集](/l/zh/user-guide/data-migration/how-tos/import-data-via-api)

View File

@@ -0,0 +1,122 @@
---
title: 字段
description: 了解字段的作用以及如何管理它们。
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
## 关于字段
字段就像电子表格中的列。 它们存储不同类型的数据,如文本、数字或日期。 字段可以是标准的(内置的)或自定义的(您创建的)。
### 标准字段
标准字段是内置在Twenty中,用于处理常见的业务需求。
例如,`姓`和`名`是`人`对象中的标准字段。 它们用于存储个人姓名的文本数据。
您无法删除标准字段,但如果不需要,您可以停用它们。
您还可以自定义标准`SELECT`类型字段的选项,例如机会中的`阶段`选项。
<img src="/images/user-guide/fields/standard-fields.png" style={{width:'100%'}} />
### 自定义字段
可以将自定义字段添加到任何对象。 您可以存储文本、数字、日期、下拉选择等。 使用自定义字段来跟踪特定于您业务的信息。
例如,SpaceX的自定义字段可以是`火箭活动状态`,指示火箭是否在运作。
<img src="/images/user-guide/fields/custom-fields.png" style={{width:'100%'}} />
## 字段类型
Twenty 支持多种字段类型:
| 类型 | 描述 | 示例 |
| ----- | ------------------------- | ----------- |
| 地址 | 包含街道、城市、州/省、国家、邮政编码的结构化地址 | 办公地址 |
| 数组 | 文本值列表 | 标签 |
| 布尔值 | 真/假复选框 | 是否活跃 |
| 货币 | 带有货币代码的金额 | 交易金额(USD) |
| 日期 | 日期值 | 关闭日期 |
| 日期和时间 | 带时间的日期 | 会议时间 |
| 域 | 网站域名(用于公司) | acme.com |
| 电子邮件 | 电子邮件地址(含主要 + 附加) | 联系人的电子邮件 |
| JSON | 结构化 JSON 数据 | 自定义元数据 |
| 链接 | 带标签的 URL(主要 + 次要) | 网站、LinkedIn |
| 长文本 | 多行文本 | 描述、备注 |
| 多选 | 从预定义列表中选择多个选项 | 标签、类别 |
| 数字 | 数值(整数或小数) | 数量、分数 |
| 电话 | 带国家代码的电话号码 | 工作电话 |
| 评分 | 星级评分(1-5) | 优先级、分数 |
| 关系 | 链接到其他对象中的记录 | 公司 → 人员 |
| 选择 | 从预定义列表中选择单个选项 | 阶段、状态 |
| 文本 | 单行文本 | 名称、标题 |
## 创建自定义字段
要将自定义字段添加到任何对象,请按照以下步骤操作:
1. 转到左侧栏的`设置`。
2. 转到`数据模型`,然后选择您想要自定义的对象。
3. 继续点击`+ 新建字段`。
4. 选择适合您要求的字段名称和类型。 考虑添加字段描述以便更好地理解。
您新创建的字段现在可以在应用程序的字段中使用。 要将其显示在特定视图中,请单击选项菜单,然后选择`字段`。
<VimeoEmbed videoId="927628219" title="视频演示" />
**快速方法:** 点击任何对象表右上的 **+** 按钮,然后选择`自定义字段`。 这将直接带您进入数据模型设置。
<img src="/images/user-guide/fields/quick-new-field.png" style={{width:'100%'}} />
## 停用字段
您可以停用字段以从应用程序中隐藏它,而不会丢失您的数据。 这更像是隐藏字段而不是删除它。
您可以这样做:
1. 在对象设置中找到您想停用的字段。
2. 点击字段旁边的三点`⋮`打开菜单。
3. 从下拉菜单选择`停用`。
<img src="/images/user-guide/fields/deactivate-field.png" style={{width:'100%'}} />
停用字段会发生什么?
1. **在应用程序中:** 字段消失,您不能向其中添加新值。
2. **现有关系:** 如果它是一个关系字段,现有连接将保留,但不能创建新连接。
3. **通过API访问:** 您仍然可以通过API访问字段及其数据。
您可以重新激活标准字段和自定义字段,或有选择地将其永久删除。
## 使字段唯一
使字段唯一以确保不同记录无法拥有相同的值。 例如,电子邮件地址对每个人都是唯一的。
如果在设置唯一性时出现错误,请检查数据中是否有重复值(包括删除的记录)。
## 索引(高级)
数据库索引由系统自动管理——自己添加索引通常没必要,而且也很容易出错。 在开启高级模式后,每个对象在 `Settings → Data Model → <object>` 下都会有一个 **Indexes** 部分,供你在确实需要索引时使用。
## 字段配置最佳实践
### 命名约定和限制
* **单数和复数名称必须不同**:我们的 GraphQL API 需要为变更提供不同的名称
* **受保护的字段名称**:某些名称保留供系统使用(例如,`Type`、`Application`)
### 货币和电话号码字段
* **默认货币:** 可以通过数据模型进行配置
* **默认国家代码:** 可以通过数据模型为电话号码字段进行配置
### 选择字段
* **可以为每个选择字段选择默认选项**
### 记录文本字段
* **每个对象都有一个主要显示字段:** 此字段出现在最左列,并在与其他对象关联时代表记录。 它必须是文本字段。 例如,`人`使用`姓名`作为主要字段,因此当您将某人关联到公司时,您将在公司的视图中看到他们的姓名。

View File

@@ -0,0 +1,92 @@
---
title: 对象
description: 了解 Twenty 中的标准对象和自定义对象。
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
## 标准对象
标准对象是工作区中预定义的实体,帮助您入门。 它们是共享数据模型的一部分,所有Twenty用户均可访问。 您可以直接使用、进行自定义或将其停用。
<img src="/images/user-guide/objects/standard-objects.png" style={{width:'100%'}} />
### 人员
`People`对象存储您的联系人。 它包含联系信息和交互历史记录,因此您可以在一个地方查看所有客户互动。
### 公司
`Companies`对象存储您的业务帐户。 它包括行业、规模和位置等详细信息。 公司连接到`People`和`Opportunities`对象。
### 机会
`Opportunities`对象存储与交易相关的数据。 它用于跟踪潜在销售从开发到成交的全过程,记录阶段、交易规模、关联公司以及预计成交日期。 您可以在看板布局中查看您的销售流程。
### 备注
`Notes` 对象存储自由格式笔记,可附加到联系人、公司、商机及其他记录。 使用笔记记录会议摘要、重要细节或任何上下文信息。
### 任务
`Tasks` 对象存储待办事项和行动项。 任务可以关联到联系人、公司、商机及其他记录。 跟踪到期日期、负责人和完成状态,以便掌控后续跟进。
## 自定义对象
自定义对象可以存储标准对象无法处理的、组织特有的信息。 例如,如果您是SpaceX,您可能想为火箭和发射创建自定义对象。
<img src="/images/user-guide/objects/custom-objects.png" style={{width:'100%'}} />
### 创建新的自定义对象
要创建新的自定义对象:
1. 转到左侧边栏中的设置。
2. 在工作区下,转到数据模型。 在这里您可以看到您所有现有的标准和自定义对象(活动和禁用对象)的概述。
<VimeoEmbed videoId="926288174" title="视频演示" />
3. 点击顶部的`+ 新对象`。 输入名称(单数和复数),选择图标,添加自定义对象的描述,然后点击保存(在右上角)。 以Listing作为自定义对象的示例,单数为"listing",复数为"listings",以及像“房东创建的用于展示其物业的列表”这样的描述。
4. 您的自定义对象已创建,并会显示在侧边栏中。 您可以立即开始向其中添加记录。
## 管理对象
### 停用对象
如果您不再需要某个标准对象或自定义对象:
1. 进入 设置 → 数据模型
2. 查找您想要停用的对象并单击它
3. 转到对象的 **设置** 标签
4. 单击“停用”按钮
5. 该对象将在您的工作区中隐藏,但数据会被保留
### 重新启用对象
要恢复已停用的对象:
1. 进入 设置 → 数据模型
2. 启用 "停用" 过滤器
3. 寻找已停用的对象 (他们名字旁边有`停用`)
4. 单击`connec`,然后`Activate`重新激活它
5. 该对象及其所有数据将被恢复
## 最佳实践
### 何时创建自定义对象
* **独特的业务实体**:特定于您的行业或流程的事物
* **复杂关系**:当您需要跟踪多个实体之间的关联时
* **可扩展的数据**:当某类事物可能有大量实例时
### 何时改用字段
* **简单属性**:用于描述现有对象的属性
* **类别或标签**:对现有记录进行分类的方式
* **单一值**:不需要独立生命周期的信息
### 对象命名
* **使用清晰、具有描述性的名称**:让对象所代表的内容一目了然
* **遵循约定**:对象名称使用单数形式,集合使用复数形式
* **考虑您的团队**:选择人人都能理解的名称

View File

@@ -0,0 +1,94 @@
---
title: 关系字段
description: 使用关系字段在不同对象之间关联记录。
---
## 关系类型
### 一对多
对象 A 中的一条记录可以关联到对象 B 中的多条记录。
**示例:** 一个公司可以拥有许多人员(员工)。
### 多对一
对象 A 中的多条记录可以关联到对象 B 中的一条记录。
**示例:** 许多人员可以隶属于一个公司。
### 可指向多种对象类型的关系
某些对象在关系的一侧可以关联到多种对象类型。
**示例:** 一条备注可以同时附加到一个人员、一个公司和一个商机。 该备注位于 "多" 侧,连接到多个 "一" 侧。
<img src="/images/user-guide/fields/many-to-one-morph.png" style={{width:'100%'}} />
类似地,一个项目(位于 "一" 侧)可以接收来自多个人员、多个公司和多条备注的关联。
<img src="/images/user-guide/fields/one-to-many-morph.png" style={{width:'100%'}} />
<Warning>
**导入/导出限制**:指向多个对象类型的关系目前尚不支持 CSV 导入/导出。 此功能已在我们的路线图中。
</Warning>
### 多对多
对象 A 中的多条记录可以关联到对象 B 中的多条记录。
**示例:** 许多人员可以关联到许多项目,反之亦然。
多对多关系采用**连接对象**模式:一个连接双方的中间对象。 借助连接关系功能,Twenty 会直接显示最终关联的记录,并在界面中隐藏该中间对象。
<Warning>
**Beta 功能**:使用前必须在 **Settings → Community → Features** 中启用连接关系。
</Warning>
请参阅 [如何创建多对多关系](/l/zh/user-guide/data-model/how-tos/create-many-to-many-relations) 以获取完整的分步指南。
## 创建关系字段
1. 进入 **设置 → 数据模型**
2. 选择要添加关系的对象
3. 点击 **+ 新字段**
4. 将字段类型选择为 **关系**
5. 选择要关联到的目标对象
6. 配置关系设置:
* **源对象上的字段名称**:你正在编辑的对象上的关系字段名称
* **目标对象上的字段名称**:将显示在目标对象上的关系字段名称
* 关系类型(一对多、多对一)
7. 单击 **保存**
## 标准关系
Twenty 内置了标准对象之间的预设关系:
| 来源对象 | 目标对象 | 关系类型 |
| ---- | ---- | ---- |
| 人员 | 公司 | 多对一 |
| 机会 | 公司 | 多对一 |
| 机会 | 人员 | 多对一 |
## 最佳实践
### 规划关系
* **梳理你的数据模型**:在创建关系之前先进行规划
* **考虑方向**:思考由哪个对象 "拥有" 该关系
* **避免循环依赖**:保持数据模型简洁清晰
### 关系命名
* **使用清晰的名称**:使关系所代表的含义一目了然
* **保持一致**:在各个关系中使用类似的命名模式
* **兼顾两端**:为关系的两端分别起合适的名称
### 性能
* **不要过度关联**:过多的关系会拖慢你的工作区
## 限制
* **删除关系**会移除链接,但不会删除相关记录
* **循环关系**应当避免,以确保数据完整性

View File

@@ -0,0 +1,72 @@
---
title: 创建自定义字段
description: 逐步指南:向任何对象添加自定义字段。
---
使用自定义字段可捕获特定于您业务的信息。 可将其添加到任何对象——标准或自定义。
## 步骤
1. 进入 **设置 → 数据模型**
2. 选择要添加字段的对象
3. 点击 **+ 新字段**
4. 选择**字段类型**(所有类型请参见[字段](/l/zh/user-guide/data-model/capabilities/fields))
5. 输入**字段名称**和可选描述
6. 配置特定于该字段的设置(见下文)
7. 单击 **保存**
**快速方法:** 在任意表格视图的列标题末尾点击 **+** → **自定义字段**。
## 在视图中显示字段
新字段不会自动显示。 要显示:
1. 打开该对象的表格视图
2. 点击 **选项 → 字段**
3. 点击字段旁的 **眼睛图标** 以显示该字段
4. 拖动以重新排序
## 配置选项
### 用于选择/多选
1. 点击 **+ 添加选项** 以创建选项
2. 如有需要,设置**默认选项**
3. 拖动以重新排序选项
<Note>
**导入时请使用 API 名称。** 在设置中启用 **高级模式** 以查看 API 名称。 请参见[字段映射](/l/zh/user-guide/data-migration/capabilities/field-mapping)。
</Note>
### 适用于货币字段
设置**默认货币**(USD、EUR 等) 用于新记录。
### 适用于电话字段
设置**默认国家代码**,用于预填新的电话号码。
### 将字段设置为唯一
切换**唯一**选项,以防止各记录之间出现重复值。
<Note>
如果存在重复项(包括已删除记录中的重复项),将会出现错误。 请先清理重复项。
</Note>
### 设置默认值
对于选择字段,您可以选择新记录预先选中的选项。 对于复选框字段,设置默认是否选中。
## 停用字段
1. 进入 **设置 → 数据模型**
2. 找到该字段
3. 点击 **⋮ → 停用**
数据将被保留。 您可以稍后重新启用或永久删除。
## 相关内容
* [字段](/l/zh/user-guide/data-model/capabilities/fields) — 所有字段类型说明
* [数据模型常见问题解答](/l/zh/user-guide/data-model/how-tos/data-model-faq) — 常见问题

View File

@@ -0,0 +1,51 @@
---
title: 创建自定义对象
description: 在 Twenty 中创建自定义对象的分步指南。
---
自定义对象可用于存储您业务独有而标准对象未涵盖的信息。 例如:项目、产品、工单或列表项。
<Note>
**不确定该创建对象还是字段?** 请参阅[了解您的数据模型](/l/zh/user-guide/data-model/overview)以获取指导。
</Note>
## 步骤
1. 进入 **设置 → 数据模型**
2. 点击 **+ 添加对象**
3. 填写:
* **单数名称**(例如,"Listing")
* **复数名称**(例如,"Listings")
* **图标**
* **描述**(可选)
4. 单击 **保存**
您的对象会立即显示在侧边栏中。
## 下一步:添加字段
新建对象默认包含一些基础字段。 添加自定义字段以捕获所需数据:
1. 在 **设置 → 数据模型** 中,选择您的对象
2. 点击 **+ 新字段**
3. 选择字段类型,配置并保存
有关字段类型和配置的详细信息,请参阅[如何创建自定义字段](/l/zh/user-guide/data-model/how-tos/create-custom-fields)。
## 连接到其他对象
要将您的对象与人员、公司或其他对象关联,请创建关系字段。 请参阅[如何创建关系字段](/l/zh/user-guide/data-model/how-tos/create-relation-fields)。
## 停用对象
如果您不再需要某个对象:
1. 转到\*\*设置 -> 数据模型 → 您选择的对象 -> 设置 \*\*
2. 点击 **停用** 按钮
该对象会被隐藏,但数据会被保留。 您可以稍后重新启用或永久删除。
## 相关内容
* [对象](/l/zh/user-guide/data-model/capabilities/objects) — 标准对象与自定义对象
* [数据模型常见问题解答](/l/zh/user-guide/data-model/how-tos/data-model-faq) — 常见问题

View File

@@ -0,0 +1,175 @@
---
title: 创建多对多关系
description: 当双方都有多个条目时,使用连接对象将记录相互关联。
---
多对多关系使您能够在关系双方连接多个记录。 例如:许多 People 可以参与许多 Projects,并且每个 Project 可以包含许多 People。
<Warning>
**Beta 功能**:连接关系目前处于 Beta 阶段。 在按照本指南操作之前,请先在 **Settings → Community → Features** 中启用它们。
</Warning>
<Note>
此功能还需要启用 **Advanced mode**(在 Settings 左下角切换)。
</Note>
## 何时使用多对多
当关系双方都可能存在多个关联时,请使用多对多:
| 关系 | 示例 |
| ----------------- | -------------------------- |
| People ↔ Projects | 一个人参与多个项目;一个项目包含多名团队成员 |
| Companies ↔ Tags | 一个公司可以拥有多个标签;一个标签可以应用于多家公司 |
| Products ↔ Orders | 一个产品可以出现在多个订单中;一个订单包含多个产品 |
## 工作原理
Twenty 在多对多关系中使用 **连接对象** 模式。 连接对象位于两个对象之间,并存储它们之间的关联:
```
People ←→ Project Assignments ←→ Projects
```
该 **Project Assignments** 对象(连接对象)具有:
* 到 People 的关系(多对一)
* 到 Projects 的关系(多对一)
启用连接关系开关后,Twenty 将直接显示已关联的记录,而不再展示中间的连接对象记录。
## 先决条件
1. **在 Beta 功能中启用连接关系**:前往 **Settings → Community → Features** 并启用 **Junction Relations**
2. **启用 Advanced mode**:在 Settings 侧边栏左下角开启 **Advanced mode**
3. 规划您的数据模型:
* 您要连接哪两个对象?
* 连接对象应如何命名?
## 步骤 1:创建连接对象
首先,创建用于保存关联的中间对象。
1. 进入 **设置 → 数据模型**
2. 点击 **+ 添加对象**
3. 使用描述性名称(例如,"Project Assignment"、"Team Member"、"Product Order")
4. 将“跳过创建名称字段”切换为开启
<img src="/images/user-guide/fields/new-pivot-object.png" alt="新建连接对象" />
5. 单击 **保存**
<Tip>
**命名约定**:使用能描述关系的名称,例如 "Project Assignment" 或 "Team Membership"。 这会让数据模型更易理解。
</Tip>
## 第 2 步:在对象与连接对象之间创建关系
从您的两个对象分别向连接对象添加关系字段。
### 第一条关系(对象 A → 连接对象)
1. 在 **Settings → Data Model** 中选择您的第一个对象
2. 单击 **+ 添加关系**
3. 选择连接对象(例如,"Project Assignments")
4. 将关系类型设置为 **One-To-Many**(一个人可以关联到多个分配)
5. 为这些字段命名:
* People 上的字段:例如,"Project Assignments"
* 连接对象上的字段:例如,"Person"
6. 单击 **保存**
### 第二条关系(对象 B → 连接对象)
1. 在 **Settings → Data Model** 中选择您的第二个对象
2. 单击 **+ 添加关系**
3. 选择连接对象(例如,"Project Assignments")
4. 将关系类型设置为 **One-To-Many**(一个项目可以关联到多个分配)
5. 启用 **"This is a relation to a Junction Object"**
<img src="/images/user-guide/fields/junction-relation-toggle.png" style={{width:'100%'}} />
6. 为这些字段命名:
* 连接对象上的字段:例如,"Project"
* Projects 上的字段:例如,"Team Members"
7. 单击 **保存**
## 步骤 3:配置连接关系的显示方式
现在配置源对象以直接显示已关联的记录,跳过中间的连接对象。
1. 进入 **设置 → 数据模型**
2. 选择第一个对象(例如,"People")
3. 找到指向连接对象的关系字段(例如,"Project Assignments")
4. 点击以编辑该字段
5. 启用 **"This is a relation to a Junction Object"**
6. 选择 **Target relation**(例如,"Project" —— 连接对象上指向另一侧的字段)
7. 单击 **保存**
## 结果
配置完成后:
* 在 **Person** 记录中,"Project Assignments" 字段将直接显示 **Projects**(而非分配记录)
* 在 **Project** 记录中,"Team Members" 字段将直接显示 **People**
连接对象仍然存在并存储关联,但 UI 呈现的是更简洁的多对多视图。
## 示例:People ↔ Projects
以下是完整的操作演示:
### 创建连接对象
* 名称:**Project Assignment**
* 描述:"将人员与其参与的项目关联起来"
### 添加关系
1. **People → Project Assignment**
* 类型:One-to-Many
* People 上的字段:"Project Assignments"
* Assignment 上的字段:"Person"
2. **Projects → Project Assignment**
* 类型:One-to-Many
* Projects 上的字段:"Team Members"
* Assignment 上的字段:"Project"
### 配置连接关系显示
1. 在 **People** 对象上:
* 编辑 "Project Assignments" 字段
* 启用连接关系开关
* 目标:"Project"
2. 在 **Projects** 对象上:
* 编辑 "Team Members" 字段
* 启用连接关系开关
* 目标:"Person"
### 开始使用
* 打开某个 Person 记录 → 直接查看其 Projects
* 打开某个 Project 记录 → 直接查看其团队成员
* 可从任一侧创建新的关联
## 为关联添加额外数据
由于连接对象是一个真实对象,您可以添加自定义字段来存储关系相关的信息:
* **角色**:"Developer"、"Designer"、"Manager"
* **开始日期**:当人加入项目时
* **分配时长**:每周在该项目上的工时
要访问这些数据,请直接导航到连接对象,或通过 API 查询。
## 限制
* **CSV 导入/导出**:不支持直接导入多对多关系。 请改为将记录导入连接对象。
* **筛选器**:按多对多关系进行筛选的选项可能有限。
## 相关内容
* [关系字段](/l/zh/user-guide/data-model/capabilities/relation-fields) — 关系类型说明
* [创建自定义对象](/l/zh/user-guide/data-model/how-tos/create-custom-objects) — 如何创建对象
* [创建关系字段](/l/zh/user-guide/data-model/how-tos/create-relation-fields) — 基本关系设置

View File

@@ -0,0 +1,70 @@
---
title: 创建关系字段
description: 通过关系字段逐步将对象连接起来。
---
关系字段可连接不同对象的记录——例如,将人员链接到公司。
<Note>
**关系名称在创建后无法更改**(它们会影响 API)。 请谨慎规划名称。
</Note>
## 开始之前
请确定:
* 要连接哪些对象? (例如,人员 → 公司)
* 哪一方是“一”端? (例如,公司)
* 哪一方是“多”端? (例如,人员—许多人在同一家公司工作)
* 两端的字段应如何命名?
请参阅[关系字段](/l/zh/user-guide/data-model/capabilities/relation-fields),了解关系类型的说明。
## 步骤
1. 进入 **设置 → 数据模型**
2. 选择要创建关系的对象(通常为“多”端)
3. 点击 **+ 新建字段**
4. 将字段类型选择为 **关系**
5. 选择**目标对象**
6. 选择 **一对多** 或 **多对一**
7. 为关系的**两端**输入字段名称
8. 单击 **保存**
## 示例:人员 → 公司
* 进入 **设置 → 数据模型 → 人员**
* 添加关系字段
* 目标:**公司**
* 类型:**多对一**
* 人员中的字段:**公司**
* 公司中的字段:**员工**
现在,每个人员都可以关联到一家公司,每家公司都会显示其人员。
## 停用关系
1. 进入 **设置 → 数据模型 → 所选对象**
2. 找到该关系字段并点击它
3. 点击 **停用** 按钮
关联会被保留但隐藏。 重新启用即可恢复。
<Note>
**停用关系不会删除记录。** 只会移除它们之间的关联。
</Note>
## 删除关系
1. 进入 **设置 → 数据模型 → 所选对象**
2. 找到该关系字段并点击它
3. 点击 **删除** 按钮
<Note>
仅适用于自定义关系。 标准关系只能被停用。
</Note>
## 相关内容
* [关系字段](/l/zh/user-guide/data-model/capabilities/relation-fields) — 类型和限制
* [如何导入关系](/l/zh/user-guide/data-migration/how-tos/import-relations-between-objects-via-csv) — 批量导入关联记录

View File

@@ -0,0 +1,22 @@
---
title: 自定义您的数据模型
description: 数据模型自定义选项概览。
---
Twenty 的数据模型完全可自定义。 创建对象、字段和关系,以符合您的业务。
## 快速链接
| 我想要... | 指南 |
| ------- | ----------------------------------------------------------------- |
| 创建新对象 | [如何创建自定义对象](/l/zh/user-guide/data-model/how-tos/create-custom-objects) |
| 为对象添加字段 | [如何创建自定义字段](/l/zh/user-guide/data-model/how-tos/create-custom-fields) |
| 将对象关联起来 | [如何创建关联字段](/l/zh/user-guide/data-model/how-tos/create-relation-fields) |
## 了解更多
* [理解您的数据模型](/l/zh/user-guide/data-model/overview) — 关键概念与规划建议
* [对象](/l/zh/user-guide/data-model/capabilities/objects) — 标准对象与自定义对象
* [字段](/l/zh/user-guide/data-model/capabilities/fields) — 所有字段类型
* [关联字段](/l/zh/user-guide/data-model/capabilities/relation-fields) — 连接对象
* [数据模型常见问题](/l/zh/user-guide/data-model/how-tos/data-model-faq) — 常见问题

View File

@@ -0,0 +1,157 @@
---
title: 数据模型常见问题解答
description: 关于 Twenty 数据模型的常见问题。
---
## 对象管理
<AccordionGroup>
<Accordion title="我可以删除自定义对象吗?">
是的,可以删除自定义对象。 您也可以先将其停用,这会在界面中隐藏该对象及其数据,同时保留这些数据。
</Accordion>
<Accordion title="我可以删除标准对象(人员、公司等)吗?">
不可以,标准对象无法删除。 您只能将其停用,这会在界面中将其隐藏,但会保留数据。
</Accordion>
<Accordion title="我可以创建多少个自定义对象?">
您可以根据需要创建任意多的自定义对象和字段 — 价格不会变。
</Accordion>
<Accordion title="我可以重命名标准对象吗?">
您可以重命名标准对象的标签(People、Companies、Opportunities),但不能更改其 API 名称。 为了在所有 Twenty 工作区中保持一致性,API 名称是固定的。
</Accordion>
<Accordion title="我可以更改对象的图标吗?">
可以,您可以在 **设置 → 数据模型** 中更改标准对象和自定义对象的图标。
</Accordion>
<Accordion title="我可以在左侧导航栏中重新排列对象吗?">
还不可以。 导航中的对象排序目前是固定的,但该功能计划于未来发布。
</Accordion>
<Accordion title="我可以隐藏左侧导航栏中的对象吗?">
所有活动对象都将出现在导航中。 您可以在 **设置 → 数据模型** 下停用不需要的对象。
</Accordion>
</AccordionGroup>
## 字段功能
<AccordionGroup>
<Accordion title="创建后我可以更改字段类型吗?">
不可以,字段类型在创建后无法更改。 如果您需要其他类型,请创建一个具有正确类型的新字段,迁移您的数据,然后停用旧字段。
</Accordion>
<Accordion title="为什么我需要不同的单复数名称?">
我们的 GraphQL API 针对不同操作使用单复数形式:
* `createPerson`(单数)用于单个记录操作
* `createPeople`(复数)用于批量操作
当单复数形式相同时,这会产生限制,但它改善了开发者的体验。
</Accordion>
<Accordion title="为什么某些字段名称是受保护的?">
某些字段名称如 `Type` 或 `Application` 被保留用于系统使用。 请选择其他名称,如 `Category` 或 `Classification`。
</Accordion>
<Accordion title="停用字段会发生什么?">
* 该字段会在界面中被隐藏
* 现有数据将被保留
* 您仍可通过 API 访问该字段
* 现有关联将保留,但您无法创建新的关联
* 您可以稍后重新启用该字段
</Accordion>
<Accordion title="我可以将字段设为必填吗?">
目前,您无法将自定义字段设为必填。 所有字段都接受空值。 您可以使用工作流在字段为空时发送警报或阻止操作,以强制执行必填字段。
</Accordion>
<Accordion title="唯一与必填有什么区别?">
* **唯一**:任意两条记录在该字段中的值不能相同
* **必填**:该字段必须有值(目前不支持自定义字段)
</Accordion>
<Accordion title="我可以创建公式字段吗?">
公式字段在 **H2 2026** 中。 同时,您可以使用工作流程来自动计算和更新字段值。
</Accordion>
<Accordion title="我可以在我的对象中使用嵌套字段吗?">
嵌套字段将于 **H2 2026**。 目前,您可以使用工作流程从相关对象中获取字段值。 例如,要在人员记录上显示公司的行业信息,可以在人员自定义字段中创建一个自定义字段,并使用工作流程来同步该值。
</Accordion>
<Accordion title="我可以在对象中重新排序字段吗?">
是的,前往设置 -> 数据模型 → 您选择的对象-> 布局,并点击 **自定义记录页面**。 如果此按钮被禁用,您必须创建记录。
</Accordion>
</AccordionGroup>
## 关系
<AccordionGroup>
<Accordion title="我可以创建指向同一对象的关系吗?">
是! 支持自引用关系,并建议在账户层级等用例中使用。 例如,从"公司"到"公司"创建关系,以跟踪父/子账户。
</Accordion>
<Accordion title="我可以创建多对多关系吗?">
多对多的关系出现在 **H2 2026**。 目前,可以创建一个中间对象,建立两个一对多关系作为替代方案。
例如,要关联人员和项目(多对多),请创建一个 "项目分配" 对象,其中包含:
* 到人员的关系(多个分配 → 一名人员)
* 到项目的关系(多个分配 → 一个项目)
</Accordion>
<Accordion title="什么是指向多个对象类型的关系(Morph 关系)?">
这使单个对象能够通过一个字段关联到多种不同的对象类型。 例如,备注可以同时附加到人员、公司和商机。
每条备注同时关联到一名人员、一家公司和一个商机。
在 [关系字段](/l/zh/user-guide/data-model/capabilities/relation-fields) 中了解更多。
</Accordion>
<Accordion title="同一对对象之间可以有多个关系吗?">
可以,您可以在同一对对象之间创建多个关系。 例如,一个公司可以同时与人员建立 "主要联系人" 和 "账单联系人" 两个关系。
</Accordion>
<Accordion title="当我删除一条记录时,关系会发生什么变化?">
当您删除记录时,相关记录中的关系链接会被移除。 相关记录本身不会被删除。
</Accordion>
<Accordion title="我可以创建循环关系吗?">
尽管在技术上可行,循环关系(A → B → C → A)应尽量避免,因为它们可能导致混淆并带来潜在的性能问题。
</Accordion>
</AccordionGroup>
## 访问权限
<AccordionGroup>
<Accordion title="我在哪里可以查看和编辑我的数据模型?">
前往 **设置 → 数据模型** 查看并编辑您的所有对象和字段。
</Accordion>
<Accordion title="为什么我在设置中看不到数据模型?">
请联系您的工作区管理员。 数据模型访问通常仅限于管理员。
</Accordion>
</AccordionGroup>
## 数据管理
<AccordionGroup>
<Accordion title="记录数量是否有限制?">
记录数量没有硬性上限。 但是,非常大的数据集可能会影响某些视图中的性能。 使用筛选器和视图高效管理大型数据集。
</Accordion>
<Accordion title="我可以将数据导入自定义对象吗?">
是的,您可以将 CSV 数据导入任何对象,包括自定义对象。 导入过程支持自定义字段的映射。 参见 [如何准备 CSV 文件](/l/zh/user-guide/data-migration/how-tos/prepare-your-csv-files)。
</Accordion>
<Accordion title="我可以导出我的数据模型配置吗?">
目前,数据模型配置没有内置导出功能。 如果您需要在工作区之间迁移数据模型,请联系支持团队。
</Accordion>
<Accordion title="单个对象可以有多少字段?">
单个对象可以拥有的最大字段数为 1600个字段,按Postgres 限制, 包括现有字段和删除字段。 请注意,如果达到1600个字段的上限,那么20个不会修复您的工作空间,因为它属于我们的公平使用政策。
</Accordion>
</AccordionGroup>
## 需要更多帮助吗?
查看我们的 [实施服务](/l/zh/user-guide/getting-started/capabilities/implementation-services) 以获取复杂数据模型设计方面的帮助。

View File

@@ -0,0 +1,177 @@
---
title: 数据模型
description: 了解什么是数据模型,以及如何设计一个适合您业务的模型。
---
## 什么是数据模型?
数据模型是定义信息在您的CRM中如何组织的结构。 可以把它看作您的客户数据的**蓝图** — 您只需设计一次,然后用实际数据将其填充。
## 关键概念
### 对象
**对象**是您的 CRM 中数据的主要类别。 每个对象代表您想跟踪的一类事物。
Twenty 自带标准对象:
* **People** — 个人(联系人、潜在客户、合作伙伴)
* **Companies** — 组织
* **Opportunities** — 交易或销售
* **备注** - 附加于记录的备注
* **Tasks** — 与记录关联的待办事项
您也可以为特定于您业务的任何内容创建**自定义对象**(例如,Projects、Subscriptions、Events)。
### 字段
**字段**是用于描述每个对象的属性或特征。 它们存储实际信息。
例如,**People** 对象具有如下字段:
* 名称
* 电子邮件
* 电话
* 职位
* 公司(与 Companies 对象的关联)
字段有不同的**类型**:文本、数字、日期、单选、多选、关联等。 您可以向任何对象添加自定义字段。
### 记录
**记录**是对象中的单个条目 — 您创建和管理的实际数据。
例如:
* "John Smith" 是 People 对象中的一个**记录**
* "Acme Corp" 是 Companies 对象中的一个**记录**
**类比:**
| 数据模型概念 | 现实类比 |
| ------ | ------------- |
| **对象** | 书中的章节(类别) |
| **字段** | 电子表格中的列(属性) |
| **记录** | 电子表格中的行(实际条目) |
您只需设计一次数据模型(对象 + 字段),然后在该结构内创建许多记录。
## 为什么要自定义您的数据模型?
每个企业的运作方式都不尽相同。 自定义数据模型意味着您可以围绕**您的**流程来塑造 Twenty,而不是把您的流程硬塞进一个僵化的系统。
Twenty 提供完全的灵活性:
* 根据需要创建任意数量的自定义对象
* 无限添加自定义字段
* 价格不会因自定义而变化
## 设计数据模型的提示
### 1. 从您的核心对象开始
识别您所使用的主要概念。 Twenty 已提供:
* **People** — 您的联系人
* **Companies** — 您的客户
* **Opportunities** — 您的商机
想想您还可能需要什么:
* Stripe 需要一个 `Subscriptions` 对象
* Airbnb 需要一个 `Trips` 对象
* 加速器需要一个 `Batches` 对象
### 2. 用字段表达变体,而不是创建新对象
如果某项只是现有对象的一个特征,请将其设为**字段**。
**字段适用于:**
* 类别和标签(例如,Companies 的 `Industry`)
* 状态值(例如,Opportunities 的 `Stage`)
* 属性和特性
### 3. 当某个概念可独立存在时创建对象
如果该概念有自己的生命周期、属性或关系,就值得设为一个对象。
**为以下情况创建对象:**
* **Projects** — 具有截止日期、所有者和任务
* **Subscriptions** — 连接公司、产品和发票
* **Events** — 涉及与会者和后续行动
这些超出单个字段的范围,因为它们携带自己的数据和关系。
### 4. 当记录数量不确定时创建对象
如果某个事物可以被多次关联且数量不确定,请使用对象。
**不佳的做法:**
创建诸如 `Product 1`、`Product 2`、`Product 3` 等字段...
**较佳的做法:**
创建一个 `Products` 对象并将其关联到记录。 这样就能在不更改模型的情况下支持一个、两个,甚至上百个产品。
### 5. 先保持简单
从字段开始。 仅当您感到受限时,才迁移到新对象:
* 单个对象上的字段过多
* 重复的记录,本应分开
* 不够契合的关系
## 关于人、公司和机会的特别注意事项
<Warning>
**电子邮件和日历同步仅适用于人、公司和机会。**
只有在这些对象中,您才能从您的邮箱/日历访问已同步的电子邮件和会议。 我们建议尽可能多地使用它们。
</Warning>
**最佳实践:**
* 如果您需要对人进行分类,请使用字段(而不是新对象)
* 示例:使用 `Person Type` 字段,取值为“潜在客户”和“合作伙伴”,而不是创建单独的对象
* 创建不同的**视图**进行筛选:一个显示合作伙伴,另一个显示潜在客户
**并非每条记录都适用的字段是可以接受的。** 例如,在“人”对象上设置 `Referral Link` 字段,仅当 `Person Type = Partner` 时适用。 在不相关的视图中隐藏此字段。
## 指导选择的问题
问问自己:
<Check>这只是我已拥有的事物的属性,还是需要它自己的属性?</Check>
<Check>我是否需要为每个记录跟踪多个此类项目,而无法提前知道有多少?</Check>
<Check>这一概念是否连接多个不同对象,而不仅仅是一个?</Check>
<Check>它是否有其自身的生命周期(阶段、开始/结束日期)?</Check>
如果对一个或多个问题的回答是“是”,可能是时候创建一个新对象了。
## 访问您的数据模型
1. 转到左侧边栏中的**设置**
2. 单击 **数据模型**
3. 查看您的所有对象(标准和自定义)
4. 单击任一对象以查看并编辑其字段
<Note>
**在设置中看不到数据模型?**
对数据模型的访问通常仅限于管理员。 如果您需要访问权限,请联系您的工作区管理员。
</Note>
## 下一步
一旦您规划好数据模型:
* [如何创建自定义对象](/l/zh/user-guide/data-model/how-tos/create-custom-objects)
* [如何创建自定义字段](/l/zh/user-guide/data-model/how-tos/create-custom-fields)
* [如何创建关系字段](/l/zh/user-guide/data-model/how-tos/create-relation-fields)
## 需要帮助?
<Tip>
需要帮助来设计你的数据模型吗? [查找认证的20个伙伴](https://twenty.com/partners/list?categories=SOLUTIONING\&ref=docs-data-model) 设计和构建您的物件、 字段和关系。
</Tip>

View File

@@ -0,0 +1,104 @@
---
title: 术语表
description: 了解 Twenty 使用的基本术语。
---
## 接口
API(应用程序接口)允许您将 Twenty 与其他软件系统连接并构建自定义集成。
## 应用
应用是以代码构建的自定义扩展,可定义数据模型和逻辑函数。 它使开发者能够创建可复用的自定义内容,并可部署到多个工作区。
## 代码操作
代码操作是工作流步骤,允许你编写自定义 JavaScript 来转换数据、进行计算,或执行内置操作无法实现的复杂逻辑。
## 命令菜单
命令菜单是一个快速访问界面(在 Mac 上用 `Cmd + K` 打开,Windows 上用 `Ctrl + K` 打开),可以让您执行操作、创建记录并高效地导航您的工作区。
## 公司与人员
CRM 有两种基本类型的记录:
* `公司` 表示一个企业或组织。
* `人员` 代表您的公司当前和潜在的客户。
## 自定义字段
自定义字段是您创建的数据字段,用于捕获特定于您的业务需求和流程的信息。
## 数据模型
数据模型是定义信息在您的 CRM 中如何组织的结构,包括哪些对象存在、它们的属性(字段)以及它们如何相互关联。
## 收藏夹
收藏是你标记用于快速访问的记录,会显示在侧边栏,便于即时导航到重要数据。
## 字段
字段是指为某个实体存储特定数据的特定区域。
## 迭代器
迭代器是一种工作流操作,用于遍历项目数组,并为列表中的每个项目执行后续操作。
## 看板
`看板` 是一种使用卡片和列来跟踪业务流程的可视化方法。 每一列代表您的流程中的一个阶段(例如:新建、进行中、赢得、失去),您可以随着进度将记录在这些阶段中移动。
## 对象
对象是一种数据结构,表示 CRM 中的特定类型的实体(如人员、公司或机会)。 对象可以是标准的(内置)或自定义的(由您创建)。
## 机会
在 Twenty CRM 中,机会是与帐户或联系人潜在的交易或销售。
## 记录
记录是对象的实例,就像一个特定的帐户或联系人。
## 关系字段
关系字段在不同对象之间创建连接,允许您将记录链接在一起(例如连接一个人到一个公司)。
## 标准字段
标准字段是默认附带对象的预构建数据字段,并在所有工作空间中提供常见功能。
## 任务
在 Twenty CRM 中,任务是与联系人、帐户或机会相关的分配活动。
## 触发器
触发器是工作流的起点——用于启动自动化的事件或条件。 示例包括记录创建、记录更新、Webhook 或预定时间。
## 视图
您可以使用视图自定义记录的显示,为每个视图设置不同的过滤器、布局和排序选项。
## 更新或插入
更新或插入是一种将“更新”和“插入”合并的操作——如果找到匹配项,则更新现有记录;如果没有匹配,则创建新记录。
## Webhooks
Webhook 是在特定事件发生时从 Twenty 发送到其他应用的自动消息,实现实时数据同步。
## 工作流
工作流是基于特定条件触发动作的自动化过程,帮助您自动化重复性任务和业务流程。
## 工作区
一个 `工作区` 通常代表使用 Twenty 的公司。 它保存您和您的团队成员添加到 Twenty 的所有记录和数据。
它有一个单一的域名,通常是您公司用于员工电子邮件地址的域名。
## 工作区成员
工作区成员是您的团队中有权访问您的工作区的 Twenty 用户。 他们可以被指定为记录的所有者或被分配人。

View File

@@ -0,0 +1,17 @@
---
title: 实施服务
description: 无论您是需要帮助起步还是创建高级自定义,我们都有解决方案。
---
## 实施合作伙伴
与获得认证的 Twenty 合作伙伴合作,进行高级自定义与集成,并获得专属实施支持。
<CardGroup cols={2}>
<Card title="浏览认证合作伙伴" icon="magnifying-glass" href="https://twenty.com/partners/list?ref=docs-implementation-services">
查找合作伙伴并直接联系他们——可按地区、语言和专业领域进行筛选。
</Card>
<Card title="由 Twenty 为你匹配" icon="envelope" href="mailto:contact@twenty.com">
告诉我们你的需求,我们会为你对接合适的合作伙伴。
</Card>
</CardGroup>

View File

@@ -0,0 +1,42 @@
---
title: 什么是Twenty
description: Twenty 是一款开源 CRM,为您提供构建模块,助您精确打造企业所需的功能。
---
## 愿景
创建一个优秀的 CRM 是困难的,因为它需要找到平衡。
对于每个企业来说,需求看似简单,但每个人的需求都是独特的。
结果是,CRM 不是过于简单,就是试图面面俱到,但什么也没做好。
起初,Twenty看起来像您已知的大多数CRM:您可以跟踪交易、组织联系人、管理任务和笔记。
**但真正与众不同之处在于我们对可扩展性的处理方式。 我们正在打造一个开放平台,为您提供解决您的独特业务问题的构建模块。**
我们优先考虑普遍原则和共同模式,而不是功能列表。
我们不试图找到所有答案,而是赋予用户找到最适合他们的解决方案的能力。
开源是我们方法的基石,确保Twenty与其社区共同发展,为其社区服务。
## 优势
\*\*可定制:\*\*旨在满足您的业务需求。
**社区驱动:** 由庞大的开源社区构建和维护。
\*\*经济实惠:\*\*您永远不会被供应商锁定,因为您始终可以自行托管。
## 主要功能
* **日历与电子邮件:** 将您的邮箱和日历同步,以便在 CRM 记录中查看所有沟通。 [了解更多](/l/zh/user-guide/calendar-emails/overview)。
* **数据模型:** 创建自定义对象和字段,以匹配您独特的业务流程。 [探索](/l/zh/user-guide/data-model/overview)。
* **数据迁移:** 通过 CSV 或 API 导入和导出您的数据。 [开始使用](/l/zh/user-guide/data-migration/overview)。
* **视图与管道:** 使用表格视图、看板和销售管道来组织您的数据。 [发现](/l/zh/user-guide/views-pipelines/overview)。
* **工作流:** 自动化您的业务流程,并与外部工具集成。 [构建自动化流程](/l/zh/user-guide/workflows/overview)。
* **AI:** 借助 AI 驱动的功能和智能体,增强您的 CRM。 [探索 AI](/l/zh/user-guide/ai/overview)。
* **仪表板:** 通过自定义报表和可视化跟踪绩效。 [查看仪表板](/l/zh/user-guide/dashboards/overview)。
* **权限与访问:** 通过基于角色的权限控制谁可以查看、编辑和管理您的数据。 [配置访问](/l/zh/user-guide/permissions-access/overview)。
* **笔记与任务:** 创建与您的记录关联的笔记和任务,以便更好地协作。
* **API 与 Webhook:** 连接到其他应用,并构建自定义集成。 [开始集成](/l/zh/developers/extend/api)。
## 立即加入
[在此注册](https://app.twenty.com)或[成为GitHub上的贡献者](https://github.com/twentyhq/twenty)。

View File

@@ -0,0 +1,77 @@
---
title: 配置您的工作区
description: 每个企业的运作方式都不尽相同。 从以下 3 个步骤开始,使 Twenty 更符合您的需求。
---
<Note>**速成技巧**: 请先连接您的邮箱。 这将立即为您带来价值,并帮助您的团队通过真实数据看到 Twenty 运行的效果。 您可以在 设置 → 账户 中进行操作。</Note>
## 1. 自定义您的数据模型
Twenty提供所需的灵活性以构建最能支持您日常工作的数据模型。
创建任何类型的对象和字段,包括不同对象之间的关系。 您可以在 设置 → 数据模型 下操作。
以下是一些提示:
* **您不受自定义字段或自定义对象数量的限制**。 添加自定义对象和字段不会导致升级您的计划。
* **人员、公司和机会是您可以访问从邮箱和日历同步的电子邮件和会议的三个对象**。 我们建议尽可能多使用这些,必要时添加字段以对记录进行分类。 以下是一个示例:
* 最好是为了你的前景和合作伙伴使用人民对象,在人民对象上创建一个字段,名称为 \`\`\`Person Type\`\` , 不是创建合作伙伴自定义对象,因为您无法从合作伙伴记录中访问与此人交换的电子邮件。
* 在人员中创建不同的视图,一种用于显示合作伙伴,一种用于显示潜在客户。
* 两个人不能拥有相同的电子邮件地址。 两家公司不能拥有相同的域名。
* 您可以停用您不想使用的标准字段和对象。
* 您可以从视图中隐藏字段:不要害怕创建字段,您无需展示所有字段。
阅读[这篇文章](/l/zh/user-guide/data-model/overview)了解如何设计您的数据模型。
## 2. 导入您的数据
将现有数据导入 Twenty 为您的团队从一开始就提供了背景信息。
### 连接您的邮箱
如果您在创建工作区时尚未这样做,请在 设置 → 帐户 下连接您的**Google 或 Microsoft 帐户**。 这允许 Twenty:
* 导入您的邮件和会议
* 根据互动自动创建联系人(可选)
* 确保您的团队可以看到通信历史
**使用其他提供商?**
您可以通过 SMTP 添加另一个邮箱或通过 CalDAV 添加其他日历。 前往 **设置 → 账户** 进行配置。
### 通过CSV导入数据
使用命令菜单(`Cmd + K` 或 `Ctrl + K`)通过 CSV 导入人员、公司、机会或任何自定义对象。
**关键指南**:
* 下载示例文件以了解预期格式
* 每个文件限制为 10k 条记录
* 删除人员的重复电子邮件或公司的重复域名
* 在导入之前检查并修复错误(以黄色高亮显示)
阅读[这篇文章](/l/zh/user-guide/data-migration/overview)以了解更多关于数据导入的信息。
## 3. 创建您的第一个视图
创建不同的视图是使数据可以为您的团队操作的关键。
以下是操作步骤:
* **添加或隐藏列**
通过单击选项 -> (从右上角)来管理可见的字段. 您可以从中显示/隐藏字段。
* **重新排序字段**
通过点击选项 -> (从右上角)从给定视图重新排序字段。 拖放字段即可重新排列它们。
* **筛选您的视图**
使用顶部右边的筛选器来缩小显示的记录。
* **对记录排序**
使用顶部右边的排序功能重新排列显示的记录,或直接点击列名。
* **选择布局**
您可以切换到 **看板布局** 或以 **组方式** 列表,只要对象有 `阶段` 或类似的选择类型字段。
* **将您的视图保存为收藏夹**
您可以使用显示不同视图的下拉菜单进行此操作。
## 接下来是什么?
开始使用[工作流程](/l/zh/user-guide/workflows/overview)创建自动化。

View File

@@ -0,0 +1,48 @@
---
title: 创建工作区
description: 按照分步指南了解如何在 Twenty 上注册,选择订阅计划,并设置您的账户。
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
## 步骤 1: 注册
1. 前往 [Twenty 注册](https://app.twenty.com)。
2. 选择您偏好的注册方式:
* **继续使用 Google** 进行 Google 账户注册。
* **继续使用 Microsoft** 进行 Microsoft 账户注册。
* 或者,**继续使用电子邮件**进行电子邮件注册。
<VimeoEmbed videoId="927066829" title="视频演示" />
## 步骤 2:选择试用期
请选择两个试用期之一:
### 30 天
需要信用卡
### 7 天
无需信用卡
两个试用均包括:
* 完全访问
* 无限联系人
* 电子邮件集成
* 自定义对象
* API 和 Webhooks
您可以点击 "更改计划" 选择不同的计划或计费间隔。
<img src="/images/user-guide/create-workspace/choose-plan.png" style={{width:'100%'}} />
## 步骤 3:支付确认及账户设置
通过 Stripe进行付款审核后,您已指示您创建您的工作区和用户配置文件。 请记住您可以随时取消您的订阅。
## 支持
如有疑问或帮助,请通过[contact@twenty.com](mailto:contact@twenty.com)与专门的支持团队联系,或在[Discord](https://discord.gg/cx5n4Jzs57)上发送消息。

View File

@@ -0,0 +1,84 @@
---
title: 在 Twenty 中导航
description: 快速了解如何浏览平台以及采取不同类型的操作。
---
## 主布局
屏幕的中心是**记录的所在**:人员、公司、商机、任务、注释、仪表板、工作流,以及您创建的任何其他对象。 这是日常工作的地方。
您可以在此**查看、编辑或删除记录**,以及**创建新视图**。
<img src="/images/user-guide/home/main-layout.png" style={{width:'100%'}} />
## 导航栏
在左侧,从上到下,您可以:
* 使用下拉菜单在您的**多个工作区**之间切换,或创建新工作区
* 使用**搜索栏**(按`/`可立即聚焦)
* 打开**设置**部分
* 直接访问您的**收藏视图**。 收藏对每个用户都是唯一的。
* 在不同对象之间切换
* 通过工作流**创建自动化**
<img src="/images/user-guide/home/navigation-bar.png" style={{width:'100%'}} />
## 命令菜单
命令菜单让您在 Twenty 中**快速访问操作**。 您可以通过两种方式访问它:
* **键盘快捷键**:按`Cmd + K`(Mac)或`Ctrl + K`(Windows)
* **鼠标**:点击右上角的三个点
然后您可以:
* 创建新记录
* **通过 CSV 导入和导出数据**
* 创建新视图
* 访问已删除的记录(Twenty 支持软删除和硬删除)
* 查看键盘快捷键以快速访问您的工作区对象
<img src="/images/user-guide/home/command-menu.png" style={{width:'100%'}} />
## 搜索栏
可以通过命令菜单、导航栏顶部,或按下 `/` 立即聚焦到搜索栏。 搜索可跨所有对象使用。
<img src="/images/user-guide/home/search-bar.png" style={{width:'100%'}} />
## 侧边栏
当您点击某条记录时,右侧会显示侧边栏。 这可让您快速查看该记录的关键信息,而无需跳转到其他页面。 在此,您可以选择关闭此概览,或点击“打开”按钮以获取该记录的更多信息。
<img src="/images/user-guide/home/side-panel.png" style={{width:'100%'}} />
## 视图
每个对象(如商机或人员)支持多种视图。 每个对象的视图数量没有限制。
在主布局的左上方使用下拉菜单在不同视图之间切换。 例如:
* 使用看板视图按阶段跟踪商机
* 使用分组视图创建部分并提高效率
* 使用过滤器专注于特定记录(例如,上周创建的潜在客户)
* 保存过滤后的视图以便稍后重用
* 收藏视图以便快速访问
<img src="/images/user-guide/home/view-menu.png" style={{width:'100%'}} />
如果您是视图的新手,请阅读我们的[视图与管道指南](/l/zh/user-guide/views-pipelines/overview),了解如何创建和自定义它们。
## 设置
从左上角打开您的设置:
* **连接您的邮箱和日历**帐户以实现无缝的电子邮件和日历同步
* 自定义您的**数据模型**:创建自定义对象、字段和关系
* **访问 API 操作台并配置 Webhook**
* **管理用户权限**和工作区访问控制
* 邀请团队成员和管理用户角色
* 编辑您的个人资料和工作区首选项
* 配置账单并监控工作流额度使用情况
* 发现并启用即将推出的功能(在 Updates → Early Access 下)
* **访问支持**,通过实时聊天与支持团队联系
* **打开文档**,浏览用户指南和开发者文档
<Note>如果您未在设置下看到所有这些部分,请联系您的工作区管理员 — 其中一些部分具有访问限制。</Note>

View File

@@ -0,0 +1,59 @@
---
title: 用户指南
description: 欢迎使用 Twenty 用户指南,这是您获取高级配置和最佳实践的资源。
---
import { CardTitle } from "/snippets/card-title.mdx"
<CardGroup cols={3}>
<Card href="/l/zh/user-guide/data-model/overview" img="/images/user-guide/halftone/data-model.png">
<CardTitle>数据模型</CardTitle>
定制您的数据模型,使其适配您的业务流程。
</Card>
<Card href="/l/zh/user-guide/data-migration/overview" img="/images/user-guide/halftone/data-migration.png">
<CardTitle>数据迁移</CardTitle>
通过 CSV 或 API 导入和导出您的数据。
</Card>
<Card href="/l/zh/user-guide/calendar-emails/overview" img="/images/user-guide/halftone/calendar-emails.png">
<CardTitle>日历与电子邮件</CardTitle>
集中管理您团队的会议和电子邮件。
</Card>
<Card href="/l/zh/user-guide/workflows/overview" img="/images/user-guide/halftone/workflows.png">
<CardTitle>工作流</CardTitle>
自动化流程并与外部工具集成。
</Card>
<Card href="/l/zh/user-guide/ai/overview" img="/images/user-guide/halftone/ai.png">
<CardTitle>AI</CardTitle>
使用 AI 代理提升您团队的能力。
</Card>
<Card href="/l/zh/user-guide/layout/overview" img="/images/user-guide/halftone/layout.png">
<CardTitle>布局</CardTitle>
导航、视图和记录页面自定义。
</Card>
<Card href="/l/zh/user-guide/dashboards/overview" img="/images/user-guide/halftone/dashboards.png">
<CardTitle>仪表板</CardTitle>
实时洞察以跟踪绩效。
</Card>
<Card href="/l/zh/user-guide/permissions-access/overview" img="/images/user-guide/halftone/permissions.png">
<CardTitle>权限与访问</CardTitle>
管理 Twenty 的角色和访问权限。
</Card>
<Card href="/l/zh/user-guide/billing/overview" img="/images/user-guide/halftone/billing.png">
<CardTitle>计费</CardTitle>
了解 Twenty 的定价和计费如何运作。
</Card>
<Card href="/l/zh/user-guide/settings/overview" img="/images/user-guide/halftone/settings.png">
<CardTitle>设置</CardTitle>
配置您的工作区首选项。
</Card>
</CardGroup>

View File

@@ -0,0 +1,38 @@
---
title: 导航
description: 自定义左侧边栏,使其符合您团队的工作方式。
---
左侧边栏是您在 Twenty 中进行导航的主要方式。 它完全可自定义——无需进入任何设置页面,您就可以重新组织它以匹配您的工作流。
## 重新排序项目
在侧边栏中拖放任意项目以更改其位置。 顺序会按用户单独保存,因此每位团队成员都可以自行安排各自的侧边栏。
## 文件夹
将相关项目分组到文件夹中。 例如,您可以创建“销售”文件夹来包含您的管道视图,创建“支持”文件夹用于工单,或创建“运营”文件夹用于内部对象。
要创建文件夹,请在侧边栏中右键单击,或使用`+`按钮。
## 隐藏对象
未使用的对象可以从侧边栏中隐藏。 它们不会被删除——只是被隐藏起来。 您可以随时在 设置 → 数据模型 中再次显示它们。
## 收藏夹
将视图、记录或搜索固定到侧边栏顶部的“收藏”部分,以便一键访问。 收藏是个人的——每位用户自行管理各自的收藏。
## 自定义链接
在侧边栏中直接添加指向外部工具的链接。 适用于链接到您的 wiki、其他工具中的仪表板,或团队经常使用的任何 URL。
## 命令菜单
按下`Cmd+K`(或`Ctrl+K`)打开命令菜单——一个快速访问的搜索栏,无需通过侧边栏即可跳转到任何记录、视图或操作。
## 自定义侧边栏
要自定义侧边栏,请将鼠标悬停在侧边栏中的"工作区"部分,然后单击扳手图标。
<img src="/images/user-guide/layout/navigation-edit-icon.png" alt="导航编辑图标" />

View File

@@ -0,0 +1,61 @@
---
title: 记录页面
description: 使用选项卡和小部件自定义单个记录详情页的布局。
---
## 概览
当你在 Twenty 中打开一条记录时,详情页由**选项卡**和**小部件**组成。 两者都可按对象类型完全自定义。
## 选项卡
每个记录页面可以包含多个选项卡—类似于浏览器中的选项卡。 使用它们来组织记录的不同方面。 例如,一个公司记录可能包含“概览”、“沟通”、“任务”和“文件”等选项卡。
您可以:
* 添加和删除选项卡
* 重命名选项卡
* 通过拖动重新排序选项卡
* 设置默认显示的选项卡
## 小部件
小部件是每个选项卡内的构建模块。 可用的小部件类型包括:
| 小部件 | 显示内容 |
| ---------- | -------------- |
| **字段** | 记录字段,可分组或单独显示 |
| **相关记录** | 通过关系关联的记录表 |
| **电子邮件** | 来自已连接账户的电子邮件历史 |
| **日历** | 与该记录关联的日历事件 |
| **时间轴** | 活动与事件历史 |
| **任务** | 关联的任务 |
| **备注** | 富文本备注 |
| **文件** | 文件附件 |
| **图表** | 来自相关记录的可视化数据 |
| **iFrame** | 嵌入的外部内容 |
| **富文本** | 静态内容或描述 |
## 自定义记录页面
1. 打开任意记录
2. 按下 `Cmd+K`,搜索“编辑记录页面布局”
或
1. 前往 设置 → 数据模型 → 所选对象 → 布局
2. 单击该对象的“自定义记录页面”按钮
3. 你现在处于自定义模式:
* 从小部件选择器中**添加小部件**
* **拖动小部件**,在网格上重新定位它们
* **调整小部件大小**,通过拖动其边缘
* **配置字段**,设置每个小部件内显示的字段
* **管理选项卡** — 添加、删除、重命名、重新排序
4. 保存你的更改—它们将应用于该对象类型的所有记录
## 字段可见性
在“字段”小部件中,你可以控制哪些字段可见以及它们的顺序。 这使你可以创建更聚焦的布局—例如,在“概览”选项卡中仅显示最重要的字段,并将详细字段放在单独的选项卡中。

View File

@@ -0,0 +1,45 @@
---
title: 布局
description: 自定义您在 Twenty 中的导航、浏览和查看记录的方式。
---
Twenty 的布局可在三个层级进行自定义:在应用中的导航方式、浏览记录列表的方式,以及打开单条记录时看到的内容。
## 导航
左侧边栏可完全自定义。 您可以:
* **重新排序项目**(通过拖放)
* **创建文件夹**,用于分组相关对象和视图
* **隐藏对象**(您不使用的)
* **添加自定义链接**到外部工具
* **固定收藏**,便于快速访问视图、记录或搜索
[导航参考 →](/l/zh/user-guide/layout/capabilities/navigation)
## 视图
视图控制记录列表的显示方式。 Twenty 支持三种视图类型:
| 视图 | 最适合 |
| ------ | -------------------- |
| **表格** | 一次处理大量记录——类似电子表格的行和列 |
| **看板** | 管道跟踪——按阶段组织的可拖放卡片 |
| **日历** | 基于时间的规划——按日期字段排布记录 |
每个视图都会保存其筛选、排序、字段可见性和分组配置。 视图可以与工作区共享,或保持私密。
[表格视图 →](/l/zh/user-guide/views-pipelines/capabilities/table-views) · [看板视图 →](/l/zh/user-guide/views-pipelines/capabilities/kanban-views) · [日历视图 →](/l/zh/user-guide/views-pipelines/capabilities/calendar-view)
## 记录页面
打开记录时,详情页面由可配置的选项卡和小组件构成。 您可以:
* 在任何记录类型中**添加、移除并重新排序选项卡**
* **配置小组件**——字段、相关记录、电子邮件、时间线、日历、任务、备注、文件、图表、iframe 等
* 在网格布局中**拖动并调整小组件大小**
* 为每个小组件**控制字段可见性**
从命令菜单进入布局自定义模式(`Cmd+K` → "编辑记录页面布局")。
[记录页面参考 →](/l/zh/user-guide/layout/capabilities/record-pages)

View File

@@ -0,0 +1,125 @@
---
title: 法律常见问题
description: 常见法律问题。
---
## 数据驻留和国际传输
<AccordionGroup>
<Accordion title="我们的工作区数据、附件、日志和备份将存储在哪个国家和地区?">
Twenty Cloud 运行在位于德国法兰克福的 AWS 服务器上。
</Accordion>
<Accordion title="我们的工作区托管区域是否可以在合同中固定?">
托管区域选择将从 2027 年开始提供,最初仅适用于新的工作区。 用户今后将可以为现有工作区申请变更托管区域。 或者,你也可以联系[我们的合作伙伴](https://twenty.com/partners/list?categories=HOSTING),帮助你设置你的实例。
</Accordion>
<Accordion title="哪些次级处理方可以处理或访问我们的 CRM 数据?它们位于哪些国家?">
所有次级处理方的列表可在[我们的信任中心](https://trust.twenty.com/?tab=subprocessors)中查看。
</Accordion>
<Accordion title="哪些保障措施适用于国际数据传输?">
欧盟标准合同条款(EU Standard Contractual Clauses),连同英国附录和瑞士修订,适用于向欧盟以外地区进行的数据跨境传输,包括向所有次级处理方的传输。
</Accordion>
</AccordionGroup>
## 数据处理协议和法律角色
<AccordionGroup>
<Accordion title="我们在哪里可以找到当前的数据处理协议(Data Processing Agreement)?">
你可以在 https://{your-domain}/settings/legal/dpa(例如:https://getting-started.twenty.com/settings/legal/dpa)生成你已签署的 DPA。
</Accordion>
<Accordion title="在 CRM 中存储的商户和联系信息方面,Twenty 是否作为数据处理方,而我们公司仍然是数据控制方?">
根据我们的[隐私政策](https://twenty.com/privacy-policy),对于在 CRM 中存储的商户和联系信息,Twenty 作为数据处理方,而你的公司仍然是数据控制方。
</Accordion>
<Accordion title="CRM 内容是否会被用于训练 Twenty 或第三方的 AI 模型?">
CRM 内容可在符合次级处理方条款与条件的前提下用于训练 AI 模型。 Twenty 自身没有 AI 模型 —— Twenty Cloud 上可用的所有 AI 模型均由我们的次级处理方提供。
</Accordion>
<Accordion title="如果存在可选的 AI 处理,是否可以为我们的工作区完全禁用?">
可以通过在“设置 → AI → 模型”中关闭所有 AI 模型来完全禁用 AI。 此外,只有当你主动与 AI 聊天或工作流中的 AI 节点交互时,数据才会被发送给 AI。
</Accordion>
</AccordionGroup>
## 安全性与访问控制
<AccordionGroup>
<Accordion title="你们是否在传输和静态存储过程中使用加密?你们的密钥管理实践是什么?以及如何实现租户数据的隔离?">
所有数据在传输和静态存储过程中都经过加密。 租户数据通过“每个租户单独架构”的方式实现隔离,加密密钥会定期轮换。
</Accordion>
<Accordion title="哪些 Twenty 员工或次级处理方可以访问客户工作区?出于什么目的?访问如何获批并记录?">
Twenty 的工程和支持团队可能会访问客户工作区,以调查和解决问题。 工作区所有者对此拥有控制权:可以随时在 Settings → General → Security 中禁用支持访问,一旦关闭,将保持关闭状态,直到你再次将其打开。
</Accordion>
<Accordion title="在确认发生影响我们数据的安全事件后,你们的事件通知流程是什么?目标通知时间是多久?">
在确认发生影响你方数据的个人数据泄露事件时,我们会在不无故拖延的前提下,并且无论如何会在知悉该事件后的 48 小时内通知你。 在当时已知的范围内,我们的通知将包括:泄露的性质、受影响数据和个人的类别及大致数量、可能产生的后果,以及已采取或计划采取的补救和减缓措施。 我们会在调查进展过程中持续向你提供更新。
</Accordion>
</AccordionGroup>
## 数据保留与删除
<AccordionGroup>
<Accordion title="当删除单条 CRM 记录时,它会在何时从活动系统中移除?">
当记录被删除时,它首先会被软删除,仍然可以恢复。 一旦保留期结束或用户手动销毁记录,它就会被永久删除并从活动系统中移除。
</Accordion>
<Accordion title="软删除记录在系统中会保留多长时间?">
默认情况下,软删除记录会保留 14 天,之后会从系统中被永久移除。 软删除记录的保留期可以在“设置 → 常规 → 安全”中进行更改。
</Accordion>
<Accordion title="该记录在备份或技术日志中最多会保留多长时间?">
被移除的记录将在备份中保留 30 天,之后将被永久删除。
</Accordion>
<Accordion title="当工作区被关闭或请求完全删除时,对于生产数据、附件、日志和备份分别适用怎样的具体时间表?">
当工作区被删除后,其数据会在服务终止后大约 90 天内(通常会更早)从在线系统中移除。 备份和归档副本随后会在接下来 90 天内被覆盖或清除,此后所有数据将被永久删除。 在这两个期间内,数据都与任何运营用途隔离开来。 应要求,我们可以在清除完成后提供书面证明。 有关完整条款,请参见你的数据处理协议第 4.9 条。
</Accordion>
<Accordion title="在任何备份保留期内,被删除的数据是否与日常运营访问和使用相隔离?">
是的,在任何备份保留期内,被删除的数据都与运营使用相隔离。
</Accordion>
<Accordion title="是否有任何类别的数据会因法律、计费、欺诈防范、安全或审计的目的而被保留更长时间? 如果有,是哪些类别以及会保留多久?">
如需了解更多数据保留相关信息,你可以索取我们的数据管理与保留政策,该政策可在[我们的信任中心](https://trust.twenty.com/?tab=documents)中获取。
</Accordion>
<Accordion title="当完成全部删除请求后,Twenty 是否可以提供书面确认?">
我们会确认删除请求,并在删除完成后提供书面确认。
</Accordion>
</AccordionGroup>
## 备份与弹性
<AccordionGroup>
<Accordion title="备份的频率和保留期限是多少?">
备份会持续创建,并每日生成快照,保留期为 30 天。
</Accordion>
<Accordion title="Twenty Cloud 的恢复点目标(RPO)和恢复时间目标(RTO)是多少?">
RTO 和 RPO 均为 6 小时(如我们的 DPA 所述)。
</Accordion>
<Accordion title="请求或执行恢复操作的流程是什么?">
如需请求恢复,请通过支持聊天与我们的团队联系,或发送邮件至 [contact@twenty.com](mailto:contact@twenty.com)。
</Accordion>
<Accordion title="备份是否已加密,并且是否与主工作区数据存储在同一地区?">
所有备份都经过加密,并存储在同一司法管辖区内但地理位置不同的地点(例如:针对欧盟数据,存储在欧盟境内)。
</Accordion>
</AccordionGroup>
## 合规
<AccordionGroup>
<Accordion title="Twenty 是否符合 GDPR 要求?">
是的,Twenty [符合 GDPR 要求](https://trust.twenty.com/?tab=securityControls\&frameworks=gdpr_v1)。
</Accordion>
<Accordion title="Twenty 是否符合 SOC 2 要求?">
是的,Twenty [符合 SOC 2 要求](https://trust.twenty.com/?tab=securityControls\&frameworks=soc2_v1)。
</Accordion>
<Accordion title="Twenty 是否符合 HIPAA 要求?">
目前还没有,Twenty 正在推进符合 HIPAA 要求的相关工作。
</Accordion>
</AccordionGroup>
## 授权许可
<AccordionGroup>
<Accordion title="如果我修改代码以添加仅供我的团队内部使用的功能,是否必须发布这些更改?">
否. 为你自己的团队运行一个修改版本并不构成分发,因此不会产生公开发布义务。 当你所在组织外部人员通过网络与你修改后的实例进行交互时,AGPL 的网络条款适用。
</Accordion>
<Accordion title="如果我创建一个单独的前端,并按原样使用 Twenty 作为后端,我是否必须公开发布这些更改?">
否. 你的前端是你自己的、独立的作品,通过 API 与 Twenty 通信并不会改变这一点。 由于 Twenty 本身未被修改,因此没有任何内容需要公开发布。
</Accordion>
<Accordion title="如果我更改代码以添加功能并转售,我是否必须公开发布这些更改?">
是的,因为你在修改代码并将其分发给他人,你有义务公开发布这些更改。 如果你不想公开发布你的更改,可以获取 Organization 许可证。
</Accordion>
</AccordionGroup>
如果你还有更多问题,请查阅我们的[条款与条件](https://twenty.com/terms)、[隐私政策](https://twenty.com/privacy-policy)和[信任中心](https://trust.twenty.com/)。 如果你的问题仍未得到解答,请将其发送至 [contact@twenty.com](mailto:contact@twenty.com) 或通过支持聊天联系我们。

View File

@@ -0,0 +1,12 @@
---
title: 法律
description: 法律相关事项
---
查看我们的[常见问题](/l/zh/user-guide/legal/how-tos/legal-faq)。
## 有用的链接
* [条款和条件](https://twenty.com/terms)
* [隐私政策](https://twenty.com/privacy-policy)
* [信任中心](https://trust.twenty.com/)

View File

@@ -0,0 +1,213 @@
---
title: 权限
description: 使用基于角色的权限来控制对对象、字段和设置的访问。
---
Twenty 的权限系统允许您控制对三个主要区域的访问:
* **对象和字段**:控制谁可以查看、编辑或删除记录和单个字段
* **设置**:管理对工作区配置和管理功能的访问
* **操作**:控制一般工作区操作,如导入数据或发送邮件
## 创建角色
要创建新角色:
1. 转到 **设置 → 成员 → 角色**
2. 在 **所有角色** 下,单击 **+ 创建角色**
3. 输入角色名称
4. 在默认的 **权限** 选项卡中,[配置权限](#customize-permissions)
5. 单击 **保存** 完成
## 删除角色
要删除角色:
1. 转到 **设置 → 成员 → 角色**
2. 单击您要删除的角色
3. 打开 **设置** 选项卡,然后单击 **删除角色**
4. 在模态框中单击 **确认**
<Note>
如果删除某个角色,分配到该角色的任何工作区成员将会自动重新分配到默认角色。 除**管理员**角色外的所有角色都可以删除。 必须始终至少有一个成员分配到 **管理员** 角色。
</Note>
## 将角色分配给成员
### 查看当前分配
* 转到 **设置 → 成员 → 角色**
* 查看所有角色以及分配给每个角色的成员数
* 查看哪些成员具有哪些角色
### 将角色分配给成员
1. 转到 **设置 → 成员 → 角色**
2. 单击您要分配的角色
3. 打开 **分配** 选项卡
4. 单击 **+ 分配给成员**
5. 从列表中选择工作区成员
6. 确认分配
### 设置默认角色
1. 转到 **设置 → 成员 → 角色**
2. 在 **选项** 部分,找到 **默认角色**
3. 选择新成员应该自动接收的角色
4. 新工作区成员加入时将被分配此角色
<Note>
您只能将角色分配给现有的工作区成员。 要邀请新成员,请使用 [成员管理](/l/zh/user-guide/settings/capabilities/member-management)。
</Note>
## 自定义权限
权限决定每个角色可以访问或修改您的工作区内,包括工作区对象、记录、设置和动作。
### 对象权限
**Objects** 部分控制此角色在整个工作区中对记录可以执行的操作。
#### 设置默认权限(所有对象)
首先,配置默认适用于**所有对象**的基线权限:
| 权限 | 描述 |
| -------------- | ------------ |
| **查看所有对象上的记录** | 在列表和详情页中查看记录 |
| **编辑所有对象上的记录** | 修改现有记录 |
| **删除所有对象上的记录** | 软删除记录(可恢复) |
| **销毁所有对象上的记录** | 永久删除记录 |
根据该角色的默认行为应为何来勾选或取消勾选。
<Note>
**示例 — 实习生角色**:默认情况下,实习生应该可以查看所有对象,但不能编辑它们。 启用 "在所有对象上查看记录",但保持 "在所有对象上编辑记录" 未勾选。
</Note>
#### 添加对象级例外
设置默认值后,使用 **Object-Level** 子部分添加规则,以覆盖特定对象的默认设置。
点击 **+ Add rule** 并选择一个对象以创建例外。
**实习生角色的示例规则:**
| 规则 | 效果 |
| ------------------------- | ---------------------------- |
| Opportunities → 禁用 "查看记录" | 实习生完全无法查看 Opportunities 对象 |
| People → 启用 "编辑记录" | 实习生可以编辑 People 记录(但不能编辑其他对象) |
### 行级权限
<Note>
行级权限是 **Premium 功能**,可在 **Organization** 方案(云端和自托管)中使用。
</Note>
行级权限可以根据动态条件,限制某个角色可以查看或编辑的具体记录。 与对象权限(适用于整个对象类型)不同,行级权限会独立评估每条记录。
**示例用例:**
* 销售代表只能查看自己的销售机会
* 经理可以查看其所在区域的所有记录
* 客服人员只能查看分配给他们的工单
要配置行级权限,打开某个角色,导航到 **Objects** 选项卡,并使用 **Row-Level** 区域为特定对象定义筛选条件。
### 字段权限
在每个对象级规则内,您还可以进一步配置**字段级权限**,以控制对特定字段的访问。
| 权限 | 描述 |
| --------- | -------- |
| **查看字段** | 查看该字段的值 |
| **编辑字段** | 修改该字段的值 |
| **无访问权限** | 字段将被完全隐藏 |
**示例 — 限制敏感字段:**
对于具有 People 编辑权限的实习生角色,您可能希望限制某些字段:
* People → Email → 仅**查看字段**(不可编辑)
* People → Address → **无访问权限**(完全隐藏)
这使得实习生可以编辑大多数 People 字段,同时保护敏感信息。
### 权限继承如何工作
权限从全局到具体逐级生效:
1. **所有对象** → 为所有对象设定基线
2. **对象级规则** → 覆盖特定对象的基线设置
3. **字段级规则** → 覆盖特定字段的对象级设置
更具体的设置始终优先生效。
### 管理权限覆盖
要覆盖继承的权限:
1. 单击 **X** 以移除继承的规则
2. 选择您想要的具体权限
3. 单击橙色 **撤销** 图标(圆形箭头)以还原更改
完成后,单击 **完成**,然后在重定向到角色页面后单击 **保存**。
### 工作区设置权限
有两种方式控制对工作区设置的访问:
* 切换 **设置全访问** 以授予完全访问权限
* 或者启用特定权限(例如,API 密钥生成、工作区首选项、角色分配、数据模型配置、安全设置和工作流管理)
<Note>
**当前限制**:目前需要具有工作流管理的访问权限才能手动触发工作流。 此行为可能会在未来的版本中发生变化。
</Note>
### 工作区操作权限
控制对一般工作区操作的访问:
* 切换 **应用全访问** 以授予所有权限
* 或者启用个人操作,例如 **发送电子邮件**、**导入 CSV** 和 **导出 CSV**
## 分配角色给 API 密钥和 AI 代理
除了工作区成员之外,还可以将角色分配给 **API Keys** 和 **AI Agents**。 这对于希望精确控制在其工作区中 "谁" 可以执行哪些操作的团队特别有用——包括自动化流程和集成。
### 为什么要将角色分配给 API 密钥和 AI 代理?
* **安全性**:限制自动化流程可以访问或修改的内容
* **合规性**:确保集成仅接触其所需的数据
* **可控性**:防止因自动化配置错误而导致的数据意外更改
* **可审计性**:追踪由哪个集成或代理执行了哪些操作
### 将角色分配给 API 密钥
1. 转到 **设置 → 成员 → 角色**
2. 单击您要分配的角色
3. 打开 **分配** 选项卡
4. 在 **API Keys** 下,点击 **+ Assign to API key**
5. 从列表中选择该 API 密钥
6. 确认分配
该 API 密钥现在将继承该角色定义的所有权限。 使用该密钥发起的任何 API 调用都将相应受限。
<Note>
未分配角色的 API 密钥将使用默认权限。 为提高安全性,请始终为生产环境的 API 密钥分配特定角色。
</Note>
### 将角色分配给 AI 代理
1. 转到 **设置 → 成员 → 角色**
2. 单击您要分配的角色
3. 打开 **分配** 选项卡
4. 在 **AI Agents** 下,点击 **+ Assign to AI agent**
5. 从列表中选择该 AI 代理
6. 确认分配
该 AI 代理只能访问其被分配角色所允许的数据并执行相应操作。
<Note>
对于在工作流中运行的 AI 代理,这可确保其无法访问或修改超出其预期范围的数据——即使该工作流具有更广泛的权限。
</Note>

View File

@@ -0,0 +1,125 @@
---
title: SSO 配置
description: 配置单点登录(SSO),以实现安全的企业级身份验证。
---
## 关于 SSO
单点登录(SSO)允许您的团队成员使用您组织的身份提供商登录 Twenty。 这将提供:
* **集中式访问控制**:在一个位置管理访问
* **增强的安全性**:利用您现有的安全策略
* **更佳的用户体验**:一组凭据适用于所有工具
## 支持的提供商
Twenty 支持以下 SSO:
* **SAML 2.0**:适用于大多数企业身份提供商
* **Google Workspace**:适用于使用 Google 的组织
* **Microsoft Entra ID** (原Azure AD):对于Microsoft 环境
## 设置 SSO
### 先决条件
* 组织计划(云端和自托管工作区)
* 对您的身份提供商的管理员访问权限
* 管理员访问您的20个工作区
### 配置步骤
#### 1. 访问 SSO 设置
1. 转到 **设置 → 安全**
2. 找到 **SSO 配置** 部分
3. 点击 **配置 SSO**
#### 2) 选择服务提供商
从列表中选择您的身份提供商,或为其他提供商选择“Custom SAML”。
#### 3. 配置您的身份提供商
您需要为身份提供商配置以下内容:
* **实体 ID**:由 Twenty 提供
* **ACS URL**:用于身份验证的回调 URL
* **证书**:用于安全通信
#### 4. 在 Twenty 中输入提供商详细信息
* **SSO URL**:来自您的提供商的登录 URL
* **实体 ID**:您的提供商的标识符
* **证书**:来自您的提供商的 X.509 证书
#### 5. 测试并启用
1. 点击 **测试配置** 以验证设置
2. 测试成功后启用 SSO
3. 配置用户预配偏好设置
## 用户预配
### 即时(JIT)预配
* 用户在首次登录时自动创建
* 用户被自动分配为默认角色
* 无需手动创建用户
### 手动预配
* 在登录前邀请用户
* 预先分配特定角色
* 更多控制谁可以访问工作区
## 管理 SSO 用户
### 角色分配
与普通用户一样,可以为 SSO 用户分配角色:
1. 转到 **设置 → 成员**
2. 找到该用户
3. 根据需要更改其角色
### 撤销访问权限
要移除 SSO 用户的访问权限:
* 将其从您的身份提供商中移除,或
* 将其从 Twenty 工作区中移除
## 最佳实践
### 安全
* **要求使用 SSO**:为 SSO 用户禁用密码登录
* **定期审计**:定期审查访问权限
* **严格的 IdP 策略**:在身份提供商处强制执行 MFA
### 用户管理
* **清晰的命名**:使用与您的目录一致的命名
* **组映射**:将 IdP 的组映射到 Twenty 角色(如可用)
* **离职流程**:将 Twenty 纳入您的停用工作流
## 故障排除
### 常见问题
* **证书错误**: 确保证书未过期
* **URL 不匹配**:验证CASURL 是否匹配
* **未找到用户**:检查 JIT 预配设置
### 获取帮助
如果您遇到问题,请联系支持并提供:
* 收到的错误消息
* 所使用的身份提供商
* 配置详情(不含敏感数据)
<Tip>
需要为您的组织配置 SSO 吗? [寻找经过认证的 Twenty 合作伙伴](https://twenty.com/partners/list?categories=SOLUTIONING\&ref=docs-sso),专注于 SSO 和身份配置。 \*(更希望直接让 Twenty 参与? [contact@twenty.com](mailto:contact@twenty.com)*
</Tip>

View File

@@ -0,0 +1,120 @@
---
title: 权限常见问题
description: 关于角色和权限的常见问题。
---
## 角色
<AccordionGroup>
<Accordion title="Twenty 默认包含哪些角色?">
Twenty 默认提供 **管理员** 和 **成员** 角色。 您可以根据团队需求创建额外的自定义角色(例如:销售代表、经理、只读用户)。
</Accordion>
<Accordion title="我可以删除管理员角色吗?">
不可以,无法删除管理员角色。 必须始终至少有一名成员被分配到管理员角色。
</Accordion>
<Accordion title="删除角色会发生什么?">
任何分配了该角色的工作区成员都会自动重新分配到默认角色。
</Accordion>
<Accordion title="如何为新成员设置默认角色?">
前往 **设置 → 成员 → 角色**,找到 **默认角色** 选项,并选择新成员加入时应自动获得的角色。
</Accordion>
<Accordion title="我可以为同一用户分配多个角色吗?">
不可以,每个用户在同一时间只能拥有一个角色。 如果需要组合权限,请创建自定义角色。
</Accordion>
</AccordionGroup>
## 权限
<AccordionGroup>
<Accordion title="对象权限与字段权限有什么区别?">
* **对象权限**:控制对整条记录的访问(例如,是否可查看/编辑/删除 People 记录)
* **字段权限**:控制对象内特定字段的访问(例如,可查看但不能编辑 Salary 字段)
字段权限可对敏感数据进行更细粒度的控制。
</Accordion>
<Accordion title="权限覆盖如何生效?">
权限从全局到具体逐级生效:
1. **所有对象** 为所有对象设定基线。
2. **对象级权限** 可覆盖特定对象的全局设置。
3. **字段级权限** 可覆盖特定字段的对象级设置。
更具体的设置始终优先生效。
</Accordion>
<Accordion title="不同的权限级别分别意味着什么?">
针对对象:
* **查看记录**:在列表和详情页中查看记录
* **编辑记录**:修改现有记录
* **删除记录**:软删除记录(可恢复)
* **彻底删除记录**:永久删除记录
针对字段:
* **查看字段**:查看该字段的值
* **编辑字段**:修改该字段的值
* **无访问权限**:该字段将被完全隐藏
</Accordion>
<Accordion title="我可以限制对特定记录的访问(行级权限)吗?">
行级权限在 **Organization** 方案中可用。 这将允许您根据条件限制对特定记录的访问(例如,仅查看自己的商机)。
</Accordion>
<Accordion title="如何为特定用户将字段设为只读?">
1. 转到 **设置 → 成员 → 角色**
2. 选择角色
3. 导航到包含该字段的对象
4. 将字段权限设置为 **查看字段**(不启用“编辑字段”)
</Accordion>
</AccordionGroup>
## 设置与操作
<AccordionGroup>
<Accordion title="有哪些与设置相关的权限?">
您可以控制对以下内容的访问:
* API 密钥生成
* 工作区首选项
* 角色分配
* 数据模型配置
* 安全设置
* 工作流管理
使用 **Settings All Access** 授予完全访问权限,或仅启用特定权限。
</Accordion>
<Accordion title="有哪些操作相关的权限?">
您可以控制:
* **发送电子邮件**:可从 Twenty 发送邮件
* **导入 CSV**:可通过 CSV 导入数据
* **导出 CSV**:可导出数据为 CSV
使用 **Application All Access** 授予所有操作权限,或仅启用特定操作。
</Accordion>
</AccordionGroup>
## SSO
<AccordionGroup>
<Accordion title="所有方案都提供 SSO 吗?">
不,SSO 是高级功能,仅在 **Organization** 方案中提供。
</Accordion>
<Accordion title="支持哪些身份提供商?">
Twenty 支持:
* **SAML 2.0**(适用于大多数企业身份提供商)
* **Google Workspace**
* **Microsoft Entra ID**(原 Azure AD)
</Accordion>
<Accordion title="什么是即时(JIT)预配?">
启用 JIT 预配后,用户首次通过 SSO 登录时,会在 Twenty 中自动创建其账户。 系统会自动为其分配默认角色。
</Accordion>
<Accordion title="是否可以要求所有用户使用 SSO?">
可以。配置好 SSO 后,您可以为 SSO 用户禁用密码登录,以强制其通过您的身份提供商进行身份验证。
</Accordion>
</AccordionGroup>

View File

@@ -0,0 +1,34 @@
---
title: 权限与访问
description: 在您的工作区中管理角色、权限和访问控制。
---
Twenty 的权限系统使您能够控制谁可以在您的工作区中访问和修改数据。 创建角色、分配权限,并配置 SSO 以实现安全访问。
## 本节内容
<CardGroup cols={2}>
<Card title="权限" icon="lock" href="/l/zh/user-guide/permissions-access/capabilities/permissions">
创建角色并配置对象、字段和设置权限。
</Card>
<Card title="SSO 配置" icon="key" href="/l/zh/user-guide/permissions-access/capabilities/sso-configuration">
使用您的身份提供商设置单点登录(SSO)。
</Card>
<Card title="常见问题" icon="circle-question" href="/l/zh/user-guide/permissions-access/how-tos/permissions-faq">
关于角色、权限和 SSO 的常见问题。
</Card>
</CardGroup>
## 关键功能
* **基于角色的访问**:创建具有特定权限的自定义角色
* **对象权限**:控制谁可以查看、编辑或删除记录
* **字段权限**:限制对敏感字段的访问
* **设置权限**:控制对工作区配置的访问
* **SSO 集成**:为企业安全配置单点登录(Organization 计划)
## 快速链接
* [创建角色](/l/zh/user-guide/permissions-access/capabilities/permissions#create-a-role)
* [配置 SSO](/l/zh/user-guide/permissions-access/capabilities/sso-configuration)
* [管理团队成员](/l/zh/user-guide/settings/capabilities/member-management)

View File

@@ -0,0 +1,36 @@
---
title: 社区设置
description: 在 Twenty 中启用早期访问功能。
---
## 关于社区设置
“社区”部分允许您在功能普遍可用之前启用早期访问功能,并搜索 Twenty 合作伙伴。
## 早期访问功能
早期访问功能是在全面可用之前仍在测试的功能。
**当前处于早期访问阶段:**
* **连接关系** — 多对多关系
### 如何启用早期访问功能
1. 转到 **设置 → 社区**
2. 转到 **功能** 部分
3. 找到您想要启用的功能
4. 将其切换为开启
5. 该功能将立即可用
<Note>
早期访问功能可能会根据用户反馈而改变。 您的反馈有助于我们改进 Twenty!
</Note>
## 功能反馈
您的反馈有助于改进 Twenty:
* 报告早期访问功能的问题
* 分享您如何使用新功能
* 通过 [社区 Discord](https://discord.gg/cx5n4Jzs57) 提出改进建议

View File

@@ -0,0 +1,52 @@
---
title: 域设置
description: 配置工作区的域名、已批准的访问域名,以及应用自定义域名。
---
域名设置分布在三个位置,具体取决于你要配置的内容。
## 工作区域
在 **设置 -> 通用** 下配置。
编辑您的子域名或为您的工作区设置一个自定义域名。
### 自定义域名
1. 点击 **Subdomain** 编辑您的子域名(例如,`yourcompany.twenty.com`)
2. 或者点击**自定义域** 来设置一个自定义域(例如`crm.yourcompany.com`)
对于自定义域名,您需要与域提供商配置DNS设置。
## 批准的域名
在 **设置 → 成员 → 邀请** 下进行配置。
添加您的公司域名让团队成员自动注册此工作区。
### 添加批准的访问域
1. 点击 **添加已批准的访问域**
2. 输入您的公司域名(例如,`yourcompany.com`)
3. 保存
一旦配置,任何在该域拥有电子邮件地址的人都可以加入您的工作区,而无需直接邀请。
<Note>
这有助于让您的整个团队能够自行注册,同时将工作区限制在您的组织中。
</Note>
## 应用自定义域名
在 **设置 → 应用 → 你的应用 → 设置 → 应用 URL** 下进行配置。
在 Web 上公开路由的应用会从专用 URL 提供服务,该 URL 显示在 **应用 URL** 部分。 你也可以改为在你拥有的域名上托管该应用。
### 添加自定义域名
1. 点击 **自定义域**
2. 输入你想要使用的域名(例如:`app.yourcompany.com`)
3. 按指示配置DNS设置
4. 验证域
只有该应用的路由可以通过该域名访问。 SSL 证书会自动配置。

View File

@@ -0,0 +1,38 @@
---
title: 体验设置
description: 自定义界面主题和地区偏好。
---
在 **设置 → 体验** 中个性化您的 Twenty 体验。
## 外观
选择您的外观主题:
* **浅色**:清爽明亮的界面
* **深色**:在低光照条件下对眼睛更友好
* **系统设置**:自动匹配您设备的主题
## 语言
从下拉菜单中选择您在 Twenty 界面中偏好的语言。
## 格式
配置日期、时间、数字、时区和日历开始日。
| 设置 | 描述 |
| --------- | ---------------------------- |
| **时区** | 用于确保时间戳和日程安排准确的本地时区 |
| **日期格式** | 日期的显示方式(例如:2025 年 12 月 12 日) |
| **时间格式** | 12 小时制(下午 7:22)或 24 小时制 |
| **数字格式** | 小数和千位分隔符(例如:1,234.56) |
| **日历开始日** | 一周的第一天(周日或周一) |
每个设置都可以设为**系统设置**以自动匹配您设备的偏好,或者您可以选择特定的格式。
## 如何更新
1. 进入 **设置 → 体验**
2. 在各个部分中调整偏好
3. 更改会自动保存

View File

@@ -0,0 +1,86 @@
---
title: 成员管理
description: 邀请团队成员并管理工作区访问权限。
---
在 **设置 → 成员** 下管理谁可以访问您的工作区。
## 邀请新成员
### 使用电子邮件邀请
1. 转到 **设置 → 成员 → 邀请**
2. 点击 **+ 邀请**
3. 输入该人的电子邮件地址
4. 为新成员选择一个角色
5. 点击 **发送邀请**
受邀者将收到一封包含用于加入您工作区的链接的电子邮件。
### 使用邀请链接
1. 转到 **设置 → 成员 → 邀请**
2. 复制工作区邀请链接
3. 与新团队成员分享链接
4. 注册后他们将获得访问权限
## 查看并管理成员
### 查看所有成员
转到**设置→ 成员 -> 团队** 查看所有活跃成员
转到**设置→ 成员 -> 邀请** 查看待处理的邀请
### 编辑成员的个人资料
点击某位成员以打开其个人资料页面。 作为管理员,您可以:
* 编辑其**姓名**
* 更新其**头像**
* **模拟登录**其账户(有助于故障排查)
* **删除**其账户
### 更改成员角色
在该成员的个人资料页面上:
1. 打开 **权限** 选项卡
2. 查看当前分配的角色
3. 从下拉菜单中选择不同的角色
4. 更改将立即生效
→ [了解角色与权限的更多信息](/l/zh/user-guide/permissions-access/capabilities/permissions)
### 移除成员
1. 点击该成员以打开其个人资料
2. 点击 **删除帐户** 将其从工作区删除
<Warning>
被移除的成员将立即失去访问权限。 其数据(记录、备注、任务)将保留在工作区中。
</Warning>
<Note>
删除成员的电子邮件和日历活动已存档并可供其他成员使用。
</Note>
## 待处理的邀请
管理尚未被接受的邀请:
* **重新发送**:再次发送邀请邮件
* **取消**:在被接受之前撤销该邀请
## 批准的访问域
根据其电子邮件域允许团队成员自动加入:
1. 转到 **设置 → 成员 → 邀请**
2. 添加您公司的域名(例如,`yourcompany.com`)
3. 使用该电子邮件域的任何人都可无需邀请加入。
## 相关内容
* [权限](/l/zh/user-guide/permissions-access/capabilities/permissions) — 配置每个角色可以执行的操作
* [域设置](/l/zh/user-guide/settings/capabilities/domains-settings) - 配置已批准的域

View File

@@ -0,0 +1,43 @@
---
title: 个人资料设置
description: 管理您的个人资料和安全设置。
---
## 个人信息
### 姓名和邮箱
* **显示名称**:更新您的姓名对其他工作空间成员的显示方式
* **电子邮件地址**:更改您的登录电子邮件(需要验证)
* **个人头像**:上传自定义头像或使用您的姓名首字母
## 安全设置
### 双因素认证 (2FA)
启用 2FA 为您的帐户增加一个额外的安全层:
1. 转到 **设置 → 个人资料**
2. 单击 **身份验证器应用**
3. 使用您的身份验证应用扫描 QR 码
4. 输入验证码以确认
### 密码管理
* **更改密码**:更新您当前的密码
* **密码要求**:至少 8 个字符
## 个人资料管理
### 删除帐户
<Warning>
删除您的帐户将永久移除您对所有工作空间的访问权限。 此操作无法撤销。 你将失去对你所在的所有工作区的访问权限。 如果你只想退出特定团队,可以考虑改为逐个离开工作区。
</Warning>
要删除您的帐户:
1. 转到 **设置 → 个人资料**
2. 滚动至 **危险区**
3. 单击 **删除帐户**
4. 输入您的电子邮箱地址以确认

View File

@@ -0,0 +1,30 @@
---
title: 工作区设置
description: 自定义您的工作区名称和品牌。
---
您的工作区图片、名称和删除选项都可以在 **设置 -> 通用** 下访问。
## 工作区图片
* **上传徽标**:添加自定义工作区徽标
* **支持格式**:PNG、JPEG 和小于 10MB 的 GIF 文件
* **移除**:删除当前工作区徽标
## 工作区名称
* **名称**:更改您的工作区显示名称
* 此名称将显示给所有工作区成员
## 危险区
<Warning>
删除您的工作区将永久删除所有数据并立即撤销所有成员的访问权限 — 此操作不能撤消。
</Warning>
要删除您的工作区:
1. 点击 **删除工作区** 按钮
2. 出现提示时确认删除
**注意**:只有工作区管理员可以删除工作区。

View File

@@ -0,0 +1,171 @@
---
title: 设置FAQ
description: 关于 Twenty 设置的常见问题。
---
## 工作区设置
<AccordionGroup>
<Accordion title="如何更改我的工作空间名称?">
1. 转到 **设置 → 常规**
2. 找到“工作空间名称”字段
3. 输入您的新名称
4. 更改会自动保存
</Accordion>
<Accordion title="如何更新我的工作空间徽标?">
1. 转到 **设置 → 常规**
2. 点击当前徽标或上传区域
3. 选择图像文件(PNG、JPEG 或 GIF,大小小于 10MB)
4. 徽标会立即更新
</Accordion>
<Accordion title="我可以拥有多个工作空间吗?">
可以,您可以创建并成为多个工作空间的成员。 每个工作空间都有自己独立的数据、设置和订阅。
</Accordion>
<Accordion title="如何删除我的工作空间?">
1. 转到 **设置 → 常规**
2. 滚动到危险区域
3. 点击 **删除工作空间**
4. 确认删除
注意:此操作将永久删除所有数据,且无法撤销。
</Accordion>
<Accordion title="我不小心创建了多个工作空间。 我应该怎么办?">
在 **设置 → 常规 → 删除工作空间** 中删除不再需要的工作空间。
<Warning>
不要删除您的 **账户**(可在 设置 → 个人资料 下访问):您的账户在所有工作空间中共享。 删除您的账户会移除您对所有工作空间的访问权限。
</Warning>
</Accordion>
<Accordion title="如何在不删除的情况下禁用我的工作空间?">
如果您想暂时禁用您的工作空间(而非永久删除),请前往 **设置 → 账单** 并点击 **取消计划**。 您的数据将在宽限期内保留。
</Accordion>
</AccordionGroup>
## 个人资料设置
<AccordionGroup>
<Accordion title="如何更改我的密码?">
1. 转到 **设置 → 个人资料**
2. 找到“密码”部分
3. 输入您的当前密码
4. 输入您的新密码
5. 保存更改
</Accordion>
<Accordion title="如何启用双重身份验证?">
1. 转到 **设置 → 个人资料**
2. 找到“2FA”部分
3. 单击 **启用 2FA**
4. 使用您的身份验证应用扫描 QR 码
5. 输入验证码
</Accordion>
<Accordion title="我可以更改我的电子邮件地址吗?">
若要更改您的电子邮件地址,请联系 [contact@twenty.com](mailto:contact@twenty.com)。
</Accordion>
<Accordion title="如何删除我的账户?">
1. 转到 **设置 → 个人资料**
2. 滚动到危险区域
3. 单击 **删除帐户**
4. 输入您的电子邮件地址以确认
注意:此操作会移除您对所有工作空间的访问权限,并删除从已连接账户同步的所有电子邮件。
</Accordion>
</AccordionGroup>
## 体验设置
<AccordionGroup>
<Accordion title="如何在浅色和深色模式之间切换?">
1. 转到 **设置 → 体验**
2. 找到“主题”部分
3. 选择浅色、深色或系统
</Accordion>
<Accordion title="如何更改日期格式?">
1. 转到 **设置 → 体验**
2. 找到“日期格式”
3. 选择您偏好的格式
4. 更改会立即生效
</Accordion>
<Accordion title="如何更改我的时区?">
1. 转到 **设置 → 体验**
2. 找到“时区”
3. 选择您所在的时区
4. 所有时间戳都会相应调整
</Accordion>
<Accordion title="我可以更改语言吗?">
1. 转到 **设置 → 体验**
2. 找到“语言”
3. 从可用语言中进行选择
4. 界面将根据您的选择进行更新
</Accordion>
</AccordionGroup>
## 账户设置
<AccordionGroup>
<Accordion title="如何连接我的电子邮件账户?">
1. 转到 **设置 → 账户**
2. 点击**添加账户**
3. 选择 Google 或 Microsoft
4. 授权访问
5. 配置同步设置
</Accordion>
<Accordion title="我可以连接多个电子邮件账户吗?">
可以,您可以连接多个电子邮件账户。 转到 **设置 → 账户**,按需添加其他账户。
</Accordion>
<Accordion title="如何断开电子邮件账户的连接?">
1. 转到 **设置 → 账户**
2. 找到要移除的账户
3. 点击 **断开连接**
4. 确认该操作
</Accordion>
</AccordionGroup>
## 域名
<AccordionGroup>
<Accordion title="我可以自定义我的工作空间域吗?">
是! 转到 **设置 → 常规 → 工作区域名** 并点击 **自定义域名**。 您有两个选项:
* **子域名**:使用一个 Twenty 子域名,如 `yourcompany.twenty.com`
* **自定义域名**:使用您自己的域名,如 `crm.yourcompany.com`(需要 DNS 配置)
子域名设置快捷,而自定义域名可为您的团队提供完整的品牌化体验。
</Accordion>
<Accordion title="批准的访问域名如何工作?">
您可以配置批准的访问域名,使拥有公司电子邮件地址的团队成员能够自动加入您的工作空间。 转到 **设置 → 成员 → 邀请** 并添加您的公司域名(例如,`yourcompany.com`)。
</Accordion>
</AccordionGroup>
## 早期访问功能
<AccordionGroup>
<Accordion title="什么是早期访问功能?">
早期访问功能是在正式发布前进行测试的功能。
</Accordion>
<Accordion title="早期访问功能使用安全吗?">
早期访问功能可正常使用且安全,但在正式发布前,可能会根据用户反馈而调整。
</Accordion>
<Accordion title="如何启用早期访问功能?">
1. 转到**设置 -> 社区**
2. 向下滚动到 **功能** 部分
3. 找到您想要的功能
4. 将其切换为开启
5. 该功能将立即可用
</Accordion>
</AccordionGroup>

View File

@@ -0,0 +1,62 @@
---
title: 设置
description: 通过关键配置来设置您的 Twenty 工作区。
---
## 初始设置
首次创建工作区时,需要配置一些关键设置。
### 工作区名称和徽标
1. 转到 **设置 → 常规**
2. 更新您的工作区名称
3. 上传您的公司徽标
4. 保存更改
### 时区和日期格式
1. 转到 **设置 → 体验**
2. 选择您的时区
3. 选择您首选的日期格式
4. 保存更改
## 关键配置
### 连接电子邮件和日历
设置电子邮件和日历同步:
1. 转到 **设置 → 账户**
2. 点击**添加账户**
3. 连接您的 Google 或 Microsoft 账户
4. 配置同步设置
→ [完整的电子邮件与日历设置指南](/l/zh/user-guide/calendar-emails/overview)
### 邀请您的团队
将团队成员添加到您的工作区:
1. 转到 **设置 → 成员**
2. 点击 **+ 邀请**
3. 输入电子邮件地址
4. 分配合适的角色
<Note>
在邀请团队之前,请在 **设置 → 成员 → 角色** 中检查默认角色。 新成员加入时会自动被分配此角色。
</Note>
## 工作区设置清单
* 工作区名称和徽标已配置
* 已设置时区和日期格式
* 已连接电子邮件和日历
* 已邀请团队成员
* 已配置角色与权限
## 下一步
* [工作区设置](/l/zh/user-guide/settings/capabilities/workspace-settings)
* [个人资料设置](/l/zh/user-guide/settings/capabilities/profile-settings)
* [体验设置](/l/zh/user-guide/settings/capabilities/experience-settings)

View File

@@ -0,0 +1,46 @@
---
title: 日历视图
description: 在日历上显示带有日期字段的记录。
---
## 关于日历视图
日历视图会根据某个日期字段在日历上显示您的记录。 每条记录会在相应日期显示为一个事件。
<img src="/images/user-guide/views/calendar-view-zoom.png" style={{width:'100%'}} />
## 创建日历视图
1. 导航到包含日期字段的对象
2. 单击视图下拉菜单 → **+ 添加视图**
3. 命名您的视图并点击 **创建**
4. 打开右侧的 **选项**
5. 选择 **日历** 作为布局
6. 选择用于定位记录的 **日期字段**
7. 单击 **更新视图**
## 配置日历
### 选择日期字段
在 **选项** 中,选择决定记录在日历上显示位置的日期字段。
### 显示字段
配置每个日历事件上显示的字段:
1. 单击 **选项 → 字段**
2. 切换字段开/关
3. 拖动以重新排序
## 使用场景
* **会议和通话**:查看即将到来的预约
* **截止日期**:跟踪到期日期和关闭日期
* **事件**:规划并可视化已安排的活动
* **跟进**:查看任务的到期时间
## 相关内容
* [视图概览](/l/zh/user-guide/views-pipelines/overview) — 创建和管理视图
* [筛选与排序](/l/zh/user-guide/views-pipelines/capabilities/filters-and-sorting) — 筛选日历数据

View File

@@ -0,0 +1,52 @@
---
title: 字段与列
description: 选择要显示的字段,并决定如何组织它们。
---
## 选择要显示的字段
每个视图都可以显示不同的字段集。 自定义可见内容,以专注于关键信息。
### 显示或隐藏字段
1. 点击右上角的 **选项**
2. 点击 **字段**
3. 点击每个字段旁的 **眼睛图标** 以显示或隐藏它
### 重新排序字段
更改字段在视图中的显示顺序:
1. 点击 **选项 → 字段**
2. 上下拖动字段
3. 更改会自动保存
## 按视图类型显示字段
### 表视图
* 字段显示为列
* 通过拖动边框调整列宽
### 看板视图
* 字段显示在卡片上
* 通过选项 → 字段重新排序
* 使用紧凑视图隐藏所有字段
### 日历视图
* 在日历事件中显示所选字段
* 通过选项 → 字段进行配置
## 最佳实践
* **只显示需要的内容** — 太多字段打乱视图
* **将重要字段放在前面** — 最常用的列放在左侧
* **创建多个视图** — 针对不同目的使用不同的字段集
* **按视图设置字段可见性** — 同一对象,不同侧重
## 相关内容
* [表格视图](/l/zh/user-guide/views-pipelines/capabilities/table-views) — 列表视图功能
* [看板视图](/l/zh/user-guide/views-pipelines/capabilities/kanban-views) — 基于卡片的视图

View File

@@ -0,0 +1,78 @@
---
title: 过滤与排序
description: 过滤并排序记录,以准确找到您需要的内容。
---
## 过滤数据
过滤器通过仅显示符合您条件的记录,帮助您专注于特定记录。
### 添加过滤器
1. 点击工具栏中的 **过滤** 按钮
2. 选择用于过滤的字段
3. 选择运算符(等于、包含等)
4. 输入过滤条件的值
5. 点击 **应用**
### 过滤运算符
| 字段类型 | 可用的运算符 |
| ---- | ------------------ |
| 文本 | 等于、包含、以…开头、以…结尾、为空 |
| 数字 | 等于、大于、小于、为空 |
| 日期 | 等于、早于、晚于、为空 |
| 选择 | 等于、属于以下任一、为空 |
| 复选框 | 为真、为假 |
| 关系 | 等于、为空 |
### 多个过滤器
组合多个过滤器以缩小结果范围:
* 所有过滤器均按 AND 逻辑应用
* 每个额外的过滤器都会进一步限制结果
### 移除过滤器
* 点击单个过滤条件标签上的 **X**
* 点击 **全部清除** 以移除所有过滤器
## 排序数据
排序决定记录的显示顺序。
### 添加排序
1. 点击工具栏中的 **排序** 按钮
2. 选择用于排序的字段
3. 选择升序(A-Z、0-9)或降序(Z-A、9-0)
4. 点击 **应用**
### 多级排序
添加多个排序级别:
* 第一个排序为主排序
* 后续排序在相同值的分组内应用
### 快速列排序
单击任意列标题进行排序:
* 第一次点击:升序
* 第二次点击:降序
* 第三次点击:移除排序
## 保存过滤与排序设置
过滤与排序会随视图保存:
1. 配置您的过滤与排序
2. 点击 **保存** 以更新当前视图
3. 或点击 **另存为新视图** 以创建一个变体
## 相关内容
* [表格视图](/l/zh/user-guide/views-pipelines/capabilities/table-views) — 分组功能
* [视图概览](/l/zh/user-guide/views-pipelines/overview) — 创建和管理视图

View File

@@ -0,0 +1,98 @@
---
title: 看板视图
description: 了解如何使用看板视图来可视化并管理您的工作流。
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
## 关于看板视图
看板视图以视觉方式映射出处理流程,其中每个列代表一个不同阶段,每个卡片代表一个记录。
## 在阶段间移动卡片
在工作流推进过程中,您可以点击并按住卡片,然后将其拖动到下一阶段,从而在阶段之间移动每张卡片。
<VimeoEmbed videoId="927888627" title="视频演示" />
## 添加和删除阶段
您可以使用阶段来定制工作流以满足您的需求,每个阶段都代表选择字段中的一个值:
### 添加阶段
要添加阶段,请前往 设置 > 数据模型,选择您的对象,然后选择看板所依赖的字段,进入选择字段设置。
<VimeoEmbed videoId="927890428" title="视频演示" />
### 移除阶段
要删除阶段,悬停在阶段名称或 `⋮` 图标上,单击选择字段设置中的 `从设置编辑`,然后在相关阶段旁边单击 **删除**。
## 显示字段
您可以配置看板板以显示一些字段并隐藏其他字段。 要显示或隐藏字段,请点击右上角的 **选项**,然后点击 **字段** 以打开选项列表,再点击字段旁边的眼睛图标以显示或隐藏该字段。
您还可以通过按住字段名称并将其拖到所需位置来重新排列字段顺序。
<img src="/images/user-guide/kanban-views/filter.png" style={{width:'100%'}} />
## 紧凑视图
您可以隐藏所有字段,从而一目了然地总览所有记录。 启用方法:
1. 单击右上角的 **选项**
2. 打开 **紧凑视图** 开关
<img src="/images/user-guide/kanban-views/compact-view.png" style={{width:'100%'}} />
## 列聚合
看板视图中的每一列都可以在顶部显示聚合值,帮助您一目了然地了解数据。
### 可用的聚合
| 聚合 | 描述 |
| ------ | ---------------- |
| **计数** | 该列中的记录数量 |
| **总和** | 数值字段的总计(例如,交易金额) |
| **平均** | 数值字段的平均值 |
| **最小** | 最小值 |
| **最大** | 最大值 |
### 配置聚合
1. 单击列顶部显示在阶段值旁边的数字
2. 选择聚合类型
3. 选择要聚合的字段
**示例:** 通过对 Amount 字段进行求和,显示每个阶段的交易总金额。
## 何时使用看板视图
看板视图非常适用于:
* **销售管道**:从线索到成交,按阶段跟踪交易
* **项目管理**:按工作流状态监控任务
* **招聘**:按招聘阶段跟踪候选人
* **任何分阶段的流程**:以可视化方式呈现具有已定义阶段的任何工作流
## 最佳实践
### 组织您的阶段
* **限制阶段数量**:以 5–7 个阶段为宜
* **命名清晰**:使用具有描述性的阶段名称
* **逻辑顺序**:按流程顺序排列阶段
### 优化卡片显示
* **显示关键字段**:只显示最重要的信息
* **使用紧凑视图**:用于高层级概览
* **颜色编码**:使用阶段颜色快速识别状态
### 保持数据质量
* **定期更新**:让卡片在各阶段持续流转
* **归档已完成项**:将已关闭的条目移出活动视图
* **检查滞留卡片**:跟进停留在某个阶段的卡片

View File

@@ -0,0 +1,64 @@
---
title: 表视图
description: 以类似电子表格的列表格式显示您的数据。
---
## 关于表视图
表格视图以行显示记录,并带有可自定义的列——类似电子表格。 这是大多数对象的默认视图类型。
<img src="/images/user-guide/table-views/table-view.png" style={{width:'100%'}} />
## 功能
### 列配置
* 显示或隐藏列(字段)
* 调整列宽
* 通过拖动重新排序列
### 按 Select 字段分组
根据 Select 类型的字段将记录组织为可折叠的分组。
<img src="/images/user-guide/table-views/table-group-by.png" style={{width:'100%'}} />
1. 单击 **选项**
2. 选择 **分组**
3. 选择一个 Select 字段
4. 在 **选项 → 分组 → 排序** 下配置分组顺序:
* **字母顺序** 或 **反向字母顺序**
* **手动排序**:在 "可见分组" 下拖动分组以重新排序
* 单击分组旁的 **眼睛图标** 以将其隐藏
**使用场景:**
* 按类型对公司分组
* 按阶段对商机分组
* 按状态对任务分组
<Note>
**为获得最佳性能,请将每个视图的可见分组限制在 10-15 个。** 如果需要更多分组,建议改用仪表板。
</Note>
### 列宽
调整列宽以显示更多或更少的内容:
1. 将鼠标悬停在两个列标题之间
2. 单击并拖动列边框
3. 松开以设置新宽度
## 何时使用表格视图
表格视图最适用于:
* **浏览大型数据集** — 快速扫描大量记录
* **数据录入** — 高效编辑多条记录
* **详细分析** — 同时查看多个字段
* **排序与筛选** — 查找特定记录
## 相关内容
* [字段和列](/l/zh/user-guide/views-pipelines/capabilities/fields-and-columns) — 配置要显示的字段
* [筛选与排序](/l/zh/user-guide/views-pipelines/capabilities/filters-and-sorting) — 缩小记录范围

View File

@@ -0,0 +1,74 @@
---
title: 视图设置
description: 管理视图的可见性、命名、图标和组织方式。
---
## 视图可见性
控制谁可以查看您的自定义视图。
### 可见性选项
| 设置 | 谁可以查看 |
| ------- | ------- |
| **工作区** | 所有工作区成员 |
| **未列出** | 仅您 |
### 更改可见性
1. 打开该视图
2. 单击 **选项 → 可见性**
3. 选择 **工作区** 或 **未列出**
<Note>
默认的 "All [Object Name]" 视图无法更改其可见性。
</Note>
## 重命名视图
1. 打开视图下拉菜单
2. 单击视图旁的 **⋮** 菜单
3. 选择 **编辑**
4. 输入新名称
## 更改视图图标
1. 打开视图下拉菜单
2. 单击视图旁的 **⋮** 菜单
3. 选择 **编辑**
4. 单击图标以更改
## 调整视图顺序
更改视图在下拉菜单中的显示顺序:
1. 打开视图下拉菜单
2. 通过手柄拖动视图
3. 放置到所需位置
4. 顺序会自动保存
## 喜欢视图
固定常用视图以便快速访问:
1. 打开视图下拉菜单
2. 单击某个视图旁的 **⋮** 菜单
3. 选择 **添加到收藏夹**
已收藏的视图会显示在专门的区域,便于快速访问。
## 删除视图
1. 打开视图下拉菜单
2. 单击视图旁的 **⋮** 菜单
3. 选择 **删除**
4. 确认删除
<Warning>
已删除的视图无法恢复。
</Warning>
## 相关内容
* [视图概览](/l/zh/user-guide/views-pipelines/overview) — 创建视图
* [如何限制访问](/l/zh/user-guide/views-pipelines/how-tos/restrict-access-to-your-view) — 分步指南

View File

@@ -0,0 +1,61 @@
---
title: 为到期任务创建日历视图
description: 在日历上直观展示你的任务和截止日期。
---
<img src="/images/user-guide/views/calendar-view-zoom.png" style={{width:'100%'}} />
## 先决条件
你的 Tasks 对象需要一个 **Due Date** 字段(Date 或 Date & Time 类型)。
## 步骤
1. 导航到 **Tasks**
2. 单击视图下拉菜单 → **+ 添加视图**
3. 为视图命名(例如:“任务日历”)
4. 单击 **创建**
5. 单击 **选项**,并选择 **日历** 作为布局
6. 选择 **Due Date** 作为日期字段
7. 单击 **保存**
## 配置日历
### 在事件中显示字段
1. 单击 **选项 → 字段**
2. 单击 **眼睛图标** 以显示/隐藏字段
3. 拖动以重新排序
建议显示的字段:
* **Title** — 任务名称
* **Assignee** — 负责人
* **Status** — 当前进度
### 筛选日历
创建聚焦视图:
* **My Tasks**:按 Assignee = Me 筛选
* **本周**:按到期日期筛选 = 本周
* **逾期**:按到期日期筛选 < 今天,状态 ≠ 已完成
## 其他日历使用场景
| 对象 | 日期字段 | 目的 |
| ----- | ---- | -------- |
| 机会 | 关闭日期 | 跟踪预计关闭时间 |
| 自定义事件 | 事件日期 | 规划活动 |
| 项目 | 截止日期 | 监控项目时间线 |
## 提示
* **每周回顾**:每周开始时先检查您的日历视图
* **与表格视图结合**:使用日历查看概览,用表格查看详细信息
* **设置可见性**:将个人任务日历设为未列出
## 相关内容
* [日历视图](/l/zh/user-guide/views-pipelines/capabilities/calendar-view) — 所有日历功能
* [筛选与排序](/l/zh/user-guide/views-pipelines/capabilities/filters-and-sorting) — 筛选您的日历

View File

@@ -0,0 +1,80 @@
---
title: 为项目创建看板视图
description: 使用可视化看板按阶段跟踪项目。
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
使用看板视图将您的项目(或任何具有阶段的对象)可视化为在列间移动的卡片。
<VimeoEmbed videoId="927888627" title="视频演示" />
## 先决条件
您的对象需要一个用作列的 **选择字段**(例如:状态、阶段、环节)。
如果您还没有:
1. 进入 **设置 → 数据模型**
2. 选择你的对象
3. 添加一个包含阶段选项的选择字段
## 步骤
1. 导航到您的对象(例如:项目、任务)
2. 单击视图下拉菜单 → **+ 添加视图**
3. 为视图命名(例如:“项目看板”)
4. 单击 **创建**
5. 单击 **选项**,并选择 **看板** 作为布局
6. 该视图会自动使用您的选择字段作为列
7. 单击 **保存**
## 配置您的看板
### 在卡片上显示关键字段
1. 点击 **选项 → 字段**
2. 在 "隐藏字段" 部分查找字段
3. 单击 **眼睛图标** 以在卡片上显示它们
4. 拖动以重新排序
<img src="/images/user-guide/kanban-views/filter.png" style={{width:'100%'}} />
### 启用紧凑视图
用于高层概览:
1. 单击 **选项**
2. 开启 **紧凑视图**
卡片仅显示记录名称。
<img src="/images/user-guide/kanban-views/compact-view.png" style={{width:'100%'}} />
### 添加聚合
在每列顶部显示计数或总计:
1. 单击列名旁边的数字
2. 选择一种聚合(计数、求和等)
3. 如有需要,选择一个字段
## 移动卡片
在列之间拖放卡片以更新其状态。
<VimeoEmbed videoId="927888627" title="视频演示" />
## 示例:任务看板
| 列(状态) | 卡片 |
| ------- | ------ |
| **待办** | 新任务 |
| **进行中** | 进行中的工作 |
| **审核** | 等待批准 |
| **已完成** | 已完成 |
## 相关内容
* [看板视图](/l/zh/user-guide/views-pipelines/capabilities/kanban-views) — 聚合、紧凑视图、阶段
* [如何设置销售管道](/l/zh/user-guide/views-pipelines/how-tos/set-up-a-sales-pipeline) — 用于商机的看板

View File

@@ -0,0 +1,51 @@
---
title: 创建带分组的表格视图
description: 按字段值将记录组织为可折叠的分组。
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
使用 Select 字段对表格视图进行分组,将记录组织到可折叠的部分。
<img src="/images/user-guide/table-views/table-group-by.png" style={{width:'100%'}} />
## 步骤
1. 导航到对象(人员、公司等)
2. 单击视图下拉菜单 → **+ 添加视图**
3. 为视图命名(例如:“按类型的公司”)
4. 单击 **创建**
5. 单击 **选项 → 分组**
6. 选择一个 Select 字段进行分组
7. 单击 **保存**
## 配置分组顺序
在 **选项 → 分组 → 排序** 下,选择分组的排序方式:
| 选项 | 描述 |
| --------- | ----------------- |
| **按字母顺序** | A 到 Z |
| **逆字母顺序** | Z 到 A |
| **手动排序** | 在“可见分组”下拖动分组以重新排序 |
单击组旁的 **眼睛图标**,将其从视图中隐藏。
<Note>
**为获得最佳性能,请将可见分组限制在 10-15 个。** 如果需要更多,建议改用仪表板。
</Note>
## 示例:按行业分类的公司
1. 前往 **公司**
2. 创建一个名为“按行业”的新视图
3. 单击 **选项 → 分组**
4. 选择 **行业** 字段
5. 保存
现在,您的公司已按行业组织,便于一次专注于一个细分市场。
## 相关内容
* [表格视图](/l/zh/user-guide/views-pipelines/capabilities/table-views) — 所有表格视图功能
* [筛选和排序](/l/zh/user-guide/views-pipelines/capabilities/filters-and-sorting) — 将分组与筛选结合使用

View File

@@ -0,0 +1,32 @@
---
title: 限制对您的视图的访问
description: 控制谁可以查看你的自定义视图。
---
每个视图(默认的 "All [Object Name]" 视图除外)都有其自己的可见性设置。
## 步骤
1. 打开你想要限制的视图
2. 点击右上角的 **选项**
3. 点击 **可见性**
4. 选择 **未列出**
你的视图现在仅对你可见。
## 可见性选项
| 设置 | 谁可以查看 |
| ------- | ------- |
| **工作区** | 所有工作区成员 |
| **未列出** | 仅你 |
## 备注
* 默认的 "All [Object Name]" 视图无法设为未列出
* 未列出的视图不会出现在其他用户的视图下拉菜单中
* 你可以随时将可见性改回工作区
## 相关
* [视图设置](/l/zh/user-guide/views-pipelines/capabilities/view-settings) — 所有视图配置选项

View File

@@ -0,0 +1,120 @@
---
title: 设置销售管道
description: 配置您的销售管道,以通过各个阶段跟踪机会。
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
在 Twenty 中,销售管道是您的机会对象的看板视图,其中每一列代表销售流程中的一个阶段。
## 步骤 1:配置您的阶段
阶段在“机会”对象的 **Stage** 字段中定义。
1. 进入 **设置 → 数据模型**
2. 选择 **机会**
3. 找到并单击 **Stage** 字段
4. 添加、删除或重命名阶段以匹配您的流程
<VimeoEmbed videoId="927890428" title="视频演示" />
### 推荐阶段
| 阶段 | 目的 |
| ------ | -------- |
| **新** | 刚识别出的新机会 |
| **合格** | 已确认契合良好 |
| **会议** | 已展开讨论 |
| **提案** | 已发送提案 |
| **谈判** | 正在协商条款 |
| **赢单** | 交易成功 |
| **丢单** | 交易失败 |
<Note>
**5-7个阶段是最佳的。** 太多的阶段使管道难以扫描;在交易进度中失去可见度太少。
</Note>
## 步骤 2:创建管道视图
1. 前往 **机会**
2. 单击视图下拉菜单 → **+ 添加视图**
3. 将其命名为 "销售管道"
4. 单击 **创建**
5. 打开 **选项**,并选择 **看板** 作为布局
该视图会自动使用 Stage 字段作为列。
## 步骤 3:配置您的视图
### 显示关键字段
1. 单击 **选项 → 字段**
2. 在 "隐藏字段" 部分查找字段
3. 单击 **眼睛图标** 以显示:Company、Amount、Close Date、Owner
### 启用聚合
在每列顶部显示总计:
1. 单击列顶部显示在某个 Stage 名称旁边的数字
2. 选择聚合类型(计数、求和、平均值等)
3. 选择要聚合的字段(例如,Amount)
**示例:** 通过对 Amount 字段进行求和,显示每个阶段的交易总金额。
### 使用紧凑视图(可选)
若需以更少卡片内容获得高层次概览:
1. 单击 **选项**
2. 打开 **紧凑视图** 开关
## 步骤 4:创建个人和团队视图
### "我的管道"
* **筛选**:Owner = Me
* **可见性**:未列出(个人视图)
### "团队管道"
* **筛选**:无(显示全部)
* **可见性**:工作区(共享视图)
### "本月关闭"
* **类型**:表格
* **筛选**:Close Date = This month,Stage ≠ Closed Won,Stage ≠ Closed Lost
* **排序**:Close Date 升序
## 处理机会
### 创建机会
* 在“机会”视图中单击 **+ 新建**
* 或在特定阶段的列中单击 **+**
### 在各阶段间移动
在列之间拖放机会卡片以更新其阶段。
<VimeoEmbed videoId="927888627" title="视频演示" />
## 最佳实践
### 管道卫生
* 随进展每日更新交易
* 及时移动或关闭停滞的交易
* 确保关闭日期切合实际
### 阶段纪律
* 为每个阶段定义清晰的判定标准
* 当满足标准时及时移动交易
* 不要让交易在阶段中停留过久
## 相关内容
* [看板视图](/l/zh/user-guide/views-pipelines/capabilities/kanban-views) — 聚合与紧凑视图
* [筛选与排序](/l/zh/user-guide/views-pipelines/capabilities/filters-and-sorting) — 创建筛选视图

View File

@@ -0,0 +1,149 @@
---
title: 在您的销售管道中显示预期金额
description: 根据阶段概率计算并显示加权交易金额。
---
预期金额是一个计算值:**Amount × Probability**。 这有助于根据成交可能性为交易加权,从而预测收入。
<Tip>
这是使用工作流创建[公式字段](/l/zh/user-guide/workflows/how-tos/crm-automations/formula-fields)的示例。
</Tip>
本指南将引导您设置在管道中计算并显示预期金额所需的自定义字段和工作流。
## 步骤 1:创建自定义字段
您需要在商机对象上创建两个自定义字段。
### 创建 Probability 字段
1. 前往 **设置 → 数据模型 → 商机**
2. 点击 **+ 添加字段**
3. 配置:
* **名称**:Probability
* **类型**:数字
* **描述**:基于阶段的概率(0–100%)
4. 单击 **保存**
### 创建 Expected Amount 字段
1. 点击 **+ 添加字段**
2. 配置:
* **名称**:Expected Amount
* **类型**:货币
* **描述**:计算值:Amount × Probability
3. 单击 **保存**
### 可选:将字段设置为对用户只读
如果您不希望用户手动编辑这些计算字段:
1. 转到 **设置 → 成员 → 角色**
2. 选择要配置的角色
3. 找到商机对象
4. 将 **Probability** 和 **Expected Amount** 字段设为只读
这可确保只有工作流可以更新这些值。
## 步骤 2:创建工作流 #1 — 阶段变更时更新 Probability
当商机进入新阶段时,此工作流会自动设置 Probability。
### 创建工作流
1. 前往 **工作流**
2. 点击 **+ 新建工作流**
3. 将其命名为 "Update Probability on Stage Change"
### 配置触发器
1. 添加一个 **Record Created or Updated** 触发器
2. 选择 **Opportunities** 作为对象
3. 筛选条件:**Stage** 字段已更新
### 为每个阶段添加分支
为每个阶段创建一个分支,并设置相应的概率:
| 阶段 | 概率 |
| ------- | ---- |
| 新 | 10% |
| 合格 | 25% |
| 会议 | 40% |
| 提案 | 60% |
| 谈判 | 80% |
| 已成交(赢单) | 100% |
| 已关闭(丢单) | 0% |
<Note>
要创建新分支,在工作流画布上单击右键,然后点击 **新建操作**。 然后,从上一个节点拖动箭头到此新操作,将其与前一个节点连接。
</Note>
对于每个阶段:
1. 添加一个 **筛选** 节点:Stage = [阶段名称]
2. 添加一个 **更新记录** 操作:
* 记录:触发的商机
* 字段:Probability
* 值:[该阶段的概率]
### 计算 Expected Amount
在分支汇合之后:
1. 添加一个 **筛选** 节点:Amount 不为空
2. 添加一个 **更新记录** 操作:
* 记录:触发的商机
* 字段:Expected Amount
* 值:Amount × Probability
## 步骤 3:创建工作流 #2 — 当 Amount 发生变化时重新计算
当交易的 Amount 更改时,此工作流会更新 Expected Amount。
### 创建工作流
1. 前往 **工作流**
2. 点击 **+ 新建工作流**
3. 将其命名为 "Recalculate Expected Amount on Amount Change"
### 配置触发器
1. 添加一个 **Record Created or Updated** 触发器
2. 选择 **Opportunities** 作为对象
3. 筛选条件:**Amount** 字段已更新
### 添加逻辑
1. 添加一个 **筛选** 节点:Amount 不为空
2. 添加一个 **更新记录** 操作:
* 记录:触发的商机
* 字段:Expected Amount
* 值:Amount × Probability
## 步骤 4:在您的管道中显示
现在在看板视图中显示 Expected Amount 的总计:
1. 打开您的 **销售管道** 看板视图
2. 点击列顶部任一阶段名称旁的**数字**
3. 选择 **求和**
4. 选择 **Expected Amount**
现在,每列都会显示该阶段的加权管道总值。
## 摘要
| 组件 | 用途 |
| ---------------------- | ------------------------------------------------ |
| **Probability 字段** | 存储基于阶段的赢单概率 |
| **Expected Amount 字段** | 存储 Amount × Probability |
| **工作流 #1** | 当 Stage 变化时更新 Probability,然后重新计算 Expected Amount |
| **工作流 #2** | 当 Amount 变化时重新计算 Expected Amount |
| **聚合** | 按阶段显示 Expected Amount 的求和 |
## 相关内容
* [公式字段](/l/zh/user-guide/workflows/how-tos/crm-automations/formula-fields) — 使用工作流创建计算字段
* [看板视图](/l/zh/user-guide/views-pipelines/capabilities/kanban-views) — 列聚合
* [如何创建自定义字段](/l/zh/user-guide/data-model/how-tos/create-custom-fields) — 字段配置

View File

@@ -0,0 +1,231 @@
---
title: 跟踪商机在各阶段停留的时长
description: 通过跟踪商机进入各阶段的时间来监控交易速度。
---
<Tip>
这是一个使用工作流创建[公式字段](/l/zh/user-guide/workflows/how-tos/crm-automations/formula-fields)的示例——具体为日期计算。
</Tip>
跟踪商机进入各阶段的时间有助于识别瓶颈并衡量交易速度。
本指南将引导你设置自定义字段和一个工作流,以自动记录商机进入各阶段的时间,并计算其在上一个阶段停留的天数。
## 步骤 1:创建自定义字段
每个阶段需要两种字段:
* **日期与时间字段**:记录商机进入各阶段的时间
* **数字字段**:存储商机在各阶段停留的天数
### 创建“最近进入”字段
1. 进入 **设置 → 数据模型 → 商机**
2. 针对每个阶段,点击 **+ 添加字段** 并进行配置:
* **名称**:最近进入[阶段名称](例如:"最近进入 新建"、"最近进入 已合格")
* **类型**:日期与时间
* **描述**:商机进入此阶段的时间戳
3. 单击 **保存**
创建以下字段:
* 最近进入 新建
* 最近进入 已合格
* 最近进入 会面
* 最近进入 提案
* 最近进入 谈判
* 最近进入 赢单
* 最近进入 输单
### 创建“阶段停留天数”字段
1. 针对每个阶段,点击 **+ 添加字段** 并进行配置:
* **名称**:[阶段名称]停留天数(例如:"新建停留天数"、"已合格停留天数")
* **类型**:数字
* **描述**:在此阶段停留的天数
2. 单击 **保存**
创建以下字段:
* 新建停留天数
* 已合格停留天数
* 会面停留天数
* 提案停留天数
* 谈判停留天数
<Note>
赢单和输单为最终阶段,因此无需创建“停留天数”字段。
</Note>
### 可选:将字段设为只读
如果不希望用户手动编辑这些计算字段:
1. 转到 **设置 → 成员 → 角色**
2. 选择要配置的角色
3. 找到商机对象
4. 将“最近进入”和“停留天数”字段设置为只读
## 步骤 2:创建工作流
此单个工作流同时处理两项任务:
* 记录进入新阶段的时间戳
* 计算在上一个阶段停留的天数
### 创建工作流
1. 进入 **工作流**
2. 点击 **+ 新建工作流**
3. 命名为"跟踪阶段时长"
### 配置触发器
1. 添加一个**记录已更新**触发器
2. 将对象选择为**商机**
3. 筛选条件:**阶段**字段已更新
### 为每个阶段添加分支
<Note>
要创建新分支,在工作流画布上右键点击并选择 **新建操作**。 然后,从上一个节点拖动箭头到此新操作,将其与上一个节点连接。
</Note>
---
**分支 1:阶段 = 新建(第一阶段)**
由于这是第一个阶段,只会记录进入时间戳——没有前一个阶段可用于计算。
1. 添加一个**筛选**节点:阶段 = 新建
2. 添加一个**代码**操作:
```javascript
export const main = async (): Promise<object> => {
return { now: new Date().toISOString() };
};
```
3. 添加一个**更新记录**操作:
* 记录:触发的商机
* 字段:最近进入 新建
* 值:来自代码节点的`now`
---
**分支 2:阶段 = 已合格**
当进入“已合格”阶段时,同时记录进入时间并计算在“新建”阶段停留的天数。
1. 添加一个**筛选**节点:阶段 = 已合格
2. 添加一个**代码**操作:
```javascript
export const main = async (params: {
lastEnteredPreviousStage: Date;
}): Promise<object> => {
const { lastEnteredPreviousStage } = params;
const now = new Date();
const entryDate = new Date(lastEnteredPreviousStage);
const diffTime = Math.abs(now.getTime() - entryDate.getTime());
const daysInPreviousStage = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
return {
now: now.toISOString(),
daysInPreviousStage: daysInPreviousStage
};
};
```
3. 配置代码节点输入:将`lastEnteredPreviousStage`映射到**最近进入 新建**字段
4. 添加一个**更新记录**操作:
* 记录:触发的商机
* 要更新的字段:
* 最近进入 已合格 = `now`
* 新建停留天数 = `daysInPreviousStage`
---
**分支 3:阶段 = 会面**
当进入“会面”阶段时,同时记录进入时间并计算在“已合格”阶段停留的天数。
1. 添加一个**筛选**节点:阶段 = 会面
2. 添加一个**代码**操作:
```javascript
export const main = async (params: {
lastEnteredPreviousStage: Date;
}): Promise<object> => {
const { lastEnteredPreviousStage } = params;
const now = new Date();
const entryDate = new Date(lastEnteredPreviousStage);
const diffTime = Math.abs(now.getTime() - entryDate.getTime());
const daysInPreviousStage = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
return {
now: now.toISOString(),
daysInPreviousStage: daysInPreviousStage
};
};
```
3. 配置代码节点输入:将`lastEnteredPreviousStage`映射到**最近进入 已合格**字段
4. 添加一个**更新记录**操作:
* 记录:触发的商机
* 要更新的字段:
* 最近进入 会面 = `now`
* 已合格停留天数 = `daysInPreviousStage`
---
**对剩余阶段继续如下操作:**
| 阶段 | 记录 | 计算 |
| -- | ------- | ------ |
| 提案 | 最近进入 提案 | 会面停留天数 |
| 谈判 | 最近进入 谈判 | 提案停留天数 |
| 赢单 | 最近进入 赢单 | 谈判停留天数 |
| 输单 | 最近进入 输单 | 谈判停留天数 |
各分支无需合并——当满足其阶段条件时,各自独立运行。
## 步骤 3:分析阶段时长
在记录了时间戳和天数后,你现在可以分析交易速度。
### 创建“慢速交易”视图
1. 创建商机的表格视图
2. 添加列:名称、阶段、[上一阶段]停留天数、金额
3. 按“停留天数”字段排序(降序)
4. 按阶段筛选,以便一次专注一个阶段
位于顶部的交易在上一阶段停留时间最长。
### 使用汇总
在你的销售管道看板视图中:
1. 点击阶段名称旁的数字
2. 选择**平均值**
3. 选择一个“停留天数”字段
即可显示交易在各阶段的平均停留时间。
## 摘要
| 组件 | 用途 |
| ------------ | ------------- |
| **“最近进入”字段** | 存储商机进入各阶段的时间 |
| **“停留天数”字段** | 存储在各阶段停留的天数 |
| **工作流** | 一次性记录时间戳并计算天数 |
| **视图与汇总** | 分析交易速度并识别瓶颈 |
## 相关内容
* [工作流](/l/zh/user-guide/workflows/overview) — 自动化基础
* [如何创建自定义字段](/l/zh/user-guide/data-model/how-tos/create-custom-fields) — 字段配置
* [看板视图](/l/zh/user-guide/views-pipelines/capabilities/kanban-views) — 汇总

View File

@@ -0,0 +1,132 @@
---
title: 视图与管道
description: 了解如何在 Twenty 中创建和管理视图。
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
## 了解视图
视图是已保存的配置,用于决定数据的显示方式。 每个视图都可以有:
* **布局**:表格、看板或日历
* **筛选器**:显示哪些记录
* **排序**:记录的排序方式
* **字段**:哪些列可见
## 视图类型
### 表视图
默认的类似电子表格的视图,以行显示记录,并可自定义列。
### 看板视图
记录以卡片形式按阶段组织显示的可视化看板视图。 适用于:
* 销售管道
* 项目跟踪
* 任何具有明确阶段的工作流
### 日历视图
一种日历视图,用于显示包含日期字段的记录。 非常适合:
* 会议和活动
* 截止日期和到期日
* 基于时间的计划
## 创建视图
有两种方法可以创建新视图。
### 使用视图下拉菜单
1. 导航到任意对象(人员、公司等)
2. 点击左上角的视图名称(显示当前视图并带有下拉箭头)
3. 点击 **+ 添加视图**
4. 为视图命名并点击 **创建**
5. 在 **选项** 下选择布局(表格、看板或日历)
6. 按需添加筛选器和排序
7. 选择要显示的字段并重新排序它们
8. 单击 **保存**
<VimeoEmbed videoId="1145648745" title="视频演示" />
### 首先编辑现有视图
1. 导航到任意对象(人员、公司等)
2. 在 **选项** 下选择布局(表格、看板或日历),并根据需要添加筛选和排序
3. 点击 **另存为新视图**
4. 为视图命名并点击 **创建**
5. 继续编辑新视图
6. 点击 **更新视图** 以保存新增的配置
<VimeoEmbed videoId="1145654005" title="视频演示" />
## 管理视图
### 编辑视图
1. 从下拉菜单中选择视图
2. 进行更改(筛选器、排序、列)
3. 点击 **保存** 以更新视图
### 重命名视图或更改其图标
1. 打开视图下拉菜单
2. 点击视图名称旁的 **⋮** 菜单
3. 选择 **编辑**
4. 更改名称或图标
5. 单击 **保存**
### 重新排序视图
1. 打开视图下拉菜单
2. 点击并通过其手柄拖动视图
3. 将其放到所需位置
4. 新的顺序会自动保存
### 添加到收藏夹
将常用视图固定,便于快速访问:
1. 打开视图下拉菜单
2. 点击视图旁的 **⋮** 菜单
3. 选择 **添加到收藏夹**
4. 该视图会显示在收藏夹区域
### 删除视图
1. 选择要删除的视图
2. 点击视图下拉菜单
3. 点击该视图旁的 **⋮** 菜单
4. 选择 **删除**
5. 确认删除
<Warning>
已删除的视图无法恢复。 确认前请确保确实要将其删除。
</Warning>
## 视图可见性
每个视图(默认的 "All [Object Name]" 视图除外)都有其各自的可见性设置。
要更改可见性:
1. 打开视图
2. 点击 **选项 → 可见性**
3. 选择:
* **工作区**:对所有工作区成员可见
* **未列出**:仅对自己可见
<Note>
默认的 "All [Object Name]" 视图的可见性无法更改。
</Note>
## 下一步
* [表视图](/l/zh/user-guide/views-pipelines/capabilities/table-views)
* [看板视图](/l/zh/user-guide/views-pipelines/capabilities/kanban-views)
* [筛选与排序](/l/zh/user-guide/views-pipelines/capabilities/filters-and-sorting)
* [视图设置](/l/zh/user-guide/views-pipelines/capabilities/view-settings)

View File

@@ -0,0 +1,167 @@
---
title: 通过工作流发送电子邮件
description: 使用工作流操作自动发送个性化电子邮件。
---
当您的 CRM 中发生特定事件时自动发送电子邮件——欢迎新联系人、跟进机会,或通知团队成员。
## 先决条件
在您可以通过工作流发送电子邮件之前:
1. 在 **Settings → Accounts** 下连接电子邮件帐户
2. 确保该帐户已启用发送权限
## 基础电子邮件工作流
### 示例:新联系人的欢迎电子邮件
**目标**:当 CRM 中添加新联系人时,发送一封欢迎电子邮件。
**设置**:
1. **创建工作流**:转到 **Settings → Workflows** 并点击 **+ New Workflow**
2. **添加触发器**:选择 **Record is Created** → **People**
3. **添加 Send Email 操作**:
* 点击 **+** 以添加一个操作
* 选择 **Send Email**
* 配置电子邮件:
| 字段 | 值 |
| ------- | -------------------------------------- |
| **收件人** | `{{trigger.object.email}}` |
| **主题** | `欢迎来到 {{Your Company Name}}` |
| **正文** | `Hi {{trigger.object.firstName}}, ...` |
4. **测试并激活**:使用示例记录进行测试,然后激活
## 在电子邮件中使用变量
使用 `{{variable}}` 语法引用前面步骤中的数据:
```text
Hi {{trigger.object.firstName}},
Thank you for connecting with us!
Your company, {{trigger.object.company.name}}, is now in our system.
Best regards,
The Team
```
### 触发器中的可用变量
| 触发类型 | 常用变量 |
| ------------- | -------------------------------------- |
| **记录已创建/已更新** | `{{trigger.object.fieldName}}` |
| **手动** | `{{trigger.selectedRecord.fieldName}}` |
| **Webhook** | `{{trigger.body.fieldName}}` |
## 高级:条件邮件
### 示例:基于线索来源发送不同邮件
**目标**:根据线索来源发送不同的欢迎邮件。
**设置**:
1. **触发器**:Record is Created(People)
2. **添加 Filter 操作**:
* 条件:`{{trigger.object.source}}` 等于 "Website"
* 如果为真 → 继续发送网站渠道的欢迎邮件
3. **其他来源的分支**:
* 为不同来源创建并行分支
* 每个分支都有其自己的 Send Email 操作
## 向多个收件人发送电子邮件
### 示例:交易达成时通知团队
**目标**:当机会赢单时,向销售代表及其经理发送电子邮件。
**设置**:
1. **触发器**:记录已更新(Opportunities,Stage = "Closed Won")
2. **搜索记录**:查找机会所有者的经理
3. **发送邮件 #1**:发送给机会所有者
* 收件人:`{{trigger.object.owner.email}}`
* 主题:`Congratulations on closing {{trigger.object.name}}!`
4. **发送邮件 #2**:发送给经理
* 收件人:`{{searchRecords.manager.email}}`
* 主题:`Deal Won: {{trigger.object.name}}`
## 定时跟进邮件
### 示例:会议后 3 天进行跟进
**目标**:在会议被记录后 3 天发送一封跟进邮件。
**设置**:
1. **触发器**:记录创建(Activities,Type = "Meeting")
2. **延迟操作**:等待 3 天
3. **发送邮件**:
* 收件人:会议参与者
* 主题:就我们的交流进行跟进
* 正文:参考触发器中的会议详细信息
## 电子邮件附件
您可以将文件附加到由工作流发送的电子邮件中。 该附件是在配置工作流时上传的静态文件。
### 如何添加附件
1. 在 **Send Email** 操作中,点击 **Attachments** 按钮
2. 点击以从您的计算机上传文件
3. 该文件将附加到此操作发送的所有电子邮件中
### 常见使用案例
| 用例 | 示例文件 |
| -------- | ----------- |
| **欢迎邮件** | 公司宣传册 (PDF) |
| **入门序列** | 入门指南 |
| **销售跟进** | 产品目录或价目表 |
| **活动确认** | 活动详情或议程 |
<Note>
附件是静态的——将向所有收件人发送相同的文件。 对于动态文档(如个性化报价),请使用 [逻辑函数](/l/zh/user-guide/workflows/how-tos/connect-to-other-tools/generate-pdf-from-twenty) 生成并附加文件。
</Note>
## 最佳实践
### 电子邮件内容
* 保持主题行简洁且相关
* 使用收件人姓名进行个性化
* 包含明确的行动号召
* 在激活之前测试邮件
### 送达率
* 不要在短时间内发送过多电子邮件
* 使用专业的电子邮件签名
* 避免使用垃圾邮件触发词
* 确保营销邮件提供退订选项
### 故障排除
* 确认电子邮件帐户已连接且处于活动状态
* 检查收件人的电子邮件地址是否有效
* 查看工作流运行中的错误消息
* 先使用您自己的电子邮件地址进行测试
## 相关内容
* [工作流触发器](/l/zh/user-guide/workflows/capabilities/workflow-triggers)
* [工作流操作](/l/zh/user-guide/workflows/capabilities/workflow-actions)

View File

@@ -0,0 +1,88 @@
---
title: 在工作流中使用分支
description: 了解分支如何工作,以及如何控制执行哪条路径。
---
## 分支的工作方式
在工作流编辑器中,您可以从单个节点延伸出多条路径(分支)。 这使您能够构建具有不同结果的复杂自动化流程。
**重要**:当工作流运行时,默认情况下**所有分支都会并行执行**。 没有内置的 "if/else" 逻辑来在分支间做出选择——每条路径都会同时运行。
## 控制执行哪个分支
若要根据特定条件仅执行一个分支,**在每个分支的开头添加一个 Filter 节点**。
### 示例设置
1. 从单个节点创建包含多个分支的工作流
2. 在每个分支的第一步添加一个**Filter** 节点
3. 在每个 Filter 上设置条件,以确定该分支何时继续
4. 只有满足其 Filter 条件的分支会继续
### Filter 的工作方式
* 如果 Filter 条件被**满足**:该分支继续执行
* 如果 Filter 条件**未满足**:该分支会在 Filter 节点停止
这实际上创建了条件逻辑,使只有与您的数据相匹配的合适分支会运行。
## 示例:按交易金额路由
**场景**:当交易达成时,根据交易金额发送不同的通知。
1. **触发器**:Opportunity 已更新(Stage = Closed Won)
2. **分支 1**:Filter 条件:Amount > $10,000 → 向 #big-deals 发送 Slack 消息
3. **分支 2**:Filter 条件:Amount ≤ $10,000 → 向销售经理发送电子邮件
两个分支都会启动,但只有与交易金额匹配的分支会通过其 Filter 继续执行。
## 创建分支
<Note>
要从现有步骤创建新分支,请点击该步骤上的 **+** 按钮并添加您的操作。 您可以多次点击 **+** 来添加多个分支。
</Note>
1. 在工作流编辑器中,选择您想要从其分支出去的步骤
2. 点击 **+** 以添加一个操作
3. 这将创建一个分支
4. 在同一步骤上再次点击 **+** 以创建更多分支
5. 每个分支都可以拥有自己的一系列操作
## 合并分支
并行分支完成其工作后,您可以将它们合并回单一路径:
1. 完成您的分支内操作
2. 在所有分支之后添加一个应运行的新步骤
3. 将每个分支末端的连接拖拽到这个新步骤
4. 合并后的步骤会在所有连接的分支完成后才执行
### 示例:先处理后通知
```
Trigger
│
├── Branch A: Update Customer Record
│
└── Branch B: Create Support Ticket
↘ ↙
Merged Step: Send Confirmation Email
```
仅在客户更新和工单创建都完成后,才会发送确认电子邮件。
## 最佳实践
* 当您需要条件执行时,请始终在分支开始处使用**Filter 节点**
* 使分支条件**互斥**,以避免重复操作
* 使用不同数据测试您的工作流,以确保运行正确的分支
* **重命名分支步骤**,使每条路径的作用清晰明了
* **合并分支**,当您在并行处理后需要执行最终操作时
## 相关内容
* [工作流常见问题](/l/zh/user-guide/workflows/how-tos/need-more-help/workflows-faq) — 关于并行执行的解答
* [工作流操作](/l/zh/user-guide/workflows/capabilities/workflow-actions) — 分支可用的操作

View File

@@ -0,0 +1,183 @@
---
title: 使用迭代器
description: 遍历记录数组,对每个项执行操作。
---
迭代器可让你遍历记录数组,并对其中每一项执行操作。 对于需要处理由搜索记录返回或通过 Webhook 接收的多条记录的工作流,它至关重要。
## 何时使用迭代器
| 场景 | 示例 |
| ----------------- | --------------- |
| **处理搜索结果** | 向每位找到的人员发送电子邮件。 |
| **处理 Webhook 数组** | 按顺序为每个项目创建记录 |
| **批量更新** | 使用计算得出的值更新多条记录 |
| **通知** | 就某个事件通知多位人员 |
## 了解迭代器
迭代器需要一个**数组**作为输入。 然后:
1. 从数组中取出第一个元素
2. 使用该元素运行迭代器内的所有操作
3. 移动到下一个元素
4. 重复,直到所有元素处理完毕
### 选择要循环的数组
大多数数组来源(Search Records、Webhook 数组字段、Bulk manual trigger)都可以直接在变量选择器中选择。
当 **Code** 或 **Logic Function** 步骤返回一个*顶级数组*时,其输出会在变量选择器中显示为带索引的条目(`0`、`1`、`2`,…)。 若要对整个数组进行循环,请为该步骤选择 **Whole list** 选项 — Iterator 会自动从列表中推断每个项目的结构。
## 基本设置
### 示例:向搜索结果中的所有人发送电子邮件
**目标**:查找特定公司的所有联系人,并向每个人发送个性化电子邮件。
### 步骤 1:搜索记录
1. 添加 **搜索记录** 操作
2. 对象:**People**
3. 筛选条件:公司等于 "Acme Inc"
4. 这将返回一个人员数组
### 步骤 2:检查是否有结果
1. 添加 **过滤** 操作
2. 条件:`{{searchRecords.length}}` 大于 0
3. 这可防止在结果为空时出现迭代器错误
### 步骤 3:添加迭代器
1. 添加 **Iterator** 操作
2. 数组输入:选择 `{{searchRecords}}`
3. 这会创建一个循环
### 步骤 4:在迭代器内添加操作
在迭代器之后放置的操作会针对每个项运行:
1. 添加 **Send Email** 操作(在迭代器内)
2. 收件人:`{{iterator.currentItem.email}}`
3. 主题:你好,`{{iterator.currentItem.firstName}}`!
4. 正文:使用当前项字段的个性化消息
### 结果
如果 Search Records 返回 5 个人,迭代器将:
* 向第 1 个人发送电子邮件
* 向第 2 个人发送电子邮件
* ... 对全部 5 人继续执行
## 访问当前项数据
在迭代器内,使用 `{{iterator.currentItem}}` 访问当前记录:
| 变量 | 描述 |
| --------------------------------------- | ----------------- |
| `{{iterator.currentItem}}` | 整个当前记录对象 |
| `{{iterator.currentItem.id}}` | 记录 ID |
| `{{iterator.currentItem.email}}` | 电子邮件字段 |
| `{{iterator.currentItem.company.name}}` | 关联的公司名称 |
| `{{iterator.index}}` | 在数组中的当前位置(从 0 开始) |
在变量选择器中,你可以深入当前项目的特定字段,或者选择 **Use the whole item** 来引用整个当前项目(`{{iterator.currentItem}}`)。 在你希望将完整记录直接传入下游步骤,而不是逐个字段重新构建时,选择整个项目会非常方便。
## 常见模式
### 更新多条记录
**目标**:将所有逾期任务标记为 "Late"
```
1. Search Records (Tasks, Due Date < Today, Status ≠ Completed)
2. Filter (length > 0)
3. Iterator (searchRecords)
└── Update Record
- Object: Tasks
- Record: {{iterator.currentItem.id}}
- Status: Late
```
### 从数组创建记录
**目标**:Webhook 接收到包含多个项目的订单,为每个项目创建一条记录。
```
1. Webhook Trigger (receives items array)
2. Filter (items.length > 0)
3. Iterator (trigger.body.items)
└── Create Record
- Object: Order Items
- Name: {{iterator.currentItem.name}}
- Quantity: {{iterator.currentItem.qty}}
- Related Order: {{trigger.body.orderId}}
```
### 在循环内进行条件处理
**目标**:仅向电子邮件地址有效的联系人发送邮件
```
1. Search Records (People)
2. Iterator (searchRecords)
└── Filter (currentItem.email is not empty)
└── Send Email
- To: {{iterator.currentItem.email}}
```
## 故障排除
### "迭代器需要一个数组"
**原因**:你传递的是单个记录而不是数组。
**修复方法**:请确保传递的是 Search Records 的结果或数组字段,而不是单个记录。
```
✅ Correct: {{searchRecords}}
❌ Wrong: {{searchRecords[0]}}
```
### 迭代器未运行
**原因**:数组为空。
**修复方法**:在迭代器之前添加筛选条件以检查数组长度:
```
Filter: {{searchRecords.length}} > 0
```
### 操作运行次数过多
**原因**:Search Records 返回的记录数超出预期。
**修复方法**:
* 在 Search Records 中添加更具体的筛选条件
* 在 Search Records 中设置限制(最多 200)
* 在迭代器内部添加筛选条件用于附加条件
## 性能注意事项
* **额度使用**:每次迭代都会为其操作消耗额度
* **时间**:较大的数组处理时间更长
* **限制**:对于非常大的操作,考虑分批处理
* **速率限制**:大量迭代的外部 API 调用可能触发速率限制
## 最佳实践
1. **在迭代器之前始终检查数组长度**,以避免错误
2. **当并非所有项都需要处理时,在循环中添加筛选条件**
3. **重命名你的迭代器步骤**,以描述它正在遍历的内容
4. **先使用小数组进行测试**,再处理大型数据集
5. **监控工作流运行**,以确保迭代按预期完成
## 相关内容
* [工作流操作](/l/zh/user-guide/workflows/capabilities/workflow-actions)
* [如何使用分支](/l/zh/user-guide/workflows/capabilities/use-branches-in-workflows)
* [工作流常见问题](/l/zh/user-guide/workflows/how-tos/need-more-help/workflows-faq)

View File

@@ -0,0 +1,332 @@
---
title: 工作流动作
description: 了解 Twenty 工作流中可用的操作。
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
## 关于操作
动作定义触发后将发生的事件。 你可以将多个操作串联在一起,以构建复杂的自动化流程。
<Tip>
* 使用变量选择器(点击`(x+)`图标)浏览来自先前步骤的可用数据
* 将鼠标悬停在任意输入字段上即可查看变量来自哪个步骤——当相同字段(例如,ID)存在于多个先前步骤时,这很有帮助
* 为每个操作指定一个具有描述性的名称,以便于维护
</Tip>
## 记录操作
<img src="/images/user-guide/workflows/workflow_actions.png" style={{width:'100%'}} />
### 创建记录
在选定的对象中添加新记录。
**配置**:
* 选择目标对象
* 填写必填和可选字段
* 使用来自先前步骤的数据,或手动输入值来填充字段
**输出**:新创建的记录数据可在后续步骤中使用。
### 更新记录
修改选定对象中的现有记录。
<img src="/images/user-guide/workflows/update_record.png" style={{width:'100%'}} />
**配置**:
* 选择目标对象
* 选择要更新的特定记录.
* 你可以通过下拉菜单选择一个固定记录,该菜单会显示所有可用记录。
* 或者通过使用`(x+)`指定在先前步骤中找到的记录,让记录被动态选择。 此阶段无法根据不同条件搜索该记录。 如果你尚未确定该记录,请在此`Update Record`步骤之前添加一个`Search Record`步骤。
* 选择要修改的字段并输入新值
**输出**:更新后的记录数据可用于后续步骤。
### 删除记录
从选定的对象中删除记录。
**配置**:
* 选择目标对象
* 选择要删除的特定记录
**输出**:已删除的记录数据可继续用于后续步骤。
### 搜索记录
在选定对象中使用过滤条件查找记录。
**配置**:
* 选择要搜索的对象
* 设置过滤条件以缩小结果
* 配置排序和限制
**输出**:返回可在后续步骤中使用的匹配记录。
<Note>
**限制**:Search Records 最多返回 **200 条记录**。 如果需要处理更多,请添加特定筛选器以减少结果,或使用计划的工作流分批处理。
</Note>
**最佳实践**:在 Search Records 之后使用[分支](/l/zh/user-guide/workflows/capabilities/workflow-branches)来处理"找到"与"未找到"场景。
### Upsert 记录
根据匹配条件创建新记录或更新现有记录。 当你不确定记录是否已存在时,这非常有用。
<img src="/images/user-guide/workflows/upsert_double_identifier.png" style={{width:'100%'}} />
**配置**:
* 选择目标对象
* 请注意哪些字段可用于匹配:People 使用 email,Companies 使用 domain,任何对象使用 ID,或任何标记为 "Unique" 的字段。 你需要在下方至少填充其中一个。
* 填写字段值。 别忘了至少填充一个唯一标识符。
<Note>
**仅添加一个唯一标识符时,匹配通常效果更好。** 例如,下面的截图将基于其域名匹配公司。 不一定需要 ID。
</Note>
<img src="/images/user-guide/workflows/upsert_simple_identifier.png" style={{width:'100%'}} />
* 使用来自先前步骤的数据填充字段
**工作原理**:
1. 搜索与您的条件匹配的记录
2. 如果找到 → 更新现有记录
3. 如果未找到 → 创建新记录
**输出**:已创建或已更新的记录数据可用于后续步骤。
## 工作流操作
### 迭代器
**循环遍历**前一步返回的记录数组,允许你对每条记录分别执行操作。
**配置**:
* 从前一步中选择记录数组(例如,来自“搜索记录”的结果、来自具有批量可用性的手动触发、来自代码节点)。 当 Code 或逻辑函数步骤返回顶级数组时,选择其 **Whole list** 选项以遍历整个输出。
* 定义要对循环中每个记录执行的动作.
<Note>
- 你可以在迭代器中添加多个操作。
- 在迭代器中使用分支时,确保每个分支的最后一步连接回迭代器以闭合循环。
</Note>
* 访问 `Current Item` 字段:要使用当前正在处理的记录中的字段,点击 **Iterator** 步骤,然后选择 **Current item**。 将显示该记录可用字段的列表,并可选择用于后续操作。 你也可以选择 **Use the whole item**,将当前整个条目传递到下游步骤。
<VimeoEmbed videoId="1146577247" title="视频演示" />
### 过滤
根据指定条件过滤记录,仅允许满足条件的记录通过。
**配置**:
* 选择要过滤的记录
* 定义过滤条件和标准
* 配置哪些记录应通过到后续步骤
<Note>
1. **输出**:筛选器节点不返回数据——它们充当闸门。 如果满足条件,工作流将继续。 否则,工作流会在该分支停止。
2. `IS` 运算符可用于数值字段。 其作用等同于 `EQUAL`。
</Note>
### 延迟
将工作流执行暂停指定时长或直到特定日期/时间。
**延迟类型**:
| 类型 | 描述 |
| -------- | ----------------- |
| **持续时间** | 等待特定时长(天、小时、分钟、秒) |
| **计划日期** | 等待直到特定日期和时间 |
**持续时间的配置**:
* 设置天、小时、分钟和/或秒
* 组合多个单位(例如 2 天 4 小时)
**计划日期的配置**:
* 选择日期和时间
* 可以引用前一步的日期字段(例如,在会议后 3 天跟进)
**用法**:
* 在发送跟进邮件前等待 24 小时
* 暂停直到商机的关闭日期
* 将操作安排在工作时间内
<Note>
计划日期不能早于当前时间。 如果使用了前一步的日期字段且该日期已过去,工作流将失败。
</Note>
**限制与点数**:
* **无最长期限限制**——你可以设置分钟、天、周或更长的延迟
* **消耗 1 个点数**——无论持续时间如何,延迟节点执行时会消耗。
* **等待期间不消耗点数**——5 分钟的延迟与 5 天的延迟成本相同
## 通信操作
### 发送邮件
从工作流发送电子邮件。 这非常适合使用模板的群发邮件。 邮件看起来就像你从邮箱发送的邮件。
它不适合新闻简报(需要更丰富的格式)或自动化邮件序列。
**先决条件**:在“设置” → “账户”中添加电子邮件账户
**配置**:
* 选择发件邮箱账户
<Note>
你只能从与自己 Twenty 账户同步的邮箱发送邮件。 从其他团队成员的邮箱发送(例如账户所有者的邮箱)已在规划中。
</Note>
对于以下所有步骤,你可以引用前面步骤中的变量以实现个性化。
* 输入收件人电子邮件地址.
<Note>
目前只能指定一个收件人。
</Note>
* 设置主题行。
* 撰写消息内容. 你可以设置链接格式、创建编号列表、项目符号列表,并添加附件。
<Note>
目前无法添加 HTML 签名。
</Note>
### 表单
在工作流执行期间提示表单以收集用户输入。 随后可在后续步骤中使用这些响应,根据输入创建记录、发送电子邮件或执行其他任何操作。
<Warning>
**表单当前仅设计用于手动触发。** 对于具有其他触发器(记录创建、更新等)的工作流,表单仅可通过工作流运行界面访问,这不是预期的用户体验。 将于 2026 年发布通知中心,以适当支持自动化工作流中的表单。
</Warning>
**配置**:
* 配置要求用户填写的字段。 针对每个字段,选择
* 一种类型:文本、数字、日期、指定记录、选择字段。 所有对象中的字段都可供选择。
* 一个标签
* 在 `Placeholder` 下设置默认值(可选)
* 编辑表单标题
**输出**:表单响应可在后续步骤中使用。
**示例**:"Quick Lead" 工作流在所有工作区中默认可用,可在任意位置通过命令菜单 `Cmd+K` 调用。
**如何填写表单**:
* 从命令菜单 `Cmd+K` 触发你的手动工作流
* 在侧边面板中填写显示的表单并点击 `Submit`。
<Note>
这些字段无法设为必填。
</Note>
<VimeoEmbed videoId="1147277989" title="视频演示" />
## 集成操作
### 代码
在工作流中运行自定义 JavaScript。
在幕后,每个 Code 操作都由其自己的 **逻辑函数** 支持——一个在 Twenty 平台上运行的服务器端 TypeScript 函数。 当你添加 Code 操作时,Twenty 会为该步骤创建一个专用的逻辑函数,并内联显示其编辑器,因此你编写的代码与工作流共存。
**配置**:
* 访问先前步骤中的变量. 你可以动态编辑变量名称。
<VimeoEmbed videoId="1147281795" title="视频演示" />
* 在编辑器中编写 JavaScript 代码
* 返回变量以供后续步骤使用
* 直接在步骤中测试代码
<Note>
如果需要在代码中使用外部 API 密钥,必须将其直接输入到函数主体中。 你无法在其他位置配置 API 密钥并在逻辑函数中引用它们。
</Note>
<Tip>
**处理数组?** 来自外部系统或前序步骤的数组可能以字符串形式传入。 解决方案请参见 [如何在 Code 操作中处理数组](/l/zh/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions)。
</Tip>
<Tip>
点击代码编辑器右上角的方形图标以全屏显示——这很有用,因为默认编辑器宽度有限。
</Tip>
#### 在多个工作流中复用逻辑函数
内联 Code 操作用于一次性逻辑非常合适,但其中的代码仅属于该单个步骤。 当你希望在多个工作流之间共享相同逻辑,或在应用中将其维护为有版本控制的源码时,应定义一个**可复用逻辑函数**,而不是在每个 Code 操作中复制粘贴代码。
逻辑函数在应用中定义一次(使用 SDK 的 `defineLogicFunction`),并通过添加 `workflowActionTriggerSettings` 暴露给工作流构建器。 安装应用后,该函数会作为独立操作出现在工作流构建器中,与内置操作并列。 选择它会渲染你声明的输入字段(带有变量选择器,与其他操作相同),并运行你的共享代码 —— 无需内联 JavaScript。
| | Code 操作 | 可复用逻辑函数 |
| ---------- | ---------------- | ------------------- |
| **代码所在位置** | 内联编辑器,绑定到单个工作流步骤 | 在应用中定义,在源码管理中进行版本控制 |
| **复用** | 按步骤复制粘贴 | 可作为操作添加到任意工作流中 |
| **输入** | 在编辑器中接入的变量 | 根据你声明的输入模式渲染出的字段 |
| **最适合** | 快速、特定于工作流的逻辑 | 在多个工作流中复用的共享逻辑 |
二者运行在同一逻辑函数运行时上,因此你在内联完成原型的 Code 操作,之后可以以最小改动升级为可复用逻辑函数。
<Tip>
有关为开发者提供的定义逻辑函数并将其暴露给工作流构建器的参考文档,请参阅 [Logic Functions](/l/zh/developers/extend/apps/logic/logic-functions) —— 尤其是 **Exposing a function as an AI tool or workflow action** 部分以及 `workflowActionTriggerSettings`。
</Tip>
### HTTP请求
作为工作流的一部分,向外部API发送请求。
<img src="/images/user-guide/workflows/http_action.png" style={{width:'100%'}} />
**配置**:
* 输入 API 端点 URL. 可以使用前面步骤中的参数。
* 选择 HTTP 方法(GET、POST、PUT、PATCH、DELETE)
* 添加必需的标头和值
* 提供示例响应以供结构预览
## AI 操作
### AI 代理 - 即将推出
在你的工作流中运行 AI 代理以执行智能任务。
**配置**:
* **代理**:选择一个现有 AI 代理或使用默认代理
* **提示**:为 AI 代理编写指令
* 在提示中引用前面步骤中的变量
**AI 代理能做什么**:
* 分析并总结数据
* 对记录进行分类或归类
* 生成文本内容
* 基于数据做出决策
* 使用工具与你的 CRM 数据交互
**输出**:AI 代理的响应可用于后续步骤。 如果代理具有结构化的输出模式,响应将遵循该格式。
<Note>
AI 代理操作会根据所用 AI 模型消耗工作流点数。 详见 [工作流点数](/l/zh/user-guide/workflows/capabilities/workflow-credits)。
</Note>
<Note>
AI 代理遵循基于角色的权限。 你可以在 **设置 → 成员 → 角色** 下为代理分配特定角色,以控制其可访问的数据。 详见 [权限](/l/zh/user-guide/permissions-access/capabilities/permissions)。
</Note>

View File

@@ -0,0 +1,66 @@
---
title: 工作流分支
description: 在你的工作流中创建并行路径和条件逻辑。
---
分支可以将你的工作流拆分为多个路径,这些路径可根据你的数据同时运行或按条件运行。
<img src="/images/user-guide/workflows/branches.png" style={{width:'100%'}} />
## 分支的工作原理
当你从单个节点创建多个连接时,每条路径都会成为一个分支。 默认情况下,**所有分支都会并行执行**——它们不会相互等待。
## 创建分支
### 添加新分支
1. **在主画布上右键单击**(在工作流中,不要在现有节点上)
2. 点击**添加节点**
3. 为你的新分支选择节点类型
4. 将箭头从上一步的底部拖到此新操作的顶部
5. 重复以上操作,从同一节点添加更多分支。
<Note>
每个分支都是独立的。 添加分支不会影响该节点的其他现有路径。
</Note>
### 可视化布局
在工作流编辑器中,分支显示为并行路径。 你可以拖动节点来重新排列可视化布局,而不会影响执行。
## 条件分支
由于默认情况下所有分支都会运行,请使用**筛选**节点来控制哪些路径实际执行:
| 分支 | 筛选条件 | 操作 |
| -- | --------- | ------ |
| A | 阶段 = "赢单" | 发送祝贺邮件 |
| B | 阶段 = "丢单" | 创建跟进任务 |
| C | 阶段 = "谈判" | 通知经理 |
1. 从你的触发器或操作创建分支
2. 在每个分支的第一步添加一个**筛选**节点
3. 为每个筛选节点配置互斥条件
4. 在每个筛选之后添加你的操作
只有满足筛选条件的分支才会继续执行。
## 合并分支
**分支不会自动合并。** 每个分支都会独立运行直至结束。 对此你有充分的灵活性:
* **选项 1:保持分支独立**
每个分支独立处理其后续操作。 当分支不需要汇合时,这是最简单的方法。
* **选项 2:手动合并分支**
在创建工作流时,你可以手动将多个分支连接到同一个下游操作。 只需将每个分支末端的箭头拖到同一个节点。
<Note>
虽然你可以使用[延迟](/l/zh/user-guide/workflows/capabilities/workflow-actions#delay)节点来暂停执行,但目前无法配置为等待"直到另一个分支结束"。
</Note>
## 相关
* [如何在工作流中使用分支](/l/zh/user-guide/workflows/capabilities/use-branches-in-workflows) - 分步指南
* [工作流操作](/l/zh/user-guide/workflows/capabilities/workflow-actions) - 可用操作(包括筛选)

View File

@@ -0,0 +1,75 @@
---
title: 工作流程积分
description: 了解工作流程积分的消耗与管理。
---
在 Twenty 中,工作流程积分为您的自动化提供支持。 了解其如何运作,有助于优化成本并有效管理您的自动化预算。
## 积分分配
工作流程积分基于您的计费周期分配,而非您的计划:
| 计费周期 | 积分 |
| -------- | -------- |
| **月度订阅** | 每月 5 积分 |
| **年度订阅** | 每年 50 积分 |
<Note>
每月 5 积分对于标准自动化而言已相当充足。 大多数团队在典型的工作流程使用中不会超出此限制。 额外积分主要用于高级 Code 操作和由 AI 驱动的工作流程。
</Note>
## 积分消耗工作原理
工作流程执行时消耗积分,而不是创建时。 每个工作流程操作根据其复杂性消耗积分:
### 按操作类型消耗积分
* **基本内部操作**:非常低的积分消耗
* 搜索记录
* 创建记录
* 更新记录
* 删除记录
* 表单操作
* **复杂操作**:更高的积分消耗
* 代码操作(JavaScript 执行)
* 向外部服务发送HTTP请求
* **AI 功能**:更高的积分消耗
* AI 代理操作会根据所用 AI 模型消耗积分
* 更复杂的提示词和更长的输出会消耗更多积分
* **延迟操作**:积分消耗极少
* Delay 节点在执行时会消耗**1 积分**
* 在等待期间**不会消耗积分**
* 5 分钟的延迟与 5 天的延迟消耗的积分相同
### 实时扣减
工作流程执行时,积分实时扣减。 这意味着:
* 草稿工作流程不消耗积分
* 仅激活并运行中的工作流程使用您的积分额度
* 失败的工作流程仍为已完成的步骤消耗积分
## 管理积分
### 检查积分使用情况
1. 前往**设置 → 结算**
2. 查看您当前的积分消耗和剩余余额
3. 监控使用模式以优化工作流程
### 购买额外的积分
如果您需要超出计划分配的更多积分:
1. 前往**设置 → 结算**
2. 点击选项以购买额外的积分。 提供不同大小的套餐。
3. 积分将添加到您当前的余额
## 最佳实践
* **批处理**:有效利用批量操作和迭代器操作,以减少单个操作的调用次数
* **手动触发优化**:对于手动触发,选择 `Bulk` 可用性以在单个工作流程运行中处理多个记录
* 优化代码操作以提高效率

View File

@@ -0,0 +1,93 @@
---
title: 工作流运行
description: 监控并管理工作流执行。
---
## 关于运行
**运行** 是一条工作流执行记录。 每当工作流被触发——无论是由记录事件、计划、手动操作还是 Webhook——都会创建一个新的运行。
## 查看运行
### 在工作流编辑器中
1. 打开你要监控的工作流
2. 单击右侧的**运行**面板
3. 查看最近的运行及其状态列表
### 在工作流运行视图中
1. 前往侧边栏中的**工作流运行**
2. 查看所有工作流的运行
3. 按状态、工作流或日期进行筛选
## 运行状态
| 状态 | 描述 |
| -------- | ------------------------------ |
| **正在运行** | 工作流当前正在执行 |
| **已完成** | 工作流已成功完成 |
| **失败** | 工作流遇到错误并已停止 |
| **等待中** | 工作流处于暂停状态(例如,等待 Delay 操作或表单提交) |
## 运行详情
单击任意运行以查看:
* **状态**:运行的当前状态
* **开始时间**:运行开始的时间
* **持续时间**:运行耗时
* **触发数据**:启动工作流的输入
* **步骤输出**:各步骤返回的数据
* **错误消息**:如果运行失败,出了什么问题
## 逐步执行
每次运行都会显示工作流中的执行过程:
1. 查看哪些步骤已成功完成
2. 确定失败发生的位置
3. 查看步骤之间传递的数据
4. 通过检查步骤的输入和输出来调试问题
## 错误处理
当运行失败时:
1. 打开失败的运行
2. 找到导致失败的步骤
3. 查看错误消息以了解详细信息
常见问题:
* 缺少必填字段
* 数据格式无效
* 外部 API 错误
* 权限问题
## 重新运行工作流
如果某次运行失败,你可以:
* 修复根本问题并等待下一次触发
* 对于手动工作流,使用相同或更新的数据再次触发
* 检查工作流逻辑以防止将来发生失败
## 性能提示
### 管理运行历史
* 运行会被保留以供历史参考
* 非常久远的运行可能会被自动归档
* 如果需要保留记录,请导出运行数据
### 监控最佳实践
* 在启用新的工作流后定期检查运行
* 审查失败的运行以识别模式
## 相关
* [工作流触发器](/l/zh/user-guide/workflows/capabilities/workflow-triggers)
* [工作流操作](/l/zh/user-guide/workflows/capabilities/workflow-actions)
* [工作流故障排除](/l/zh/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting)

View File

@@ -0,0 +1,137 @@
---
title: 工作流程触发器
description: 了解可启动你的工作流的不同触发器。
---
## 关于触发器
工作流程总是从一个单一触发器开始,定义自动化运行的条件。
<img src="/images/user-guide/workflows/workflow_triggers.png" style={{width:'100%'}} />
<Tip>
**支持高级对象!** 除了标准 CRM 对象(人员、公司、商机)之外,你还可以基于以下对象触发工作流并执行操作:
* 工作区成员
* 日历事件
* 消息(电子邮件)
* 任务、备注以及许多其他系统对象
这将带来强大的自动化能力,例如在创建日历事件时通知团队成员,或自动处理收到的电子邮件。
</Tip>
## 记录已创建
当在选定的对象(人员、公司、机会或任何自定义对象)中创建新记录时,启动工作流程。
**配置**:选择要监控新记录的对象类型。
<Note>
* 此触发器对于CSV、邮箱和日历同步或 API 创建的记录非常棒。
* **不建议用于手动创建的记录**:使用此触发器,记录一创建就会启动工作流。 因为二十个用户界面在运行时自动保存(没有编辑模式,然后进行验证以保存记录), 在用户输入所有字段之前,将触发工作流。
若要在手动创建的记录上触发此工作流,建议改用触发器 `Record is created or updated`。
</Note>
## 记录已更新
当对现有记录进行更改时,启动工作流程。
**配置**:
* 选择对象类型
* 可以选择指定要监控更改的字段
## 记录已更新或创建
当在选定的对象中创建或更新记录时,启动工作流程。
**重要性**:此触发器尤其有用,因为通过不同方法创建的记录行为不同:
* **API/CSV导入**:记录立即以填充所有字段的方式创建
* **手动创建**:首先创建记录,然后在随后的更新中添加字段
**配置**:
* 选择要监控的对象类型
* 可以选择指定要监控更改的字段
* 工作流程将在初始创建和后续更新时触发
## 记录已删除
当从对象中移除记录时,启动工作流程。
**配置**:选择要监控删除的对象类型。
## 手动触发器
当由用户操作触发时启动工作流程。 此触发器可以通过 `Cmd+K` 菜单访问,或在选择记录后通过顶部导航栏中显示的自定义按钮进行访问。
<img src="/images/user-guide/workflows/add_to_newsletter_button.png" style={{width:'100%'}} />
**可用性配置**:
选择工作流程如何处理记录选择:
* **全局**:无需记录即可触发此工作流程。 工作流是从命令菜单`Cmd+K`(来自任何对象)触发的,不使用记录作为输入。
因为**单点** 和 **批量** 可用性,所选记录将传递到您的工作流。 这是为给定对象配置的,在触发工作流之前可以选择几项记录。
* **单一** :工作流将从开始到结束,因为有记录被选中。
<Note>
**软限制:100 次/分钟**。 超过该限制后,工作流将保持在 "Not Started" 状态,并会逐步处理—由后台作业处理,或在另一个工作流进入队列时处理。 这意味着你可以通过一次触发选择超过 100 条记录;只是执行会更慢。
</Note>
* **批量**:工作流程将运行一次,提供完整的记录列表作为输入。 这意味着工作流需要包含一个[迭代器操作](/l/zh/user-guide/workflows/capabilities/workflow-actions#iterator)。
<Note>
这更为高级,最适合希望优化工作流运行次数的人。
</Note>
<img src="/images/user-guide/workflows/manual_trigger.png" style={{width:'100%'}} />
**附加配置**:
* 选择目标对象(用于单个和批量可用性)
* 为工作流程触发器选择一个命令图标
* 配置导航栏位置(已固定或未固定)
**访问方法**:
* 使用 `Cmd+K` 菜单查找并启动手动工作流
* 导航栏顶部的自定义按钮(如果已配置)
## 基于时间的触发器:按计划
在您定义的重复基础上启动工作流程。
**配置**:
* 选择时间单位(分钟、小时、天)
* 输入值或使用自定义 Cron 表达式进行高级调度
<Note>
**时区**:计划的工作流在 **UTC** 下运行。 为每日计划设置时间时,请将本地时间换算为 UTC。
</Note>
## 外部触发器:Webhook
当接收到外部服务的 GET 或 POST 请求时启动工作流程。
<img src="/images/user-guide/workflows/webhook_trigger.png" style={{width:'100%'}} />
**配置**:
* 该工作流会提供唯一的 webhook URL—复制它并将其添加到你的外部系统,作为调用的端点。
* 对于 POST 请求,定义预期的正文结构,以便 Twenty 知道将接收哪些数据。 在此添加你将接收的字段,这些字段将在下方的工作流中使用。
* 配置认证(即将推出)。
## 选择合适的触发器
| 用例 | 推荐的触发器 |
| --------- | ------------ |
| 新线索需要处理 | 记录已创建 |
| 数据变更需要同步 | 记录已更新 |
| 导入/手动数据处理 | 记录已更新或创建 |
| 删除后的清理 | 记录已删除 |
| 用户发起的操作 | 手动启动 |
| 定期报告 | 计划 |
| 外部集成 | Webhook 或按计划 |

View File

@@ -0,0 +1,84 @@
---
title: 工作流版本
description: 管理工作流的版本和草稿。
---
## 关于版本
每次您激活一个工作流时,都会创建一个新版本。 这使您能够随时间跟踪更改,并在需要时恢复到先前的配置。
## 版本状态
| 状态 | 描述 |
| ------- | --------------- |
| **草稿** | 正在编辑,尚未发布 |
| **活跃** | 运行中的版本,响应触发器 |
| **已停用** | 之前为活跃状态,但已被手动停止 |
| **已归档** | 为历史记录保留的过去版本 |
## 处理草稿
当您编辑活跃的工作流时,您的更改将保存为**草稿**。 在您进行更新时,活跃版本会继续运行。
完成编辑后,您可以:
* **激活**:将草稿发布为新的活跃版本(先前的版本会被归档)
* **丢弃**:删除草稿并保留当前的活跃版本
## 版本历史
### 查看历史版本
1. 打开该工作流
2. 点击**版本**选项卡
3. 查看包含时间戳的所有先前版本
### 还原版本
1. 找到您要还原的版本
2. 点击**用作草稿**
3. 该版本会被复制为一个新的草稿
4. 进行任何必要的更新
5. 准备就绪后激活
## 最佳实践
### 版本管理
* 仅在准备好用于生产环境时再激活
* 在各版本之间仅保留有意义的更改
* 记录工作流名称或描述中的重大更改
* 在激活前先在草稿模式下进行测试
### 还原更改
* 如果新版本引发问题,请还原到上一版本
* 使用版本历史来跟踪发生了哪些更改
* 在激活之前务必测试已还原的版本
## 常见工作流
### 快速编辑
1. 对活跃的工作流进行小幅更改
2. 在草稿模式下测试
3. 激活新版本
### 重大修订
1. 以先前版本为起点
2. 在草稿中进行重大更改
3. 全面测试所有场景
4. 确认无误后再激活
### 回滚
1. 找出现有版本的问题
2. 在历史记录中找到最后一个可用的版本
3. 点击**用作草稿**
4. 激活以恢复原有行为
## 相关内容
* [工作流入门](/l/zh/user-guide/workflows/overview)
* [工作流运行](/l/zh/user-guide/workflows/capabilities/workflow-runs)

View File

@@ -0,0 +1,82 @@
---
title: 代码动作中处理数组
description: 学习如何在工作流代码操作中正确处理数组输入。
---
当在代码操作中与数组一起工作时,您可能会遇到两个共同的挑战:
1. **作为字符串传递的数组** - 来自外部系统或前几步的数据作为字符串而不是实际数组
2. **不能选择单个项目** — 您只能选择整个数组,而不是其中的特定字段
两者都可以用代码节点解决。
## 从字符串解析数组
数组通常是作为字符串或 JSON 而不是本机数组在工作流步骤之间传递的。 这种情况发生在:
* 通过 HTTP 请求从外部 API 接收数据
* 正在处理 webhook payload
* 工作流步骤之间传输数据
**Solution**:在代码开始时添加此模式:
```javascript
export const main = async (params: {
users: any;
}): Promise<object> => {
const { users } = params;
// Handle input that may come as a string or an array
const usersFormatted = typeof users === "string" ? JSON.parse(users) : users;
// Now you can safely work with usersFormatted as an array
return {
users: usersFormatted.map((user) => ({
...user,
activityStatus: String(user.activityStatus).toUpperCase(),
})),
};
};
```
键行 `typeof users === "string" ? JSONparse(users) : users`检查输入是否是字符串, 如果需要解析它, 或者如果它已经是一个数组直接使用它。
## 从数组中提取个别字段
Web 钩子可能返回一个数组,如'答案: [...]', 但在随后的工作流步骤中,您只能选择 **整个数组** ——而不是其中的个别项目。
**Solution**: 添加代码节点来提取特定字段并将其作为结构化对象返回:
```javascript
export const main = async (params: {
answers: any;
}): Promise<object> => {
const { answers } = params;
// Handle input that may come as a string or an array
const answersFormatted = typeof answers === "string"
? JSON.parse(answers)
: answers;
// Extract specific fields from the array
const firstname = answersFormatted[0]?.text || "";
const name = answersFormatted[1]?.text || "";
return {
answer: {
firstname,
name
}
};
};
```
代码节点返回结构化对象而不是数组。 在随后的步骤中,您现在可以从变量选择器中选择单个字段,例如`answer.firstname` 和 `answer.name` 。
<Tip>
**想要遍历数组而不是提取字段?** 当一个 Code 或 Logic Function 步骤返回顶层数组时,你可以将其直接传入 [Iterator](/l/zh/user-guide/workflows/capabilities/use-iterator):在 Iterator 的输入中选择该步骤的 **Whole list** 选项,然后在循环内部使用 `{{iterator.currentItem}}` 引用每个元素。 在那种情况下,你不需要将数组重构为对象。
</Tip>
<Tip>
点击代码编辑器右上角的方形图标在全屏显示它——因为默认编辑器宽度是有限的,所以它是有用的。
</Tip>

Some files were not shown because too many files have changed in this diff Show More