您的位置:首页 > 其它

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

2010-06-02 11:28 615 查看
转自: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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: