<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>呼叫中心系统◆开发者随笔 &#187; IAX</title>
	<atom:link href="http://www.cn-cti.com/tag/iax/feed" rel="self" type="application/rss+xml" />
	<link>http://www.cn-cti.com</link>
	<description>软件&#124;论坛&#124;CTI&#124;呼叫中心系统解决方案&#124;呼叫中心运营&#124;技术</description>
	<lastBuildDate>Thu, 22 Dec 2011 05:19:41 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>IAX 设置详细（zt）</title>
		<link>http://www.cn-cti.com/681.html</link>
		<comments>http://www.cn-cti.com/681.html#comments</comments>
		<pubDate>Sun, 18 Jan 2009 06:35:34 +0000</pubDate>
		<dc:creator>呆子</dc:creator>
				<category><![CDATA[呼叫中心开发技术]]></category>
		<category><![CDATA[asterisk]]></category>
		<category><![CDATA[IAX]]></category>
		<category><![CDATA[VOIP]]></category>

		<guid isPermaLink="false">http://www.cn-cti.com/?p=681</guid>
		<description><![CDATA[IAX设置详细]]></description>
			<content:encoded><![CDATA[<p>两台Asterisk服务器设置步骤如下：<br />
* 设置iax.conf文件，一台设置成为peer模式另外一台设置成为user模式<br />
* 设置user的extensions.conf让他的用户可以从user发送呼叫peer上<br />
* 任意的, 在user上注册peer(当peer是动态IP地址的时候)<br />
* 相反设置以上的步骤, 如果你想实现相互呼叫</p>
<p>===========================================</p>
<p>声明IAX2 user(在peer中)<br />
如果想一个peer能收到呼叫. 必须在peer机器上设置iax.conf识别呼叫来自user.</p>
<p>[username]<br />
type=user<br />
auth=md5<br />
secret=secretword<br />
context=iax2users</p>
<p>context非常重要,他用来设置user新来的呼叫路由如何处理.</p>
<p>这个步骤将允许远程的user设备注册到peer上.如果你想限制请在peer的iax.conf里增加限制和许可的设置.</p>
<p>=================================</p>
<p>声明IAX2 peer(在user中)<br />
从一个user产生呼叫的时候必须在user的iax.conf里设置到peer的验证.</p>
<p>[peername]<br />
type=peer<br />
host=hostname.domain.tld (如果用&#8221;dynamic&#8221;就要先进行一下register到peer)<br />
auth=md5<br />
secret=secretword                  ; 如果拨号的时候填写这里就不需要再填写<br />
username=username-at-the-peer      ; 如果拨号的时候填写这里就不需要再填写</p>
<p>请注意:</p>
<p>* type=user 表示你将通过这个号码将验证一个进来的呼叫<br />
* type=peer 表示你将通过这个号码发送呼叫给某人<br />
* type=friend 表示两个功能都有</p>
<p>Using type=friend makes life easier, but treat it as a shortcut. If you add both type=friend and host=hostname, domain.ext you limit the hosts your peer can place calls from, which may not be what you want.</p>
<p>现在完成第一步和第二步之后我们只需要考虑设置拨号方案了.读下面的例子看看怎么做吧.</p>
<p>================================<br />
连接到拨号方案</p>
<p>示例1</p>
<p>extensions.conf:<br />
exten =&gt; _7XXX,1,Dial(IAX2/myserver:passwordA@IAXserverA/${EXTEN:1},30,r)<br />
exten =&gt; _7XXX,2,Dial(SIP/myserver:passwordA@SIPserverA/${EXTEN:1},30,r)<br />
exten =&gt; _7XXX,3,Congestion</p>
<p>exten =&gt; _8XXX,1,Dial(IAX2/myserver:passwordB@IAXserverB/${EXTEN:1},30,r)<br />
exten =&gt; _8XXX,2,Dial(SIP/myserver:passwordB@SIPserverB/${EXTEN:1},30,r)<br />
exten =&gt; _8XXX,3,Congestion</p>
<p>记得要在iax.conf和sip.conf设置[IAXserverA]的这些定义.这个示例当出现问题后使用SIP做逃逸系统.注意你的用户名和密码可能会被CDR记录下来(你需要使用第二个示例的方法来实现隐藏).</p>
<p>示例2<br />
这个示例将不会把用户名同密码显示在CDR当中</p>
<p>注意：在1.0.9版这个方法仍然不是Asterisk标准分支,所以仍然需要用户名和密码在dial字符串中<br />
exten =&gt; _7XXX,1,Dial(IAX2/username:pass@serverB/${EXTEN:1},30,r)</p>
<p>(serverA)<br />
iax.conf<br />
[general]<br />
register =&gt; &lt;username&gt;:&lt;password&gt;@&lt;serverB hostname or IP&gt;</p>
<p>[serverB]<br />
type=friend<br />
user=&lt;username&gt;<br />
secret=&lt;password&gt;<br />
host=&lt;serverB hostname or IP&gt;</p>
<p>extensions.conf<br />
exten =&gt; _7XXX,1,Dial(IAX2/serverB/${EXTEN:1},30,r)<br />
exten =&gt; _7XXX,2,Congestion</p>
<p>(serverB)<br />
iax.conf<br />
[serverA]<br />
type=friend<br />
user=&lt;username&gt;<br />
secret=&lt;password&gt;<br />
host=&lt;dynamic&gt; | &lt;serverA hostname or IP&gt;</p>
<p>extensions.conf<br />
exten =&gt; _8XXX,1,Dial(IAX2/serverA/${EXTEN:1},30,r)<br />
exten =&gt; _8XXX,2,Congestion</p>
<p>在一些时候serverA和serverB就是在对方服务器上的用户</p>
<p>示例3<br />
在extensions.conf使用switch对象你可以连接两台服务器或是其他服务器的连接方案。在这个方案中我们自己的serverC将连接ServerA或serverB:</p>
<p>[default]<br />
exten =&gt; _801XXX,1,Goto,srvA|${EXTEN}|1<br />
exten =&gt; _802XXX,1,Goto,srvB|${EXTEN}|1</p>
<p>[srvA]<br />
exten =&gt; _801XXX,1,StripMSD,3<br />
exten =&gt; _XXX,2,Goto,1<br />
switch =&gt; IAX/serverA</p>
<p>[srvB]<br />
exten =&gt; _802XXX,1,StripMSD,3<br />
exten =&gt; _XXX,2,Goto,1<br />
switch =&gt; IAX/serverB</p>
<p>注意：你要注意不能建立死循环serverA到serverB并且serverB又到serverA!同样考虑使用iax.conf中设置autokill来杀掉被悬起长时间进程(当远程服务器无法连接)</p>
<p>示例4<br />
extensions.conf: (主服务器)</p>
<p>[outbound]<br />
switch =&gt; IAX2/master:secret@iax-gw1.company.net/outbound</p>
<p>iax.conf (主服务器):<br />
[slave]<br />
type=user<br />
auth=plaintext<br />
context=outbound<br />
secret=secret<br />
host=dynamic<br />
callerid=&#8221;slave&#8221;<br />
trunk=yes<br />
notransfer=yes</p>
<p>[slave]<br />
type=peer<br />
auth=plaintext<br />
context=outbound-nuphone<br />
secret=secret<br />
host=dynamic<br />
trunk=yes<br />
notransfer=yes</p>
<p>extensions.conf (从服务器):</p>
<p>[assigned-dids]<br />
; uncomment a dial mechanism, first one goes to specific extension<br />
; other one goes to dial parameter s.</p>
<p>;exten =&gt; 7046446999,1,Dial,IAX2/master@slave/${EXTEN}<br />
;exten =&gt; 7046446999,1,Dial,IAX2/master@slave</p>
<p>iax.conf (从服务器):</p>
<p>register =&gt; slave:secret@iax-gw1.company.net</p>
<p>[master]<br />
type=peer<br />
host=iax-gw1.company.net<br />
secret=secret<br />
context=outbound<br />
trunk=yes<br />
canreinvite=no</p>
<p>[master]<br />
type=user<br />
secret=secret<br />
context=acontext<br />
trunk=yes<br />
canreinvite=no</p>
<p>===========================<br />
关于register命令<br />
当peer的ip并不明确，用户将不知道如何发送呼叫信息(当一个办公室用户呼叫 在家里工作的peer，因为在家里工作的peer只有一个动态IP或他是在NAT设置) 这个时候peer要注册到user及时的把自己的IP告诉user:</p>
<p>在peer的iax.conf的[general]上怎么写:</p>
<p>register =&gt; user:password@hostname.domain.ext</p>
<p>因为不断更新所以user总是知道peer的ip是否改变了.</p>
<p>register命令仅仅被用在动态IP地址的情况下,如果两台服务器都是静态IP地址你不需要做任何设置.</p>
<h3  class="related_post_title">关联阅读</h3><ul class="related_post"><li><a href="http://www.cn-cti.com/679.html" title="linux下面配置IAX（ZT）">linux下面配置IAX（ZT）</a></li><li><a href="http://www.cn-cti.com/664.html" title="asterisk电子教程">asterisk电子教程</a></li><li><a href="http://www.cn-cti.com/662.html" title="使用IAX来搭建您的VOIP系统">使用IAX来搭建您的VOIP系统</a></li><li><a href="http://www.cn-cti.com/1770.html" title="asterisk常用调试监测命令">asterisk常用调试监测命令</a></li><li><a href="http://www.cn-cti.com/1592.html" title="基于asterisk的呼叫中心坐席呼叫方式">基于asterisk的呼叫中心坐席呼叫方式</a></li><li><a href="http://www.cn-cti.com/1561.html" title="asterisk兼容数字卡上面调试中国7号信令（ss7）">asterisk兼容数字卡上面调试中国7号信令（ss7）</a></li><li><a href="http://www.cn-cti.com/1356.html" title="IP分布式呼叫中心坐席电话该用硬电话还是软电话？">IP分布式呼叫中心坐席电话该用硬电话还是软电话？</a></li><li><a href="http://www.cn-cti.com/1348.html" title="asterisk用于CTI开发话务批发平台的需求">asterisk用于CTI开发话务批发平台的需求</a></li><li><a href="http://www.cn-cti.com/1245.html" title="Asterisk与Cent OS">Asterisk与Cent OS</a></li><li><a href="http://www.cn-cti.com/1219.html" title="我将公司电话系统拓展到了外地">我将公司电话系统拓展到了外地</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.cn-cti.com/681.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>linux下面配置IAX（ZT）</title>
		<link>http://www.cn-cti.com/679.html</link>
		<comments>http://www.cn-cti.com/679.html#comments</comments>
		<pubDate>Sun, 18 Jan 2009 06:28:36 +0000</pubDate>
		<dc:creator>呆子</dc:creator>
				<category><![CDATA[呼叫中心开发技术]]></category>
		<category><![CDATA[asterisk]]></category>
		<category><![CDATA[IAX]]></category>
		<category><![CDATA[VOIP]]></category>

		<guid isPermaLink="false">http://www.cn-cti.com/?p=679</guid>
		<description><![CDATA[asterisk吸引了很多人的兴趣，本文主要介绍如何在一个LINUX服务器下面配置IAX通信]]></description>
			<content:encoded><![CDATA[<p>最近稍微了解了一下IAX协议，全称为Inter-Asterisk eXchange，即Asterisk内部交换协议。和SIP相类似，它也是一个传输协议。但是IAX的一个比较特殊的地方则是它仅仅只使用一个UDP端口（4569）来传输通道信号以及RTP流。也由于单端口可能更集中的关系，因此IAX更加适合NAT环境以及对防火墙的穿透。现在IAX版本为IAX2版本，版本1已经放弃淘汰了。所以目前在很多地方看到所提到的IAX协议，其实默认都是说的是IAX2协议。</p>
<p>另外，IAX还有一个特点，就是它可以将多个会话集中在一个数据流里传输，实际上的做法就是将多个数据流用一个数据报报头表示和概括。也就说IAX拥有中继Trunk能力，并也因为这个原因，IAX可以在中继流量的时候在一定程度上减小对带宽的消耗和需求。</p>
<p>这一话的目的也是非常简单，没有复杂的配置，仅仅是为了实现让个IAX的终端能够注册上Asterisk并且能够互相呼叫并和对方通话的功能。</p>
<p>系统环境：CentOS 5.0 Linux操作系统</p>
<p>Asterisk 1.4.5版本</p>
<p>IAX终端为iaxLite SoftPhone</p>
<p>一.修改配置文件</p>
<p>1.设定IAX配置文件：</p>
<p>在Asterisk当中IAX的特性配置文件都保存在iax.conf这个独立的配置文件当中。</p>
<p>[root@asterisk-test1 ~]# vi /etc/asterisk/iax.conf</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>与Asterisk其他配置文件一样，iax.conf中也是采用分段配置的结构，并且也是使用分号“;”来注释掉配置项的。</p>
<p>[general]</p>
<p>全局配置段“general”里面可以写上对IAX全局的全局配置信息，这里配置的条目将影响整个Asterisk中IAX的性能。</p>
<p>bindport=4569</p>
<p>指定IAX2协议的监听端口，这里我使用默认的4569。</p>
<p>bindaddr=0.0.0.0</p>
<p>指定IAX2协议监听的网络接口。这里我设定为0.0.0.0表示对系统的所有网络接口进行监听。</p>
<p>;iaxcompat=yes</p>
<p>设定IAX的协作性和兼容性。如果打算使用分层式交换或者其他一些方案，而这些都会在拨号方案查找时造成延迟的时候，应该将这项设定为“yes”。启用该项会对系统性能造成一个小小的冲击。这个选项会造成Asterisk在收到一个IAX拨号规则请求时衍生一个分开独立的线程，而不是傻堵在那里等待一个回应。这里我采用默认的“yes”。</p>
<p>;nochecksums=no</p>
<p>设定关闭UDP校验。如果设定“yes”关闭UDP校验的话，那么在你的系统上将不会为UDP计算以及检察校验和。这里我采用默认的“no”，表示启用UDP校验。</p>
<p>;delayreject=yes</p>
<p>设定拒绝硬直。为了提高系统安全以及防止暴力密码破解攻击，开启拒绝硬直功能后，验证失败的对象必须要经过一段时间的硬直状态才能进行下一次验证的尝试。这里我也采用默认的“yes”，表示开启拒绝硬直功能。</p>
<p>;amaflags=default</p>
<p>设定AMA标记类型。AMA的全称是“Automated Message Accounting”，自动消息记帐。可以为IAX呼叫指定一个全局的默认AMA标记类型，这些标记将会在生成CDR时被用到，而这些记录的类型必须是以下种类：</p>
<p>（1）default: 默认，设定为系统默认。这里我使用默认的“Default”类型。</p>
<p>（2）omit: 忽略，不记录呼叫。</p>
<p>（3）billing: 计费，打上标记作为计费用。</p>
<p>（4）documentation: 文档说明，打上标记作为文档说明。</p>
<p>;adsi=no</p>
<p>设定是否开启ADSI功能。所谓ADSI全称就是“Analog Display Services Interface”即模拟显示服务接口，大致意思就是一种让模拟电话也能处理数字信息服务的接口，就像那种带有屏幕而又通过电话线连接的电话机，这些电话机上面可以支持比如发短信或者其他的服务功能，但是这些都需要你平台支持ADSI服务接口。现在当然不需要啦，所以我选择默认的“no”，关闭掉它。</p>
<p>;accountcode=lss0101</p>
<p>设定帐户代码。指定一个默认全局的帐户代码，也可以为每个帐户指定各自的帐户代码，这将会记录到CDR当中去。这里暂时不涉及到计费以及CDR，所以使用默认的注释掉该项。</p>
<p>;language=en</p>
<p>设定对用户的全局默认语言种类，也可以为每个帐户指定各自的语言种类。如果忽略该项的话，就使用默认的英语语言。这里使用默认的英语。</p>
<p>;mohsuggest=default</p>
<p>;mohinterpret=default</p>
<p>设定电话挂起的时候通道里播放的内容。如果是“default”的话，那么当电话挂起的时候，通道里就会播放拨号规则里指定的音乐。如果是“passthough”的话，就会用消息信号代替。这里使用默认的“default”。</p>
<p>接下来是编解码设定部分：</p>
<p>bandwidth=low</p>
<p>设定带宽。指定低、中、高带宽来控制编解码。这里使用默认的低带宽。</p>
<p>disallow=all</p>
<p>这里首先关闭所有的编解码。目的是为了只开放指定允许的编解码。</p>
<p>allow=gsm</p>
<p>然后允许GSM的编解码。在IAX当中使用GSM编解码比较多，因为比较节省带宽。</p>
<p>allow=g729</p>
<p>然后再允许G.729的编解码。G.729也是非常优秀的编解码，但是这存在版权问题，貌似在没有获得许可的情况下，你只能用G.729进行解码而不能编码，否则要负法律责任的哟。</p>
<p>jitterbuffer=no</p>
<p>设定抗抖动缓冲。设定是否要全局缓冲，在不稳定的网络环境下应该启用，一般情况不需要。因为终端设备会对抖动处理缓冲。使用默认的“no”。</p>
<p>forcejitterbuffer=no</p>
<p>设定强制抗抖动缓冲。一般来说应该是在通信通道上做抗抖动的缓冲，而不是在交换系统局端上作，因为终端设备会自己处理抖动缓冲，所以一般也不需要。使用默认的“no”。</p>
<p>;maxjitterbuffer=1000</p>
<p>设定最大抗抖动缓冲。单位是毫秒，设定得合适会使抖动问题得到改善，设定过大会造成额外的延迟。</p>
<p>;maxjitterinterps=10</p>
<p>设定最大抖动补偿。设定在一次返回列中抗抖动缓冲应该返回的补偿帧的最大数量。</p>
<p>;resyncthreshold=1000</p>
<p>设定重新同步阀值。当抗抖动缓冲注意到一个巨大的改变可能造成持续好几帧发生延迟的时候，它就会去重新同步。设定“-1”表示关闭重新同步功能。</p>
<p>至于IAX中继设定部分，这里就不详细展开交待了。</p>
<p>;trunkfreq=20</p>
<p>;trunktimestamps=yes</p>
<p>;authdebug=no</p>
<p>;regcontext=iaxregistrations</p>
<p>autokill=yes</p>
<p>;rtcachefriends=yes</p>
<p>;rtupdate=yes</p>
<p>;rtautoclear=yes</p>
<p>;rtignoreregexpire=yes</p>
<p>接下来是IAX对象设定部分：</p>
<p>[iax](!)</p>
<p>这里设定的是iax小节，后面的“（!）”表示它是一个属性抽象类，它本身不是对象实例，却定义了很多属性值，提供其他实体来继承它的属性。</p>
<p>type=friend</p>
<p>指定类型为Friend“友端”，即可以对Asterisk进行呼叫也可以被Asterisk呼叫的这种双向类型终端。</p>
<p>其他的还有Peer“对端”，即只能作为被Asterisk呼叫的类型终端。</p>
<p>以及的还有User“用户端”，即只能作为呼叫Asterisk的类型终端。</p>
<p>host=dynamic</p>
<p>指定终端主机位置。这里可以取2种值：</p>
<p>static“静态”表示服务的终端对象的IP是固定已知的；</p>
<p>dynamic“动态”表示服务的终端对象IP是动态的不确定的，每次要联系Asterisk的话就必须要注册上来。</p>
<p>port=4569</p>
<p>设定IAX监听端口。其实和全局里设定的是一样的话就可以省去。</p>
<p>context=demo2</p>
<p>指定该段内的对象所使用的拨号规则，全部对应extensions.conf文件中的[demo2]小节内定义的规则。</p>
<p>[8801](iax)</p>
<p>这里定义了名字为“8801”的小节，后面跟“（iax）”，这表示该段定义的对象将继承[iax]定义段内的属性。</p>
<p>username=8801</p>
<p>指定该对象的用户名。</p>
<p>secret=123456</p>
<p>指定该对象的密码。</p>
<p>[8802](iax)</p>
<p>username=8802</p>
<p>sercret=123456</p>
<p>同样，对象8802也继承sip抽象类中的公共属性。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>2.配置拨号规则文件</p>
<p>[root@asterisk-test1 ~]# vi /etc/asterisk/extensions.conf</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>配置方式也是同样，通过定义每一个小节，再在每一个小节中定义详细的属性。</p>
<p>这里比较重要的是“general”和“globals”这两个默认就有的小节，也是起到“全局属性”的作用，请根据实际情况确定，但请不要删除这两个小节。其他的小节都是可以订制、删除修改的。</p>
<p>[general]</p>
<p>static=yes</p>
<p>writeprotect=no</p>
<p>autofallthrough=no</p>
<p>clearglobalvars=no</p>
<p>priorityjumping=no</p>
<p>[globals]</p>
<p>CONSOLE=Console/dsp</p>
<p>IAXINFO=guest                                    ; IAXtel username/password</p>
<p>TRUNK=Zap/g2                                     ; Trunk interface</p>
<p>TRUNKMSD=1                                       ; MSD digits to strip (usually 1 or 0)</p>
<p>其他的不重要的小节我都删除了，这里我自定义一个简单的拨号规则。小节取名为“demo2”，与iax.conf里面的context项中指定的规则小节名对应。</p>
<p>[demo2]</p>
<p>exten =&gt; _88.,1,Dial(IAX2/${EXTEN},20,r)</p>
<p>(1)规则就一条，使得8801和8802可以互相拨打。当中的格式简要讲述一下。更多的请参考Asterisk的手册，这里不详细展开。</p>
<p>(2)开头部分“exten =&gt;”表示，也可以用“exten =”表示。并且在一个小节内可以定义多条exten语句。</p>
<p>(3)之后的“_88.”表示匹配上所有“88”开头的拨号，“.”表示不限制长度的任意字符。</p>
<p>(4)然后的“1”表示优先级，我喜欢称作为“执行次序”。“1”表示第一步执行的意思，如果后续还需要执行其他动作的话，可以继续写多条exten语句，并且用递增执行次序依次设计下去。</p>
<p>(5)接着的“Dail()”表示“执行动作”，这里是表示拨号的执行动作。更规范的说，这个是APP应用程序。</p>
<p>(6)括号当中又分成3个部分。第一个IAX2表示拨号动作中拨向的通道是IAX2协议的通道。${EXTEN}则一个变量，其值就是用户实际拨打的号码。如果你拨打8801那么${EXTEN}的值就是8801。</p>
<p>(7)括号内的“20”，表示等待时间单位秒，如果有多个执行次序，即一组拨号规则的话，如果过了20秒，就跳跃执行次序（跳跃的幅度是101个优先级）。</p>
<p>(8)最后的“r”表示强行播放振铃。在拨打对方等待对方接通的时候，就能听到回振铃音。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>二.测试：</p>
<p>1.进入Asterisk控制台刷新配置。</p>
<p>[root@asterisk-test1 ~]# /usr/local/asterisk/sbin/asterisk -crvvvvv</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>Asterisk 1.4.5, Copyright (C) 1999 &#8211; 2007 Digium, Inc. and others.</p>
<p>Created by Mark Spencer &lt;markster@digium.com&gt;</p>
<p>Asterisk comes with ABSOLUTELY NO WARRANTY; type &#8216;core show warranty&#8217; for details.</p>
<p>This is free software, with components licensed under the GNU General Public</p>
<p>License version 2 and other licenses; you are welcome to redistribute it under</p>
<p>certain conditions. Type &#8216;core show license&#8217; for details.</p>
<p>=========================================================================</p>
<p>== Parsing &#8216;/etc/asterisk/asterisk.conf&#8217;: Found</p>
<p>== Parsing &#8216;/etc/asterisk/extconfig.conf&#8217;: Found</p>
<p>Connected to Asterisk 1.4.5 currently running on asterisk-test1 (pid = 1929)</p>
<p>Verbosity is at least 5</p>
<p>asterisk-test1*CLI&gt; reload</p>
<p>当Asterisk需要完全重载所有配置的时候，就需要在控制台当中使用reload命令，而没有必要去重新启动服务。重新载入当中会产生大量信息,这里只贴出一部分。</p>
<p>&#8230;&#8230;</p>
<p>&#8230;&#8230;</p>
<p>&#8211; Reloading module &#8216;chan_iax2.so&#8217; (Inter Asterisk eXchange (Ver 2))</p>
<p>== Parsing &#8216;/etc/asterisk/iax.conf&#8217;: Found</p>
<p>[Oct 30 13:48:44] NOTICE[4395]: chan_iax2.c:9071 set_config: Ignoring bindport on reload</p>
<p>[Oct 30 13:48:44] NOTICE[4395]: chan_iax2.c:9130 set_config: Ignoring bindaddr on reload</p>
<p>这个部分是重载IAX配置以及模块。</p>
<p>&#8230;..</p>
<p>&#8230;..</p>
<p>[Oct 30 13:48:44] NOTICE[4395]: pbx_ael.c:3984 pbx_load_module: AEL load process: compiled config file name &#8216;/etc/asterisk/extensions.ael&#8217;.</p>
<p>[Oct 30 13:48:44] NOTICE[4395]: pbx_ael.c:3987 pbx_load_module: AEL load process: merged config file name &#8216;/etc/asterisk/extensions.ael&#8217;.</p>
<p>[Oct 30 13:48:44] WARNING[4395]: pbx.c:6236 ast_context_verify_includes: Context &#8216;ael-local&#8217; tries includes nonexistent context &#8216;ael-parkedcalls&#8217;</p>
<p>[Oct 30 13:48:44] WARNING[4395]: pbx.c:6236 ast_context_verify_includes: Context &#8216;ael-dundi-e164-local&#8217; tries includes nonexistent context</p>
<p>&#8216;ael-dundi-e164-canonical&#8217;</p>
<p>[Oct 30 13:48:44] WARNING[4395]: pbx.c:6236 ast_context_verify_includes: Context &#8216;ael-dundi-e164-local&#8217; tries includes nonexistent context</p>
<p>&#8216;ael-dundi-e164-customers&#8217;</p>
<p>[Oct 30 13:48:44] WARNING[4395]: pbx.c:6236 ast_context_verify_includes: Context &#8216;ael-dundi-e164-local&#8217; tries includes nonexistent context</p>
<p>&#8216;ael-dundi-e164-via-pstn&#8217;</p>
<p>[Oct 30 13:48:44] NOTICE[4395]: pbx_ael.c:3990 pbx_load_module: AEL load process: verified config file name &#8216;/etc/asterisk/extensions.ael&#8217;.</p>
<p>&#8211; Reloading module &#8216;pbx_dundi.so&#8217; (Distributed Universal Number Discovery (DUNDi))</p>
<p>== Parsing &#8216;/etc/asterisk/dundi.conf&#8217;: Found</p>
<p>== MGCP Listening on 0.0.0.0:2727</p>
<p>== Using TOS bits 0</p>
<p>这些是重载拨号规则部分。</p>
<p>&#8230;&#8230;</p>
<p>&#8230;&#8230;</p>
<p>独立重新载入IAX，这样不大会影响Asterisk其他部分。</p>
<p>asterisk-test1*CLI&gt; iax2 reload</p>
<p>== Parsing &#8216;/etc/asterisk/iax.conf&#8217;: Found</p>
<p>[Oct 30 14:40:54] NOTICE[4704]: chan_iax2.c:9071 set_config: Ignoring bindport on reload</p>
<p>[Oct 30 14:40:54] NOTICE[4704]: chan_iax2.c:9130 set_config: Ignoring bindaddr on reload</p>
<p>== Parsing &#8216;/etc/asterisk/users.conf&#8217;: Found</p>
<p>&#8211; Seeding &#8216;8801&#8242; at 192.168.0.199:4569 for 60</p>
<p>&#8211; Seeding &#8216;8802&#8242; at 192.168.0.149:4569 for 60</p>
<p>== Loaded firmware &#8216;iaxy.bin&#8217;</p>
<p>== Parsing &#8216;/etc/asterisk/iaxprov.conf&#8217;: Found</p>
<p>&#8211; Loaded provisioning template &#8216;default&#8217;</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>2.注册终端</p>
<p>在这次测试当中我使用的是iaxLite SoftPhone。注册帐户分别是8801和8802，密码123456。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>&#8211; Registered IAX2 &#8216;8801&#8242; (AUTHENTICATED) at 192.168.0.199:4569</p>
<p>[Oct 30 14:06:49] NOTICE[2018]: chan_iax2.c:5699 update_registry: Restricting registration for peer &#8216;8801&#8242; to 60 seconds (requested 300)</p>
<p>这个是8801注册上来后在Asterisk控制台上看到的信息。</p>
<p>&#8211; Registered IAX2 &#8216;8802&#8242; (AUTHENTICATED) at 192.168.0.149:4569</p>
<p>[Oct 30 14:07:04] NOTICE[2020]: chan_iax2.c:5699 update_registry: Restricting registration for peer &#8216;8802&#8242; to 60 seconds (requested 300)</p>
<p>这个是8802注册上来后在Asterisk控制台上看到的信息。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>3.察看注册信息</p>
<p>asterisk-test1*CLI&gt; iax2 show peers</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>Name/Username     Host                  Mask              Port           Status</p>
<p>8802/8802         192.168.0.149    (D)   255.255.255.255   4569           Unmonitored</p>
<p>8801/8801         192.168.0.199    (D)   255.255.255.255   4569           Unmonitored</p>
<p>2 iax2 peers [0 online, 0 offline, 2 unmonitored]</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>4.互相呼叫</p>
<p>（1）8801呼叫8802，8802接通并且由8801主叫方挂断。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>&#8211; Remote UNIX connection</p>
<p>&#8211; Accepting AUTHENTICATED call from 192.168.0.199:</p>
<p>从通过验证端192.168.0.199发起呼叫。</p>
<p>&gt; requested format = g729,</p>
<p>请求使用的编解码是G.729。</p>
<p>&gt; requested prefs = (),</p>
<p>&gt; actual format = gsm,</p>
<p>实际使用格式为GSM。</p>
<p>&gt; host prefs = (gsm|g729),</p>
<p>&gt; priority = mine</p>
<p>&#8211; Executing [8802@demo2:1] Dial(&#8220;IAX2/8801-3&#8243;, &#8220;IAX2/8802|20|r&#8221;) in new stack</p>
<p>按照拨号方案demo2来执行拨号8802。</p>
<p>&#8211; Called 8802&gt;</p>
<p>被叫方8802</p>
<p>&#8211; Call accepted by 192.168.0.149 (format gsm)</p>
<p>呼叫被192.168.0.149接受了，格式为GSM。</p>
<p>&#8211; Format for call is gsm</p>
<p>呼叫格式为GSM。</p>
<p>&#8211; IAX2/8802-6 is ringing</p>
<p>用户8801呼叫用户8802，编码是GSM，并且8802已经在振铃。</p>
<p>&#8211; IAX2/8802-6 answered IAX2/8801-5</p>
<p>用户8802应答了用户8801。</p>
<p>&#8211; Channel &#8216;IAX2/8801-5&#8242; ready to transfer</p>
<p>通道IAX2/8801-5已经准备好传输。</p>
<p>&#8211; Channel &#8216;IAX2/8802-6&#8242; ready to transfer</p>
<p>通道IAX2/8802-6也已经准备好传输。</p>
<p>&#8211; Releasing IAX2/8802-6 and IAX2/8801-5</p>
<p>释放IAX2/8802-6以及IAX2/8801-5通道建立。</p>
<p>== Spawn extension (demo2, 8802, 1) exited non-zero on &#8216;IAX2/8801-5&#8242;</p>
<p>&#8211; Hungup &#8216;IAX2/8801-5&#8242;</p>
<p>最后由8801-5挂断连接。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>（2）8802呼叫8801，8801接通。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>&#8211; Remote UNIX connection</p>
<p>&#8211; Accepting UNAUTHENTICATED call from 192.168.0.149:</p>
<p>&gt; requested format = g729,</p>
<p>&gt; requested prefs = (),</p>
<p>&gt; actual format = gsm,</p>
<p>&gt; host prefs = (gsm|g729),</p>
<p>&gt; priority = mine</p>
<p>&#8211; Executing [8801@demo2:1] Dial(&#8220;IAX2/8802-6&#8243;, &#8220;IAX2/8801|20|r&#8221;) in new stack</p>
<p>&#8211; Called 8801</p>
<p>&#8211; Call accepted by 192.168.0.199 (format gsm)</p>
<p>&#8211; Format for call is gsm</p>
<p>&#8211; IAX2/8801-7 is ringing</p>
<p>&#8211; IAX2/8801-7 answered IAX2/8802-6</p>
<p>&#8211; Channel &#8216;IAX2/8801-7&#8242; ready to transfer</p>
<p>&#8211; Channel &#8216;IAX2/8802-6&#8242; ready to transfer</p>
<p>&#8211; Releasing IAX2/8802-6 and IAX2/8801-7</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>三.问题：</p>
<p>通是通了，通话也没有什么问题，但是还有几个地方不是非常明白：</p>
<p>1.口令错误的终端照样可以以（UNAUTHENTICATIED）的方式注册到Asterisk上并且还能呼叫连接。</p>
<p>2.被叫端不能主动挂断电话。</p>
<p>3.有个别几通电话，主叫方已经断线了，被叫方竟然还显示自己是连接状态并且挂不断。</p>
<p>目前还没有解决这些问题，等解决了把原因以及解决方法帖上。</p>
<p>最后要提一个比较有意思的地方，IAX的正确读法好像应该是“eeks”，而不是字面上那样读成“ai-ei-eks”。</p>
<p>读错的人，会被老鸟嘲笑。</p>
<h3  class="related_post_title">关联阅读</h3><ul class="related_post"><li><a href="http://www.cn-cti.com/681.html" title="IAX 设置详细（zt）">IAX 设置详细（zt）</a></li><li><a href="http://www.cn-cti.com/664.html" title="asterisk电子教程">asterisk电子教程</a></li><li><a href="http://www.cn-cti.com/662.html" title="使用IAX来搭建您的VOIP系统">使用IAX来搭建您的VOIP系统</a></li><li><a href="http://www.cn-cti.com/1770.html" title="asterisk常用调试监测命令">asterisk常用调试监测命令</a></li><li><a href="http://www.cn-cti.com/1592.html" title="基于asterisk的呼叫中心坐席呼叫方式">基于asterisk的呼叫中心坐席呼叫方式</a></li><li><a href="http://www.cn-cti.com/1561.html" title="asterisk兼容数字卡上面调试中国7号信令（ss7）">asterisk兼容数字卡上面调试中国7号信令（ss7）</a></li><li><a href="http://www.cn-cti.com/1356.html" title="IP分布式呼叫中心坐席电话该用硬电话还是软电话？">IP分布式呼叫中心坐席电话该用硬电话还是软电话？</a></li><li><a href="http://www.cn-cti.com/1348.html" title="asterisk用于CTI开发话务批发平台的需求">asterisk用于CTI开发话务批发平台的需求</a></li><li><a href="http://www.cn-cti.com/1245.html" title="Asterisk与Cent OS">Asterisk与Cent OS</a></li><li><a href="http://www.cn-cti.com/1219.html" title="我将公司电话系统拓展到了外地">我将公司电话系统拓展到了外地</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.cn-cti.com/679.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>使用IAX来搭建您的VOIP系统</title>
		<link>http://www.cn-cti.com/662.html</link>
		<comments>http://www.cn-cti.com/662.html#comments</comments>
		<pubDate>Sat, 17 Jan 2009 08:47:05 +0000</pubDate>
		<dc:creator>呆子</dc:creator>
				<category><![CDATA[呼叫中心开发技术]]></category>
		<category><![CDATA[IAX]]></category>
		<category><![CDATA[VOIP]]></category>
		<category><![CDATA[协议]]></category>
		<category><![CDATA[呼叫中心]]></category>

		<guid isPermaLink="false">http://www.cn-cti.com/?p=662</guid>
		<description><![CDATA[　IAX协议的目标是使VoIP同样简单]]></description>
			<content:encoded><![CDATA[<p>IAX没有使用实时传输协议（RTP），而是利用运行在单一Internet端口（4569端口）上的用户数据报协议（UDP）发送和接收信令和媒体。IAX可轻松穿越防火墙，消耗的开销大大低于RTP。当使用G.729压缩编解码器时，IAX可以将1M带宽传送的呼叫数量增加两倍。例如，当同时使用G.729和IAX协议时，1M带宽上至少可以传送103个呼叫。<br />
IAX不解析文本命令，而使用纯二进制数据，因为这是机器相互通信的自然方式。IAX协议把响应传回到它们的源地址，而不必协商外部IP地址。由于它不断发出往复（ping-pong）请求，因此如果线路突然中断，IAX设备会在不到1分钟内发现这一情况。<br />
IAX协议传送只有4字节包头的音频数据包，使用非常少的带宽。在处理多个呼叫时，IAX中继线通过将来自多条信道的数据组合到一个数据包中，来减少每条信道的开销，因此不仅减少了包头的数据，而且还减少了数据包数量。这点对于无线网络十分重要。<br />
更值得一提的是，IAX协议非常简单和直观，因此整个IP栈、IAX栈、TDM接口、回波抑制和主叫方ID生成可以在一个模拟终端适配器（ATA）中实现。ATA设备包括1个以太网插孔和1个电话插孔，可将任意模拟电话转换为IP电话。IAX ATA设备只需使用8位微处理器、4KB RAM和64KB内部闪存就可以生产。在不远的将来，一些厂商可以利用这些廉价的零件生产1台10美元的IP电话。<br />
IAX协议将扩展到包括加密和内部通信功能。尽管所有的实现都是一样的，但目前厂商接受IAX面临的主要障碍似乎是缺少成文的标准。不过，许多人正在为制定标准而努力。<br />
传统的模拟电话网服务因为非常简单，致使发生故障的可能性非常小，因此十分可靠。设计IAX的目标是使VoIP同样简单，因此总有一天甚至连你办公室中最不懂技术的雇员也可以接上一台廉价的IP电话，立即开始打电话。</p>
<h3  class="related_post_title">关联阅读</h3><ul class="related_post"><li><a href="http://www.cn-cti.com/1356.html" title="IP分布式呼叫中心坐席电话该用硬电话还是软电话？">IP分布式呼叫中心坐席电话该用硬电话还是软电话？</a></li><li><a href="http://www.cn-cti.com/681.html" title="IAX 设置详细（zt）">IAX 设置详细（zt）</a></li><li><a href="http://www.cn-cti.com/679.html" title="linux下面配置IAX（ZT）">linux下面配置IAX（ZT）</a></li><li><a href="http://www.cn-cti.com/616.html" title="典型VOIP外呼型呼叫中心系统需求">典型VOIP外呼型呼叫中心系统需求</a></li><li><a href="http://www.cn-cti.com/598.html" title="一个遍布分支机构的大型企业呼叫中心解决方案">一个遍布分支机构的大型企业呼叫中心解决方案</a></li><li><a href="http://www.cn-cti.com/236.html" title="广州毅航的可编程交换机">广州毅航的可编程交换机</a></li><li><a href="http://www.cn-cti.com/212.html" title="基于VOIP技术的呼叫中心成为必然">基于VOIP技术的呼叫中心成为必然</a></li><li><a href="http://www.cn-cti.com/77.html" title="一个台湾朋友给我的关于呼叫中心的启示">一个台湾朋友给我的关于呼叫中心的启示</a></li><li><a href="http://www.cn-cti.com/1757.html" title="一个做呼叫中心的同行的2010年">一个做呼叫中心的同行的2010年</a></li><li><a href="http://www.cn-cti.com/1756.html" title="平安E家">平安E家</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.cn-cti.com/662.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

