linux - Asterisk ReceiveFax 函数调用后如何做一些任务?

标签 linux asterisk voip fax telecommunication

我安装了 Asterisk 服务器: 我已经为接收传真创建了拨号计划: 我想在成功收到传真后执行一些任务。但是,在ReceveFax 函数之后编写的任何行仅在传输失败 时调用。如果传输SUCCESS 之后将永远不会调用任何线路。

My Dial-Plan:

;######################### FAX Dialplan Implementation Start ##########################

exten => _15555551212,1,NoOp(Fax receiving from ${EXTEN})
exten => _15555551212,n,Answer
exten => _15555551212,n,Ringing
exten => _15555551212,n,Macro(inboundfax)
exten => _15555551212,n,NoOp(Done)

exten => h,1, NoOp(Completed...)

[macro-inboundfax]
exten => s,1,NoOp(**** FAX RECEIVED from ${CALLERID(num)} ${STRFTIME(${EPOCH},,%c)} ****)
exten => s,n,Set(FAXOPT(ecm)=yes)
exten => s,n,Set(FILENAME=fax-${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)})
exten => s,n,Set(FAXFILE=${FILENAME}.tif)
exten => s,n,Set(FAXOPT(ecm)=yes)
exten => s,n,Set(FAXOPT(headerinfo)=Received by MYCOMPANY ${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M)})
exten => s,n,Set(FAXOPT(localstationid)=5555551212)
exten => s,n,Set(FAXOPT(maxrate)=14400)
exten => s,n,Set(FAXOPT(minrate)=4800)
exten => s,n,NoOp(FAXOPT(ecm) : ${FAXOPT(ecm)})
exten => s,n,NoOp(FAXOPT(headerinfo) : ${FAXOPT(headerinfo)})
exten => s,n,NoOp(FAXOPT(localstationid) : ${FAXOPT(localstationid)})
exten => s,n,NoOp(FAXOPT(maxrate) : ${FAXOPT(maxrate)})
exten => s,n,NoOp(FAXOPT(minrate) : ${FAXOPT(minrate)})
exten => s,n,NoOp(**** RECEIVING FAX : ${FAXFILE} ****)
exten => s,n,Set(FAX_DEST=/var/www/html/private/fax/received)
exten => s,n,Set(FAXDEST=/tmp)

exten => s,n,DumpChan(3)

exten => s,n,ReceiveFAX(${FAXDEST}/${FAXFILE})
exten => s,n,Verbose(3,- Fax receipt completed with status: ${FAXSTATUS})

exten => s,n,Verbose(Fax receipt completed with status: ${FAXSTATUS})

exten => s,n,Verbose(FaxFile moving... ${FAXDEST}/${FAXFILE} -> ${FAX_DEST}/)
exten => s,n,System(mv ${FAXDEST}/${FAXFILE} ${FAX_DEST}/)
exten => s,n,Verbose(Fax file moved.)

exten => s,n,NoOp(Mail Sending...)
;exten => s,n,System(echo | mutt -a ${FAXDEST}/${FAXFILE} -s "received fax" testfax@gmail.com)
exten => s,n,NoOp(Mail Sent)

