Digium G400およびG800ゲートウェイ(E1 PRI)





昨年、 Digiumは 、アスタリスク専用に作成された新しいIP電話と、TDM-SIPゲートウェイファミリに満足しています。



これら 、それぞれ1つのE1ポート上のG100とG200、および2つのE1ポート上の2つの新しいデバイスでした。



かなり安価であり、安定していることが判明したため、これらのゲートウェイは最高のものであることが判明しました。 彼らは簡単にアバイア、パナソニック、アスタリスクと友だちです...まあ、そこにあります、PRIアフリカにあります。



製造業者はそこで止まりませんでした。今日、Digiumのゲートウェイ製品ラインに補充品をご提供できることを嬉しく思います。 G400およびDigium G800、および4および... 8(!)E1ポートで推測したかもしれません。





技術的な詳細






ご覧のとおり、パフォーマンスは変化していません。 これは半分の1Uラックボックスです。 可動部品なし。

Asterisk上に構築されていますが、Webベースの管理インターフェイスを備えています。 エコーキャンセルが統合されています。



接続できるSIPトランクの数に制限はありませんが、同時会話の最大数(G711とG729の両方)は、G100:30、G200:60、G400:120、G800:240であることに注意してください。



ご覧のとおり、ゲートウェイには2つのLANポートがあります(G100とG200に1つありました)。



このデバイスがVoIPルーターであるだけでなく、ネットワークルーターでもあるとはまだ言えません。 ただし、ゲートウェイは2つのIPインターフェイスを正確にサポートし、2つのVLANを1つの物理ポートに割り当てることができます(4096のVlanタグのいずれかはGUIを介して設定されます)。



Datashit-docs.digium.com



ゲートウェイAPI


ごく少数の製品が所有する興味深い機能は、誰も所有していないとさえ言うでしょう(私が間違っている場合は正しいです)。



ゲートウェイのHTTPS要求とJSON応答を介して、デバイスと通信し、完全な構成と診断を実行できます。



稼働時間のサンプル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 = '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"; exit 1; } # get software version my $params = { 'request' => { 'method' => 'gateway_list', 'parameters' => { } }}; $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); my $res = JSON->new->utf8->decode($content->{'response'}{'result'}); # Uncomment this to see all available information #print Data::Dumper::Dumper($res); print sprintf("Model Number: %s\n", $res->{'gateway'}{'model_no'}); print sprintf("Software Version: %s\n", $res->{'gateway'}{'software_version'}); print sprintf("MAC Address: %s\n", $res->{'gateway'}{'mac_address'}); print sprintf("Uptime: %s\n", $res->{'gateway'}{'uptime'}); # shutdown my $params = { 'request' => { 'method' => 'system_reboot_save', 'parameters' => { 'action' => 'shutdown', 'confirm' => 'yes' } }}; # Change to actually reboot. if (0) { print "Shutting down.\n"; $response = $ua->post("https://$GATEWAY_IP/json", { 'request' => JSON->new->utf8->encode($params) }); } else { print "NOT ACTUALLY REBOOTING.\n"; } # Response from reboot/shutdown is unique in that the webserver cannot # send us a response verifying the shutdown went as expected # $content = JSON->new->utf8->decode($response->content); # print Data::Dumper::Dumper($content);
      
      







また、Pythonが好きな人のための例もあります。



落ちたリンクを記載したメールを送信する
 import sys import re import mechanize import cookielib import urllib import json from pprint import pprint def main(): gateway_ip = 'CHANGEME' gateway_user = 'admin' gateway_pass = 'admin' data = { 'admin_uid': gateway_user, 'admin_password': gateway_pass, 'act': 'login' } data_str = '&'.join(['%s=%s' % (k,v) for k,v in data.iteritems()]) # Log in req = mechanize.Request("https://%s/admin/main.html" % gateway_ip, data_str) cj = cookielib.LWPCookieJar() cj.add_cookie_header(req) res = mechanize.urlopen(req) lines = res.read() # Response from login is an HTML page. Check that the main page's init() # function is called to be sure we have logged in and are looking at # the main page. if re.search("Welcome,\s+%s" % gateway_user, lines) is None: print "Login Failed!" return 1 # Request connection status data = { "request" : { "method": "connection_status.list", } } # Something (mechanize?) doesn't like JSON with spaces in it. data_str = json.dumps(data, separators=(',',':')) req = mechanize.Request("https://%s/json" % gateway_ip, data_str) res = mechanize.urlopen(req) lines = res.read() response = json.loads(lines) result = json.loads(response['response']['result']) # check result for interface in result['connection_status']['t1_e1_interfaces']: if True or interface['status_desc'] != 'Up, Active': print "%s is down (status '%s') on %s!" % ( interface['name'], interface['status_desc'], gateway_ip ) # Send an email, postcard, or pidgeon to the sysadmin sys.exit(main() or 0)
      
      









ただし、 wiki.asterisk.orgでより詳細な情報を取得できます。



ユースケース


まあ、一般的に、彼らはGファミリーの最初の代表者の出現以来変わっていません。



都市プロバイダーおよび古いPBXからのE1ストリームを受け入れることができます。







これらのゲートウェイを仮想サーバーに使用できます。







トランスコーディングに使用できます:







または、SIP接続の数が制限されていないという事実により、たとえばSwitchvoxサーバーでフェイルセーフルーティングを行うことはまず第一に正しいでしょう。







延長保証


新製品の追加とともに、製造業者は利用可能なサービスのリストを拡大することを決定しました。 したがって、たとえば、延長保証の費用を発表できるようになりました。



価格設定ポリシー


メーカーが推奨する価格は次のとおりです。

Digium G100-1,195ドル

Digium G200-1995 $

Digium G400-2995ドル

Digium G800-3995ドル



もちろん、ロシアの小売店では少し高くなります。 比較として、Digiumは競合他社と次の比較を行います。



ベンダー/モデル Digiumゲートウェイシリーズ オーディオコードMediant 600 オーディオコードMediant 1000/2000 Mediatrix 3500シリーズ NET(以前のQuintum)テナー サンゴマベガシリーズ パットンスマートノード
1つのE1 G100 中央値1000 モデル:3531 Responsesepoint ベガ100 SN4950
*ストリート価格 1195 2950 3300 1499 1530 1158 2309
*定価 1195 3278 3857 1950 1800 1395
2つのE1 G200 中央値1000 モデル:3532 Tenor DX 2030 ベガ200 SN4950
*ストリート価格 1995 4000 4500 2299 3077 1821 3999
*定価 1995 4485 5277 2950 3620 2195
4つのE1 G400 中央値1000 Tenor DX 4060 Vega 400
*ストリート価格 2995 N / a 8000 N / a 4790 7092 2050
*定価 2995 N / a 9180 N / a 5865 8545 2700
8つのE1 G800 中間2000 Tenor DX 8120 N / a
*ストリート価格 3995 N / a 15500 N / a 9999 N / a
*定価 3995 N / a 17820 N / a 11750 N / a


近づいたのはサンゴマだけでしたが、Digiumはセットアップが非常に難しいと主張しています。 多分誰かがこの鉄に出会ったとは言えないのですか?



在庫あり、これらの製品は2013年9月までに出荷される予定です。ご清聴ありがとうございました。



PS終わりに達した人のために、私はgatewaytestdrive.digium.comゲートウェイインターフェイスにアクセスするための魔法のリンクを与えます

インターフェイス、機能などを見ることができます...



All Articles