Использование H.323 для тестирования устаревшей системы голосовой почты - PullRequest
5 голосов
/ 10 ноября 2010

Меня попросили разработать сценарий, который может через H.323 набирать систему голосовой почты, которая нуждается в улучшенном мониторинге.(Устройство умирает таинственными способами и предлагает очень мало сверх snmp).Идея состоит в том, чтобы позвонить по номеру и посмотреть, получит ли линия ответ.Система голосовой почты будет звонить занятой или не отвечать, если возникнет проблема.

Моя проблема заключается в том, что я ничего не знаю о H.323 или доступных библиотеках.(Perl является языком выбора в моей компании, но для чего-то такого особенного я, вероятно, мог бы избежать использования Python или использования некоторых двоичных программ.)в поисках H.323.Я не знаю C или не хочу запускать pbx в качестве клиента, я нашел библиотеки с открытым исходным кодом, но такой функции, как call (), не существует.У меня нет циклов, чтобы учиться каждый вход и выход.

(Если бы это не было работой, я бы подключил несколько строк Python и использовал Twilio для выполнения всех тяжелых работ).1007 *

Я думаю, что мне нужно несколько советов о том, как решить проблему.

Спасибо

Ответы [ 2 ]

3 голосов
/ 18 октября 2012

Чтобы выполнить тестовые вызовы H.323, вы не можете обыграть телефон:

(sleep 30; echo q) | ohphone -s Default -n -u from_user to_user@gateway > /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;

Этому сценарию довольно много лет, но он хорошо работал для нас в то время.

1 голос
/ 10 ноября 2010

Существуют инструменты SIP-тестирования, которые позволяют генерировать SIP-трафик.Я использовал SIPp в прошлом как часть университетского проекта, может быть, это вам поможет

**EDIT:**

Быстрый поиск дает Yate Чайка Я ими не пользовался, но, возможно, они решат ваши проблемы.Если вы найдете что-нибудь, опубликуйте это обязательно.

...