问题
自由职业者、网络公司和 IT 顾问往往依靠一堆分散的工具:一个管客户,一个管报价,一张电子表格记域名续费,一个笔记本记服务器登录信息。在意大利还多一道门槛:每张发票都必须以 FatturaPA XML 格式开具,并通过国家交换系统(SDI)发送,而大多数 CRM 做不到这一点。BalanceAI 最初是我自己咨询业务的 CRM,后来我对它进行了重构,让其他企业也能使用。
我做了什么
我开发了一个多租户管理平台,把客户、报价、发票以及工作中的技术事务集中在一处。
- 多租户核心——每家公司的数据相互隔离,因为每条查询都按租户过滤。超级管理员面板负责管理租户,因此同一套安装既可以服务一家企业,也可以作为 SaaS 对外提供。
- 意大利电子发票——应用生成 FatturaPA 1.2.1 XML,并通过 Aruba 的电子发票 API 发送,登录令牌按租户缓存。每张发票都会跟踪付款和到期日。
- 报价转发票——包含多行明细和折扣的报价可以一步转为发票,无需重复录入。
- 域名与服务器——续费日期、自动 WHOIS 查询以及与 cPanel/WHM API 的连接,让即将到期的域名和主机账户在变成客户问题之前就能被发现。
- 加密保险库——服务器凭据、客户密码和私人备注均以 AES-256-CBC 加密保存,每个值都使用新的随机 IV。
- AI 客户查询——输入公司名称或增值税号,OpenAI 模型(默认 GPT-4o mini)会以严格的 JSON 返回地址、认证电子邮箱和 SDI 代码,用于预填客户资料卡。未知字段会留空,而不是凭空猜测。
- 批量导入——现有数据可从 Excel、CSV、Word 和 PDF 文件导入。
技术栈
Node.js 和 Express,页面由 EJS 在服务器端渲染,前端使用 Bootstrap 5。数据存储在 MySQL 或 MariaDB 中。代码按模块拆分为 26 个路由器,共有 16 个数据模型。登录使用会话,密码以 bcrypt 哈希。集成:Aruba 电子发票、WHOIS、cPanel/WHM 和 OpenAI API,其密钥按租户加密保存。可以安装在 Nginx 后面的 VPS 上,也可以安装在 cPanel 主机上。
为什么这样做
BalanceAI 最初是单一公司使用的 CRM。2.0.0 版通过一个迁移脚本实现了多租户。该脚本为每张表添加租户列,并把所有现有记录归入租户 1。多年使用积累的真实数据完好保留,同一套代码也变成了其他网络公司可以使用的产品。随之而来的规则很简单:任何查询都必须带上租户过滤条件。


