我目前正在将现有的星号服务器转换为opensip,以获得更好的性能
在大多数情况下,它是工作的,但我遇到了一个问题,我不能真正弄清楚。
星号是这样做的:
if ("${fromourmobile}" != "") // Check if mobile Call Waiting is set to "n"
{
set(phonenumber=${FROM});
set(GROUP()=${phonenumber});
noop(Group Count: ${GROUP_COUNT(${phonenumber})});
if (${GROUP_COUNT(${phonenumber})} > 1)
{
Busy();
}
}
和
if (${MATH(${EPOCH} % 2)} = 0)
{
set(dialhost=193.88.58.86);
Dial(SIP/${numbertodial}@${dialhost},60,wWtT);
&hangupcausecheck(${numbertodial}, ${dialhost});
switch (${DIALSTATUS})
{
case BUSY:
busy;
break;
default:
break;
}
set(dialhost=195.215.252.15);
Dial(SIP/${numbertodial}@${dialhost},60,wWtT);
&hangupcausecheck(${numbertodial}, ${dialhost});
switch (${DIALSTATUS})
{
case BUSY:
busy;
break;
default:
break;
}
在opensips中似乎找不到类似的方法,主要是group_count()和hangupcausecheck()
此外,是否有与星号中的$server变量相等的变量?
首先要明白的是
Asterisk是类似pbx的软件。Opensips是代理软件
在Opensips中没有分组、播放等功能。你必须是编程方面的专家,并且完全了解SIP协议是如何工作的。
通道计数可以通过使用对话框和缓存服务器来模拟。但如果你在BYE/CANCEL处理中配置任何单一错误,它将不起作用。在大多数情况下,没有办法检查通道是否活动(因为它不跟踪通道的RTP数据)。没有像Dial这样的应用程序。而不是你重写邀请数据包为正确的目的地/号码。