号码翻译
📖 返回主文档
号码翻译将电话号码在不同格式之间转换,以确保系统中一致的 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: 作为原子(atom)的 ISO 国家代码(例如,:AU,:US,:PF)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 |
添加新国家代码: 请联系您的集成工程师以添加对新国家的支持。
特殊翻译行为
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工具中测试每种格式 - 培训操作���员了解预期格式