Думается мне, достаточно администраторов Asterisk сталкивались с замечательным вопросом пользователей - "а почему после 9/8" нет гудка, как на городском телефоне. Действительно, эта особенность SIP-телефонии слегка раздражает привыкших к классике пользователей.
Не менее часто встречается и вопрос "я не успеваю набрать номер, сделайте мне время ожидания подольше". А когда делаешь время ожидания подольше - "почему так долго надо ждать вызова". Конечно, выходом во втором случае остается набор решетки после номера, но и к этому капризных пользователей приучить трудно.
Решение для донабора номера по одной цифре и гудка после 8/9 (9, имеется в виду, для "ведомственной" сети) есть по ссылке "Читать далее"
А выглядит решение вот так:[upats] ; номера "УПАТС" exten => 100,1,Dial(SIP/Local100,,tT) exten => 100,n,Congestion() exten => 100,n,Hangup() exten => 101,1,Dial(SIP/Local101,,tT) exten => 101,n,Congestion() exten => 101,n,Hangup()
; экстренные службы exten => _0[1-4]!,1,Dial(SIP/external/${EXTEN}) exten => _0[1-4]!,n,Congestion() exten => _0[1-4]!,n,Hangup() exten => _112!,1,Dial(SIP/external/${EXTEN}) exten => _112!,n,Congestion() exten => _112!,n,Hangup() exten => _911!,1,Dial(SIP/external/${EXTEN}) exten => _911!,n,Congestion() exten => _911!,n,Hangup()
; набор номера между странами через "810", к сожалению, длина номера произвольная :(, и решение на эти номера не сработает - номер придется набирать быстро; выход во внешний мир - через "8" на внешнем операторе exten => _810X!,1,Dial(SIP/external/8${EXTEN:1},,tT) exten => _810X!,n,Congestion() exten => _810X!,n,Hangup() ; набор номера через "8", выход во внешний мир - через "8" на внешнем операторе exten => _8NXXXXXXXXX!,1,Dial(SIP/external/8${EXTEN:1},,tT) exten => _8NXXXXXXXXX!,n,Congestion() exten => _8NXXXXXXXXX!,n,Hangup() ; набор городского номера через "9", выход на городские номера прямой на внешнем операторе exten => _9NXXXXXX!,1,Dial(SIP/external/${EXTEN:1},,tT) exten => _9NXXXXXX!,n,Congestion() exten => _9NXXXXXX!,n,Hangup() ; обработка донабора в случае, если абонент ничего вменяемого не набрал exten => _X!,1,Set(X_PREDIGITS=${EXTEN}) exten => _X!,n,Set(X_ORIGCONTEXT=${CONTEXT}) exten => _X!,n,Set(X_REPEATS=1) exten => _X!,n,Goto(more,s,1) ; а сюда подаем в случае полной засады exten => i,1,Congestion() exten => i,n,Hangup() ; а это, собственно, процедура донабора [more] ; проверка прогресса вызова exten => s,1,GotoIf($["${X_PROGRESS}" = "1"]?tone) exten => s,n,Set(X_PROGRESS=1) exten => s,n,Answer() exten => s,n(tone),GotoIf($["${X_TONE}" = "2"]?wait) exten => s,n,GotoIf($["${X_TONE}" = "1"]?check) ; нужно проиграть гудок? exten => s,n,GotoIf($[${LEN(${X_PREDIGITS})} > 1]?setstop) exten => s,n,GotoIf($[$["${X_PREDIGITS:0:1}" != "9"] & $["${X_PREDIGITS:0:1}" != "8"]]?setstop) ; проигрываем гудок после "8", "9" exten => s,n,PlayTones(425/1000) exten => s,n,Set(X_TONE=1) exten => s,n,Goto(wait) ; нужен ли еще гудок? exten => s,n(check),GotoIf($[${LEN(${X_PREDIGITS})} > 1]?stop) exten => s,n,Goto(wait) ; прекращаем гудеть exten => s,n(stop),StopPlayTones() exten => s,n(setstop),Set(X_TONE=2) exten => s,n,Goto(wait) ; ждем цифру (5 - интервал, который ждем перед выходом) exten => s,n(wait),WaitExten(5) exten => _X!,1,Goto(${X_ORIGCONTEXT},${X_PREDIGITS}${EXTEN},1) exten => t,1,Set(X_REPEATS=$[${X_REPEATS}-1]) ; не успели? exten => t,n,GotoIf($[${X_REPEATS} >= 0]?i,1) exten => t,n,Goto(s,1) ; сброс линии если не успели exten => i,1,Congestion() exten => i,n,Hangup()
(c)https://alex-at.ru/asterisk/donabor
Добавить комментарий