Asterisk 资料一

debian下面的安装方法
vax:/home/ailantian# apt-get install asterisk
asterisk 被设计成运行在2.4内核上的,不过对2.6的内核也有一些支持。如果需要一个稳定的系统,开发者推荐大家使用2.4的内核。

如果大家使用的是Digium hardware or ztdummy就需要安装zaptel ,有些asterisk应用需要使用这个包。如果是从源代码编译的,最初没有编译这个包的话,那么将来如果使用的时候需要这个包,就需要连asterisk一起重新编译。安装zaptel 需要bison,另外如果需要安装newt 工具包的话还需要安装ncurses以及其开发包。

vax:/home/ailantian# cd /etc/asterisk/
vax:/etc/asterisk# ls
adsi.conf           codecs.conf       logger.conf       res_odbc.conf
adtranvofr.conf     dnsmgr.conf       manager.conf      rpt.conf
agents.conf         dundi.conf        meetme.conf       rtp.conf
alarmreceiver.conf  enum.conf         mgcp.conf         sip.conf
alsa.conf           extconfig.conf    misdn.conf        sip_notify.conf
asterisk.adsi       extensions.ael    modem.conf        skinny.conf
asterisk.conf       extensions.conf   modules.conf      telcordia-1.adsi
cdr.conf            features.conf     musiconhold.conf  voicemail.conf
cdr_custom.conf     festival.conf     osp.conf          vpb.conf
cdr_manager.conf    h323.conf         oss.conf          zapata.conf
cdr_odbc.conf       iax.conf          phone.conf
cdr_pgsql.conf      iaxprov.conf      privacy.conf
cdr_tds.conf        indications.conf  queues.conf
vax:/etc/asterisk#asterisk -cvvv
终端输出信息太多,只看到了下面的,有问题,看看再说,这里输出信息太多了blog放不下省略了,只给出最后一行吧
  == Manager registered action DBGet
  == Manager registered action DBPut
  == Parsing '/etc/asterisk/enum.conf': Found
Jul 28 14:38:17 NOTICE[2522]: chan_sip.c:10886 handle_request_register: Registration from '<sip:888@192.168.100.144>' failed for '192.168.100.236' - Username/auth name mismatch
Asterisk Ready.
*CLI> Jul 28 14:38:17 NOTICE[2522]: chan_sip.c:10886 handle_request_register: Registration from '<sip:777@192.168.100.144>' failed for '192.168.100.239' - Username/auth name mismatch

 

 修改/etc/asterisk/sip.conf
 bindaddr=192.168.100.144
allow=all;允许所有的解码类型。
 配置为如下的时候
 [777]
type=friend
username=777
secret=777

[888]
type=friend
username=888
secret=
[333]
type=friend
username=333
secret=
[222]
type=friend
username=222
secret=

另终端配置为号码777,用户777,密码777
号码888,用户空,密码空
错误如下
经验是不把所有的用户配置为一样的,这样可以看出区别来。
Asterisk Ready.
*CLI> Jul 28 15:11:31 ERROR[2663]: chan_sip.c:6407 register_verify: Peer '333' is trying to register, but not configured as host=dynamic
Jul 28 15:11:31 NOTICE[2663]: chan_sip.c:10886 handle_request_register: Registration from '<sip:333@192.168.100.144>' failed for '192.168.100.213' - Username/auth name mismatch
Jul 28 15:11:45 ERROR[2663]: chan_sip.c:6407 register_verify: Peer '888' is trying to register, but not configured as host=dynamic
Jul 28 15:11:45 NOTICE[2663]: chan_sip.c:10886 handle_request_register: Registration from '<sip:888@192.168.100.144>' failed for '192.168.100.236' - Username/auth name mismatch
Jul 28 15:11:45 NOTICE[2663]: chan_sip.c:10886 handle_request_register: Registration from '<sip:111@192.168.100.144>' failed for '192.168.100.211' - Username/auth name mismatch
Jul 28 15:11:57 ERROR[2663]: chan_sip.c:6407 register_verify: Peer '777' is trying to register, but not configured as host=dynamic
Jul 28 15:11:57 NOTICE[2663]: chan_sip.c:10886 handle_request_register: Registration from '<sip:777@192.168.100.144>' failed for '192.168.100.239' - Username/auth name mismatch

 

配置为如下时,
[777]
type=friend
username=777
secret=777
host=dynamic                    ; This device registers with us

[888]
type=friend
username=888
secret=
host=dynamic                    ; This device registers with us
[333]
type=friend
username=333
secret=
host=dynamic                    ; This device registers with us
[222]
type=friend
username=222
secret=

错误如下
Asterisk Ready.
*CLI>     -- Registered SIP '333' at 192.168.100.213 port 5060 expires 60
Jul 28 15:15:50 NOTICE[2686]: chan_sip.c:10886 handle_request_register: Registration from '<sip:111@192.168.100.144>' failed for '192.168.100.211' - Username/auth name mismatch
    -- Registered SIP '888' at 192.168.100.236 port 5060 expires 60
    -- Registered SIP '777' at 192.168.100.239 port 5060 expires 60

因此重点在于添加host=dynamic
另外要注意号码,用户名,密码的关系,asterisk里面只能设置用户名和密码
 另外[]中的内容似乎要与用户名相同,不过例子中的似乎不是这样,可以不同,网络上很多都配置的没有相同也可以的。需要注意的是extensions的配置
 type为friend

 如果type不是friend,如果是user+peer则好像需要两个[]配置,分开配置,一个是拨入一个是拨出的,如果是friend就是两个都可以。
 
