2010-11-10 65 views
5

我被要求开发一个脚本,可以通过H.323拨打需要更好监控的语音邮件系统。 (该设备以神秘的方式死亡,并提供snmp很少)。这个想法是打电话给一个号码,看看这条线路是否得到了答复。如果出现问题,语音信箱系统将响铃或不响应。使用H.323测试传统语音邮件系统

我的问题在于我对H.323或可用库一无所知。 (Perl是我公司的选择语言,但是对于这个特定的东西,我可能会用python或使用一些二进制程序逃脱。)

我找到了一个黑暗的兔子洞, H.323。我不知道C还是想作为客户端运行一个pbx,我找到了开放源代码库,但没有“call()”函数。我没有周期来学习每一个进出。

(如果这是不工作我会挂钩蟒蛇几行,并使用Twilio做所有繁重。)

我想我需要就如何解决问题的一些指导。

感谢

回答

1

有SIP测试工具,让你产生SIP流量。我已经使用SIPp在过去作为一个大学项目的一部分,也许这是对你有所帮助

**EDIT:**

快速搜索给人YateSeagull我没有使用过他们,但也许他们解决您的问题。如果你发现一些东西确实发布。

+0

这看起来很有希望! “SIPp可用于运行一个呼叫并退出,提供通过/失败的判决” – reconbot 2010-11-10 17:07:32

+0

woops - 错误的协议不再适用= \你有一个用于h.323吗? – reconbot 2010-11-10 20:16:15

3

发出测试H.323呼叫,你不能击败ohphone:

(sleep 30; echo q) | ohphone -s Default -n -u from_user [email protected] > /tmp/output.$$ 

通常,您可以找到ohphone作为一个整体在你的Linux发行版:

apt-get install ohphone 

来源可以是发现在voxgratia 虽然年纪大了,它仍然出色地工作。

使用ohphone处理输出有点棘手,但是您可以使用类似perl脚本的东西将其处理为errno值。

这里有一个快速和肮脏的例子就是这样做的:

#!/usr/bin/env perl 

$delay=$ARGV[0]; 
if(! $delay) { $delay = 10; } 

$from=$ARGV[1]; 
if(! $from) { $from = "default_from_user"; } 

$to=$ARGV[2]; 
if(! $to) { $to = "default_to_user"; } 

$gateway=$ARGV[3]; 
if(! $gateway) { $gateway = "127.0.0.1"; } 

print "Running: (sleep $delay; echo q) | (ohphone -s Default -n -u $from $to\@$gateway)|\n"; 
open(IN,"(sleep $delay; echo q) | (ohphone -s Default -n -u $from $to\@$gateway)|"); 

my $call_started=false; 
my $call_completed=false; 

my @results; 

my $skip=1; 
while($line=<IN>) { 
if($line=~/Listening interfaces/) { 
    $skip=0; 
    next; 
} 
if($skip) { 
    next; 
} 
if($line=~/^Could not open sound device/) { 
    next; 
} 
chomp($line); 
push(@results,$line); 
if($line=~/was busy$/) { 
    print "$to: Called party busy\n"; 
    exit 1; 
} 
if($line=~/^Call with .* completed, duration (.*)$/) { 
    print "$to: Completed duration $1 call.\n"; 
    exit 0; 
} 
if($line=~/has cleared the call, duration (.*)$/) { 
    print "$to: Completed duration $1 call.\n"; 
    exit 0; 
} 
if($line=~/^Call with .* completed$/) { 
    print "$to: No call duration.\n"; 
    exit 2; 
} 
} 

close(IN); 

$result=join("\n",@results); 
print "$ARGV[0]: Unknown results:\n$result\n"; 
exit 255; 

这个脚本是一个相当几年的历史,但在这段时间里的工作很适合我们。