控制台日志:(接收传真时)

 == Using SIP RTP CoS mark 5
    -- Executing [15555551212@from-sip:1] NoOp("SIP/4001-0000000f", "Fax receiving from 15555551212") in new stack
    -- Executing [15555551212@from-sip:2] Answer("SIP/4001-0000000f", "") in new stack
    -- Executing [15555551212@from-sip:3] Ringing("SIP/4001-0000000f", "") in new stack
    -- Executing [15555551212@from-sip:4] Macro("SIP/4001-0000000f", "inboundfax") in new stack
    -- Executing [s@macro-inboundfax:1] NoOp("SIP/4001-0000000f", "**** FAX RECEIVED from 4001 Sat Jun 20 15:25:22 2015 ****") in new stack
    -- Executing [s@macro-inboundfax:2] Set("SIP/4001-0000000f", "FAXOPT(ecm)=yes") in new stack
    -- Executing [s@macro-inboundfax:3] Set("SIP/4001-0000000f", "FILENAME=fax-20150620-152522") in new stack
    -- Executing [s@macro-inboundfax:4] Set("SIP/4001-0000000f", "FAXFILE=fax-20150620-152522.tif") in new stack
    -- Executing [s@macro-inboundfax:5] Set("SIP/4001-0000000f", "FAXOPT(ecm)=yes") in new stack
    -- Executing [s@macro-inboundfax:6] Set("SIP/4001-0000000f", "FAXOPT(headerinfo)=Received by MYCOMPANY 2015-06-20 15:25") in new stack
    -- Executing [s@macro-inboundfax:7] Set("SIP/4001-0000000f", "FAXOPT(localstationid)=5555551212") in new stack
    -- Executing [s@macro-inboundfax:8] Set("SIP/4001-0000000f", "FAXOPT(maxrate)=14400") in new stack
    -- Executing [s@macro-inboundfax:9] Set("SIP/4001-0000000f", "FAXOPT(minrate)=4800") in new stack
    -- Executing [s@macro-inboundfax:10] NoOp("SIP/4001-0000000f", "FAXOPT(ecm) : yes") in new stack
    -- Executing [s@macro-inboundfax:11] NoOp("SIP/4001-0000000f", "FAXOPT(headerinfo) : Received by MYCOMPANY 2015-06-20 15:25") in new stack
    -- Executing [s@macro-inboundfax:12] NoOp("SIP/4001-0000000f", "FAXOPT(localstationid) : 5555551212") in new stack
    -- Executing [s@macro-inboundfax:13] NoOp("SIP/4001-0000000f", "FAXOPT(maxrate) : 14400") in new stack
    -- Executing [s@macro-inboundfax:14] NoOp("SIP/4001-0000000f", "FAXOPT(minrate) : 4800") in new stack
    -- Executing [s@macro-inboundfax:15] NoOp("SIP/4001-0000000f", "**** RECEIVING FAX : fax-20150620-152522.tif ****") in new stack
    -- Executing [s@macro-inboundfax:16] Set("SIP/4001-0000000f", "FAX_DEST=/var/www/html/private/fax/received") in new stack
    -- Executing [s@macro-inboundfax:17] Set("SIP/4001-0000000f", "FAXDEST=/tmp") in new stack
    -- Executing [s@macro-inboundfax:18] DumpChan("SIP/4001-0000000f", "3") in new stack
    --
    -- Dumping Info For Channel: SIP/4001-0000000f:
    -- ================================================================================
    -- Info:
    -- Name=               SIP/4001-0000000f
    -- Type=               SIP
    -- UniqueID=           1434794122.15
    -- LinkedID=           1434794122.15
    -- CallerIDNum=        4001
    -- CallerIDName=       FaxVoip SoftPhone
    -- ConnectedLineIDNum= (N/A)
    -- ConnectedLineIDName=(N/A)
    -- DNIDDigits=         15555551212
    -- RDNIS=              (N/A)
    -- Parkinglot=         default
    -- Language=           en
    -- State=              Up (6)
    -- Rings=              0
    -- NativeFormat=       (ulaw)
    -- WriteFormat=        slin
    -- ReadFormat=         ulaw
    -- RawWriteFormat=     ulaw
    -- RawReadFormat=      ulaw
    -- WriteTranscode=     Yes (slin)->(ulaw)
    -- ReadTranscode=      No
    -- 1stFileDescriptor=  26
    -- Framesin=           1
    -- Framesout=          0
    -- TimetoHangup=       0
    -- ElapsedTime=        0h0m0s
    -- DirectBridge=       <none>
    -- IndirectBridge=     <none>
    -- Context=            macro-inboundfax
    -- Extension=          s
    -- Priority=           18
    -- CallGroup=
    -- PickupGroup=
    -- Application=        DumpChan
    -- Data=               3
    -- Blocking_in=        (Not Blocking)
    --
    -- Variables:
    -- MACRO_DEPTH=1
    -- FAXDEST=/tmp
    -- FAX_DEST=/var/www/html/private/fax/received
    -- FAXFILE=fax-20150620-152522.tif
    -- FILENAME=fax-20150620-152522
    -- MACRO_PRIORITY=4
    -- MACRO_CONTEXT=from-sip
    -- MACRO_EXTEN=15555551212
    -- SIPCALLID=af6dfc5a-ee0f-1910-9de1-e06995d7f913@dsk-388
    -- SIPDOMAIN=XX.XX.XX.XX
    -- SIPURI=sip:4001@XX.XX.XX.XX:5065
    -- ================================================================================
    -- Executing [s@macro-inboundfax:19] ReceiveFAX("SIP/4001-0000000f", "/tmp/fax-20150620-152522.tif") in new stack
    -- Channel 'SIP/4001-0000000f' receiving FAX '/tmp/fax-20150620-152522.tif'
  == Using UDPTL CoS mark 5
    -- Channel 'SIP/4001-0000000f' FAX session '5' started
    -- FAX handle 0: [ 026.931800 ], entering CLOSING state
    -- FAX handle 0: [ 026.931866 ], entering CLOSING state
    -- Channel 'SIP/4001-0000000f' FAX session '5' is complete, result: 'SUCCESS' (FAX_SUCCESS), error: 'NO_ERROR', pages: 2, resolution: '204x98', transfer rate: '14400', remoteSID: ''
  == Spawn extension (macro-inboundfax, s, 19) exited non-zero on 'SIP/4001-0000000f' in macro 'inboundfax'
  == Spawn extension (from-sip, 15555551212, 4) exited non-zero on 'SIP/4001-0000000f'

最佳答案

你已经有了正确的想法......把你所有的“传真后”处理放在这里:

exten => h,1, NoOp(Completed...)

由于 ${FAXSTATUS} 变量是一个全局 channel ,它一直存在到 h 扩展处理结束。 if ... then 根据其状态进行处理。

关于linux - Asterisk ReceiveFax 函数调用后如何做一些任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30952801/

相关文章:

python - 在 Amazon Linux 上运行 Dashku python 脚本时出现问题

MySQL仅在给出完整号码时才匹配区号

android - 如何实现语音和视频聊天

c++ - GCC: template previously defined 错误

linux - Shell脚本磁盘镜像分析

linux - 为什么 Asterisk SIP 端口 (5060) 被关闭?

asterisk - 如何上传 Asterisk 中的声音文件?

java - 如何在 ROOTED 设备上录制 VOIP 电话?

android - Pjsua2.so 支持 tls,无法加载到 android 项目

linux - 无法让 BASH 脚本等待 PID