Как в Asterisk проиграть звуковой файл несколько раз

Как в Asterisk проиграть звуковой файл несколько раз

В данной статье буду решать следующую задачу. Нужен тестовый номер для проверки доступности станции на платформе ip pbx Asterisk. То есть, если номер на который мы будем набирать нам отвечает, то наша станция в сети и успешно функционирует. Конечно, вызов номера не покажет всей картины происходящей на ip pbx.
Показать вызов к станции на нужный нам номер не проблема, как впрочем, не является бедой, и проиграть в Asterisk звуковой файл (приветствие несколько раз). Но способы выполнить это могут быть различны. Мне поддались четыре варианта, с помощью которых возможно проиграть сообщение несколько раз.

Варианты, как в Asterisk проиграть звуковой файл несколько раз

[in_911]

Способ первый - проиграть файл и разъединить. Здесь мы не проигрываем файл несколько раз.

Способ второй - принять вызов и поставить его на удержание, мелодию реализовать своим классом в musichold.conf.

Способ третий в Dial указать опцию m, то есть поставить на удержание сразу в Dial, молодию реализовать классом.

Третий вариант здесь не реализован – это просто Dial с опцией m.

Способ четвертый использовать GOTO, то есть зациклить мелодию

Способ первый и второй

;Держим вызов три секунды
exten => 911,1,Wait(3)
Устанавливаю в переменную per1 в путь до звуковых файлов
exten => 911,n,Set(per1="/var/lib/asterisk/sounds/ru")
;Отвечаю на вызов
exten => 911,n,Answer()
;Проигрываю файл или устанавливаю удержание
exten = >911,n,MusicOnHold(class,[avaliable])
exten => 911,n,Playback(${per1}/tt-weasels)
;Жду 5 секунд
exten => 911,n,Wait(5)
;Разъединяю
exten => 911,n,Hangup()

;Через GOTO четвертый способ
;Переход на ext in-ivr
exten => 911,1,Goto(in-ivr,s,1)
;Диалплан in-ivr для проигрывания мелодии бесконечно долго
[in-ivr]
;Устанавливаем переменные с путями до файлов
;exten => s,1,Set(per1="/var/lib/asterisk/sounds/ru")
exten => s,1,Set(per2="/var/lib/asterisk/moh")
exten => s,n,Set(i=1)
exten => s,n,Goto(out-ivr,s,1)
;Проигрываем мелодию
;exten => s,n,Playback(${per1}/tt-weasels)

[out-ivr]
exten => s,1,While($[${i} < 20])
exten => s,n,Playback(${per2}/macroform-cold_day)
;exten => s,n,Playback(${per1}/tt-weasels)
exten => s,n,Set(i=$[${i} + 1])
exten => s,n,Goto(s,1)
exten => s,n,EndWhile

;Ждем 2 сек,не обязательно
exten => s,n,WaitExten(2)
exten => s,n,Hangup()

;Нажали 1, проговариваем 1 возвращаемся в главное меню
;exten => 1,1,Playback(${per1}/1")
;exten => 1,2,Playback(${per1}/1")
;exten => 1,3,Goto(s,1)

;Таймаут
;exten => t,1,Goto(s,1)

;Неверный набор
;exten => i,1,Goto(s,1)

;Возвращаемся в s,1
;exten => s,n,Goto(s,1)

Как видно, четвертый вариант реализован с помощью ivr с двумя переходами

Поделиться:

Добавить комментарий

5 + 1 =
Решите простой математический пример. Например для "два плюс четыре =?" введите "6".