跳到主要内容

数字转换

📖 返回主文档

数字转换将电话号码在不同格式之间进行转换,以确保系统中一致的 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 包含 248 个国家和地区 的转换逻辑,涵盖所有具有电话服务的 ISO 3166-1 alpha-2 代码。

代码国家/地区E.164 前缀国家长度中继IDD备注
:AC阿森松岛247500
:AD安道尔3766-900
:AE阿联酋9719000
:AF阿富汗939000
:AG安提瓜和巴布达110011NANP,委托给美国
:AI安圭拉110011NANP,委托给美国
:AL阿尔巴尼亚3559000
:AM亚美尼亚3748000
:AO安哥拉244900
:AR阿根廷5410000
:AS美属萨摩亚110011NANP,委托给美国
:AT奥地利4310-13000
:AU澳大利亚61900011
:AW阿鲁巴297700
:AX奥兰群岛3589-10000委托给芬兰
:AZ阿塞拜疆9949000
:BA波斯尼亚和黑塞哥维那3878000
:BB巴巴多斯110011NANP,委托给美国
:BD孟加拉国88010000
:BE比利时328-9000
:BF布基纳法索226800
:BG保加利亚3599000
:BH巴林973800
:BI布隆迪257800
:BJ贝宁229800
:BL圣巴泰勒米5909000
:BM百慕大110011NANP,委托给美国
:BN文莱673700
:BO玻利维亚591800
:BQ博内尔/圣尤斯特歇斯/萨巴599700
:BR巴西5510-11000
:BS巴哈马110011NANP,委托给美国
:BT不丹975800
:BV布维岛47800委托给挪威
:BW博茨瓦纳267800
:BY白俄罗斯37598810
:BZ伯利兹501700
:CA加拿大110011NANP,委托给美国
:CC科科斯群岛61900011委托给澳大利亚
:CD刚果民主共和国2439000
:CF中非共和国236800
:CG刚果共和国242900
:CH瑞士419000
:CI象牙海岸2251000
:CK库克群岛682500
:CL智利569000
:CM喀麦隆237900
:CN中国861100
:CO哥伦比亚5710000
:CR哥斯达黎加506800
:CU古巴5380119
:CV佛得角238700
:CW库拉索5997-800
:CX圣诞岛61900011委托给澳大利亚
:CY塞浦路斯357800
:CZ捷克共和国420900
:DE德国4910-12000
:DJ吉布提253800
:DK丹麦45800
:DM多米尼加110���011NANP,委托给美国
:DO多米尼加共和国110011NANP,委托给美国
:DZ阿尔及利亚2139000
:EC厄瓜多尔5939000
:EE爱沙尼亚3727-800
:EG埃及2010000
:EH西撒哈拉2129000委托给摩洛哥
:ER厄立特里亚2917000
:ES西班牙34900
:ET埃塞俄比亚2519000
:FI芬兰3589-10000
:FJ斐济679700
:FK福克兰群岛500500
:FM密克罗尼西亚6917011
:FO法罗群岛298600
:FR法国339000
:GA加蓬241700
:GB英国4410000
:GD格林纳达110011NANP,委托给美国
:GE格鲁吉亚9959000
:GF法属圭亚那5949000
:GG根西岛4410000委托给英国
:GH加纳2339000
:GI直布罗陀350800
:GL格林兰299600
:GM冈比亚220700
:GN几内亚224900
:GP瓜德罗普5909000
:GQ赤道几内亚240900
:GR希腊301000
:GS南乔治亚500500委托给福克兰
:GT危地马拉502800
:GU关岛110011NANP,委托给美国
:GW几内亚比绍245700
:GY圭亚那5927001
:HK香港8528001
:HM赫德岛和麦克唐纳群岛61900011委托给澳大利亚
:HN洪都拉斯504800
:HR克罗地亚3859000
:HT海地509800
:HU匈牙利3690600
:ID印度尼西亚6210-120001
:IE爱尔兰3539000
:IL以色列9729000
:IM马恩岛4410000委托给英国
:IN印度9110000
:IO英属印度洋领地246700
:IQ伊拉克96410000
:IR伊朗9810000
:IS冰岛354700
:IT意大利399-1000固定电话保留前导 0
:JE泽西岛4410000委托给英国
:JM牙买加110011NANP,委托给美国
:JO约旦9629000
:JP日本81100010
:KE肯尼亚25490000
:KG吉尔吉斯斯坦9969000
:KH柬埔寨8558-90001
:KI基里巴斯686500
:KM科摩罗269700
:KN圣基茨和尼维斯110011NANP,委托给美国
:KP朝鲜85010000
:KR韩国829-100001
:KW科威特965800
:KY开曼群岛110011NANP,委托给美国
:KZ哈萨克斯坦7108810
:LA老挝85610000
:LB黎巴嫩9618000
:LC圣卢西亚110011NANP,委托给美国
:LI列支敦士登423700
:LK斯里兰卡949000
:LR利比里亚2317-900
:LS莱索托266800
:LT立陶宛3708800
:LU卢森堡352900
:LV拉脱维亚371800
:LY利比亚2189000
:MA摩洛���2129000
:MC摩纳哥3778-900
:MD摩尔多瓦3738000
:ME黑山3828000
:MF圣马丁5909000
:MG马达加斯加2619000
:MH马绍尔群岛6927011
:MK北马其顿3898000
:ML马里223800
:MM缅甸958-10000
:MN蒙古9768001
:MO澳门853800
:MP北马里亚纳群岛110011NANP,委托给美国
:MQ马提尼克5969000
:MR毛里塔尼亚222800
:MS蒙特塞拉特110011NANP,委托给美国
:MT马耳他356800
:MU毛里求斯230800
:MV马尔代夫960700
:MW马拉维2659000
:MX墨西哥521000
:MY马来西亚609-10000
:MZ莫桑比克258900
:NA纳米比亚2649000
:NC新喀里多尼亚687600
:NE尼日尔227800
:NF诺福克岛6725-600
:NG尼日利亚234100009
:NI尼加拉瓜505800
:NL荷兰319000
:NO挪威47800
:NP尼泊尔97710000
:NR瑙鲁674700
:NU纽埃683400
:NZ新西兰648-9000
:OM阿曼968800
:PA巴拿马507800
:PE秘鲁519000
:PF法属波利尼西亚689800
:PG巴布亚新几内亚675805
:PH菲律宾6310000
:PK巴基斯坦9210000
:PL波兰48900
:PM圣皮埃尔和密克隆508600
:PN皮特凯恩群岛648-9000委托给新西兰
:PR波多黎各110011NANP,委托给美国
:PS巴勒斯坦9709000
:PT葡萄牙351900
:PW帕劳6807011
:PY巴拉圭5959000
:QA卡塔尔974800
:RE留尼汪2629000
:RO罗马尼亚409000
:RS塞尔维亚3819000
:RU俄罗斯7108810
:RW卢旺达2509000
:SA沙特阿拉伯9669000
:SB所罗门群岛6775-700
:SC塞舌尔248700
:SD苏丹2499000
:SE瑞典469000
:SG新加坡658001
:SH圣赫勒拿2904-500
:SI斯洛文尼亚3868000
:SJ斯瓦尔巴特47800委托给挪威
:SK斯洛伐克4219000
:SL塞拉利昂2328000
:SM圣马力诺3781000
:SN塞内加尔221900
:SO索马里252800
:SR苏里南597700
:SS南苏丹2119000
:ST圣多美和普林西比239700
:SV萨尔瓦多503800
:SX荷属圣马丁1721700
:SY叙利亚9639000
:SZ斯威士兰268800
:TC特克斯和凯科斯群岛110011NANP,委托给美国
:TD乍得235800
:TG多哥228800
:TH泰国6690001
:TJ塔吉克斯坦9929810
:TK托克劳690400
:TL东帝汶6707-800
:TM土库曼斯坦99388810
:TN突尼斯216800
:TO汤加6765-700
:TR土耳其9010000
:TT特立尼达和多巴哥110011NANP,委托给美国
:TV图瓦卢688500
:TW台湾88690002
:TZ坦桑尼亚2559000
:UA乌克兰3809000
:UG乌干达2569000
:US美国110011NANP 基本规则
:UY乌拉圭5988000
:UZ乌兹别克斯坦9989810
:VA梵蒂冈399-1000委托给意大利
:VC圣文森特和格林纳丁斯110011NANP,委托给美国
:VE委内瑞拉5810000
:VG英属维尔京群岛110011NANP,委托给美国
:VI美属维尔京群岛110011NANP,委托给美国
:VN越南849-10000
:VU瓦努阿图6785-700
:WF瓦利斯和富图纳681600
:WS萨摩亚6855-70
:XK科索沃3838000
:YE也门9679000
:YT马约特2629000委托给留尼汪
:ZA南非279000
:ZM赞比亚2609000
:ZW津巴布韦2639000

特殊转换行为

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 工具中测试每种格式
    • 培训操作人员了解预期格式