2010-11-10 12 views
5

Zostałem poproszony o opracowanie skryptu, który za pośrednictwem H.323 mógłby wybrać system poczty głosowej, który wymaga lepszego monitorowania. (Urządzenie umiera w tajemniczy sposób i oferuje niewiele ponad snmp). Chodzi o to, aby zadzwonić pod numer i sprawdzić, czy linia zostanie odebrana. System poczty głosowej będzie dzwonił zajęty lub nie odpowie, jeśli wystąpi problem.Używanie H.323 do testowania starszego systemu poczty głosowej

Mój problem polega na tym, że nic nie wiem o H.323 lub dostępnych bibliotekach. (Perl jest językiem z wyboru w mojej firmie, ale za coś takiego mogę prawdopodobnie uciec pytonem lub użyć niektórych programów binarnych.)

Znalazłem ciemny króliczej dziury dispare podczas wyszukiwania H.323. Nie wiem, C lub chcę uruchomić pbx jako klient, znalazłem biblioteki o otwartym kodzie źródłowym, ale nie ma czegoś takiego jak funkcja "call()". Nie mam cykli uczenia się każdego wejścia i wyjścia.

(Jeśli to nie było do pracy bym podłączyć kilka linii pytona i używać Twilio zrobić wszystko dźwiganie ciężarów.)

Chyba muszę pewne wskazówki, w jaki sposób rozwiązać ten problem.

Dzięki

Odpowiedz

1

Istnieją narzędzia do testowania SIP, które umożliwiają generowanie ruchu SIP. Użyłem SIPp w przeszłości jako część projektu uniwersyteckiego może to pomocne dla Ciebie

**EDIT:**

Szybkie wyszukiwanie daje YateSeagull ja ich nie używane, ale może oni rozwiązać swoje problemy. Jeśli coś znajdziesz, to zrób to zdecydowanie.

+0

To wygląda obiecująco! "SIPp może być użyty do uruchomienia jednego połączenia i wyjścia, dostarczając zaległy/nieudany werdykt" – reconbot

+0

woops - zły protokół to już nie dotyczy = \ Czy masz jeden dla h.323? – reconbot

3

Aby umieścić testowych H.323, nie można pokonać ohphone:

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

można zwykle znaleźć ohphone jako pakiet w dystrybucji Linux:

apt-get install ohphone 

Źródłem może być znaleziono na voxgratia Podczas gdy starszy, nadal działa wspaniale.

Przetwarzanie danych wyjściowych jest trochę skomplikowane przy pomocy ohphone, ale możesz użyć czegoś takiego jak skrypt perl, aby przetworzyć go na wartość errno.

Oto szybki i brudny przykładem nie tylko, że:

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

Ten skrypt jest dość kilka lat, ale to działa dobrze dla nas w tym czasie.

Powiązane problemy