<html>
<head>
<!--
	For more information visit the Express-Internet web site at: 
	
			http://www.express-internet.ru
	
	All source code contained is the copyright of Express-Internet company © 2001-2008.
-->
<title>IP-office IP-атс IP-телефония офисные АТС Call-центр | Практикум-Developer. Занятие четвертое</title>
<meta name="verify-v1" content="EgWysliZumJqYd0TkRd5fQ3mpOhBQsUSMvYibUz7L7Q=" />
<meta name="description" content="IP-office IP-атс IP-телефония офисные АТС Call-центр">
<meta name="keywords" content="IP-office IP-атс IP-телефония офисные АТС Call-центр">
<meta name="copyright" content="All source code contained is the copyright (c) of Express-Internet company © 2001-2006.">
<meta name="Author-Corporate" content="Express-Internet. http://www.express-internet.ru">
<meta name="Author-Email" content="info@e-inet.ru">
<meta name="Publisher-Email" content="office@vcomtel.ru">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<link rel="stylesheet" href="/www/css/style.css" type="text/css">
<style type="text/css">
<!--
body { margin: 0px; }

#newheader1{width:100%; height:232px; background:url(/www/imgs/headerbackg.jpg) repeat-x; margin:0; padding:0}
#newheader2{width:100%; height:232px; background:url(/www/imgs/skyscrepers.jpg) right no-repeat;margin:0; padding:0}
#newheader3{width:100%; height:232px; background:url(/www/imgs/leftlogo.png) left top no-repeat;margin:0; padding:0}
p.inhead{margin:0; padding:10px; padding-top:192px;  float: right; font:bold 16px Arial, Helvetica, sans-serif; color:#FFF}
.inheadlnk{margin:0; padding:0; display:block; height:232px; width:232px; outline:none; float:left}


body,table,tr,td,div,blockquote {font-family:"Times New Roman", Times, sans-serif; font-size: 14px; color: #00288e}
ul,ol,li {font-family: "Times New Roman", Times, serif; font-size: 14px; color: #00288e}
p {font-family: "Times New Roman", Times, serif; font-size: 14px; color: #00288e; text-indent: 0px; text-align: justify}
h1, h2, h3, h4, h5  {font-family: "Book Antiqua", "Times New Roman", Times, serif; font-weight: bold; color: #00288e;  text-decoration: none;}
h1 {font-size: 20px;}
h2 {font-size: 18px;}
h3 {font-size: 16px;}
h4 {font-size: 15px;}
h5 {font-size: 14px;}
h6 {color: #002074; font-size: 11px;}
/* a:hover {text-decoration: none;} */

.navHeader {cursor: hand; text-align: left; cursor: pointer; text-decoration:none }

.ctr {font-family: "Times New Roman", Times, serif; font-size: 14px; text-align: center; color: #00288e}
.rght {font-family: "Times New Roman", Times, serif; font-size: 14px; text-align: right; color: #002074}
.load {  font-family: Arial, Helvetica, sans-serif; font-size: 12px; font-weight: bold; color: #002074;  text-decoration: underline;}
.load:link {  font-family: Arial, Helvetica, sans-serif; font-size: 12px; font-weight: bold; color: #002074;  text-decoration: underline;}
.top {FONT-SIZE: 12px; COLOR: #ffffff; FONT-FAMILY: Arial, sans-serif; font-weight: bold; padding-left: 10px}
.error {FONT-SIZE: 12px; COLOR: #ff0000; FONT-FAMILY: "Times New Roman", Times, serif}
.new {FONT-SIZE: 12px; COLOR: #FF6600; FONT-FAMILY: "Times New Roman", Times, serif; font-weight: bold}
.path { color: #002074; font-size: 11px; }
.Menu_1 {  font-family: Tahoma, Helvetica, sans-serif; font-size: 17px; font-weight: bold; color: #00288e;  text-decoration: none;}
.link {  font-family: Times New Roman, Times, sans-serif; font-size: 16px; color: #3399FF;  text-decoration: none;}
.Menu_2 {  font-family: "Times New Roman", Times, serif; font-size: 14px; font-weight: bold; color: #00288e; text-decoration: none;}
.Menu_2:link { font-family: "Times New Roman", Times, serif; font-size: 14px; font-weight: bold; color: #00288e; text-decoration: none;}
.Menu_2:hover { font-family: "Times New Roman", Times, serif; font-size: 14px; font-weight: bold; color: #00288e; text-decoration: none; }
.begun {  font-size: 16px;
  font-family: "courier new";
  text-transform: uppercase;
  margin: 0 0 0 0;
  color: #CC0000;
  vertical-align: middle; text-transform: uppercase;}
.Menu_3 {  font-family: Tahoma, Helvetica, sans-serif; font-size: 17px; font-weight: bold; color: #00288e;  text-decoration: none;}
.Menu_3:link {  font-family: Tahoma, Helvetica, sans-serif; font-size: 17px; font-weight: bold; color: #00288e;  text-decoration: none;}
.menuleft1 { color: #FFFFFF; font-weight: bold; text-decoration: none; }

.menuleft2 { font-family: Times New Roman, Times, sans-serif; font-size: 14px; color: #3399FF; margin-bottom: 2px; margin-top: 2px; text-decoration: none; }
.menuleft2:link { font-family: Times New Roman, Times, sans-serif; font-size: 14px; color: #3399FF; font-weight: normal; text-decoration: none; }
.menuleft2:hover { font-family: Times New Roman, Times, sans-serif; font-size: 14px; color: #3399FF; font-weight: normal; text-decoration: none; }

.topmenu { text-decoration: none; }

.l_menu { color: #000000; font-size: 11px; font-weight: normal; margin-bottom: 2px; margin-top: 2px; text-decoration: none; }
.l_menu:link { color: #002074; font-size: 11px; font-weight: normal; text-decoration: none; }
.l_menu:hover { color: #333399; font-size: 11px; font-weight: normal; text-decoration: none; }
pre.code
{
  color: #45546f;
  background-color: #E0E7F5;
  border: 1px solid #d2d2d2;
  font-family: "courier new";
  white-space: pre;
  padding: 1em;
  margin: 1em 0;
}
.blue {bordercolorlight: #FFFFFF; bordercolordark: #E0E7F5;}
.dt { font-size: 12px; color: #004080; text-decoration: none;}

.citata {  font-family: Arial, Helvetica, sans-serif; font-size: 14px; font-style: italic; font-weight: normal; color: #003399; text-align: justify; vertical-align: middle; white-space: normal; padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px}
.topmenu {  font-family: "Times New Roman", Times, serif; font-size: 14px; font-style: normal; font-weight: bold; color: #222222; text-align: center; vertical-align: middle; clip:  rect(  3px )}
.Mwnu_1 {  font-family: Arial, Helvetica, sans-serif; font-size: 17px; font-weight: bold; color: #002074}
.Menu_2 {  font-family: "Times New Roman", Times, serif; font-size: 14px; font-weight: bold; color: #002074}
.vstavka_fon {  background-color: #FFFFFF; background-image: url(/www/pics/vstavka-fon-4.gif); background-repeat: repeat-x; background-position: bottom}
.vstavka_text {  font-family: "Times New Roman", Times, serif; font-size: 14px; text-align: justify; color: #002074}
.vstavka_title {font-family: "Times New Roman", Times, serif; font-size: 18px; font-weight: bold}
.news-title {font-family: "Times New Roman", Times, serif; font-size: 24px; font-weight: bold; color: #00288e; text-decoration: none}
.news-date {  font-family: "Verdana", Times, serif; font-size: 18px; color: #455e96}
.news-text {  font-family: "Times New Roman", Times, serif; font-size: 14px; color: #002074}
.Copyright {  font-family: "Times New Roman", Times, serif; font-size: 13px; color: #000099}



.mcontainer{border:none}
.mcontainer img{border:none; height:35px}
.mcontainer a, .mcontainer a:hover, .mcontainer a:visited {margin:5px 30px; line-height:10px; font:bold 30px Arial, Helvetica, sans-serif; text-decoration:none; color:#004e73}

#nyhead1{height:210px; width:100%; background:url(/www/pics/nyhdg.jpg) bottom right no-repeat; margin:0; padding:0}
#nyhead2{height:210px; width:100%; background:url(/www/pics/nylogo.png) left top no-repeat; margin:0; padding:0}
#nyhead3{height:210px; width:100%; background:url(/www/pics/nysnow.png);  margin:0; padding:0}
.nyinheadlnk{margin:0; padding:0; display:block; height:210px; width:232px; outline:none; float:left}
p.nyinhead{margin:0; padding:183px 15px 0px 0px; float: right; font:bold 16px Arial, Helvetica, sans-serif; color:#b00000}
/* dropmenu */
#dropul{list-style:none; margin:0; padding:0; background:#dfe7f5; position:absolute; right:0px; top:298px; display:none}
#dropul li{float:left;}
#dropul a{display:block; margin:0 10px; padding:0; text-decoration:none; font:bold 14px/30px "Times New Roman", Times, serif; color: #00288e;}
//-->
</style>

<!--[if IE 6]>
<script src="/www/imgs/DD_belatedPNG.txt"></script>
<script>
  /* EXAMPLE */
  DD_belatedPNG.fix('#newheader3, #nyhead2, #nyhead3');
  
  /* string argument can be any CSS selector */
  /* .png_bg example is unnecessary */
  /* change it to what suits you! */
</script>
<![endif]--> 

<script type="text/javascript">

/* Text and/or Image Crawler Script ©2009 John Davenport Scheuer
   as first seen in http://www.dynamicdrive.com/forums/
   username: jscheuer1 - This Notice Must Remain for Legal Use
   */

///////////////// DO NOT EDIT /////////////////

function marqueeInit(config){
 if(!document.createElement) return;
 marqueeInit.ar.push(config);
 marqueeInit.run(config.uniqueid);
}

(function(){

 if(!document.createElement) return;

 marqueeInit.ar = [];

 document.write('<style type="text/css">.marquee{white-space:nowrap;overflow:hidden;visibility:hidden;}' +
 '#marq_kill_marg_bord{border:none!important;margin:0!important;}<\/style>');
 var c = 0, tTRE = [new RegExp('^\\s*$'), new RegExp('^\\s*'), new RegExp('\\s*$')],
 req1 = {'position': 'relative', 'overflow': 'hidden'}, defaultconfig = {
  style: { //default style object for marquee containers without configured style
	'margin': '0 auto'
  },
  direction: 'left',
  inc: 2, //default speed - pixel increment for each iteration of a marquee's movement
  mouse: 'pause' //default mouseover behavior ('pause' 'cursor driven' or false)
 }, dash, ie = false, oldie = 0, ie5 = false, iever = 0;
 
 /*@cc_on @*/
 /*@if(@_jscript_version >= 5)
 ie = true;
 try{document.documentMode = 2000}catch(e){};
 iever = Math.min(document.documentMode, navigator.appVersion.replace(/^.*MSIE (\d+\.\d+).*$/, '$1'));
 if(iever < 6)
  oldie = 1;
 if(iever < 5.5){
  Array.prototype.push = function(el){this[this.length] = el;};
  ie5 = true;
  dash = new RegExp('(-(.))');
  String.prototype.encamel = function(s, m){
   s = this;
   while((m = s.match(dash)))
    s = s.replace(m[1], m[2].toUpperCase());
   return s;
  };
 }
 @end @*/

 if(!ie5){
  dash = new RegExp('-(.)', 'g');
  function toHump(a, b){return b.toUpperCase();};
  String.prototype.encamel = function(){return this.replace(dash, toHump);};
 }

 if(ie && iever < 8){
  marqueeInit.table = [];
  window.attachEvent('onload', function(){
   marqueeInit.OK = true;
   for(var i = 0; i < marqueeInit.table.length; ++i)
   marqueeInit.run(marqueeInit.table[i]);
  });
 }
 
 function intable(el){
  while((el = el.parentNode))
   if(el.tagName && el.tagName.toLowerCase() === 'table')
    return true;
   return false;
 };

 marqueeInit.run = function(id){
   if(ie && !marqueeInit.OK && iever < 8 && intable(document.getElementById(id))){
    marqueeInit.table.push(id);
    return;
   }
   if(!document.getElementById(id))
    setTimeout(function(){marqueeInit.run(id);}, 300);
   else
    new Marq(c++, document.getElementById(id));
 }

 function trimTags(tag){
  var r = [], i = 0, e;
  while((e = tag.firstChild) && e.nodeType == 3 && tTRE[0].test(e.nodeValue))
   tag.removeChild(e);
  while((e = tag.lastChild) && e.nodeType == 3 && tTRE[0].test(e.nodeValue))
   tag.removeChild(e);
  if((e = tag.firstChild) && e.nodeType == 3)
   e.nodeValue = e.nodeValue.replace(tTRE[1], '');
  if((e = tag.lastChild) && e.nodeType == 3)
   e.nodeValue = e.nodeValue.replace(tTRE[2], '');
  while((e = tag.firstChild))
   r[i++] = tag.removeChild(e);
  return r;
 }

 function Marq(c, tag){
  var p, u, s, a, ims, ic, i, marqContent, cObj = this;
  this.mq = marqueeInit.ar[c];
  for (p in defaultconfig)
   if((this.mq.hasOwnProperty && !this.mq.hasOwnProperty(p)) || (!this.mq.hasOwnProperty && !this.mq[p]))
    this.mq[p] = defaultconfig[p];
  this.mq.style.width = !this.mq.style.width || isNaN(parseInt(this.mq.style.width))? '100%' : this.mq.style.width;
  if(!tag.getElementsByTagName('img')[0])
   this.mq.style.height = !this.mq.style.height || isNaN(parseInt(this.mq.style.height))? tag.offsetHeight + 3 + 'px' : this.mq.style.height;
  else
   this.mq.style.height = !this.mq.style.height || isNaN(parseInt(this.mq.style.height))? 'auto' : this.mq.style.height;
  u = this.mq.style.width.split(/\d/);
  this.cw = this.mq.style.width? [parseInt(this.mq.style.width), u[u.length - 1]] : ['a'];
  marqContent = trimTags(tag);
  tag.className = tag.id = '';
  tag.removeAttribute('class', 0);
  tag.removeAttribute('id', 0);
  if(ie)
   tag.removeAttribute('className', 0);
  tag.appendChild(tag.cloneNode(false));
  tag.className = ['marquee', c].join('');
  tag.style.overflow = 'hidden';
  this.c = tag.firstChild;
  this.c.appendChild(this.c.cloneNode(false));
  this.c.style.visibility = 'hidden';
  a = [[req1, this.c.style], [this.mq.style, this.c.style]];
  for (i = a.length - 1; i > -1; --i)
   for (p in a[i][0])
    if((a[i][0].hasOwnProperty && a[i][0].hasOwnProperty(p)) || (!a[i][0].hasOwnProperty))
     a[i][1][p.encamel()] = a[i][0][p];
  this.m = this.c.firstChild;
  if(this.mq.mouse == 'pause'){
   this.c.onmouseover = function(){cObj.mq.stopped = true;};
   this.c.onmouseout = function(){cObj.mq.stopped = false;};
  }
  this.m.style.position = 'absolute';
  this.m.style.left = '-10000000px';
  this.m.style.whiteSpace = 'nowrap';
  if(ie5) this.c.firstChild.appendChild((this.m = document.createElement('nobr')));
  if(!this.mq.noAddedSpace)
   this.m.appendChild(document.createTextNode('\xa0'));
  for(i = 0; marqContent[i]; ++i)
   this.m.appendChild(marqContent[i]);
  if(ie5) this.m = this.c.firstChild;
  ims = this.m.getElementsByTagName('img');
  if(ims.length){
   for(ic = 0, i = 0; i < ims.length; ++i){
    ims[i].style.display = 'inline';
    ims[i].style.verticalAlign = ims[i].style.verticalAlign || 'top';
    if(typeof ims[i].complete == 'boolean' && ims[i].complete)
     ic++;
    else {
     ims[i].onload = function(){
       if(++ic == ims.length)
        cObj.setup();
      };
    }
     if(ic == ims.length)
      this.setup();
   }
  }
   else this.setup()
 }

  Marq.prototype.setup = function(){
  if(this.mq.setup) return;
  this.mq.setup = this;
  var s, cObj = this;
  if(this.c.style.height === 'auto')
   this.c.style.height = this.m.offsetHeight + 4 + 'px';
  this.c.appendChild(this.m.cloneNode(true));
  this.m = [this.m, this.m.nextSibling];
  if(this.mq.mouse == 'cursor driven'){
   this.r = this.mq.neutral || 16;
   this.sinc = this.mq.inc;
   this.c.onmousemove = function(e){cObj.mq.stopped = false; cObj.directspeed(e)};
   if(this.mq.moveatleast){
    this.mq.inc = this.mq.moveatleast;
    if(this.mq.savedirection){
     if(this.mq.savedirection == 'reverse'){
      this.c.onmouseout = function(e){
       if(cObj.contains(e)) return;
       cObj.mq.inc = cObj.mq.moveatleast;
       cObj.mq.direction = cObj.mq.direction == 'right'? 'left' : 'right';};     
     } else {
      this.mq.savedirection = this.mq.direction;
      this.c.onmouseout = function(e){
       if(cObj.contains(e)) return;
       cObj.mq.inc = cObj.mq.moveatleast;
       cObj.mq.direction = cObj.mq.savedirection;};     
    }
    } else
     this.c.onmouseout = function(e){if(!cObj.contains(e)) cObj.mq.inc = cObj.mq.moveatleast;};
   }
   else
    this.c.onmouseout = function(e){if(!cObj.contains(e)) cObj.slowdeath();};
  }
  this.w = this.m[0].offsetWidth;
  this.m[0].style.left = 0;
  this.c.id = 'marq_kill_marg_bord';
  this.m[0].style.top = this.m[1].style.top = Math.floor((this.c.offsetHeight - this.m[0].offsetHeight) / 2 - oldie) + 'px';
  this.c.id = '';
  this.c.removeAttribute('id', 0);
  this.m[1].style.left = this.w + 'px';
  s = this.mq.moveatleast? Math.max(this.mq.moveatleast, this.sinc) : (this.sinc || this.mq.inc);
  while(this.c.offsetWidth > this.w - s)
   this.c.style.width = isNaN(this.cw[0])? this.w - s + 'px' : --this.cw[0] + this.cw[1];
  this.c.style.visibility = 'visible';
  this.runit();
  }
  
 Marq.prototype.slowdeath = function(){
  var cObj = this;
  if(this.mq.inc){
   this.mq.inc -= 1;
   this.timer = setTimeout(function(){cObj.slowdeath();}, 100);
  }
 }

 Marq.prototype.runit = function(){
  var cObj = this, d = this.mq.direction == 'right'? 1 : -1;
  if(this.mq.stopped || this.mq.stopMarquee){
   setTimeout(function(){cObj.runit();}, 300);
   return;
  }
  if(this.mq.mouse != 'cursor driven')
   this.mq.inc = Math.max(1, this.mq.inc);
  if(d * parseInt(this.m[0].style.left) >= this.w)
   this.m[0].style.left = parseInt(this.m[1].style.left) - d * this.w + 'px';
  if(d * parseInt(this.m[1].style.left) >= this.w)
   this.m[1].style.left = parseInt(this.m[0].style.left) - d * this.w + 'px';
  this.m[0].style.left = parseInt(this.m[0].style.left) + d * this.mq.inc + 'px';
  this.m[1].style.left = parseInt(this.m[1].style.left) + d * this.mq.inc + 'px';
  setTimeout(function(){cObj.runit();}, 30 + (this.mq.addDelay || 0));
 }

 Marq.prototype.directspeed = function(e){
  e = e || window.event;
  if(this.timer) clearTimeout(this.timer);
  var c = this.c, w = c.offsetWidth, l = c.offsetLeft, mp = (typeof e.pageX == 'number'?
   e.pageX : e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft) - l,
  lb = (w - this.r) / 2, rb = (w + this.r) / 2;
  while((c = c.offsetParent)) mp -= c.offsetLeft;
  this.mq.direction = mp > rb? 'left' : 'right';
  this.mq.inc = Math.round((mp > rb? (mp - rb) : mp < lb? (lb - mp) : 0) / lb * this.sinc);
 }

 Marq.prototype.contains = function(e){
  if(e && e.relatedTarget){var c = e.relatedTarget; if(c == this.c) return true;
   while ((c = c.parentNode)) if(c == this.c) return true;}
  return false;
 }

 function resize(){
  for(var s, m, i = 0; i < marqueeInit.ar.length; ++i){
   if(marqueeInit.ar[i] && marqueeInit.ar[i].setup){
    m = marqueeInit.ar[i].setup;
    s = m.mq.moveatleast? Math.max(m.mq.moveatleast, m.sinc) : (m.sinc || m.mq.inc);
    m.c.style.width = m.mq.style.width;
    m.cw[0] = m.cw.length > 1? parseInt(m.mq.style.width) : 'a';
    while(m.c.offsetWidth > m.w - s)
     m.c.style.width = isNaN(m.cw[0])? m.w - s + 'px' : --m.cw[0] + m.cw[1];
   }
  }
 }

 if (window.addEventListener)
  window.addEventListener('resize', resize, false);
 else if (window.attachEvent)
  window.attachEvent('onresize', resize);

})(); /*scroll script END*/
</script>

<!-- VK BUTTON SCRIPT -->
<script type="text/javascript" src="http://userapi.com/js/api/openapi.js?34"></script>

<script type="text/javascript">
  VK.init({apiId: 2422137, onlyWidgets: true});
</script>
</head>
<body topmargin="0" leftmargin="0" marginheight="0" marginwidth="0" bgcolor="#FFFFFF" text="#000000">
<SCRIPT src="/www/largeimg.js"></SCRIPT>
<SCRIPT src="/www/valid_form.js"></SCRIPT>


<div id="newheader1">
<div id="newheader2">
<div id="newheader3">
<a class="inheadlnk" href="/"></a>
<p class="inhead">Мы предлагаем то, что используем сами!</p> 
</div>
</div>
</div>


<div style="position: absolute; top: 244px; left: 12px;">
<script type="text/javascript">
function Search_SendForm()
{
	document.forms['SearchForm'].submit();
}
</script>
<form action="/search/" method="get" name="SearchForm" style="margin: 0px;">
<input type="text" name="search" value="" maxlength="50" style="width: 160px; height: 16px; border-size: 0px; font-size: 11px;"><input type="hidden" name="where" value="full">

</div>

<table width="100%" border="0" cellspacing="0" cellpadding="0" bgcolor="#DFE7F5" background="/www/pics/m_f.gif" height="72">
<tr height="40">
<td width="192" height="40"><img src="/www/pics/m_1.jpg" width="192" height="40" alt=""></td>
<td width="37" height="40"><input type="image" src="/www/pics/m-23.jpg" width="37" height="40" alt="Поиск по сайту" onClick="Search_SendForm()"></td>
<td width="53" height="40"><a href="/sitemap/"><img src="/www/pics/m-445.jpg" width="53" height="40" alt="Карта сайта" border="0"></a></td>
<td width="53" height="40"><a href="/"><img src="/www/pics/m-441.jpg" width="53" height="40" alt="На главную" border="0"></a></td>
<td width="81">&nbsp;</td></form>
<td>
<body onLoad="goforit()">
<script>



var dayarray=new Array("Воскресение","Понедельник","Вторник","Среда","Четверг","Пятница","Суббота")
var montharray=new Array("Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь")

function getthedate(){
var mydate=new Date()
var year=mydate.getYear()
if (year < 1000)
year+=1900
var day=mydate.getDay()
var month=mydate.getMonth()
var daym=mydate.getDate()
if (daym<10)
daym="0"+daym

//change font size here
var cdate="<small><font color='#ffffff' face='Arial'><b>"+dayarray[day]+", "+montharray[month]+" "+daym+", "+year+" </b></font></small>"
if (document.all)
document.all.clock.innerHTML=cdate
else if (document.getElementById)
document.getElementById("clock").innerHTML=cdate
else
document.write(cdate)
}
if (!document.all&&!document.getElementById)
getthedate()
function goforit(){
if (document.all||document.getElementById)
setInterval("getthedate()",1000)
}

</script>
<span id="clock"></span></td>
<td><img src="/www/pics/0.gif" width="1" height="40" alt=""></td>
<td width="100" height="40"><a href="/about/"><img src="/www/pics/m-4.jpg" width="100" height="40" alt="" border="0"></a></td>
<td width="92" height="40"><a href="/support/"><img src="/www/pics/m-5.jpg" width="92" height="40" alt="" border="0"></a></td>
<td width="72" rowspan="2" background="/www/pics/m-9.gif">
	<table width="100%" border="0" cellspacing="0" cellpadding="0">
	<tr height="40"><td width="96" height="40"><a href="/call/"><img src="/www/pics/0.gif" width="96" height="40" alt="" border="0"></a></td></tr>
	<tr height="32"><td class="topmenu" height="32"><a class=Menu_2 href=/call/>Позвонить</a></td></tr>
	</table>
</td>
<td width="83" height="40"><a href="/mail/"><img src="/www/pics/m-7.jpg" width="83" height="40" alt="" border="0"></a></td>
</tr>
<tr height="32">

<td><img src="/www/pics/0.gif" width="1" height="32" alt=""></td>
<td><img src="/www/pics/0.gif" width="1" height="32" alt=""></td>
<td><img src="/www/pics/0.gif" width="1" height="32" alt=""></td>
<td><img src="/www/pics/0.gif" width="1" height="32" alt=""></td>
<td width="81">&nbsp;</td>

<td>

</td>

<td><img src="/www/pics/0.gif" width="1" height="32" alt=""></td>

<td class="topmenu" onmouseover="DropDown()" onmouseout="DropBack()"><a class=Menu_2 href=/about/>О компании</a></td>
<td class="topmenu" height="32"><a class=Menu_2 href=/support/>Поддержка</a></td>
<td class="topmenu" height="32"><a class=Menu_2 href=/mail/>Написать</a></td>
</tr>

</table>

<script type="text/javascript"> 
function DropDown()
{
	var obj = document.getElementById('dropul');
	obj.style.display="block"
}

function DropBack()
{
	var obj = document.getElementById('dropul');
	obj.style.display="none"
}
</script>

<ul id="dropul" onmouseover="DropDown()" onmouseout="DropBack()">
<li><a href="http://www.alterip.ru/about/company/">Мы в IP-телефонии</a></li>
<li><a href="http://www.alterip.ru/about/review/">Отзывы</a></li>
<li><a href="http://www.alterip.ru/about/secrtificates/">Сертификаты</a></li>
<li><a href="http://www.alterip.ru/about/contacts/">Контакты</a></li>
<li><a href="http://www.alterip.ru/partners/">Наши партнеры</a></li>
<li><a href="http://www.alterip.ru/about/black-list/">Черный список</a></li>
<li><a href="http://www.alterip.ru/about/collaboration/">Дилерам и партнерам</a></li>
<li><a href="http://www.alterip.ru/about/vacancy/">Вакансии</a></li>
</ul>

<span style="display:block; height:15px; margin:0; padding:0;"></span>

<div  id="mycrawler2" class="marquee">
<table class="mcontainer"><tr><td><nobr>
<a href="http://www.altertex.ru/voip/apt/"><IMG src="www/logo/add_paccroll.png"></a>
<a href="http://www.altertex.ru/voip/2n/">2N</a>
<a href="http://www.altertex.ru/voip/aethra/"><IMG src="www/logo/aethracroll.png"></a>
<a href="http://www.altertex.ru/voip/dcl/"><IMG src="www/logo/draytekcroll.jpg"></a>
<a href="http://www.altertex.ru/voip/agat_rt/"><IMG src="www/logo/agatrtscroll.jpg"></a>
<a href="http://www.altertex.ru/voip/all_voip/"><IMG src="www/logo/All_voipcroll.png"></a>
<a href="http://www.altertex.ru/voip/audiocodestenor/"><IMG src="www/logo/audio_codescroll.png"></a>
<a href="http://www.altertex.ru/voip/cisco/"><IMG src="www/logo/ciscocroll.png"></a>
<a href="http://www.altertex.ru/voip/davolink/"><IMG src="www/logo/davolinkcroll.png"></a>
<a href="http://www.altertex.ru/voip/dlink/"><IMG src="www/logo/DLinkcroll.png"></a>
<a href="http://www.altertex.ru/voip/ghcl/"><IMG src="www/logo/gohighcroll.jpg"></a>
<a href="http://www.altertex.ru/voip/goodwin/"><IMG src="www/logo/gOOdwimcroll.jpg"></a>
<a href="http://www.altertex.ru/voip/link/"><IMG src="www/logo/Linksyscroll.png"></a>
<a href="http://www.altertex.ru/voip/quintum/"><IMG src="www/logo/quintumcroll.jpg"></a>
<a href="http://www.altertex.ru/voip/skype_made/"><IMG src="www/logo/skypematecroll.jpg"></a>
<a href="http://www.altertex.ru/voip/sipura/"><IMG src="www/logo/sipscroll.bmp"></a>
</nobr></td></tr></table>
</div>
<script type="text/javascript">
marqueeInit({
uniqueid: 'mycrawler2',
inc: 2, //speed - pixel increment for each iteration of this marquee's movement
mouse: 'pause', //mouseover behavior ('pause' 'cursor driven' or false)
moveatleast: 1,
neutral: 180,
savedirection: true
});
</script>


<table width="100%" border="0" cellspacing="0" cellpadding="5"><tr valign="top">
<td width="265">

	<table width="100%" border="0" cellspacing="0" cellpadding="5">
	
	<tr> 
	<td width="50"><img src="/www/pics/m-p-1.jpg" alt="Офисная телефония" vspace="0" hspace="0" width="50" height="38"></td>
	<td><a href="/ip-telephonia/" class="Menu_1">Корпоративные системы связи</a></td>
	</tr>
	
	<tr> 
	<td width="50"><img src="/www/pics/m-p-4.jpg" alt="Операторам связи" vspace="0" hspace="0" width="50" height="38"></td>
	<td><a href="/operator/" class="Menu_1">Операторские системы связи</a></td>
	</tr>
	
	<tr> 
	<td width="50"><img src="/www/icns/menu-pic-price.gif" alt="Прайс-лист" width="50" height="38"></td>
	<td><a href="/order/" class="Menu_1">Заказать прайс-лист</a></td>
	</tr>
	
	<tr> 
	<td width="50"><img src="/www/icns/menu-pic-partners.gif" alt="Наши партнеры" width="50" height="38"></td>
	<td><a href="/partners/" class="Menu_1">Наши партнеры и клиенты</a></td>
	</tr>
	
	<tr> 
	<td width="50"><img src="/www/pics/menu-pic-forum.gif" border="0" vspace="0" hspace="0"></td>
	<td><a href="http://www.altertex.ru/forums" class="Menu_1">Форум</a></td>
	</tr>
	
	<tr> 
	<td width="50"><img src="/www/pics/wcamicon.bmp" alt="5,7 Kb" width="50" height="38"></td>
	<td><a href="/videoconf/" class="Menu_1">Видео конференц-связь</a></td>
	</tr>
	
	<tr> 
	<td width="50"><img src="/www/pics/menu-pic-znak.gif" alt="Семинары" vspace="0" hspace="0" width="50" height="38"></td>
	<td><a href="/seminars/" class="Menu_1">Семинары</a></td>
	</tr>
	
	</table> 
	<!--<P><A href="/call/audio/">
<CENTER><IMG height=108 alt="Бесплатный звонок" src="/www/imgs/products/free-call.png" width=108 border=0></CENTER></A>
<P>--></P>
<SCRIPT language=javaScript src="/www/common.js" type=text/javascript></SCRIPT>

<P><A href="javascript:openwin('/www/forms/new_acs_free_1.html')">
<CENTER><IMG alt=IP-office src="/www/imgs/products/free-load.gif" border=0></CENTER></A>
<P></P>
<P></P>
<P><A href="/about/vacancy/">
<CENTER><IMG alt=Вакансии src="/www/imgs/vacancy1.jpg" border=0> </CENTER>
<H2>
<CENTER>Вакансии</H2></CENTER>
<P></P></A>
<P></P>
</td>

<td>

	<h1>Практикум-Developer. Занятие четвертое</h1>
	
	<!-- BEGIN OF CONTENT -->
	<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD width=35><IMG height=14 alt="" src="/www/pics/vstavka-l-t.gif" width=35></TD>
<TD background=/www/pics/vstavka-t.gif><IMG height=1 alt="" src="/www/pics/0.gif" width=1></TD>
<TD width=20><IMG height=14 alt="" src="/www/pics/vstavka-r-t.gif" width=20></TD></TR>
<TR>
<TD vAlign=bottom width=35 background=/www/pics/vstavka-l-fon.gif><IMG height=32 alt="" src="/www/pics/vstavka-l-b-2.gif" width=35></TD>
<TD>
<TABLE cellSpacing=0 cellPadding=20 width="100%" border=0>
<TBODY>
<TR>
<TD class=vstavka_fon background=/www/pics/vstavka-fon-4.gif>
<H1>Занятие четвертое<BR>В помощь оператору связи или как выбрать альтернативное решение </H1>
<P>Возможности продуктов от компании «Альтекс Софт Технолоджиз» весьма обширны. В различных комбинациях – это универсальные системы, реализующие весь функциональный спектр современных <STRONG>VoIP </STRONG>технологий. Поэтому перед оператором встает задача найти именно ту комбинацию, которая обеспечит максимальную отдачу и впишется в бюджетные рамки. <BR>В настоящее время существует множество систем авторизации, маршрутизации и учета соединений, что обусловлено модульной структурой программного обеспечения. Кроме того, в силу не устоявшейся терминологии, при выборе оборудования часто имеет место подмена понятий и путаница в определении функционала софт-свичей 4 и 5 классов. <BR>В этой статье мы хотим помочь операторам разобраться в особенностях наших <STRONG>IP </STRONG>- телефонных продуктов и сделать правильный выбор. </P>
<P><B>Назначение программного коммутатора Alter-ProxySoftSwitch (PSS)</B></P>
<P>Схематично, работу <STRONG>PSS </STRONG>можно описать следующим образом: <STRONG>PSS </STRONG>принимает соединение по <STRONG>IP </STRONG>от одного устройства и устанавливает <STRONG>IP</STRONG>-соединение с другим устройством. <BR>Каждое такое соединение называется <B><I>плечом</I></B> (рис. 1). Последовательность плеч образует <B><I>канал связи</I></B>, по которому разговаривают абоненты. </P>
<P class=center>&nbsp;<IMG height=177 alt="Транзитный режим связи" src="/www/soft/pic1.gif" width=486></P>
<P>Емкость <STRONG>ProxySoftSwitch </STRONG>(и, следовательно, его стоимость) определятся одновременным количеством обслуживаемых каналов. </P>
<P>Представленный на рисунке 1 режим связи называется транзитом, при этом в зависимости от настроек через <STRONG>PSS </STRONG>могут проходить либо все данные – сигнализация и голосовые пакеты, либо только пакеты с сигнализацией. </P>
<P>Как правило, <B>транзит используется в следующих случаях</B>: 
<UL>
<LI>
<H3>Перепродажа трафика</H3>
<P>Компания-брокер договаривается с оператором (терминатором трафика) о возможности совершать звонки по <STRONG>IP </STRONG>и с поставщиком входящих звонков, о том, чтобы звонки шли через <STRONG>PSS </STRONG>брокера. Разница в стоимостях между покупкой трафика у оператора и продажей его поставщику звонков – составляет прибыль брокера (рисунок 2).</P>
<P>&nbsp;<IMG height=260 alt="Схема перепродажи трафика" src="/www/soft/pic2.gif" width=507></P>
<LI>
<H3>Предоставление городского телефонного номера</H3>
<P>Без дополнительных видов обслуживания. В настоящее время такой сервис набирает обороты, так как предоставление услуг связи по сетям передачи данных гораздо выгоднее, чем традиционный способ с использованием аналоговых телефонных линий. Выгодным его делает возможность использовать одну инфраструктуру для предоставления нескольких видов услуг: доступ в Интернет, IPTV, телефонная связь.</P>
<LI>
<H3>Организация корпоративной сети связи</H3>
<P>Такой способ организации используется редко, поскольку корпоративной сети необходимы дополнительные виды услуг – перехват и перевод звонка, конференция и многие другие. А данные сервисы можно реализовать только с использованием <STRONG>IP-АТС</STRONG>, которая, в силу особенностей функционала работает лишь в режиме проксирования голосового трафика. В определенных же случаях транзит без проксирования позволяет улучшить качество связи и уменьшить затраты на содержание комплекса связи. </P></LI></UL>
<P>Функциональность <STRONG>PSS </STRONG>не ограничивается одним транзитом трафика. Другая, значимая возможность программы – <B>организация голосового меню</B> (<STRONG>IVR</STRONG>). </P>
<P>Механизм работы <STRONG>IVR </STRONG>состоит в следующем правиле: <BR>Входящее соединение переводится в режим голосового меню, если его параметры отвечают ряду условий (<STRONG>IP</STRONG>-адрес вызывающего шлюза, вызываемый номер и т.п.). В этом режиме <STRONG>PSS </STRONG>воспроизводит заранее записанные голосовые файлы и обрабатывает цифры, которые в тональном режиме набирает абонент. </P>
<P>Типичный вариант использования режима <STRONG>IVR </STRONG>– <B>организация карточной платформы</B>. Алгоритм работы комплекса в этом случае такой: </P>
<OL>
<LI>прием входящего соединения и перевод в режим <STRONG>IVR</STRONG>; 
<LI>приглашение набрать <STRONG>ПИН</STRONG>-код; 
<LI>сверка <STRONG>ПИН</STRONG>-кода с данными биллинговой системы; 
<LI>воспроизведение голосовых файлов, соответствующих состоянию баланса; 
<LI>приглашение набрать номер вызываемого абонента; 
<LI>запрос разрешения на звонок в биллинговой системе; 
<LI>воспроизведение максимально разрешенной длительности разговора в выбранном направлении; 
<LI>соединение по набранному номеру; 
<LI>завершение разговора; 
<LI>воспроизведение длительности состоявшегося разговора. </LI></OL>
<P>Возможности голосового меню можно использовать не только для организации карточных платформ <STRONG>IP</STRONG>-телефонии, но и для построения различных голосовых порталов, систем авторизованного доступа к информации для страховых, банковских и других подобных организаций. </P>
<P>Голосовое меню является неотъемлемой частью при организации сервиса <STRONG>CALLBACK</STRONG>. В этом случае <STRONG>PSS </STRONG>сам звонит абоненту в ответ на его запрос, и после установления соединения, либо переходит в режим голосового меню, либо устанавливает соединение по переданному в запросе номеру. Запрос может быть организован разными способами: </P>
<UL>
<LI>через <STRONG>WEB </STRONG>интерфейс; 
<LI>через короткое сообщение <STRONG>SMS</STRONG>; 
<LI>посредством звонка на специально выделенный номер; 
<LI>из специального <STRONG>JAVA</STRONG>-приложения на сотовом телефоне через GPRS-соединение. </LI></UL>
<P>Если <STRONG>CALLBACK</STRONG>-запрос не содержит номера для установления соединения, то абонент может набрать его в режиме голосового меню. Кроме того, в режиме голосового меню абонент может прослушать свой баланс и изменить некоторые настройки учетной записи. </P>
<P>Таковы основные возможности <STRONG>PSS</STRONG>. Определив виды сервисов, для которых будет использоваться программа, необходимо выбрать для нее систему управления. В <STRONG>PSS </STRONG>имеется несколько библиотек для взаимодействия с различными системами биллинга и маршрутизации. </P>
<P><B>Управляющие библиотеки Alter-ProxySoftSwitch</B></P>
<P>В процессе развития продукта сформировалось <B>три основных варианта библиотек</B>. </P>
<H3>1.Стандартные библиотеки авторизации и маршрутизации</H3>
<P>Это самый первый и вполне автономный интерфейс к <STRONG>PSS</STRONG>. </P>
<P>Данный интерфейс состоит из двух библиотек <B>«billing.dll»</B> и <B>«config.dll»</B>. Автономным его можно назвать потому, что для работы PSS с этими библиотеками не нужно больше никаких внешних систем авторизации и маршрутизации. Все необходимые данные для библиотеки записывают в файлы с расширением <B>«bin»</B>. </P>
<P><B>«billing.dll»</B> – библиотека авторизации; настройки библиотеки доступны через <STRONG>WEB </STRONG>интерфейс, где можно указать параметры учетных записей пользователей системы: 
<UL>
<LI>имя; 
<LI><STRONG>IP</STRONG>-адрес; 
<LI>логин/пароль; 
<LI>имя плана маршрутизации; 
<LI><STRONG>АОН </STRONG>для подстановки, при звонке пользователя. </LI></UL>
<P></P>
<P>Библиотека дает возможность пользователю регистрироваться на <STRONG>PSS </STRONG>со своего оборудования с указанными логином и паролем, но при этом не запоминает параметров (<STRONG>IP</STRONG>-адрес, номер порта), необходимых для вызова данного пользователя. Поэтому если требуется установить связь с каждым из пользователей, все их данные нужно занести еще раз, но уже в таблицу маршрутизации. Тогда, при входящем звонке библиотека авторизует пользователя по <STRONG>IP</STRONG>-адресу, или по логину/паролю, или по совокупности всех параметров, и назначает данному звонку план маршрутизации. <BR><B>«config.dll»</B> – библиотека маршрутизации; настройки библиотеки также доступны через <STRONG>WEB </STRONG>интерфейс, где находятся: таблица шлюзов и таблица виртуальных номерных планов. <BR>Таблица шлюзов содержит параметры шлюзов, такие как: список кодеков, протокол, преобразование входящих и исходящих номеров и т.п. <BR>Номерных планов, обозначаемых во второй таблице, может быть несколько. Это позволяет разным группам клиентов предоставлять различный по качеству уровень сервиса. Настройка номерного плана присутствует в параметрах пользователя (см. библиотеку <B>billing.dll</B>). </P>
<H3>2.RADIUS-библиотека</H3>
<P>Позволяет взаимодействовать по протоколу <STRONG>RADIUS </STRONG>не только с биллингами, но и с системами маршрутизации. Библиотека включает в себя голосовое меню и поддерживает режим <STRONG>CALLBACK</STRONG>. </P>
<P>Протокол <STRONG>RADIUS </STRONG>состоит из двух частей: 
<UL>
<LI>система учета; 
<LI>система авторизации. </LI></UL>
<P></P>
<P>Поскольку система учета встроена в ядро <STRONG>ProxySoftSwitch</STRONG>, то программу с любым набором библиотек можно подключить к <STRONG>RADIUS</STRONG>-серверу и фиксировать данные по всем соединениям через <STRONG>RADIUS-accounting</STRONG>. </P>
<P>Система авторизации <STRONG>RADIUS-access</STRONG> является неотъемлемой частью именно «<STRONG>RADIUS-библиотеки</STRONG>». Для взаимодействия с этой библиотекой, как и в предыдущем варианте, имеются две <STRONG>WEB</STRONG>-страницы с настройками маршрутизации и авторизации. </P>
<P>В данной схеме при регистрации или транзитном звонке недостаточно совпадения логина/пароля с данными <STRONG>PSS</STRONG>-а, необходимо также, чтобы прошла успешная авторизация в биллинговой системе с использованием <STRONG>RADIUS-протокола</STRONG>. При наличии логина и пароля <STRONG>RADIUS </STRONG>использует их, либо (если логина и пароля – нет) производится попытка авторизации с использованием <STRONG>IP</STRONG>-адреса удаленного шлюза. </P>
<P>Таблица в <STRONG>ProxySoftSwitch</STRONG>, дублирующая данные пользователя в биллинговой системе необходима в силу особенностей протокола SIP, который не передает пароль пользователя в явном виде. Поэтому для авторизации пользователя и дальнейшей передаче данных в <STRONG>RADIUS </STRONG>необходимо иметь таблицу паролей в <STRONG>PSS</STRONG>. </P>
<P>Если используется голосовая платформа, то введенный ПИН-код разделяется на логин и пароль, и пользователь также авторизуется с использованием протокола <STRONG>RADIUS</STRONG>. После успешной авторизации и ввода вызываемого номера через <STRONG>RADIUS</STRONG>, запрашивается максимально возможное для данного звонка время. </P>
<P>При соответствующей поддержке биллинговой системы от <STRONG>RADIUS</STRONG>-сервера можно получать данные, влияющие на маршрутизацию: 
<OL>
<LI>В <STRONG>RADIUS</STRONG>-пакетах, которые приходят в ответ на запрос соединения, может содержаться имя таблицы маршрутизации. 
<LI>Если сформированы специальные запросы на общий или отдельный <STRONG>RADIUS</STRONG>-сервер, то в ответ сервер должен вернуть необходимую таблицу маршрутизации, данные маршрутизации самого <STRONG>PSS </STRONG>здесь не используются. 
<LI>В остальных случаях используется первая созданная в системе таблица маршрутизации, вне зависимости от ее названия. </LI></OL>
<P></P>
<H3>3.DEVELOPER-библиотеки</H3>
<P>Наиболее функциональный набор библиотек включают в себя возможность работы как через <STRONG>RADIUS</STRONG>, так и возможность работы с базами данных напрямую. Библиотеки подключаются к любому SQL-серверу, поддерживающему ODBC интерфейс. Запросы к базе данных формируются в обычном текстовом виде – в скриптовых файлах. В них описываются сценарии работы системы в зависимости от различных условий и параметров соединения. В отличие от предыдущих вариантов, «<STRONG>DEVELOPER-библиотеки</STRONG>» позволяют производить полноценную регистрацию пользовательских устройств с сохранением всех параметров удаленного оборудования. Это позволяет создавать сеть SIP и H323 устройств с динамически выделяемыми IP-адресами. </P>
<P>Необходимо отметить, что «<STRONG>DEVELOPER-библиотеки</STRONG>» также функционально разделяются на библиотеку маршрутизации и библиотеку авторизации. </P>
<P><I>Библиотека маршрутизации</I> аналогична стандартной <B>«config.dll»</B>. Это обстоятельство в ряде случаев позволяет ускорить процесс ввода в эксплуатацию новой системы. Поскольку на первом этапе может быть использована стандартная библиотека маршрутизации, без ущерба функционалу системы. Создание же механизмов маршрутизации с использованием БД можно перенести на более поздний этап. </P>
<P><I>Библиотека авторизации</I> включает в себя системы: 
<UL>
<LI>регистрации; 
<LI>разделения входящих звонков по различным типам соединений – транзит, голосовое меню, CALLBACK; 
<LI>голосового меню; 
<LI>авторизации по RADIUS. </LI></UL>
<P>Для наглядной демонстрации взаимодействия библиотек <STRONG>DEVELOPER </STRONG>с базой данных, разработан пример реализации системы на БД ACCESS. Он иллюстрирует основные возможности технологии <STRONG>DEVELOPER</STRONG>, однако не может быть использован в качестве готовой реализации в сетях действующих операторов. Здесь необходима работа квалифицированных специалистов SQL для интеграции <STRONG>PSS </STRONG>с биллинговой системой. </P>
<P>Чтобы сориентироваться, какой из видов библиотек предпочтительнее для тех или иных задач – составлена следующая таблица. </P>
<P><B>Сводная таблица возможностей наборов библиотек при решении различных задач</B></P>
<TABLE class=vstavka_text borderColorDark=#e0e7f5 cellPadding=5 borderColorLight=#ffffff border=1>
<TBODY>
<TR>
<TH>Решаемые задачи</TH>
<TH>Стандартные библиотеки</TH>
<TH>RADIUS-библиотеки</TH>
<TH>DEVELOPER-библиотеки</TH></TR>
<TR>
<TD>Построение корпоративной сети связи или небольшой операторской сети связи. </TD>
<TD>Возможно при использовании статических IP-адресов. Не требует сложных настроек, быстро разворачивается.</TD>
<TD>Возможно при использовании статических IP-адресов и при наличии биллинга, но оправдано только при необходимости оперативного учета и ограничения полномочий пользователей. </TD>
<TD>Возможно при использовании как статических, так и динамических IP-адресов. Можно использовать готовые примеры, разработанные для базы данных ACCESS в неизменном виде или с небольшими доработками. </TD></TR>
<TR>
<TD>Транзит трафика с целью перепродажи.</TD>
<TD>Возможно при учете данных по CDR-файлам. Необходимо постоянно следить за текущим балансом партнеров оригинаторов и при необходимости отключать их вручную.</TD>
<TD>Возможно построение полноценной системы с автоматическим учетом и контролем потребляемого трафика в биллинговой системе.</TD>
<TD>Возможно. Необходима интеграция с биллинговой системой.</TD></TR>
<TR>
<TD>Карточная платформа.</TD>
<TD>-</TD>
<TD>Возможно построение полноценной системы с развернутым голосовым меню. Внедрение дополнительных сервисов требует доработок в RADIUS-сервере, подключенном к биллингу.</TD>
<TD>Возможно построение полноценной системы с развернутым голосовым меню. Достаточно легко внедряются любые дополнительные сервисы, например такие как: задание АОНа, перевод средств с карточки на карточку и т.п. </TD></TR>
<TR>
<TD>CALLBACK</TD>
<TD>-</TD>
<TD>Возможно. Но полноценный учет осуществим только для определенных алгоритмов обработки соединений, многое зависит от возможностей конкретной биллинговой системы. </TD>
<TD>Возможно, наиболее предпочтительный вариант для данного вида сервиса. Можно реализовать любой вариант учета соединений.</TD></TR>
<TR>
<TD>Предоставление городского телефонного номера.</TD>
<TD>Возможно при использовании статических IP-адресов. При постоянной миграции клиентов в сети и изменении параметров абонентских устройств очень тяжело конфигурировать систему. Поскольку учет данных совершается по CDR-файлам, необходимо постоянно следить за текущим балансом клиентов – вручную. </TD>
<TD>Возможно при использовании статических IP-адресов. При постоянном миграции клиентов в сети и изменении параметров абонентских устройств возникают трудности с конфигурированием системы. </TD>
<TD>Возможно, наиболее предпочтительный вариант для данного вида сервиса. Полноценная регистрация позволяет автоматически отслеживать перемещение абонентских устройств. Позволяет быстро подключить к существующей биллинговой системе для единого учета всех потребляемых в рамках TriplePlay услуг.</TD></TR></TBODY></TABLE><BR>
<P>Из данной таблицы видно, что при наличии квалифицированных специалистов по <STRONG>SQL </STRONG>базам данных, более удобным является использование «<STRONG>DEVELOPER-библиотек</STRONG>». </P>
<P>При организации транзита трафика и карточной платформы наиболее простым и очевидным вариантом с точки зрения стыковки с биллингом является «<STRONG>RADIUS-библиотека</STRONG>». </P>
<P>Для создания небольшой корпоративной сети можно использовать самые быстрые и простые в использовании «Стандартные библиотеки». </P>
<P>К нашему обзору решений на <STRONG>ProxySoftSwitch </STRONG>можно добавить краткий список функциональных возможностей ядра, которые доступны при использовании любых библиотек: 
<UL>
<LI>поддержка протоколов SIP 2.0 и H323; 
<LI>конвертация протоколов; 
<LI>поддержка кодеков G711, G729, G723.1, GSM-0610, iLBC; 
<LI>конвертация кодеков; 
<LI>поддержка протокола передачи факсов T.38; 
<LI>конвертация из G711 в T.38 и обратно; 
<LI>управляемое проксирование голосовых пакетов; 
<LI>работа с оборудованием расположенным за NAT; 
<LI>прием DTMF: H245 signal, H245 alpha numeric, RFC2833, SIP INFO; 
<LI>передача DTMF: H245 alpha numeric (для H323), RFC2833 и SIP INFO (для SIP2.0); 
<LI><STRONG>RADIUS ACCOUNTING </STRONG>– учет соединений с использованием <STRONG>РАДИУС</STRONG>а; 
<LI>возможность масштабирования решения с использованием кластерной схемы до 10 000 каналов. </LI></UL>
<P>В начале статьи мы упоминали проблему подмены понятий при выборе решения. Речь идет о том, что многие операторы для предоставления услуги «городской номер через сеть передачи данных» ориентируются на внедрение <STRONG>IP-АТС</STRONG>. Но по ранее изложенному видно, что такую услугу можно предоставлять на обычном транзитном коммутаторе. </P>
<P>Выбор же конкретного продукта, зависит от набора услуг, которые оператор будет предлагать пользователям. </P>
<P>Если это будет услуга, полностью аналогичная традиционной телефонной линии, то <STRONG>ProxySoftSwitch </STRONG>хорошо справится с этой задачей. Если же необходимо организовать дополнительные сервисы, как например: 
<UL>
<LI>перевод звонка; 
<LI>конференция; 
<LI>групповой вызов; 
<LI>переадресация, </LI></UL>в этом случае не обойтись без <STRONG>IP-АТС </STRONG>(<STRONG>Alter-CallSystem</STRONG>). А если требуются:<BR>
<UL>
<LI>голосовая почта; 
<LI>факсимильная почта, </LI></UL>то в дополнение необходим факсимильно-голосовой сервер (FaxVoiceServer). 
<P>Построение систем с использованием <STRONG>Alter-CallSystem</STRONG> и <STRONG>FaxVoiceServer</STRONG> предмет обсуждения не для одной статьи, так как огромное количество возможностей предполагает большое количество вариантов использования системы. Отметим лишь основные, базисные решения, относящиеся к операторам. </P>
<P>Оператором связи данные продукты могут быть использованы в следующих целях: 
<UL>
<LI>предоставление городского телефонного номера с расширенным набором дополнительных сервисов; 
<LI>предоставление в аренду виртуальной <STRONG>IP-АТС</STRONG>; 
<LI>предоставление в аренду виртуального контакт-центра (<STRONG>CALL CENTER</STRONG>). </LI></UL>
<P>Создание подобных комплексов возможно только по технологии <STRONG>DEVELOPER</STRONG>, так как подразумевает разработку системы по индивидуальному техническому заданию. В большей степени это связано с тем, что именно индивидуальное проектирование системы позволяет оператору связи создавать уникальные конкурентные услуги, которые позволяют выгодно выделяться на бурно развивающемся рынке телекоммуникаций. </P>
<P><A class=Menu_1 href="/support/instructions/">« к списку статей</A> </P></TD></TR></TBODY></TABLE></TD>
<TD vAlign=bottom width=20 background=/www/pics/vstavka-r-fon.gif><IMG height=30 alt="" src="/www/pics/vstavka-r-3.gif" width=20></TD></TR>
<TR>
<TD width=35><IMG height=19 alt="" src="/www/pics/vstavka-l-b.gif" width=35></TD>
<TD align=right background=/www/pics/vstavka-b.gif><IMG height=19 alt="" src="/www/pics/0.gif" width=1></TD>
<TD width=20><IMG height=19 alt="" src="/www/pics/vstavka-r-b.gif" width=20></TD></TR></TBODY></TABLE>
	<!-- END OF CONTENT -->
	
</td>
</tr></table>

<TABLE class=Copyright cellSpacing=0 cellPadding=20 width="100%" bgColor=#c8daf7 border=0>
<TBODY>
<TR>
<TD>
<TABLE style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; WIDTH: 597px; BORDER-BOTTOM: medium none; HEIGHT: 124px" cellSpacing=0 cellPadding=1 width=597 border=0>
<TBODY>
<TR>
<TD width=150><SMALL><STRONG>Адрес:</STRONG> </SMALL></TD>
<TD><SMALL>Россия, Москва, Технопарк МТУСИ</SMALL></TD></TR>
<TR>
<TD width=150><SMALL><STRONG>Время работы:</STRONG></SMALL> </TD>
<TD><SMALL>10:00-18:00 </SMALL></TD></TR>
<TR>
<TD width=150><SMALL><STRONG>Почтовый адрес:</STRONG></SMALL></TD>
<TD><SMALL>111024, г. Москва, ул. Авиамоторная, д.8а, стр.5</SMALL></TD></TR>
<TR>
<TD width=150><SMALL><STRONG>Телефоны</STRONG></SMALL></TD>
<TD><SMALL>+7(495)981-88-77 </SMALL></TD></TR>
<TR>
<TD width=150><SMALL><STRONG>ICQ:</STRONG></SMALL></TD>
<TD><SMALL>632583462</SMALL></TD></TR>
<TR>
<TD width=150><STRONG><FONT size=2>Общие вопросы:</FONT></STRONG></TD>
<TD><FONT size=2><A href="mailto:office@vcomtel.ru">office @vcomtel.ru</A></FONT></TD></TR>
<TR>
<TD width=150><STRONG><FONT size=2>Коммерческая служба:</FONT></STRONG></TD>
<TD><FONT size=2><A href="mailto:sales@ vcomtel.ru">sales @ vcomtel.ru</A></FONT>&nbsp;+7(495)981-88-77</TD></TR>
<TR>
<TD width=150><SMALL><STRONG>Техническая Служба:</STRONG></SMALL></TD>
<TD><FONT size=2><A href="mailto:service@ vcomtel.ru">service @ vcomtel.ru</A>&nbsp;&amp; <A href="mailto:Tech_Bit@vcomtel.ru">Tech_Bit@vcomtel.ru</A> доб. 322; 402 и 7200</FONT></TD></TR></TBODY></TABLE><STRONG>Дежурный администратор</STRONG>&nbsp;&nbsp; +7(965)318-14-41 
<TD>
<TABLE cellSpacing=0 cellPadding=5 width="100%" border=0>
<TBODY>
<TR>
<TD>
<P><FONT size=2>Все права принадлежат <STRONG>AlterTex Co., Ltd © </STRONG><BR>По вопросам использования материалов обращайтесь в пресс-службу компании</FONT><BR></P></TD>
<TD><SMALL>
<P><IMG height=33 src="/www/pics/micro-logo.jpg" width=33 align=left></P></SMALL></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=5 border=0>
<TBODY>
<TR>
<TD><A href="http://iptop.net/" target=_blank><IMG height=31 alt="Портал IP-Телефонии" src="http://iptop.net/service/img/88_20.gif" width=88 border=0> </A></TD>
<TD colSpan=3>
<P><SMALL>Создание сайта — <NOBR>«<STRONG>AlterTex Co., Ltd</STRONG>», 2008</NOBR><BR><A href="http://www.express-web.ru/" target=_blank>Система управления сайтом</A> — <NOBR>«Экспресс-Веб»</NOBR></SMALL></P></TD></TR></TBODY></TABLE><!--bigmir)net TOP 100-->
<DIV style="MARGIN-LEFT: 5px"><!-- GoStats JavaScript Based Code -->
<SCRIPT src="http://gostats.ru/js/counter.js" type=text/javascript></SCRIPT>

<SCRIPT type=text/javascript>_gos='c3.gostats.ru';_goa=344147;
_got=2;_goi=46;_gol='счетчики';_GoStatsRun();</SCRIPT>
<NOSCRIPT><A title=счетчики href="http://gostats.ru" target=_blank><IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" alt=счетчики src="http://c3.gostats.ru/bin/count/a_344147/t_2/i_46/counter.png"></A></NOSCRIPT><!-- End GoStats JavaScript Based Code --></DIV></TD></TR>
<TR>
<TD>
<P><STRONG>AlterIP - зарегистрированная торговая марка.</STRONG></P></TD></TR></TBODY></TABLE>


</body>
</html>
