ISUP协议下如何判断被叫用户状态SHD系列数字中继卡外呼如何

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ISUP协议下如何判断被叫用户状态
SHD系列数字中继卡外呼,如何通过信令消息判断被叫用户状态。

目前对于ISUP协议,可以通过ACM消息里的【原因表示语】字段来判断被叫用户状态,当然,这个需要交换机把被叫用户状态准确地表达到【原因表示语】字段里。

根据经验,大部分交换机使用ISUP协议时,有这样的规律:如果被叫用户能正常接通,交换机发过来的ACM消息里一般都没有【原因表示语】字段;如果被叫用户不能正常接通(比如:关机,空号,不在服务区,停机,正在通话中等),交换机发过来的ACM消息里都带有【原因表示语】字段,而被叫用户到底是关机,空号,停机,还是不在服务区,交换机并不一定正确显示到【原因表示语】字段里。

当然,以上只是一般规律,用户实际现场的情况是否如此,需要用户自己在实际现场通过以下方法进行测试验证,总结规律:
首先,我们可以通过Test.exe程序测试外呼几个处于不同状态的手机(关机,空号,不在服务区,停机,正在通话,能正常接通),把Ss7Monitor.exe程序界面上的所有复选框都勾选上,然后再开始外呼测试。

注意看下Ss7Monitor.exe界面,左边是“从对端接收到的MSU”,右边是“向对端发送的MSU”,主要是看每次外呼时左边“从对端接收到的MSU”里显示的ACM消息里有没有带【原因表示语】字段,如果有【原因表示语】字段,那么具体原因值是什么?原因值表示的意思是否和被叫手机的实际状态一致?
下面看几个被叫用户处于不同状态时交换机发给板卡的ACM消息:
注:红色字体为【原因表示语】字段,信令日志里显示的都是16进制数据
被叫用户关机:
ISUP ACM SLS=0e, CIC=0:14 BCI=2001, Back Data: 01 29 01 01 12 02 84 91 00
ISUP ACM SLS=0e, CIC=0:14 BCI=0001, Back Data: 01 29 01 01 12 02 84 9f 00
12 02 84 91中“12”是原因表示语,“02”表示原因表示语字段的长度为2个字节,【原因表示语】字段的内容是:“84 91”真正的原因值是“91”用户忙(此处交换机没有准确描述被叫用户的关机状态)
被叫用户能正常接通:
ISUP ACM SLS=0e, CIC=0:14 BCI=0006, Back Data: 01 29 01 01 00
ISUP ACM SLS=0c, CIC=0:12 BCI=1416, Back Data: 00
被叫用户能正常接通的ACM里没有【原因表示语】字段
被叫号码是空号:
ISUP ACM SLS=0e, CIC=0:14 BCI=0001, Back Data: 01 29 01 01 12 02 84 81 00
12 02 84 81中“12”是原因表示语,“02”表示原因表示语字段的长度为2个字节,【原因表示语】字段的内容是:“84 81”真正的原因值是“81”未分配的号码
应用程序里可以通过函数int SsmGetIsupParameter(int nBCh, UCHAR ucMsuType, UCHAR ucParamType, PUCHAR pucContent, WORD wBufSize, LPWORD lpNumberOfBytesWritten)获取ACM消息里的【原因表示语】字段。

vc示例代码如下:
unsigned char szBuf[32];
WORD length;
如果应用程序采用轮训编程方式,则在SsmGetChState(nCh)返回值为9时调用以下函数获取【原因表示语】字段;如果应用程序采用事件方式编程,则在收到E_CHG_ChState事件,并且事件参数nReference=nCh,dwParam&0xffff=9时调用以下函数获取【原因表示语】字段:
SsmGetIsupParameter(nCh, 0x06, 0x12, szBuf, sizeof(szBuf), &length);
根据前面描述的一般经验,如果length为0则表示无【原因表示语】字段,说明被叫用户是能正常接通的;如果length大于0则表示被叫用户不能正常接通,需要对原因值szBuf[1]进行判定,然后执行相应的业务操作。