现在都能注册上了,但是不能拨通电话,发现是404,找不到的错误,可能是extensions的错误。

终端可以输入
sip debug看到信息


 终于可以了,在extensions.conf里面加入拨号规则
 exten => 888,1,Dial(SIP/888/1)
exten => 777,1,Dial(SIP/777/1)
这样777,888就可以互通了

>     -- Executing Dial("SIP/777-0a13", "SIP/888/1") in new stack
    -- Called 888/1
    -- SIP/888-b6b3 is ringing
    -- SIP/888-b6b3 answered SIP/777-0a13
    -- Attempting native bridge of SIP/777-0a13 and SIP/888-b6b3
  == Spawn extension (default, 888, 1) exited non-zero on 'SIP/777-0a13'

如果不对的话,如下提示
Jul 28 16:55:32 WARNING[3519]: app_dial.c:997 dial_exec_full: Dial argument takes format (technology/[device:]number1)
  == Spawn extension (default, 333, 1) exited non-zero on 'SIP/777-9c87'

如果修改成如下
exten => 888,1,Dial(SIP/888,20)
exten => 777,1,Dial(SIP/777,20)
exten => 333,1,Dial(SIP/333/1)
exten => 222,1,Dial(SIP/222/1)
exten => 111,1,Dial(SIP/111/1)

则,结果如下
*CLI>     -- Executing Dial("SIP/777-3565", "SIP/888|20") in new stack
    -- Called 888
    -- SIP/888-9e31 is ringing
    -- SIP/888-9e31 answered SIP/777-3565
    -- Attempting native bridge of SIP/777-3565 and SIP/888-9e31
  == Spawn extension (default, 888, 1) exited non-zero on 'SIP/777-3565'
可以看出,下面的才是对的

在拨333的时候
   -- Executing Dial("SIP/777-081d", "SIP/333/1") in new stack
Jul 28 17:04:04 NOTICE[3609]: app_dial.c:1029 dial_exec_full: Unable to create channel of type 'SIP' (cause 3 - No route to destination)
  == Everyone is busy/congested at this time (1:0/0/1)
  == Auto fallthrough, channel 'SIP/777-081d' status is 'CHANUNAVAIL'


 重要的是认证,另外就是dialplan的问题(就是extensions里面的内容,不修改的话会有404或者407错误)

 首先看看dialplan
 http://www.voip-info.org/wiki/index.php?page=Asterisk+config+extensions.conf
 看看这里的解说,我就翻译一下吧。
   exten => 123,1,Answer
   exten => 123,2,Playback(tt-weasels)
   exten => 123,3,Voicemail(44)
   exten => 123,4,Hangup
这个定义了一个名为”123”的扩展,当有一个呼叫到123的时候,asterisk会自己应答这个呼叫,播放一个叫tt-weasels的声音文件,然后给用户一个机会留言到mailbox 44,然后挂机。

但是需要注意的是asterisk并不关心你在extensions.conf文件写的顺序,它使用的是优先级,就是中间的1,2,3,4这些。

另外有一些选项用来。。。。
   exten => 123/100,1,Answer()
   exten => 123/100,2,Playback(tt-weasels)
   exten => 123/100,3,Voicemail(123)
   exten => 123/100,4,Hangup()
这将会匹配扩展123,并且执行下面的选项当且仅当呼叫用户的Caller-ID Number是100的时候。

当然我们也可以使用扩展。比如下面的表达式
   exten => 1234/_256NXXXXXX,1,Answer()
匹配的是所有Caller-ID Number是256打头的

我们像下面写都是合法的。
   exten => s,1,Answer
   exten => s/9184238080,2,Set(CALLERID(name)=EVIL BASTARD)
   exten => s,2,Set(CALLERID(name)=Good Person)
   exten => s,3,Dial(SIP/goodperson)
这样在第二步的时候可以把不喜欢的人拒绝掉。


exten => _XXX.,1,Dial(SIP/888,20)
把所有以三个数字开头的号码都拨到888去,试了,是这样的。但是后面呼叫号码怎么确定还没弄清楚,应该有一个全局变量来标识被叫号码的。
另外callid=call name+call num

vax:/etc/asterisk# asterisk -cvvv

后来发现后面dial的的确是有一个全局变量来使用,可以使用如下的表达式来匹配就行了
exten => _X.,1,Dial(SIP/${EXTEN},20)
有这一句就行了,另外需要考虑的是sip.conf里面总是需要手动添加用户的方法太过复杂,应该改进一下,另外有疑问的就是extensions.conf里面的为什么没有起作用。看看
exten => s,1,Dial(${ARG2},20|p)这个ARG2没有被正常的解析,可能是因为版本和配置文件不配套,debian的打包者可能出了些小差错。
http://www.voip-info.org/wiki/index.php?page=Asterisk+config+extensions.conf
http://www.voip-info.org/wiki/index.php?page=Asterisk+Extension+Matching
http://www.voip-info.org/wiki/view/Asterisk+extensions+from+mysql
http://www.signate.com/book/codeview.php?filename=extensions.conf
http://threebit.net/mail-archive/asterisk-users/msg00010.html
http://bugs.digium.com/file_download.php?file_id=10554&type=bug
http://www.marko.net/asterisk/archives/0302/0235.html
http://www.voip-info.org/wiki-Asterisk

可以在网上搜exten => s,1,Dial(${ARG2},20)
或者估计搜asterisk+extensions.conf 也可以的,看看大家的配置文件。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

感谢一路走过的人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值