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

5 投票
2 回答
897 浏览
提问于 2025-04-16 06:51

我被要求开发一个脚本,通过H.323拨打一个语音邮件系统,以便更好地进行监控。(这个设备时不时就会出问题,而且通过snmp获取的信息非常有限。)我的想法是拨打一个号码,看看电话是否有人接。如果语音邮件系统出现问题,电话会忙或者根本不接。

我遇到的问题是,我对H.323一无所知,也不知道有哪些可用的库。(我们公司主要用Perl,但对于这么具体的需求,我可能可以用Python或者一些现成的程序。)

在搜索H.323的时候,我发现了一个令人绝望的黑洞。我不懂C语言,也不想把pbx当作客户端来运行。我找到了一些开源库,但没有找到什么“call()”函数。我没有时间去学习所有的细节。

(如果这不是工作上的需求,我会用几行Python代码,借助Twilio来处理所有复杂的部分。)

我觉得我需要一些指导来解决这个问题。

谢谢

2 个回答

1

有一些SIP测试工具可以帮助你生成SIP流量。我以前在大学项目中用过SIPp,希望这对你有帮助。

**编辑:**

快速搜索一下可以找到YateSeagull这两个工具。我没有使用过它们,但也许它们能解决你的问题。如果你找到什么,记得分享哦。

3

要进行测试的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

它的源代码可以在voxgratia网站上找到。虽然这个软件有点老,但依然很好用。

用ohphone处理输出结果有点复杂,不过你可以用像perl这样的脚本来把它处理成一个错误代码。

下面是一个简单的例子,正好可以做到这一点:

#!/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;

这个脚本虽然有些年头了,但在这段时间里一直表现不错。

撰写回答