Asterisk 拨号计划中的书签功能

Asterisk 拨号计划中的书签功能,asterisk,bookmarks,Asterisk,Bookmarks,我正在Asterisk中编写拨号计划,需要在其中实现书签功能。如果用户来电且通话已断开,重拨时必须将用户带到上次断开或挂断通话的同一剪辑。dialplan(带书签功能)当前的外观如下: [some-context] exten => 0,n,System(progressmarker.sh ${CALLERID(num)} ${CONTEXT}) exten => 0,1,Background(wav1) exten => 0,n,Background(wav2) 有数百个这

我正在
Asterisk
中编写拨号计划,需要在其中实现书签功能。如果用户来电且通话已断开,重拨时必须将用户带到上次断开或挂断通话的同一剪辑。dialplan(带书签功能)当前的外观如下:

[some-context]
exten => 0,n,System(progressmarker.sh ${CALLERID(num)} ${CONTEXT})
exten => 0,1,Background(wav1)
exten => 0,n,Background(wav2)
有数百个这样的命令
progressmarker
获取上下文并将其放入文件中。当用户想要继续旧会话时,它从用户所在的最后一个上下文开始。如果呼叫在
wav1
wav2
之后中断,则用户应从
wav1
wav2
开始,而不是从最后一个上下文开始

有一种方法可以做到这一点:

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

但您可以看到,这种方式既不雅观又麻烦,尤其是因为有数百个这样的命令。是否有更好的方法实现书签功能?

一种方法是使用
h
扩展。这是通道遇到挂起时调用的扩展。解决方案如下所示:

[some-context]
exten => 0,n,System(progressmarker.sh ${CALLERID(num)} ${CONTEXT})
exten => 0,1,Background(wav1)
exten => 0,n,Background(wav2)
  • 将优先级保存在全局变量中
  • 为每个上下文实现挂起扩展。通道变量,如last context、extension和priority都是可访问的(与文档所述相反)。扩展将如下所示:
  • extn=>h,1,System()