OmniCRM中的库存概述
OmniCRM中的库存系统旨在管理和跟踪网络运营商和客户使用的物理和虚拟物品。
这意味着我们可以跟踪各种物品,例如调制解调器、电话号码、IP地址块,甚至物理硬件,如GPON ONT或固定无线CPE。
另见: 客户属性用于存储自定义元数据,以及 客户标签用于 可视化分类。
为了支持具有固定网络覆盖的客户,库存系统还可以跟踪特定服务的覆盖家庭,允许运营商远程进行服务资格验证,对于那些运营固定无线网络的,我们可以跟踪在现场部署的CPE及其位置。
::: note ::: title 注意 :::
在配置过程中,库存项通过inventory_items_list字段与产品关联。有关库存如何与产品配置集成的完整流程,包括库存选择器UI和Ansible剧本集成,请参见
完整产品生命周期指南 - 库存要求。
:::
目的
OmniCRM库存有几个关键目的:
- 服务配���:当客户注册服务时,可能需要分配调制解调器、SIM卡或电话号码等物品。库存系统跟踪这些物品并将其与客户关联。
- 库存管理:对于物理库存,如硬件或其他设备,库存帮助运营商保持对可用物品的可见性,了解其存储位置,以及已分配或出售给客户的物品。
- 客户分配:系统允许将物品分配给客户,无论是用于服务(例如,将调制解调器分配给客户的互联网账户)还是直接销售。
- 服务资格/网络覆盖:通过存储网络覆盖的信息,例如每个通过GPON服务的家庭或每个部署的固定无线CPE,允许员工远程进行服务资格验证,并查看特定区域是否有网络覆盖。
示例库存生命周期
为了说明库存系统的工作原理,请考虑以下示例
SIM卡示例
从Omnitouch订购1000个SIM卡。首先,为SIM卡创建一个库存模板(如果尚不存在),并将订购的SIM卡加载到状态为In Transit的库存中。
一旦收到SIM卡,它们将标记为In Stock,并可以分配给不同的零售店,库存项的位置更新以反映每个SIM卡所在的零售店 - 这对于跟踪每个商店的库存水平以及确保每个商店有足够的库存以满足客户需求非常有用。
当客户在店内注册���动服务时,将一张SIM卡分配给客户,状态更改为Allocated。然后将SIM卡库存项分配给客户,状态更新为In Use。
如果客户取消服务或服务处于休眠状态,SIM卡将标记为Decommissioned。
GPON覆盖家庭示例
对于GPON网络,库存系统可以跟踪特定服务的每个覆盖家庭。
当新区域建设完成时,可以将每个覆盖的地址添加到库存中。
这使得运营商能够查看哪些家庭已覆盖特定服务,哪些家庭尚未覆盖。
当客户注册服务时,OmniCRM可以自动对客户的地址进行服务资格验证,以查看该地址是否在覆盖家庭库存中以及可以提供哪些服务。
库存模板
InventoryTemplate功能允许创建任意数量的具有预定义字段的物品类型。这些模板充当蓝图,定义不同物品的基本特征,例如:
- 调制解调器,具有MAC地址(
itemtext1)和序列号(itemtext2)。 - 覆盖家庭,具有位置和状态(例如,已覆盖或未覆盖)。
- 电话号码,具有主要号码(
itemtext1)和地理位置(itemtext2)。 - 虚拟资源,如IP地址块,具有通过模板映射的标识符。
每个库存模板定义最多20个可自定义文本字段(itemtext1到itemtext20),以及相应的标签(itemtext1_label到itemtext20_label),描述每个字段所代表的内容。例如,调制解调器模板可能将itemtext1_label设置为“MAC地址”,将itemtext2_label设置为“序列号”。
运营商可以使用InventoryTemplates自定义每种物品类型的字段。这些模板允许以结构化的方式对物品进行分类和管理,确保物品跟踪的一致性。
链接到产品:
库存模板名称在产品定义中通过inventory_items_list字段引用。在配置产品时,系统显示一个库存选择器,仅显示与所需模板类型匹配的物品。
示例: 一个产品的inventory_items_list: "['SIM Card', 'Mobile Number']"要求存在两个名称完全相同的库存模板“SIM Card”和“Mobile Number”。模板名称区分大小写。
有关库存模板如何与产品配置连接的完整详细信息,请参见 产品生命周期 - 库存要求。

