Функция закладок в диалплане - PullRequest
0 голосов
/ 09 февраля 2012

Я пишу план набора в Asterisk, где мне необходимо реализовать функцию закладки. Если пользователь звонит, и вызов прерывается, при повторном наборе пользователь должен быть переведен в тот же самый клип, на котором был сброшен или отключен последний вызов. План набора номера (с функцией закладки) в настоящее время выглядит примерно так:

[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)  

Но вы можете видеть, что этот способ не элегантен и обременителен, тем более что таких команд сотни. Есть ли лучший способ реализовать функцию закладки?

1 Ответ

0 голосов
/ 10 февраля 2012

Один из способов сделать это - использовать расширение 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.>)

...