号码转换
📖 返回主文档
号码转换将电话号码在不同格式之间进行转换,以确保系统中一致的 E.164 格式。
相关文档
核心文档
呼叫处理流程
- 🔀 拨号计划配置 - 在拨号计划中使用转换后的号码(转换首先发生)
- 👥 Sh 接口 - Sh 查找使用转换后的号码
- 💳 在线计费 - OCS 接收转换后的号码
- 📡 SS7 MAP - HLR 查询使用转换后的号码
相关服务
监控
- 📊 指标参考 - 号码转换指标
号码转换
号码转换将电话号码在不同格式(本地、国家、国际)之间进行转换,以确保系统中一致的 E.164 格式。
什么是号码转换?
号码转换在呼叫处理之前将电话号码标准化为 E.164 格式(国际标准)。这确保了:
- 系统中一致的编号
- 正确路由到网内和网外目的地
- 与国际 SIP 中继和 IMS 网络的兼容性
E.164 格式: [国家代码][国家号码](无 + 前缀,无空格)
- 示例:
61403123456(澳大利亚手机) - 示例:
16505551234(美国号码)
转换发生的时间
转换发生在:
- 之前 Sh 查找
- 之前 HLR 查找
- 之前 OCS 授权
- 之前 生成拨号计划 XML
对于 MT 呼叫: 转换目的地号码(被叫方) 对于 MO 呼叫: 转换源和目的地号码
配置
config :tas,
number_translate: %{
country_code: :PF, # ISO 3166-1 alpha-2 国家代码
localAreaCode: "617" # 短号码的默认区号
}
参数:
country_code: 作为原子(例如,:AU、:US、:PF)的 ISO 国家代码localAreaCode: 添加到短本地号码的区号
支持的国家代码
TAS 包含这些国家的转换逻辑:
| 国家代码 | 国家 | 支持的格式 | E.164 前缀 |
|---|---|---|---|
:AU | 澳大利亚 | 0NSN(10 位数字)、SN(8 位数字)、E.164 | 61 |
:US | 美国 | NPANXXXXXX(10 位数字)、1+NPANXXXXXX、E.164 | 1 |
:PF | 法属波利尼西亚 | 本地(6 位数字)、国家(8 位数字)、E.164 | 689 |
添加新国家代码:
必须在 lib/numbertranslation.ex 中实现特定于国家的转换逻辑。请联系您的集成工程师以添加新国家。
特殊转换行为
1. CLI 阻止前缀剥离
在格式转换之前,移除 CLI 阻止前缀:
输入: *67555123456
步骤 1:剥离 *67 → 555123456
步�� 2:转换 → 1555123456(如果是美国)
2. SIP 参数剥离
分号后的参数被移除:
输入: 61403123456;npdi;rn=+61400000000
步骤 1:剥离 ;npdi;rn=... → 61403123456
步骤 2:转换 → 61403123456
3. 非数字字符移除
所有非数字字符(除了 +)被剥离:
输入: +61 (403) 123-456
步骤 1:剥离格式 → +61403123456
步骤 2:转换 → 61403123456
转换后设置的变量
| 变量 | 值 | 描述 |
|---|---|---|
destination_number | E.164 格式 | 标准化的目的地号码 |
tas_destination_number | E.164 格式 | 与 destination_number 相同(两个都设置以兼容) |
effective_caller_id_number | E.164 格式 | 标准化的源号码(MO 呼叫) |
当转换失败时发生什么
场景:未定义的国家代码
config :tas, number_translate: %{country_code: :XX} # 无效
结果: {:error, "未定义的国家代码"} - 呼叫被拒绝
场景:无效的号码格式
输入: "abc123"(包含字母)
步骤 1:剥离非数字 → "123"
步骤 2:太短,无法匹配任何模式
结果:可能原样通过或根据拨号计划逻辑拒绝
最佳实践: 始终使用正确的 E.164 号码验证用户的配置。
测试��码转换
Web UI 转换测试器 (/translate):
- 在控制面板中导航到
/translate - 从下拉菜单中选择国家代码
- 输入任何格式的测试号码
- 查看转换后的 E.164 输出
- 测试多种格式以验证
常见测试场景:
- 本地短码 → E.164
- 国家格式(0NSN) → E.164
- 国际格式(+CC) → E.164
- 带有 CLI 前缀的号码 → 剥离并转换
- 带有格式(空格、破折号)的号码 → 清洁的 E.164
故障排除号码转换
问题:呼叫失败,显示 "UNALLOCATED_NUMBER"
-
检查转换后的号码格式:
- 使用
/translate工具测试号码 - 验证输出是否与预期的 E.164 格式匹配
- 确认国家代码和区号是否正确
- 使用
-
检查 Sh 查找:
- 转换后的号码用于 Sh 查询
- 使用
/sh_test测试转换后的号码 - 验证该 MSISDN 是否存在
-
检查拨号计划变量:
- 检查日志中的
destination_number值 - 确认转换发生在拨号计划之前
- 检查日志中的
问题:应用了错误的区号
# 配置
config :tas, number_translate: %{
country_code: :AU,
localAreaCode: "617" # 对于您的地区错误
}
# 输入:12345678(8 位本地)
# 输出:6161712345678(不正确 - 双区号)
# 修复:为您的部署���置正确的 localAreaCode
问题:国际号码未被识别
检查号码是否包含国家代码:
- ✅
+61403123456或61403123456→ 被识别 - ❌
0403123456在错误的 country_code 配置中 → 错误路由
MO 与 MT 转换行为
MT(移动终止)呼叫:
- 仅转换目的地号码(被叫方)
- 源号码(主叫方)从 SIP 原样传递
- 目的地用于被叫用户的 Sh 查找
MO(移动发起)呼叫:
- 转换目的地号码(被叫方)
- 源号码(主叫方)也被转换
- 源用于主叫用户的 Sh 查找
- 两个号码都被标准化以便于一致的日志记录/CDR
最佳实践
-
使用正确的国家代码:
- 将
country_code设置为匹配您的部署区域 - 在生产之前进行彻底测试
- 将
-
配置适当的本地区号:
localAreaCode应与您网络的默认区域匹配- 用于没有区号的短号码
-
测试所有号码格式:
- 本地(短码)
- 国家(0NSN 格式)
- 国际(+CC 格式)
- 特殊服务号码(紧急、语音信箱)
-
监控转换日志:
- 检查 "未定义的国家代码" 错误
- 注意意外的号码格式
- 验证 E.164 输出是否符合预期
-
记录您的编号计划:
- 定义订阅者将使用的���式
- 在
/translate工具中测试每种格式 - 培训操作人员了解预期格式