http://www.osslab.org.tw/%e5%af%a6%e9%a9%97%e5%b0%88%e6%a1%88/Asterisk/Tips/%e5%bf%99%e7%b7%9a%e5%9b%9e%e6%92%a5-Busy_CallBack  轉貼

什麼是忙線回撥
當分機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/sounds busy-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)
; The following is written by A.Lang 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

[custom-auto-redial]
exten => _rdXXXXXX,1,NoOp(Redialed Call)
exten => _rdXXXXXX,2,Set(FROM=${EXTEN:2:3})
exten => _rdXXXXXX,3,Set(TO=${EXTEN:5:3})
exten => _rdXXXXXX,4,ChanIsAvail(SIP/${TO}|s)
exten => _rdXXXXXX,5,GotoIf($["${AVAILSTATUS}" <= "1"]?6:end)
exten => _rdXXXXXX,6,Set(CALLERID(all)="ReDial ${TO} <${TO}>")
exten => _rdXXXXXX,7,Dial(SIP/${FROM}|10)
exten => h,n(end),Hanghup

* 此範例僅適用以3位數字編碼的分機;如果是4位數的分機,部份內容修改如下:
_rdXXXXXX                         -->  _rdXXXXXXXX
Set(FROM=${EXTEN:2:3})    --> Set(FROM=${EXTEN:3:4})
Set(TO=${EXTEN:5:3})        --> Set(TO=${EXTEN:7:4}) 

/var/lib/asterisk/agi-bin/busy_callback.sh

  1. #!/bin/bash   
  2. # Usage: busy_callback.sh <call from> <call to>   
  3. # example: ./busy_callback.sh 202 201   
  4. #   
  5. if [ $# -ne 2 ]; then   
  6.         exit;   
  7. fi  
  8. extFROM="$1"  
  9. extTO="$2"  
  10. custEXT="custom-auto-redial"  
  11. MR=18 #Max Retries   
  12. RT=10 #Retry per 10 seconds   
  13.   
  14. #   
  15. echo Channel: Local/rd$extFROM$extTO@$custEXT > /tmp/$extFROM.redial   
  16. echo MaxRetries: $MR >> /tmp/$extFROM.redial   
  17. echo RetryTime: $RT >> /tmp/$extFROM.redial   
  18. echo WaitTime: 15 >> /tmp/$extFROM.redial   
  19. echo Context: from-internal >> /tmp/$extFROM.redial   
  20. echo Extension: $extTO >> /tmp/$extFROM.redial   
  21. #echo Priority: 1 >> /tmp/$extFROM.redial   
  22. echo CallerId: ReDial\<$extFROM\> >> /tmp/$extFROM.redial   
  23.   
  24. chown asterisk:asterisk /tmp/$extFROM.redial   
  25. sleep 3   
  26. mv /tmp/$extFROM.redial /var/spool/asterisk/outgoing  

別忘了要加上可執行的權限
#>chmod 755 busy_callback.sh

;MR=18,RT=10 每10秒檢查一次,最多檢查18次

arrow
arrow
    全站熱搜

    安德森 發表在 痞客邦 留言(0) 人氣()