跳到主要内容

OmniCRM 系统架构

本文档提供了 OmniCRM 系统架构的概述,包括组件关系和数据流。

高级系统概述

OmniCRM 是一个综合的 BSS/OSS 平台,集成了多个关键组件,为电信提供商提供完整的服务管理。

核心组件

1. 前端应用

OmniCRM Web UI

  • React 单页面应用
  • 客户管理、服务配置、计费的员工界面
  • 实时配置状态更新
  • 基于角色的访问控制

自助服务门户

  • 面向客户的门户
  • 服务管理和使用跟踪
  • 发票查看和支付
  • 与员工 UI 共享代码库,不同视图

2. API 层

OmniCRM API (Flask/Python)

  • 所有操作的 RESTful API
  • OpenAPI/Swagger 文档
  • 基于 JWT 的认证
  • 速率限制和缓存
  • WebSocket 支持实时更新

关键 API 路由:

  • /crm/customer/* - 客户管理
  • /crm/service/* - 服务操作
  • /crm/product/* - 产品目录
  • /crm/provision/* - 配置操作
  • /crm/transaction/* - 计费交易
  • /crm/invoice/* - 发票管理

3. 配置系统

4. 计费与评级

OCS/CGRateS 集成

  • 实时收费和评级
  • 账户管理
  • 余额跟踪(货币、数据、语音、短信)
  • 定期收费的行动计划
  • 基于阈值的通知

计费工作流:

5. 数据模型

OmniCRM 使用关系数据库,具有以下核心模型。有关可视化实体关系图,请参见 客户、联系人、站点和服务

客户及相关实体

客户 - 代表公司或个人的中心实体

字段类型描述
customer_id整数 (PK)唯一标识符
customer_name字符串公司或个人名称
customer_account_type枚举'个人' 或 '企业'
customer_status枚举'开放', '关闭', '暂停', '归档'
customer_payment_type字符串'预付' 或 '后付'
customer_enabled布尔账户是否活跃
tax_identifier字符串VAT/GST 号码
contract_start_date日期时间合同开始
contract_end_date日期时间合同结束

��系人 - 与客户相关联的人

字段类型描述
contact_id整数 (PK)唯一标识符
customer_id整数 (FK)父客户
contact_firstname字符串名字
contact_lastname字符串姓氏
contact_email字符串电子邮件地址
contact_phone字符串电话号码
contact_types字符串'主要', '计费', '技术'

站点 - 实体服务交付地点

字段类型描述
site_id整数 (PK)唯一标识符
customer_id整数 (FK)父客户
site_name字符串位置名称
address_line_1字符串街道地址
city, state, zip_code字符串位置详情
latitude, longitude浮点GPS 坐标
google_maps_place_id字符串Google Maps 参考
plus_code字符串开放位置代码

服务与产品模型

服务 - 活动服务实例

字段类型描述
service_id整数 (PK)唯一标识符
customer_id整数 (FK)父客户
product_id整数 (FK)产品模板
site_id整数 (FK)服务位置
service_name字符串显示名称
service_uuid字符串计费系统标识符
service_status枚举当��状态
service_billed布尔生成交易
wholesale_cost浮点供应商成本
retail_cost浮点客户价格
bundled_parent整数 (FK)捆绑的父服务

产品 - 服务提供模板

字段类型描述
product_id整数 (PK)唯一标识符
product_name字符串显示名称
product_slug字符串友好的 URL 名称
category枚举'独立', '捆绑', '附加', '促销'
provisioning_play字符串Ansible playbook 名称
provisioning_json_varsJSONPlaybook 变量
inventory_items_list字符串所需库存
retail_cost浮点月费
retail_setup_cost浮点一次性费用
enabled布尔可供销售

计费模型

交易 - 单个收费/信用

字段类型描述
transaction_id整数 (PK)唯一标识符
customer_id整数 (FK)父客户
invoice_id整数 (FK)父发票(可选)
service_id整数 (FK)相关服务
title字符串交易描述
retail_cost浮点金额
tax_percentage浮点税率
tax_amount浮点计算的税
void布尔取消的交易

发票 - 计费的分组交易

字段类型描述
invoice_id整数 (PK)唯一标识符
customer_id整数 (FK)父客户
paid布尔收到付款
void布尔取消的发票
payment_reference字符串Stripe 交易 ID
start_date, end_date日期计费周期
due_date日期付款截止日期
retail_cost浮点总金额

库存模型

库存 - 实体和虚拟资产

字段类型描述
inventory_id整数 (PK)唯一标识符
customer_id整数 (FK)指定客户
service_id整数 (FK)关联服务
inventory_template_id整数 (FK)项目类型模板
item字符串项目类型(SIM 卡、路由器等)
item_state枚举'新', '已分配', '已使用' 等
itemtext1-20字符串灵活字段
management_url字符串设备管理 URL
config_content文本配置文件

库存模板 - 定义库存项目结构

字段类型描述
inventory_template_id整数 (PK)唯一标识符
item字符串模板名称
itemtext1_label字符串itemtext1 字段的标签
itemtext2_label字符串itemtext2 字段的标签

配置模型

配置 - 配置作业跟踪

字段类型描述
provision_id整数 (PK)唯一标识符
product_id整数 (FK)正在配置的产品
customer_id整数 (FK)目标客户
service_id整数 (FK)创建/修改的服务
provisioning_play字符串Ansible playbook 名称
provisioning_status整数0=成功, 1=运行中, 2=失败

配置事件 - 单个配置步骤

字段类型描述
provision_event_id整数 (PK)唯一标识符
provision_id整数 (FK)父配置作业
event_name字符串任务名称
event_number整数序列号
provisioning_status整数0=成功, 1=运行中, 2=失败
provisioning_result_jsonJSON完整任务输出

用户与安全模型

用户 - 用户账户

字段类型描述
id整数 (PK)唯一标识符
username字符串登录用户名
email字符串电子邮件地址
email_verified布尔电子邮件已确认
is_2fa_enabled布尔启用双因素认证
totp_secret字符串TOTP 密钥

角色 - 用户角色

字段类型描述
id整数 (PK)唯一标识符
name字符串角色��称
description字符串角色描述

权限 - 细粒度权限

字段类型描述
id整数 (PK)唯一标识符
name字符串权限名称(资源.操作)
description字符串权限描述

关系:

  • 用户有多个角色(多对多)
  • 角色有多个权限(多对多)
  • 用户可以链接到一个联系人(用于客户门户访问)

集成点

Stripe 支付网关

  • 令牌化支付方式
  • 符合 PCI 的卡存储
  • 自动发票支付
  • 退款处理
  • 卡过期通知

Mailjet 电子邮件服务

  • 事务性电子邮件(发票、欢迎、通知)
  • 联系人同步
  • 模板管理
  • 投递跟踪

Google Maps

  • 地址自动补全
  • 地理编码和反向地理编码
  • Plus Code 生成
  • 站点位置映射

OCS/CGRateS

  • 账户配置
  • 实时评级
  • 余额管理
  • CDR 处理
  • 行动计划和时间表

安全架构

安全特性:

  • 基于 JWT 的认证
  • 双因素认证(TOTP)
  • 基于角色的访问控制(RBAC)
  • 基于权限的资源访问
  • 使用 Redis 的会话管理
  • 密码哈希(bcrypt)
  • 电子邮件验证
  • 通过活动日志进行审计记录

部署架构

推荐的生产设置:

技术栈

后端:

  • Python 3.x
  • Flask Web 框架
  • SQLAlchemy ORM
  • Alembic 迁移
  • Ansible 用于自动化

前端:

  • React
  • 状态管理
  • React Router
  • Axios 用于 API 调用

数据库:

  • 关系数据库(主数据存储)
  • Redis(缓存和会话)

外部服务:

  • CGRateS(计费/评级)
  • Stripe(支付)
  • Mailjet(电子邮件)
  • Google Maps(地理编码)

可扩展性考虑

水平扩展:

  • 无状态 API 设计允许多个实例
  • 负载均衡器分配请求
  • Redis 用于共享会话状态

数据库扩展:

  • 读取副本用于报告查询
  • 连接池
  • 查询优化和索引

大规模配置:

  • 后台作业处理
  • 多个 Ansible 工作进程
  • 作业队列管理
  • 失败配置的重试逻辑

监控与可观察性

关键指标:

  • API 响应时间
  • 配置成功/失败率
  • 数据库连接池使用
  • 缓存命中率
  • 活动会话

日志记录:

  • 应用日志(Flask)
  • 配置日志(Ansible 输出)
  • 活动日志(审计轨迹)
  • 错误跟踪和警报

相关文档