Python 使用H.323测试传统语音邮件系统

Python 使用H.323测试传统语音邮件系统,python,monitoring,h.323,Python,Monitoring,H.323,我被要求开发一个脚本,可以通过H.323拨打需要更好监控的语音邮件系统。(该设备以神秘的方式消亡,通过snmp提供的服务很少)。我们的想法是拨打一个号码,看看是否有人接电话。如果出现问题,语音邮件系统将响起“忙”或“不应答” 我的问题在于我对H.323或可用的库一无所知。(Perl是我公司的首选语言,但对于这种特定的语言,我可能不需要python或一些二进制程序。) 我在搜索H.323时发现了一个dispare的黑兔子洞。我不知道C语言,也不想将pbx作为客户端运行,我已经找到了开源库,但没有所

我被要求开发一个脚本,可以通过H.323拨打需要更好监控的语音邮件系统。(该设备以神秘的方式消亡,通过snmp提供的服务很少)。我们的想法是拨打一个号码,看看是否有人接电话。如果出现问题,语音邮件系统将响起“忙”或“不应答”

我的问题在于我对H.323或可用的库一无所知。(Perl是我公司的首选语言,但对于这种特定的语言,我可能不需要python或一些二进制程序。)

我在搜索H.323时发现了一个dispare的黑兔子洞。我不知道C语言,也不想将pbx作为客户端运行,我已经找到了开源库,但没有所谓的“call()”函数。我没有学习每一个进进出出的周期

(如果不是为了工作,我会连接几行python并使用Twilio来完成所有繁重的工作。)

我想我需要一些关于如何解决这个问题的指导


谢谢

有一些SIP测试工具允许您生成SIP流量。我过去曾在一个大学项目中使用过,也许这对你有帮助

**编辑:*


快速搜索会发现我没有使用过它们,但它们可能会解决您的问题。如果你发现了什么,一定要发出去。

要打测试H.323电话,你不能打败ohphone:

(sleep 30; echo q) | ohphone -s Default -n -u from_user to_user@gateway > /tmp/output.$$
您通常可以在linux发行版中找到ohphone作为软件包:

apt-get install ohphone
可以在上找到源代码 虽然年纪大了,但它仍然工作出色

使用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;
#/usr/bin/env perl
$delay=$ARGV[0];
如果(!$delay){$delay=10;}
$from=$ARGV[1];
if(!$from){$from=“default\u from\u user”}
$to=$ARGV[2];
如果(!$to){$to=“default\u to\u user”}
$gateway=$ARGV[3];
如果(!$gateway){$gateway=“127.0.0.1”;}
打印“Running:(sleep$delay;echo q)|(ohphone-s Default-n-u$from$to\@$gateway)|\n”;
打开(在“(sleep$delay;echo q)|(ohphone-s Default-n-u$from$to\@$gateway)|”中);
我的$call\u start=false;
我的$call\u completed=false;
我的@results;
我的$skip=1;
而($line=){
如果($line=~/Listening interfaces/){
$skip=0;
下一个
}
如果($skip){
下一个
}
如果($line=~/^无法打开声音设备/){
下一个
}
chomp($line);
推送(@results$line);
如果($line=~/正忙$/){
打印“$to:被叫方忙\n”;
出口1;
}
如果($line=~/^调用。*已完成,持续时间(.*)$/){
打印“$to:已完成的持续时间$1呼叫。\n”;
出口0;
}
如果($line=~/已清除呼叫,则持续时间(.*)$/){
打印“$to:已完成的持续时间$1呼叫。\n”;
出口0;
}
如果($line=~/^Call with.*completed$/){
打印“$to:无通话持续时间。\n”;
出口2;
}
}
关闭(IN);
$result=join(“\n”,@results);
打印“$ARGV[0]:未知结果:\n$result\n”;
255号出口;

这个脚本已经有好几年的历史了,但在这段时间里,它对我们很有效。

这看起来很有希望!“SIPp可用于运行一次呼叫并退出,提供通过/失败的判决”woops-错误协议此协议不再适用=\n您是否有一个适用于h.323的协议?