DTMF генератор на Asterisk

DTMF генератор на Asterisk

Asterisk может генерировать DTMF сигналы функцией SendDTMF. Блародаря этой функции можно генерировать последовательность чисел имитируя нажатия клавиш пользователем, что можно использовать для автоматизации действий и/или проверки стойкости запароленных каналов например конференций. Этот диалплан повторяет отправку DTMF заданное число раз, условно заданное число секунд.

 

[morse]
;DTMF генератор символов паузы,единицы,решетки
;на 600 и 1800 секунд
exten => 3559000,1,Macro(setmorse,600sec)
exten => 3559001,1,Macro(setmorse,1800sec)
exten => 2211995,1,Macro(setmorse,1800sec)

[macro-setmorse]
exten => s,1,Set(per1="/var/lib/asterisk/sounds/ru/morse")
exten => s,n,Set(i=1)
exten => s,n,Set(CHANNEL(language)=ru)
exten => s,n,Answer()

;Если DTMF формируем сами
exten => s,n,Wait(30)
exten => s,n,SendDTMF(1)
exten => s,n,Wait(30)
exten => s,n,SendDTMF(1)
exten => s,n,Wait(30)

;Если DTMF проигрываем из файла
;exten => s,n,Playback(${per1}/30sec)
;exten => s,n,Playback(${per1}/1)
;exten => s,n,Playback(${per1}/30sec)
;exten => s,n,Playback(${per1}/1)
;exten => s,n,Playback(${per1}/30sec)

;Переход
exten => s,n,GotoIf($["${ARG1}" = "600sec"]?in600sec)
exten => s,n,GotoIf($["${ARG1}" = "1800sec"]?in1800sec)
exten => s,n(in600sec),Goto(inmorse600,s,1)
exten => s,n(in1800sec),Goto(inmorse1800,s,1)

[inmorse600]
;Количество раз проигрываем
exten => s,1,While($[${i} < 10])
;Если DTMF формируем сами
exten => s,n,SendDTMF(#)
exten => s,n,Wait(30)
exten => s,n,SendDTMF(1)
exten => s,n,Wait(30)

;Если DTMF берем из файла
;exten => s,n,Playback(${per1}/1_#)
;exten => s,n,Playback(${per1}/1)

exten => s,n,Set(i=$[${i} + 1])
exten => s,n,Goto(s,1)
exten => s,n,EndWhile
exten => s,n,Hangup()
 

[inmorse1800]
exten => s,1,While($[${i} < 55])
;Если DTMF формируем сами
exten => s,n,SendDTMF(#)
exten => s,n,Wait(30)
exten => s,n,SendDTMF(1)
exten => s,n,Wait(30)

;Если DTMF берем из файла
;exten => s,n,Playback(${per1}/1_#)
;exten => s,n,Playback(${per1}/1)

exten => s,n,Set(i=$[${i} + 1])
exten => s,n,Goto(s,1)
exten => s,n,EndWhile
exten => s,n,Hangup()
 

Поделиться:

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

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