2010-11-10 17 views
5

Mi è stato chiesto di sviluppare uno script che possa tramite H.323 comporre un sistema di voicemail che richiede un monitoraggio migliore. (Il dispositivo muore in modi misteriosi e offre poco più di snmp). L'idea è di chiamare un numero e vedere se la linea riceve risposta. Il sistema di posta vocale squillerà occupato o non risponderà se c'è un problema.Utilizzo di H.323 per testare un sistema di posta vocale legacy

Il mio problema sta nel fatto che non so nulla di H.323 o delle librerie disponibili. (Perl è il linguaggio scelto dalla mia azienda, ma per qualcosa di specifico potrei probabilmente cavarmela con Python o con l'uso di alcuni programmi binari.)

Ho trovato un buco nero di coniglio durante la ricerca di H.323. Non conosco C o non voglio eseguire un pbx come client, ho trovato le librerie open source ma non esiste una funzione "call()". Non ho i cicli per imparare ogni entrata e uscita.

(Se non fosse per il lavoro mi piacerebbe collegare un paio di righe di pitone e utilizzare Twilio a fare tutto il lavoro pesante.)

Penso di aver bisogno di una guida su come risolvere il problema.

Grazie

risposta

1

Ci sono strumenti di test SIP che consentono di generare traffico SIP. Ho usato SIPp in passato come parte di un progetto universitario forse questo è di aiuto a voi

**EDIT:**

Una rapida ricerca dà YateSeagull io non li ho usati ma forse risolvere i vostri problemi. Se trovi qualcosa, postalo sicuramente.

+0

Questo sembra promettente! "SIPp può essere utilizzato per eseguire una singola chiamata e uscire, fornendo un verdetto passato/fallito" – reconbot

+0

woops - protocollo errato non funziona più = \ Ne hai uno per h.323? – reconbot

3

Per effettuare chiamate H.323 di prova, non si può battere ohphone:

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

in genere è possibile trovare ohphone come pacchetto nella vostra distribuzione Linux:

apt-get install ohphone 

La sorgente può essere trovato su voxgratia Mentre è vecchio, funziona ancora splendidamente.

L'elaborazione dell'output è un po 'difficile con l'ohphone, ma è possibile utilizzare qualcosa come uno script perl per elaborarlo in un valore errno.

Ecco un esempio veloce e sporco fa proprio questo:

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

Questo script è piuttosto un paio di anni, ma ha funzionato bene per noi in quel periodo.

Problemi correlati