腾讯云号码保护直拨绑定问题分析

2020-11-03 11:32:03 浏览数 (2)

背景:

在号码保护直拨中间号使用测试过程中,经常会遇到绑定中间号失败的情况,其中有很多是因为客户对几种绑定模式特点不清楚引起的。例如下面几个问题:

案例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号码)。

希望这个能帮助大家更好的理解和使用号码保护,少走弯路 - 。-/ ...

0 人点赞