2012-02-09 40 views
0

我正在寫一個Asterisk的撥號方案,我需要實現書籤功能。如果用戶呼入並且呼叫被斷開,則在重撥時必須將用戶帶到與呼叫最後被丟棄或斷開的完全相同的剪輯。撥號方案(帶書籤功能)目前看起來像這樣:撥號方案中的書籤功能

[some-context] 
exten => 0,n,System(progressmarker.sh ${CALLERID(num)} ${CONTEXT}) 
exten => 0,1,Background(wav1) 
exten => 0,n,Background(wav2) 

有數百個這樣的命令。 progressmarker接收上下文並將其放入文件中。當用戶想要繼續舊會話時,它從用戶所處的上一個上下文開始。如果呼叫在wav1wav2之後下降,則用戶應從wav1wav2開始,而不是從上一個上下文開始。

有這樣的一種方法:

exten => 0,n(wav1),Background(wav1)&System(progressmarker.sh ${CALLERID(num)} ${CONTEXT} wav1) 

但是你可以看到這樣不雅和繁瑣特別是因爲有好幾百個這樣的命令。有沒有更好的方法來實現書籤功能?

回答

0

執行此操作的一種方法是使用h擴展名。這是通道遇到掛斷時被調用的擴展名。解決方案如下所示:

  1. 繼續將優先級保存在全局變量中。
  2. 爲每個上下文實現掛斷擴展。通道變量(如上次上下文,擴展名和優先級)均可訪問(與文檔所述相反)。擴展看起來就像這樣:

exten => h,1,System(<Execute a script here that saves the last context, extension and priority to a file that can be read later and control returned here.>)