通过UI创建库存模板
要创建新的库存模板:
-
从主菜单导航到库存 → 模板
-
点击添加模板按钮
-
填写所需字段:
基本信息:
- 图标(可选):用于视觉识别的图标类名称(例如,
fa-solid fa-sim-card) - 物品(必填):模板名称(必须与产品中的
inventory_items_list中使用的名称完全匹配)
成本信息(必填):
- 批发成本(必填):您购买或配置此物品类型的成本
- 零售成本(必填):如果单独出售给客户的标准零售价格
::: note ::: title 注意 :::
此处设置的批发和零售成本在从此模板创建新库存项时作为默认值。个别库存项如果需要可以有不同的成本。 :::
字段标签:
- 物品文本1标签(必填):第一个可自定义字段的标签(默认为“型号”)
- 常见示例:“ICCID”用于SIM卡,“MAC地址”用于调制解调器,“电话号码”用于号码
- 物品文本2标签(必填):第二个可自定义字段的标签(默认为“序列号”)
- 常见示例:“IMSI”用于SIM卡,“序列号”用于硬件,“地理区域”用于号码
- 物品文本3-20标签(可选):根据需要的额外字段标签
- 点击添加字段以添加更多自定义字段
- 仅添加您实际将用于此物品类型的字段
可见性设置:
- 允许下拉员工:允许员工在下拉菜单中选择此库存类型
- 允许下拉客户:允许客户查看/选择此库存类型(客户门户)
- 图标(可选):用于视觉识别的图标类名称(例如,
-
点击保存以创建模板
编辑库存模板
要编辑现有模板:
- 导航到库存 → 模板
- 在列表中找到模板
- 点击编辑按钮
- 根据需要修改字段
- 点击保存
::: warning ::: title 警告 :::
更改字段标签(例如,itemtext1_label)仅影响更改后创建的新项目。现有库存项保留其数据,但将显示新标签名称。
:::
::: caution ::: title 注意 :::
在产品inventory_items_list字段中引用的模板名称区分大小写。重命名模板将破坏与使用旧名称的产品的链接。
:::
常见模板示例
SIM卡模板:
- 物品:“SIM卡”
- 批发成本:2.50
- 零售成本:10.00
- 物品文本1标签:“ICCID”
- 物品文本2标签:“IMSI”
- 物品文本3标签:“SIM类型”(物理/eSIM)
移动号码模板:
- 物品:“移动号码”
- 批发成本:1.00
- 零售成本:0.00
- 物品文本1标签:“电话号码”
- 物品文本2标签:“地理区域”
- 物品文本3标签:“号码类型”(移动/固定电话)
固定无线CPE模板:
- 物品:“固定无线CPE”
- ��发成本:250.00
- 零售成本:450.00
- 物品文本1标签:“MAC地址”
- 物品文本2标签:“序列号”
- 物品文本3标签:“固件版本”
- 物品文本4标签:“制造商”
- 物品文本5标签:“型号”
GPON ONT模板:
- 物品:“GPON ONT”
- 批发成本:45.00
- 零售成本:0.00(包含在服务中)
- 物品文本1标签:“序列号”
- 物品文本2标签:“MAC地址”
- 物品文本3标签:“PON位置”
- 物品文本4标签:“型号”

创建和管理库存项
一旦定义了InventoryTemplate,可以创建单个库存项。每个库存项代表特定物品类型的特定实例(例如,特定的调制解调器或电话号码),可以:
- 分配给客户:物品与客户关联以进行服务配置(例如,为互联网连接分配硬件)。
- 跟踪库存:运营商可以监控可用库存,例如未售出或未分配的物品。
- 出售或退役:一旦售出,物品将标记相关时间戳(例如,
sold_date),并不再被视为可用库存。


通过该系统,OmniCRM促进了高效的库���管理,帮助将资源分配给客户,并提供每个物品的状态和历史的详细可见性。
服务可以与特定的库存项链接,从而轻松跟踪哪些物品与哪些客户或服务相关联。
一旦库存项分配给客户,Ansible剧本可以更新该项的状态和历史,以反映分配。这确保运营商准确记录哪些物品正在使用,哪些物品可供分配,以及知道哪个客户正在使用哪个物品。
我们可以从客户的个人资料页面的库存选项卡中查看分配给客户的物品。

对于与服务链接的库存项,我们可以通过编辑服务来查看链接的库存项。

库存项字段
每个库存项包含组织成几个类别的全面信息:
基本物品信息
- inventory_id - 库存项的唯一标识符(自动生成)
- item - 物品类型(与库存模板名称匹配,例如,“SIM卡”、“调制解调器”、“电话号码”)
- inventory_template_id - 链接到定义此物品类型的库存模板
- customer_id - 如果分配给客户,则为客户的ID(可为空)
- service_id - 如果链接到特定服务,则为服务ID(可���空)
- item_location - 物品的物理或逻辑位置:
- 对于物理物品:建筑物、仓库、货架位置、商店名称等。
- 对于虚拟物品:地理位置、IP块位置、号码范围区域等。
- item_state - 库存项的当前状态(枚举值):
- 新 - 全新、未使用的物品
- 已使用 - 以前使用过但功能正常
- 内部使用 - 分配用于内部测试或员工使用
- 已分配 - 当前分配给客户或服务
- 损坏 - 无法使用,需要修理或处置
- 停用 - 暂时不可用
- 丢失 - 找不到物品
- 被盗 - 物品被盗
可自定义物品字段(来自模板)
库存系统支持多达20个可自定义文本字段,其含义由库存模板定义:
- itemtext1 - 第一个可自定义字段(必填,标签由模板的
itemtext1_label定义)- 示例:对于调制解调器,可能是“MAC地址”
- 示例:对于SIM卡,可能是“ICCID”
- 示例:对于电话号码,可能是“电话号码”
- itemtext2到itemtext20 - 其他可自定义字段(可选,标签由模板定义)
- 示例:调制解调器的itemtext2可能是“序列号”
- 示例:SIM卡的itemtext2可能是“IMSI”
- 示例:调制解调器的itemtext3可能是“固件版本”
每个库存模板定义了使用哪些字段以及它们所代表的内容,通过相应的标签字段(itemtext1_label、itemtext2_label等)。
成本信息
- wholesale_cost - 您购买/配置此物品的成本(浮动)
- retail_cost - 如果单独出售给客户的价格(浮动)
- sold_date - 物品售出或分配给客户的时间戳
物理地址(用于网络设备和站点)
用于跟踪物理部署位置,特别是固定网络设备(CPE、ONT、调制解调器)或覆盖家庭:
- address_line_1 - 街道地址、建筑物号码、单元号码
- address_line_2 - 额外地址信息(套房、公寓、楼层)
- city - 城市或城镇
- state - 州、省或地区
- zip_code - 邮政编码/ZIP代码
- country - 国家名称
地理位置(从Web UI自动填充)
通过Web UI使用地址自动完成创建库存项时,这些字段会自动填充:
- google_maps_place_id - 地址的Google Maps地点ID
- plus_code - Google Maps Plus代码(开放位置代码),用于精确位置
- latitude - 地理纬度(十进制度)
- longitude - 地理经度(十进制度)
这些字段使得:
- 在地图视图上映射库��位置
- 进行服务资格的接近计算
- 网络规划的覆盖分析
- 现场技术人员调度的路线优化
设备管理和访问URL
management_url字段提供快速访问设备接口和配置URL:
-
management_url - 库存项的访问URL
- 网络设备:Web界面URL(例如,
https://192.168.1.1用于路由器、交换机、ONT、CPE) - eSIM配置:用于eSIM激活的LPA(本地配置助手)地址(例如,
LPA:1$smdp.example.com$ACTIVATION-CODE-HERE) - 其他用例:任何需要通过移动设备轻松访问的URL
二维码生成
当查看具有
management_url的库存项时,系统会自动生成一个可扫描的二维码:- 库存项详细视图:128x128二维码与URL并排显示
- 服务库存表:为分配的项目显示64x64二维码
- 格式:二维码和可点击的超链接一起显示
常见用例
- 网络技术人员:扫描二维码以访问设备管理界面,而无需输入IP地址
- eSIM激活:客户扫描CRM中的二维码以在其设备上安装eSIM配置
- 客户自助服务:提供设备配置或客户门户的轻松访问
- 网络设备:Web界面URL(例如,
-
management_username - 设备访问的管理员用户名
-
management_password - 设备访问的管理员密码(静态加密)
配置管理
对于具有配置文件的设备:
- config_content - 完整的配置文件内容(以文本形式存储)
- 适用于备份、版本控制和灾难恢复
- 可以存储路由器配置、交换机配置、CPE配置等。
- config_file_path - 如果单独存储,则外部配置文件的路径
- 作为在数据库中存储完整配置的替代方案
- 网络共享、版本控制库或配置管理系统的路径
备注和元数据
- inventory_notes - 关于库存项的自由格式备注
- 安装备注
- 维护历史
- 特殊处理要求或特性
- 供应商信息
- 保修细节
- created - 库存项在系统中创建的时间戳(自动设置)
- last_modified - 库存项的最后更新时间戳(自动更新)
字段使用示例
示例1:移动SIM卡
{
"inventory_id": 1001,
"item": "SIM Card",
"inventory_template_id": 5,
"itemtext1": "8961234567890123456",
"itemtext2": "310120123456789",
"itemtext3": "Physical",
"item_location": "Warehouse A, Shelf 3",
"item_state": "Assigned",
"customer_id": 456,
"service_id": 789,
"wholesale_cost": 2.50,
"retail_cost": 10.00,
"sold_date": "2025-01-15T10:30:00Z",
"inventory_notes": "Activated on 2025-01-15"
}
示例2:移动eSIM配置
{
"inventory_id": 1002,
"item": "eSIM",
"inventory_template_id": 6,
"itemtext1": "8961234567890123457",
"itemtext2": "310120123456790",
"itemtext3": "eSIM",
"item_location": "Virtual Inventory",
"item_state": "Assigned",
"customer_id": 457,
"service_id": 790,
"management_url": "LPA:1$smdp.example.com$ACTIVATION-CODE-ABC123XYZ",
"wholesale_cost": 0.00,
"retail_cost": 0.00,
"sold_date": "2025-01-16T14:20:00Z",
"inventory_notes": "eSIM profile ready for activation"
}
查看此eSIM库存项时,UI显示一个包含LPA地址的二维码。客户使用移动设备扫描此二维码以安装eSIM配置。
示例3:客户场所设备(CPE) - 固定无线
{
"inventory_id": 2001,
"item": "Fixed Wireless CPE",
"inventory_template_id": 10,
"itemtext1": "AA:BB:CC:DD:EE:FF",
"itemtext2": "FW2024-12345",
"itemtext3": "v2.4.1",
"itemtext4": "Ubiquiti",
"itemtext5": "LiteBeam AC Gen2",
"item_location": "Customer Site",
"item_state": "Assigned",
"customer_id": 789,
"service_id": 1234,
"address_line_1": "123 Main Street",
"address_line_2": "Apt 4B",
"city": "Sydney",
"state": "NSW",
"zip_code": "2000",
"country": "Australia",
"latitude": "-33.8688",
"longitude": "151.2093",
"management_url": "https://192.168.100.1",
"management_username": "admin",
"management_password": "encrypted_password_here",
"config_file_path": "/configs/cpe/fw2024-12345.conf",
"inventory_notes": "Installed 2025-01-10. Customer reports excellent signal. Pointing: Azimuth 45°, Elevation 15°"
}
示例4:GPON ONT带完整地址
{
"inventory_id": 3001,
"item": "GPON ONT",
"inventory_template_id": 15,
"itemtext1": "ALCL12345678",
"itemtext2": "AA:BB:CC:DD:EE:FF",
"itemtext3": "OLT-1, PON 3, ONT 42",
"itemtext4": "Nokia G-010G-A",
"item_location": "Customer Premises",
"item_state": "Assigned",
"customer_id": 321,
"service_id": 654,
"address_line_1": "456 Fiber Lane",
"city": "Melbourne",
"state": "VIC",
"zip_code": "3000",
"country": "Australia",
"google_maps_place_id": "ChIJ1234567890",
"plus_code": "4RRH+2C Melbourne VIC",
"latitude": "-37.8136",
"longitude": "144.9631",
"management_url": "https://192.168.1.1",
"management_username": "admin",
"config_content": "# ONT Configuration\nwlan-ssid: HomeNetwork\nwlan-password: encrypted...",
"wholesale_cost": 45.00,
"retail_cost": 0.00,
"inventory_notes": "Provisioned 2025-01-20. Optical power: -22dBm"
}
::: note ::: title 注意 :::
查看具有management_url的库存项(如示例2、3和4),UI会自动显示:
- 包含URL或LPA地址的可扫描二维码
- 可点击的超链接(用于Web URL)
用例:
- eSIM激活(示例2):客户扫描二维码以在其设备上安装eSIM配置
- 网络设备访问(示例3和4):技术人员扫描以访问设备管理界面,而无需手动输入IP地址 :::
示例5:电话号码(虚拟库存)
{
"inventory_id": 4001,
"item": "Phone Number",
"inventory_template_id": 20,
"itemtext1": "+61412345678",
"itemtext2": "Melbourne",
"itemtext3": "Mobile",
"item_location": "Australia - VIC",
"item_state": "Assigned",
"customer_id": 555,
"service_id": 888,
"wholesale_cost": 1.00,
"retail_cost": 0.00,
"inventory_notes": "Ported from Telstra on 2025-01-05"
}
库存项状态解释
item_state字段跟踪库存项的生命周期:
- 新 → 已分配 - 配置给客户时的正常流程
- 已分配 → 已使用 - 服务停用后,物品可以重新使用
- 新 → 内部使用 - 分配用于测试、演示或员工使用
- 已分配 → 损坏 - 物品故障,需要RMA或处置
- 任何状态 → 丢失 - 找不到物品(触发审计)
- 任何状态 → 被盗 - 物品被盗(触发安全报告)
- 损坏/已使用 → 新 - 经过翻新或修理后
按状态过滤和搜索库存允许运营商:
- 跟踪可用库存(新物品)
- 识别分配给客户的物品(已分配)
- 查找可供重复使用的物品(已使用)
- 监控设备问题(损坏、停用)
- 审计缺失物品(丢失、被盗)