我正在build立一个基于Asterisk 1.8的PBX,作为要求的一部分,我需要为发送和接收传真作出规定。 “大图”的目标是在每个Windows XP(或更高版本)的terminal用户计算机上安装一台传真打印机,让用户打印出来,提示input传真号码,并在发送完成后通过电子邮件发送给用户。 我也希望能够接收传真(发送到一个通用的电子邮件帐户)。
sip.conf:
[general] t38pt_udptl=yes context=from_sip allowoverlap=no realm=zzzz.com udpbindaddr=0.0.0.0 tcpenable=no tcpbindaddr=0.0.0.0 srvlookup=yes recordhistory=yes faxdetect=yes localnet=192.168.0.0/255.255.0.0 externhost=place.no-ip.com externrefresh=180 nat=yes directmedia=no canreinvite=no directrtpsetup=no [callcentric_fax_out] type=peer host=callcentric.com secret=secret defaultuser=user_num fromuser=user_num fromdomain=callcentric.com nat=yes canreinvite=no [callcentric] type=peer host=callcentric.com secret=secret defaultuser=user_num fromuser=user_num fromdomain=callcentric.com nat=yes canreinvite=no callbackextension=s context=from_cc insecure=port,invite ;other sip devices below
extensions.conf文件:
[general] [globals] [from_sip] exten => s,1,Playback(cannot-complete-temp-error) exten => s,n,Hangup() [from_cc] exten => s,1,Answer() exten => s,n,Ringing() exten => s,n,Wait(3) exten => s,n,Authenticate(31337) exten => s,n,DISA(no-password,from_office) exten => fax,1,Goto(fax-rx,s,1) [fax-rx] exten => s,1,Answer() exten => s,n,Wait(1) exten => s,n,Set(FAXFILE=/var/spool/asterisk/fax/${UNIQUEID}.tif) exten => s,n,ReceiveFAX(${FAXFILE}) exten => h,1,System(/usr/bin/mailfax.sh ${FAXFILE} "${CALLERID(name)}" "${CALLERID(num)}" [email protected] [email protected] MailFax ${FAXSTATUS}) [hylafax-out] exten => _1XXXXXXXXXX,1,Gosub(call_via_callcentric_fax_out,${EXTEN},1) exten => _XXXXXXX,1,Gosub(call_via_callcentric_fax_out,${EXTEN},1) [call_via_callcentric] exten => _1XXXXXXXXXX,1,Dial(SIP/${FILTER(0-9,${EXTEN})}@callcentric,30,KTr) exten => _XXXXXXXXXX,1,Dial(SIP/1${FILTER(0-9,${EXTEN})}@callcentrice,30,KTr) exten => _XXXXXXX,1,Dial(SIP/1516${FILTER(0-9,${EXTEN})}@callcentric,30,KTr) [call_via_callcentric_fax_out] exten => _1XXXXXXXXXX,1,Dial(SIP/${FILTER(0-9,${EXTEN})}@callcentric_fax_out,30,KTr) exten => _XXXXXXXXXX,1,Dial(SIP/1${FILTER(0-9,${EXTEN})}@callcentrice_fax_out,30,KTr) exten => _XXXXXXX,1,Dial(SIP/1516${FILTER(0-9,${EXTEN})}@callcentric_fax_out,30,KTr) [from_office] exten => 500,1,Playback(demo-abouttotry); Let them know what's going on exten => 500,n,Dial(IAX2/[email protected]/s@default,TK) ; Call the Asterisk demo exten => 500,n,Playback(demo-nogo) ; Couldn't connect to the demo site
通过此拨号scheme和SIP设置,我可以完美接收传真。 我现在想使用Hylafax和IAXModem来发送传真,它已正确configuration。 使用的传入上下文是[hylafax-out]。 最初,我简单地用exten => _1XXXXXXXXXX,1,Gosub(call_via_callcentric,${EXTEN},1)对我正常的调用上下文进行了exten => _1XXXXXXXXXX,1,Gosub(call_via_callcentric,${EXTEN},1) 。 使用asterisk -rvvvvvv监控Asterisk服务器的确显示hylafax能够通过呼叫中心进行呼叫,但在这一点上,灾难已经asterisk -rvvvvvv 。 由于sip.conf中的faxdetect = yes,Asterisk检测到接收机的传真音,并跳转到exten => fax,1,Goto(fax-rx,s,1) 。 也就是说,认识到连接到hylafax频道的频道设置是[from_cc]上下文的一部分。
为了解决这个问题,我在sip.conf(callcentric_fax_out)中重复了我的Callcentric信息,但没有给它一个callback扩展。 我修改了hylafax-out的环境来使用这个新的sip peer(这只是旧的克隆,减去上下文)。 这工作完美 – 我可以通过这个新的对等连接发送传真,虽然星号将检测传真CNG噪音,它没有地方redirect的呼叫,因此不会干扰。 然而,这是与我的设置,我注意到一个问题。
在通话期间(发送传真)通过callcentric_fax_out对等体,似乎传入呼叫在callcentric对等体上被拒绝。 看着SIPdebugging,我得到这个:
<--- SIP read from UDP:204.11.192.35:5060 ---> CANCEL sip:[email protected]:5060 SIP/2.0 v: SIP/2.0/UDP 204.11.192.35:5060;branch=z9hG4bK-9bf9ce47c01ef721aff04119c7f831ba f: "WIRELESS" <sip:[email protected]>;tag=3501265591-800738 t: <sip:[email protected]> i: [email protected] CSeq: 1 CANCEL Max-Forwards: 15 l: 0 <-------------> --- (8 headers 0 lines) --- <--- Transmitting (NAT) to 204.11.192.35:5060 ---> SIP/2.0 481 Call leg/transaction does not exist Via: SIP/2.0/UDP 204.11.192.35:5060;branch=z9hG4bK-9bf9ce47c01ef721aff04119c7f831ba;received=204.11.192.35;rport=5060 From: "WIRELESS" <sip:[email protected]>;tag=3501265591-800738 To: <sip:[email protected]>;tag=as6091b90b Call-ID: [email protected] CSeq: 1 CANCEL Server: Asterisk PBX 1.8.0 Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH Supported: replaces, timer Content-Length: 0
我的假设是Asterisk因为这些同行共享一个IP而感到困惑。
如果任何人有任何build议我应该如何进行,这将不胜感激。 再次,我的最终目标仅仅是一个可用的Windows打印机到传真网关,入站传真检测工作。 如果你可以提供一个更简单的解决scheme,我是全部耳朵。