跳到主要内容

号码转换

📖 返回主文档

号码转换将电话号码在不同格式之间进行转换,以确保系统中一致的 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.16461
:US美国NPANXXXXXX(10 位数字)、1+NPANXXXXXX、E.1641
:PF法属波利尼西亚本地(6 位数字)、国家(8 位数字)、E.164689

添加新国家代码: 必须在 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_numberE.164 格式标准化的目的地号码
tas_destination_numberE.164 格式destination_number 相同(两个都设置以兼容)
effective_caller_id_numberE.164 格式标准化的源号码(MO 呼叫)

当转换失败时发生什么

场景:未定义的国家代码

config :tas, number_translate: %{country_code: :XX}  # 无效

结果: {:error, "未定义的国家代码"} - 呼叫被拒绝

场景:无效的号码格式

输入: "abc123"(包含字母)
步骤 1:剥离非数字 → "123"
步骤 2:太短,无法匹配任何模式
结果:可能原样通过或根据拨号计划逻辑拒绝

最佳实践: 始终使用正确的 E.164 号码验证用户的配置。

测试��码转换

Web UI 转换测试器 (/translate):

  1. 在控制面板中导航到 /translate
  2. 从下拉菜单中选择国家代码
  3. 输入任何格式的测试号码
  4. 查看转换后的 E.164 输出
  5. 测试多种格式以验证

常见测试场景:

  • 本地短码 → E.164
  • 国家格式(0NSN) → E.164
  • 国际格式(+CC) → E.164
  • 带有 CLI 前缀的号码 → 剥离并转换
  • 带有格式(空格、破折号)的号码 → 清洁的 E.164

故障排除号码转换

问题:呼叫失败,显示 "UNALLOCATED_NUMBER"

  1. 检查转换后的号码格式:

    • 使用 /translate 工具测试号码
    • 验证输出是否与预期的 E.164 格式匹配
    • 确认国家代码和区号是否正确
  2. 检查 Sh 查找:

    • 转换后的号码用于 Sh 查询
    • 使用 /sh_test 测试转换后的号码
    • 验证该 MSISDN 是否存在
  3. 检查拨号计划变量:

    • 检查日志中的 destination_number
    • 确认转换发生在拨号计划之前

问题:应用了错误的区号

# 配置
config :tas, number_translate: %{
country_code: :AU,
localAreaCode: "617" # 对于您的地区错误
}

# 输入:12345678(8 位本地)
# 输出:6161712345678(不正确 - 双区号)
# 修复:为您的部署���置正确的 localAreaCode

问题:国际号码未被识别

检查号码是否包含国家代码:

  • +6140312345661403123456 → 被识别
  • 0403123456 在错误的 country_code 配置中 → 错误路由

MO 与 MT 转换行为

MT(移动终止)呼叫:

  • 仅转换目的地号码(被叫方)
  • 源号码(主叫方)从 SIP 原样传递
  • 目的地用于被叫用户的 Sh 查找

MO(移动发起)呼叫:

  • 转换目的地号码(被叫方)
  • 源号码(主叫方)也被转换
  • 源用于主叫用户的 Sh 查找
  • 两个号码都被标准化以便于一致的日志记录/CDR

最佳实践

  1. 使用正确的国家代码:

    • country_code 设置为匹配您的部署区域
    • 在生产之前进行彻底测试
  2. 配置适当的本地区号:

    • localAreaCode 应与您网络的默认区域匹配
    • 用于没有区号的短号码
  3. 测试所有号码格式:

    • 本地(短码)
    • 国家(0NSN 格式)
    • 国际(+CC 格式)
    • 特殊服务号码(紧急、语音信箱)
  4. 监控转换日志:

    • 检查 "未定义的国家代码" 错误
    • 注意意外的号码格式
    • 验证 E.164 输出是否符合预期
  5. 记录您的编号计划:

    • 定义订阅者将使用的���式
    • /translate 工具中测试每种格式
    • 培训操作人员了解预期格式