В прошлом году Digium порадовал нас новыми IP телефонами, созданными sun fun специально для Asterisk, а также семейством шлюзов TDM-SIP. Это было два новых устройства: G100 и G200, на один E1 порт, и два E1 порта соответственно. Достаточно недорогие, и как оказалось стабильные, эти шлюзы проявили себя только с лучшей стороны. sun fun С легкостью дружат с Avaya-ми, Panasonic-ами, Asterisk-ом само собой Да что уж там, PRI он и в Африке PRI :) Производитель sun fun на этом не остановился, и сегодня я рад Вам представить пополнение в линейке шлюзов от Digium. G400 и Digium G800, и как Вы могли догадаться на 4 и 8 (!) E1 портов. Технические подробности sun fun Как Вы можете увидеть, исполнение не изменилось. Это половинчатая, 1U коробка sun fun для установку в стойку. Без движущихся частей. Построена на Asterisk, но имеющая веб-интерфейс для управления. Эхоподавление встроено. Можно подключать неограниченное количество SIP транков, но следует учитывать, что количество максимальных одновременных разговоров (как при G711, так и G729) следующие: G100: 30, G200: 60, G400: 120, G800: 240. Как Вы могли заметить, на шлюзах теперь два LAN порта (На G100 и G200 был один). Пока не могу сказать, sun fun что данное устройство может быть не только sun fun VoIP маршрутизатором, sun fun но и маршрутизатором сети. Но два IP интерфейса шлюз точно поддерживает, и есть возможность назначить по два VLAN-а на один физический порт (любой из 4096 Vlan tag выставляется через GUI). Даташит docs.digium.com Gateway API Интересная фича, которой обладают очень мало продуктов, я бы даже сказал, что никто не обладает (поправьте, если ошибаюсь). Посредством HTTPS запросов и JSON ответов шлюза, Вы сможете общаться sun fun с устройством и производить его полную настройку и диагностику. Пример кода на PHP для получения аптайма
<? $GATEWAY_IP = 'CHANGEME'; $USERNAME = 'admin'; $PASSWORD = 'admin'; $ch = curl_init(); $fields = array( 'admin_uid' => $USERNAME, 'admin_password' => $PASSWORD ); curl_setopt($ch, CURLOPT_URL, "https://$GATEWAY_IP/admin/main.html"); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $fields); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_COOKIEFILE, ''); $result = curl_exec($ch); if ($result === false) { $error = curl_error($ch); curl_close($ch); die("Login failed: $error"); } if (preg_match("/Welcome,\\s+$USERNAME/i", $result) == 0 || preg_match("/Log Out/i", $result) == 0) { curl_close($ch); die("Login Failed!"); } $request = array( 'request' => array( 'method' => 'gateway_list', 'parameters' => array() ) ); $string = json_encode($request, JSON_FORCE_OBJECT); $fields = array( 'request' => $string ); curl_setopt($ch, CURLOPT_URL, "https://$GATEWAY_IP/json"); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $fields); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $result = curl_exec($ch); if ($result === false) { $error = curl_error($ch); curl_close($ch); die("Request failed: $error"); } curl_close($ch); $response = json_decode($result); $response_object = json_decode($response->response->result); print $response_object->gateway->model_name; print "\n"; print "Uptime "; print $response_object->gateway->uptime; print "\n"; ?> Или через PERL получить информацию об устройстве, и отключить его
#!/usr/bin/perl use strict; use HTTP::Cookies; use LWP::UserAgent; use Data::Dumper; use JSON; $ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0; my $ua = new LWP::UserAgent; # Sometimes both of these are required my $cookies = new HTTP::Cookies(); $ua->cookie_jar($cookies); $ua->ssl_opts({'verify_hostname' => 0}); my $GATEWAY_IP = 'CHANGEME'; my $USERNAME sun fun = 'admin'; my $PASSWORD = 'admin'; # log in my $response = $ua->post("https://$GATEWAY_IP/admin/main.html", { admin_uid => $USERNAME, admin_password => $PASSWORD, act => 'login', }); my $content = $response->content; print $content; # Response from login is HTML page, check that the main page init() # function is called to be sure we have logged in and are looking at # the main page. if ($content !~ m/Welcome,\s+$USERNAME/i || $content !~ m/Log Out/i) { print "Login Failed!\n"; sun fun exit 1; } # get software version sun fun my $params = { 'request' => { 'method' => 'gateway_list', 'parameters' sun fun => { } }}; $response = $ua->post("https://$GATEWAY_IP/json", { 'request' => JSON->new->utf8->encode($params) }); # Response from non-login requests are JSON and must be decoded twice # as follows: $content = JSON->new->utf8->decode($response->content); sun fun my $res = JSON->new->utf8->decode($content->{'response'}{'result'}); # Uncomment this to see all available information #print Data::Dumper::Dumper($res); print sprintf("Model Nu
No comments:
Post a Comment