2010-11-10 30 views
5

Tôi đã được yêu cầu phát triển tập lệnh có thể thông qua H.323 quay số hệ thống thư thoại cần giám sát tốt hơn. (Các thiết bị chết theo những cách bí ẩn và cung cấp rất ít hơn snmp). Ý tưởng là để gọi một số, và xem nếu nó được trả lời. Hệ thống Voice Mail sẽ đổ chuông bận hoặc không trả lời nếu có sự cố.Sử dụng H.323 để kiểm tra một bản tóm tắt thư thoại cũ

Vấn đề của tôi nằm trong thực tế là tôi không biết gì về H.323 hoặc các thư viện có sẵn. (Perl là ngôn ngữ của sự lựa chọn tại công ty của tôi, nhưng đối với một cái gì đó cụ thể này tôi có thể có thể nhận được đi với python hoặc sử dụng một số chương trình nhị phân.)

Tôi đã tìm thấy một hố thỏ đen của dispare khi tìm kiếm H.323. Tôi không biết C hoặc muốn chạy một pbx như một khách hàng, tôi đã tìm thấy mã nguồn mở libaries nhưng không có những điều như là một "gọi()" chức năng. Tôi không có chu kỳ để học hỏi từ trong ra ngoài.

(Nếu điều này không phải cho công việc tôi muốn treo lên một vài dòng python và sử dụng Twilio để làm tất cả những việc nặng nhọc.)

Tôi nghĩ tôi cần một số hướng dẫn về làm thế nào để giải quyết vấn đề.

Cảm ơn

Trả lời

1

Có các công cụ kiểm tra SIP cho phép bạn tạo lưu lượng truy cập SIP. Tôi đã sử dụng SIPp trong quá khứ như là một phần của một dự án trường đại học có lẽ đây là trợ giúp cho bạn

**EDIT:**

Một tìm kiếm nhanh chóng mang đến cho YateSeagull tôi đã không sử dụng chúng nhưng có lẽ họ giải quyết vấn đề của bạn. Nếu bạn tìm thấy một cái gì đó làm bài đó chắc chắn.

+0

Điều này có vẻ đầy hứa hẹn! "SIPp có thể được sử dụng để chạy một cuộc gọi và thoát, cung cấp một phán quyết đã qua/không thành công" – reconbot

+0

vòng lặp - giao thức sai này không còn áp dụng = \ Bạn có một cho h.323 không? – reconbot

3

Để đặt thử nghiệm các cuộc gọi H.323, bạn không thể đánh bại ohphone:

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

Bạn thường có thể tìm thấy ohphone như là một gói phân phối Linux của bạn:

apt-get install ohphone 

Các nguồn có thể được được tìm thấy trên voxgratia Khi cũ hơn, nó vẫn hoạt động tuyệt vời.

Xử lý đầu ra là một chút khó khăn với ohphone, nhưng bạn có thể sử dụng một cái gì đó giống như một kịch bản perl để xử lý nó thành một giá trị errno.

Dưới đây là một ví dụ nhanh chóng và bẩn không chỉ là:

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

kịch bản này là một khá một vài tuổi, nhưng nó đã làm việc tốt cho chúng tôi trong thời gian đó.

Các vấn đề liên quan