当前位置: 代码迷 >> 综合 >> asterisk忙线回拨的实现方法(基于Asterisk auto-dial out)
  详细解决方案

asterisk忙线回拨的实现方法(基于Asterisk auto-dial out)

热度:0   发布时间:2024-01-20 14:03:00.0

转自:http://www.osslab.org.tw/實驗專案/Asterisk/Tips/忙線回撥-Busy_CallBack

Asterisk auto-dial out:http://www.voip-info.org/tiki-index.php?page=Asterisk+auto-dial+out

Asterisk tips Call Back:http://www.voip-info.org/wiki/index.php?page_id=4923

什么是忙线回拨?
当分机A拨电话给分机B时,如果分机B一直在通话中,所以分机A每隔一段时间就要不断的按重拨。现在如果在主机加上忙线回拨功能,当分机A遇到对方忙线时,只要按一个数字启用忙线回拨,如果分机B讲完电话,系统会主动回拨给分机A,然后当A 接起电话后,系统又会再主动拨给分机B,这样是不是大大节省了分机A作手动重拨的工作呢!

其实这样的应用也不算新玩意,在一般办公室的传统交换机就已经有此功能,只是Asterisk 内建竟没有这个我觉得还蛮实用的feature,既然将电话IP化了,使用上怎能比传统的还逊,所以写了这篇教学,让玩家也可以更愉快的使用Asterisk。
内容异动
2009-04-30 修改extensions.conf 使语音"分机忙线中,如要预约,请按5" 在未输入任何数字前可语音提示三次。
2009-04-30 更改提示语音的内容,并重录制语音档。
功能操作流程

当 A 拨电话给 B 时
A分机-> B分机(忙线中) -> A 听到语音提示:分机忙线中,如要预约,请按5 -> A 按下5 -> A 听到语音提示:功能确定请挂上电话- > A 挂断电话(等待回拨)

当 B 讲完电话时
系统自动回拨至A分机-> A 接起电话-> 系统主动拨给B分机-> B 接起电话后与A 通话
使用的限制
设定忙线回拨的分机,不可启用Voicemail 或FollowMe。
此教学需要修改extensions.conf 设定档,如果有使用FreePBX 套件,在作完套件升级后,部份修改的内容可能会遗失。
档案说明目录位置 档案名称 说明
/etc/asterisk extensions.conf 设定档(修改)
/etc/asterisk extensions_custom.conf 设定档(修改)
/var/lib/asterisk/agi-bin busy_callback.sh AGI(新增)
/var/lib/asterisk/soundsbusy-callback.gsm (更新于2009-4-30) 语音档(新增)
/var/lib/asterisk/sounds busy-callback-ok.gsm (更新于2009-4-30) 语音档(新增)


/etc/asterisk/extensions.conf
红字区域是原始内容,将它们全部注解。
; Extensions with no Voicemail box reporting BUSY come here
;exten => s-BUSY,1,NoOp(Extension is reporting BUSY and not passing to Voicemail)
;exten => s-BUSY,n,Playtones(busy)
;exten => s-BUSY,n,Busy(20)

; This is for busy callback
exten => s-BUSY,1,NoOp(Extension is reporting BUSY and set automatical CallBack)
exten => s-BUSY,2,ChanIsAvail(SIP/${MACRO_EXTEN}|s)
exten => s-BUSY,3,GotoIf($["${AVAILSTATUS}"<="1"]?s-NOANSWER,1)
exten => s-BUSY,4,Read(digit|busy-callback|1|i|3) ;Playback "busy-callback" before press digits and 3 attempts will be made.
exten => s-BUSY,5,GotoIf($["${digit}"="5"]?s-busy-callback,1) ;press 5 enable CallBack
exten => s-BUSY,6,Hangup

exten => s-busy-callback,1,AGI(busy_callback.sh,${CALLERID(number)},${MACRO_EXTEN})
exten => s-busy-callback,2,Playback(busy-callback-ok)
exten => s-busy-callback,3,Hangup

/etc/asterisk/extensions_custom.conf 添加:
;this is for busy callback
[custom-auto-redial]
exten => _rdXXXXXXXX,1,NoOp(Redialed Call)
exten => _rdXXXXXXXX,2,Set(FROM=${EXTEN:2:4})
exten => _rdXXXXXXXX,3,Set(TO=${EXTEN:6:4})
exten => _rdXXXXXXXX,4,ChanIsAvail(SIP/${TO}|s)
exten => _rdXXXXXXXX,5,GotoIf($["${AVAILSTATUS}" <= "1"]?6:end)
exten => _rdXXXXXXXX,6,Set(CALLERID(all)="ReDial ${TO} <${TO}>")
exten => _rdXXXXXXXX,7,Dial(SIP/${FROM}|10)
exten => h,n(end),Hanghup

* 此范例仅适用以4位数字编码的分机;如果是3位数的分机,部份内容修改如下:
_rdXXXXXXXX --> _rdXXXXXX
Set(FROM=${EXTEN:2:4}) --> Set(FROM=${EXTEN:2:3})
Set(TO=${EXTEN:6:4}) --> Set(TO=${EXTEN:5:3})

/var/lib/asterisk/agi-bin/busy_callback.sh
#!/bin/bash
# Usage: busy_callback.sh <call from> <call to>
# example: ./busy_callback.sh 2002 2001
#
if [ $# -ne 2 ]; then
exit;
fi
extFROM="$1"
extTO="$2"
custEXT="custom-auto-redial"
MR=18 #Max Retries
RT=10 #Retry per 10 seconds

#
echo Channel: Local/rd$extFROM$extTO@$custEXT > /tmp/$extFROM.redial
echo MaxRetries: $MR >> /tmp/$extFROM.redial
echo RetryTime: $RT >> /tmp/$extFROM.redial
echo WaitTime: 15 >> /tmp/$extFROM.redial
echo Context: from-internal >> /tmp/$extFROM.redial
echo Extension: $extTO >> /tmp/$extFROM.redial
#echo Priority: 1 >> /tmp/$extFROM.redial
echo CallerId: ReDial/<$extFROM/> >> /tmp/$extFROM.redial

chown asterisk:asterisk /tmp/$extFROM.redial
sleep 3
mv /tmp/$extFROM.redial /var/spool/asterisk/outgoing

别忘了要加上可执行的权限
#>chmod 755 busy_callback.sh

;MR=18,RT=10 每10秒检查一次,最多检查18次
参考连结

http://www.voip-info.org/wiki/view/A...tips+Call+Back

Powered by Zoundry Raven

  相关解决方案