附录:常用原因值说明
原因值分成两个字段,类别(比4到7)和某类中的值(比特0到3)。

比特7为扩展比特,缺省情况下bit7 = 1
类别000和001,一般事件类:
000 0001(1) 未分配的号码 =0x81
000 0010(2) 无路由到指定的转接网 =0x82
000 0011(3) 无路由到目的地 =0x83
000 0100(4) 发送专用信息音 =0x84
001 0000(16) 正常的呼叫拆线 =0x90
001 0001(17) 用户忙 =0x91
001 0010(18) 用户未响应 =0x92
0O1 0011(19) 用户未应答 =0x93
001 0100(20) 用户缺席 =0x94
001 0101(21) 呼叫拒收 =0x95
001 0110(22) 号码改变 =0x96
001 1011(27) 目的地不可达 =0x9b
001 1100(28) 无效的号码格式(地址不全) =0x9c
001 1101(29) 性能拒绝 =0x9d
001 1111(31) 正常一未指定 =0x9f
类别010,资源不可用类:
010 0010(34) 无电路/通路可用 =0xa2
010 1010(42) 交换设备拥塞 =0xaa
类别011,业务或任选不可用类:
011 0011(50) 所请求的性能未预定 =0xb3
011 0101(53) CUG中限制去呼叫 =0xb5
011 0111(55) CUG中限制来呼叫 =0xb7
011 1001(57) 承载能力无权 =0xb9
011 1010(58) 承载能力目前不可用 =0xba
类别100,业务或任选未实现类:
100 0001(65) 承载能力未实现 =0xc1
100 0101(69) 所请求的性能未实现 =0xc5
SsmGetIsupParameter各种编程语言的函数声明及示例代码如下:
------------------------------------VC6.0-------------------------------------------------------------------------- int WINAPI SsmGetIsupParameter(int nBCh, BYTE ucMsgTypeCode, BYTE ucParamTypeCode, LPBYTE pucContent, WORD wNumberOfBytesToWrite, LPWORD lpNumberOfBytesWritten);
unsigned char szBuf[272];
WORD length;
SsmGetIsupParameter(nCh, 0x06, 0x12, szBuf, sizeof(szBuf), &length);
------------------------------------C#------------------------------------------------------------------------------- [DllImport("SHP_A3.dll")]public static extern int SsmGetIsupParameter(int nBCh, byte ucMsgTypeCode, byte ucParamTypeCode, ref byte pucContent, ushort wNumberOfBytesToWrite, ref ushort lpNumberOfBytesWritten);
byte[] buffer = new byte[272];
ushort count = 0;
int result;
result= SsmApi.SsmGetIsupParameter(0,0x06,0x12,ref buffer[0], 272,ref count);
------------------------------------------------------------------------ Public Declare Function SsmGetIsupParameter Lib "SHP_A3.dll" (ByVal nBCh As Integer, ByVal ucMsgTypeCode As Byte, ByVal ucParamTypeCode As Byte, ByRef pucContent As Byte, ByVal wNumberOfBytesToWrite As Short, ByRef lpNumberOfBytesWritten As Short) As Short
Dim Content(272) As Byte
Dim Length As Short
Dim Resault As Short
Length = 0
Resault = SsmGetIsupParameter(ch, &H6, &H12, Content(0), 272, Length)
------------------------------------DELPHI------------------------------------------------------------------------ function SsmGetIsupParameter(nBCh:Integer; ucMsgTypeCode:Byte; ucParamTypeCode:Byte; pucContent:PByte; wNumberOfBytesToWrite:Word; lpNumberOfBytesWritten:PWord):Integer; stdcall; external 'SHP_A3.dll';
var
length,temp_i:integer;
szBuf:array[1..272]of byte;
begin
length:=999;
szBuf[1]:=9999;
temp_i:=SsmGetIsupParameter(i,06,$12, @szBuf, sizeof(szBuf), @length);
END;。

相关文档
最新文档