背景:
在号码保护直拨中间号使用测试过程中,经常会遇到绑定中间号失败的情况,其中有很多是因为客户对几种绑定模式特点不清楚引起的。例如下面几个问题:
案例1:
北京某公司接入pstn号码保护AXB XB模式,测试阶段遇到问题:客户先进行了AXB绑定,然后再XB绑定失败,解绑AXB后依然XB绑定失败。
排查结果:X号码已经被其他测试人员号码进行XB绑定,X号码只能有一个XB模式绑定。AXB绑定不会影响XB绑定。
案例2:
某公司广告部门测试pstn号码保护AXB XB模式过程中遇到问题:AXB绑定失败。
排查结果:因用户的主叫号码与小号有个XB绑定,后再使用测试AXB绑定失败。XB绑定会影响小号的AXB绑定。
为了弄清楚中间号绑定方案的特点,这里对一些场景进行分析总结。
方案介绍
中间号申请模式有AXB 和XB以及AXB XB三种常规可选的方案。
AXB绑定:
是将A号码和B号码和中间号X号码组合绑定起来,X号码可以支持多组号码同时绑定,但是一个号码与X号码只能绑定一次,再次绑定会失败。
XB绑定:
将X号码作为B号码的替身,拨打X号码就相当于拨打B号码,这里一个X号码只能绑定一个B号码,但是一个B号码可以绑定多个X号码。把绑定了B号码的X号码再去绑定其他号码,会失败。
AXB XB模式:
这里X号码既可以支持AXB绑定,也可以支持XB绑定,这是最复杂的情况,我准备了一组实验来挖掘组合模式的特点。
实验开始
环境准备
appid:(保密)需要支持AXB XB模式
中间号:
代码语言:javascript复制X:170xxxx4669
Y:170xxxx4558
普通用户手机号:
代码语言:javascript复制A:0086136xxxxx713
B:0086131xxxxx281
C:0086189xxxxx565
D:0086178xxxxx378
E:0086185xxxxx780
F:0086136xxxxx711
G:0086173xxxxx820
操作过程
步骤1.将号码AXB进行绑定,调用绑定接口
代码语言:javascript复制{
"appId": "{{appId}}",
"requestId": "test0000001",
"src": "0086136xxxxx713",
"dst": "0086131xxxxx281",
"maxAssignTime": "3000",
"record":"1",
"assignVirtualNum": "0086170xxxx4669"
}
返回成功,(这里有效时间设置要稍微长点,避免实验中被自动解绑)
代码语言:javascript复制{"bindId":"5312e81a-b2e4-4086-b452-e337500df58b","errorCode":"0","refNum":"1","requestId":"test0000001","virtualNum":"170xxxx4669"}
步骤2.将C号码进行XC绑定
代码语言:javascript复制{
"appId": "{{appId}}",
"requestId": "test0000002",
"dst": "0086189xxxxx565",
"maxAssignTime": "3000",
"record":"1",
"assignVirtualNum": "0086170xxxx4669"
}
返回成功,(requestid采取递增避免结果与参数对应不上)
代码语言:javascript复制{"bindId":"001e42cf-27a5-4762-a371-e48fe1aced48","errorCode":"0","refNum":"1","requestId":"test0000002","virtualNum":"170xxxx4669"}
步骤3.用A对号码X进行拨打,B号码接听,AXB绑定生效。
步骤4.用D号码对X进行拨打,C号码接听,XC绑定生效。
思考:当AXB与XC都绑定的时候,理论上A拨打X有2种可能,一是AXB绑定生效,拨打到B,另一种是XC绑定生效,拨打到C,这里明显AXB绑定生效了。同时D的拨打证明XC也是可用的。
结论1:可以看出AXB与XC同时匹配,AXB具有高优先级。
步骤5.用C号码拨打X,提示无效。
结论2:XB模式是不支持自己拨打自己的。
步骤6.将号码DXE进行绑定
代码语言:javascript复制{
"appId": "{{appId}}",
"requestId": "test0000003",
"src": "0086178xxxxx378",
"dst": "0086185xxxxx780",
"maxAssignTime": "3000",
"record":"1",
"assignVirtualNum": "0086170xxxx4669"
}
结论3:绑定成功:说明一个X号码可以支持多组号码绑定复用。
代码语言:javascript复制{"bindId":"774400e7-927b-4022-9ade-cb7c09fbd13b","errorCode":"0","refNum":"1","requestId":"test0000003","virtualNum":"170xxxx4669"}
步骤7.将号码XF进行绑定
代码语言:javascript复制{
"appId": "{{appId}}",
"requestId": "test0000004",
"dst": "0086136xxxxx711",
"maxAssignTime": "3000",
"record":"1",
"assignVirtualNum": "0086170xxxx4669"
}
结论4:绑定失败:此时XC还未解绑,X是不能再进行XB模式绑定其他号码
代码语言:javascript复制{"errorCode":"-106","msg":"caller or callee has been binded","requestId":"test0000004"}
步骤8.将号码GXD进行绑定,这里D和E进行过绑定了
代码语言:javascript复制{
"appId": "{{appId}}",
"requestId": "test0000005",
"src": "0086173xxxxx820",
"dst": "0086178xxxxx378",
"maxAssignTime": "3000",
"record":"1",
"assignVirtualNum": "0086170xxxx4669"
}
绑定失败
代码语言:javascript复制{"errorCode":"-106","msg":"caller or callee has been binded","requestId":"test0000005"}
思考:因为EXF已经绑定过了,HXE绑定会失败,假设绑定成功,E发起呼叫X,会有2中可能:1.呼叫到F,2.呼叫到H,存在不确定性,所以当前AXB模式不支持是可以理解的
结论5:AXB模式中,一个号码与同一个中间号只能有一组绑定关系。
步骤9.使用第二个中间号Y号码进行YC绑定
代码语言:javascript复制{
"appId": "{{appId}}",
"requestId": "test0000006",
"dst": "0086189xxxxx565",
"maxAssignTime": "3000",
"record":"1",
"assignVirtualNum": "0086170xxxx4558"
}
结论6:绑定成功:说明一个普通号码可以与多个X进行‘XB模式’绑定
代码语言:javascript复制{"bindId":"469cd211-9875-4d2a-8577-5d7e6646dc61","errorCode":"0","refNum":"1","requestId":"test0000006","virtualNum":"170xxxx4558"}
步骤10.进行AYB绑定
代码语言:javascript复制{
"appId": "{{appId}}",
"requestId": "test0000007",
"src": "0086136xxxxx713",
"dst": "0086131xxxxx281",
"maxAssignTime": "3000",
"record":"1",
"assignVirtualNum": "0086170xxxx4558"
}
结论7:绑定成功:说明一组号码可以与多个X进行‘AXB模式’绑定
代码语言:javascript复制{"bindId":"97eb1725-053e-4fe4-b303-c8cac9ebdef4","errorCode":"0","refNum":"1","requestId":"test0000007","virtualNum":"170xxxx4558"}
步骤11.进行AYC绑定
代码语言:javascript复制{
"appId": "{{appId}}",
"requestId": "test0000008",
"src": "0086136xxxxx713",
"dst": "0086189xxxxx565",
"maxAssignTime": "3000",
"record":"1",
"assignVirtualNum": "0086170xxxx4558"
}
绑定失败
代码语言:javascript复制{"errorCode":"-106","msg":"caller or callee has been binded","requestId":"test0000008"}
思考:C与Y号码进行过‘XB绑定’,不能再AYC进行‘AXB模式’绑定
结论8:XB绑定不能再进行AXB绑定(同一个X号码,同一个B号码)
步骤12.YC解绑(这里解绑目的是让Y号码没有‘XB模式’绑定),再进行YB绑定
代码语言:javascript复制{
"appId": "{{appId}}",
"requestId": "test0000009",
"dst": "0086131xxxxx281",
"maxAssignTime": "3000",
"record":"1",
"assignVirtualNum": "0086170xxxx4558"
}
结论9:绑定成功,和步骤11一起看,说明的AXB不影响XB再绑定(同一个X号码,同一个B号码)
代码语言:javascript复制{"bindId":"1142f978-f341-4947-b343-ab6a2d42fcbf","errorCode":"0","refNum":"1","requestId":"test0000009","virtualNum":"170xxxx4558"}
步骤13.用C号码拨打Y 打到B号码 XB绑定生效
步骤14.用A号码拨打Y 打到B号码 AXB绑定生效
结论10:再次证明‘AXB模式’优先与‘XB模式’
步骤15.用B号码拨打Y 打到A号码 AXB绑定生效
思考:参考结论2,如果是XB生效B号码是打不了Y号码的。
结论11:再次证明‘AXB模式’优先与‘XB模式’
总结中间号绑定特点:
特点1:AXB模式与XB模式同时匹配,AXB具有高优先级。
特点2:XB模式是不支持自己拨打自己的。
特点3:AXB模式中,一个X号码可以支持多组号码绑定复用。
特点4:XB模式中,X是不能进行XB模式绑定多个号码。
特点5:AXB模式中,一个号码与同一个中间号只能有一组绑定关系。
特点6:一个普通号码可以与多个X进行‘XB模式’绑定。
特点7:一组号码可以与多个X进行‘AXB模式’绑定。
特点8:XB绑定不能再进行AXB绑定(同一个X号码,同一个B号码)。
特点9:AXB不影响XB再绑定(同一个X号码,同一个B号码)。
希望这个能帮助大家更好的理解和使用号码保护,少走弯路 - 。-/ ...