fix phase2 gateway matching and release artifact

This commit is contained in:
hectorzhao
2026-06-28 22:16:49 +08:00
parent a86de6545f
commit 175166a5dc
17 changed files with 2670 additions and 35 deletions
+15 -8
View File
@@ -1431,7 +1431,7 @@ sudo nohup runuser -u nobody -- /usr/bin/python3 /opt/lisglosips-s28/lisglosips-
新增“业务前缀管理”菜单:
- 业务前缀是客户呼入时附加在被叫号码前面的业务识别前缀,用于区分客户业务、费率和落地线路组
- 业务前缀是客户呼入时附加在被叫号码前面的业务识别前缀,只作为客户网关匹配字典使用,不参与计费产品、报表维度或权限隔离
- 示例:客户真实想呼叫 `18822190000`,平台收到的 SIP Request-URI/User 或 To 中被叫为 `67118822190000`,其中 `671` 为业务前缀,真实被叫号码为 `18822190000`
- 业务前缀需要平台统一维护,客户网关只能从“业务前缀管理”中多选可用前缀,不能在客户网关中随意输入未登记的业务前缀。
- 业务前缀字段建议至少包括:`id``prefix``name``description``status``priority``created_at``updated_at``deleted_at``prefix` 允许英文和阿拉伯数字,必须唯一;匹配时按最长前缀优先,再按 `priority`
@@ -1439,8 +1439,10 @@ sudo nohup runuser -u nobody -- /usr/bin/python3 /opt/lisglosips-s28/lisglosips-
呼叫识别与号码语义:
- 平台收到 SIP 呼叫后,先用来源 IP 命中候选客户网关 IP 列表,再用客户网关的主叫前缀规则和被叫业务前缀规则确定唯一客户网关。
- 客户网关匹配顺序固定为:业务前缀优先于主叫前缀,精确业务前缀规则优先于空业务前缀兜底。空业务前缀表示客户送入裸被叫号码。
- 被叫业务前缀匹配成功后,热路径必须剥离业务前缀,后续当前通话、CDR、计费、号码库归属地/运营商识别、地区屏蔽和落地侧转发都以“剥离后的真实被叫号码”为准。
- 当前通话和话单中写入的被叫号码必须是客户真实想呼叫的号码,即“客户送入被叫 - 被叫业务前缀”。如需排障,可额外保存原始被叫号码和命中的业务前缀。
- 计费归属口径:客户网关决定客户侧计费,落地网关决定供应商侧成本;业务前缀本身不生成独立计费维度。
- 建议新增 CDR 字段:`raw_callee``business_prefix_id``business_prefix``normalized_callee`。其中 `callee` 继续表示业务剥离后的真实被叫,避免影响现有话单展示语义。
客户网关配置管理调整:
@@ -1456,7 +1458,9 @@ sudo nohup runuser -u nobody -- /usr/bin/python3 /opt/lisglosips-s28/lisglosips-
- `ANY`:任意主叫。
- `PREFIXES`:可配置多个自定义主叫前缀。
- 主叫前缀只是匹配条件,不改写主叫。
- 若同一 IP 下多个客户网关的主叫/被叫规则都可命中同一呼叫,应在保存配置时阻止冲突,或者明确热路径选择规则。建议优先在 API 保存时做冲突检测,避免呼叫时不确定
- 客户网关必须归属一个客户;同一来源 IP 允许被不同客户复用,但最终匹配必须唯一
- 同一来源 IP + 同一业务前缀组合只能归属一个客户网关;同一来源 IP 下主叫前缀不能互相覆盖。
- 同一客户需要不同业务前缀或不同路由策略时,通过配置多个客户网关分别绑定不同业务前缀/IP/线路组实现。
落地网关配置调整:
@@ -1481,12 +1485,15 @@ Redis 热路径与 OpenSIPS/Lua 影响:
- `cfg:v:{version}:vendor_gateway:{id}:caller_rewrite_pool` 中包含指定主叫与权重。
- OpenSIPS/Lua 需要调整顺序:
1. 读取来源 IP 候选客户网关列表。
2.每个候选客户网关检查启用状态客户状态、主叫前缀规则、被叫业务前缀规则
3. 选出唯一客户网关,得到客户、客户侧费率、落地线路组、命中的业务前缀和剥离后的真实被叫
4. 用真实被叫做号码库归属地/运营商识别和地区屏蔽路由
5. 选择落地网关后,按落地网关配置追加落地要求被叫前缀,并按权重选择落地要求指定主叫
6. 转发给落地前,写入 Dialog 变量:原始被叫、真实被叫、业务前缀、客户网关、线路组、落地网关、落地侧最终主叫/被叫。
7. 当前通话与 CDR 使用真实被叫作为主展示字段;必要时详情显示原始被叫和落地侧最终被叫
2. 对候选客户网关检查启用状态客户状态。
3. 第一优先级匹配被叫业务前缀,命中后按最长前缀选择并剥离真实被叫;若命中业务前缀但主叫规则不通过,不允许退回主叫前缀或空业务前缀兜底
4. 第二优先级匹配空业务前缀下的主叫前缀规则,按最长主叫前缀选择
5. 第三优先级匹配空业务前缀兜底网关,用于裸被叫号码
6. 选出唯一客户网关,得到客户、客户侧费率、落地线路组、命中的业务前缀和剥离后的真实被叫。
7. 用真实被叫做号码库归属地/运营商识别和地区屏蔽路由
8. 选择落地网关后,按落地网关配置追加落地要求被叫前缀,并按权重选择落地要求指定主叫。
9. 转发给落地前,写入 Dialog 变量:原始被叫、真实被叫、业务前缀、客户网关、线路组、落地网关、落地侧最终主叫/被叫。
10. 当前通话与 CDR 使用真实被叫作为主展示字段;必要时详情显示原始被叫和落地侧最终被叫。
- 失败原因建议新增:
- `CUSTOMER_GATEWAY_IP_MISSING`
- `CUSTOMER_GATEWAY_RULE_CONFLICT`