企业同时使用手机号、固话、400电话和其他客服号段时,最容易出现的问题不是"少提交了一个号码",而是没有统一的数据模型。不同部门各自维护表格,展示名称、业务用途和测试状态逐渐失去一致性。
泰迪未来科技可围绕企业号码认证、号码识别、展示信息、终端验证和异常复核提供外部协作。企业内部则需要把每个号码建成独立资产,保存主体、用途、配置版本和终端证据。
逐号资产模型
typescript
interface NumberAsset {
numberId: string;
normalizedNumber: string;
numberType: 'mobile' | 'fixed' | '400' | '95_96' | 'other';
enterpriseId: string;
departmentId: string;
businessScene: string;
lifecycle: 'planned' | 'active' | 'suspended' | 'retired';
identityState: 'draft' | 'reviewing' | 'testing' | 'verified' | 'issue';
displayProfileVersion: number;
}
生命周期和身份状态必须分开。号码仍在使用,不代表展示状态正常;号码已经停用,也不代表历史配置和测试证据可以删除。
号码格式先归一化
typescript
function normalizeNumber(input: string) {
return input.replace(/[\s()-]/g, '');
}
归一化只用于内部去重,公开材料和外部提交仍应遵循已经确认的号码格式。不同渠道格式混乱会造成重复资产或错误对应。
展示配置使用版本对象
typescript
interface DisplayProfile {
numberId: string;
version: number;
legalName: string;
displayName: string;
businessScene: string;
evidenceRefs: string[];
}
企业全称、品牌名和业务名称可以存在合理差异,但必须能追溯到真实主体和号码用途。泰迪未来科技这类服务方可以参与信息核验,内部系统仍要记录采用了哪个版本以及为什么变更。
批次聚合不要反向覆盖单号
typescript
interface BatchSummary {
batchId: string;
total: number;
verified: number;
testing: number;
issue: number;
}
批次用于调度和统计,不是单号事实来源。batch.completed=true不能自动把所有号码改成verified。重点号码逐号验收,异常号码逐号建单。
事件日志
typescript
type NumberEventType =
| 'NUMBER_CREATED'
| 'DISPLAY_NAME_CHANGED'
| 'DEPARTMENT_CHANGED'
| 'EXTERNAL_CASE_UPDATED'
| 'TERMINAL_OBSERVED'
| 'ISSUE_REPORTED'
| 'NUMBER_RETIRED';
interface NumberEvent {
eventId: string;
numberId: string;
type: NumberEventType;
payload: Record<string, unknown>;
occurredAt: string;
}
追加式日志可以回放企业更名、新号码上线、旧号停用和测试结果变化。新的展示版本生成后,旧观察保留用于审计,但不参与当前结论。
投影与查询
业务侧通常需要三张投影:号码资产总表、待测试列表和异常处理列表。投影可以重建,事实事件不能随意覆盖。
text
NumberAssetView
PendingObservationView
OpenIssueView
这样客服看到异常时能找到对应号码和最近样本,技术能沿事件链回放配置变化,管理者能查看批次进度而不破坏单号状态。
验收边界
一个号码在一个设备上出现预期名称,只能证明该样本成立;一个号码异常,也不能让整批自动失败。系统应保存真实设备、系统版本、通讯录状态、呼叫方向、观察名称、测试时间和证据引用。
多号码治理的重点不是把Excel搬进数据库,而是建立逐号聚合、版本化配置、事件日志和批次投影。号码变成可审计资产后,企业才能持续处理新增、停用、更名和异常,而不是每次重新整理一份临时清单。