欣淇
发布于 2026-05-29 / 0 阅读
0
0

🚀 Twenty:47k Stars 的开源 Salesforce 替代品,AI 原生的 CRM 系统

🚀 twenty-crm:开源界跑出的黑马,GitHub 28k+ Star 的 CRM 还能这么玩

你是不是也遇到过这种情况?团队想上个 CRM,Salesforce 太贵太复杂,HubSpot 免费版功能砍得没法用,自己从零写一套又太费劲。客户信息散落在 Excel、微信聊天记录、邮件附件里,每次要汇总数据都像在考古。更头疼的是,业务一变,系统就得跟着改,改一次折腾一个月。

别急,今天给你介绍一个真正能“随你一起成长”的开源 CRM——Twenty。项目在 GitHub 上已经收获了超过 28k Star,而且还在快速增长。它不是什么轻量级玩具,而是一个能让你像写代码一样定义业务对象、字段、视图,甚至还能版本控制的 CRM 平台。

核心功能拆解:它到底强在哪?

1. 用代码定义你的业务对象

传统 CRM 里,你想加个“合同”对象?得找供应商定制,或者自己在后台点来点去配置。Twenty 的思路完全不同——你直接用 TypeScript 定义。

import { defineObject, FieldType } from 'twenty-sdk/define';

export default defineObject({
  nameSingular: 'contract',
  namePlural: 'contracts',
  labelSingular: '合同',
  labelPlural: '合同',
  fields: [
    { name: 'contractNo', label: '合同编号', type: FieldType.TEXT },
    { name: 'totalAmount', label: '合同金额', type: FieldType.CURRENCY },
    { name: 'signDate', label: '签订日期', type: FieldType.DATE_TIME },
    { name: 'status', label: '状态', type: FieldType.SELECT },
  ],
});

这段代码定义了一个“合同”对象,包含编号、金额、日期和状态字段。写完保存,你的 CRM 里立刻多了一个完整的合同管理模块。不需要写 SQL,不需要配界面,代码即配置。

2. 版本控制,CRM 也能 Git

你可能会问:代码定义对象,那改错了怎么办?Twenty 提供了完整的版本控制机制。当你发布一个应用时,可以指定版本号,并且支持回滚。

npx twenty app:publish --private

这条命令会把你的应用发布到工作区。如果发现有问题,直接回退到上一个版本。CRM 的变更管理变得和软件开发一样规范——有记录、可追溯、能回滚。

3. 脚手架一键创建应用

想从头搭建一套完整的 CRM 应用?Twenty CLI 提供了脚手架工具:

npx create-twenty-app my-crm-app

这条命令会创建一个包含基本目录结构和配置文件的项目。你可以在里面定义多个对象、视图、工作流,甚至集成 AI 代理。整个开发体验和写一个前端项目差不多。

4. 灵活的视图和布局

光有数据还不够,怎么展示也很重要。Twenty 支持自定义视图,你可以为同一个对象创建不同的展示方式。

import { defineView } from 'twenty-sdk/view';

export default defineView({
  name: 'dealPipeline',
  label: '销售管道',
  objectName: 'deal',
  type: 'kanban',
  groupByField: 'stage',
  fields: ['name', 'amount', 'closeDate', 'owner'],
});

这段代码创建了一个看板视图,按销售阶段分组显示商机。你可以拖拽卡片来改变阶段状态,操作直观,效率翻倍。

实操步骤:从零开始跑起来

第一步:选择部署方式

Twenty 提供了三种方式:

  • 云服务:最快,访问 twenty.com 注册,一分钟创建工作区。
  • 自托管:用 Docker Compose 部署到自己的服务器。
  • 本地开发:按照官方文档配置本地环境。

对于技术团队,我个人推荐自托管。数据在自己手里,而且可以深度定制。

第二步:创建你的第一个应用

安装 CLI 工具后,运行:

npx create-twenty-app my-crm-app
cd my-crm-app

然后编辑 objects/deal.ts,定义你的商机对象:

export default defineObject({
  nameSingular: 'deal',
  namePlural: 'deals',
  labelSingular: '商机',
  labelPlural: '商机',
  fields: [
    { name: 'name', label: '名称', type: FieldType.TEXT },
    { name: 'amount', label: '金额', type: FieldType.CURRENCY },
    { name: 'stage', label: '阶段', type: FieldType.SELECT },
  ],
});

第三步:发布到工作区

npx twenty app:publish --private

发布成功后,登录你的 Twenty 工作区,就能看到新创建的“商机”模块了。

避坑指南

  1. 字段类型选对:CURRENCY 类型支持多币种,但需要提前配置汇率来源。DATE_TIME 字段默认显示 UTC 时间,记得在视图里调整时区。

  2. 版本号管理:每次发布前,在 package.json 里更新版本号。建议遵循语义化版本规范,比如 1.0.01.1.0

  3. 权限控制:默认情况下,所有用户能看到所有数据。记得在发布前配置好角色和权限,不然内部数据可能被看到。

  4. 数据迁移:从旧 CRM 迁移数据时,建议先在小范围测试。Twenty 支持 CSV 导入,但字段映射需要手动配置。

要点总结

Twenty 不是又一个“轻量级 CRM”,而是一个面向开发者的 CRM 平台。它的核心价值在于:

  • 代码即配置:用 TypeScript 定义业务对象,比图形界面更灵活、可复用。
  • 版本控制:CRM 的变更管理像代码一样规范。
  • 自托管友好:数据完全掌控,适合对安全性要求高的团队。
  • 生态可扩展:支持 AI 代理、工作流自动化,未来潜力巨大。

如果你受够了传统 CRM 的臃肿和封闭,不妨试试 Twenty。它可能不会马上替代 Salesforce,但对于技术团队来说,这是一个真正能“自己说了算”的 CRM 解决方案。


评论