Допустим пользователи вашей телефонной системы часто звонят туда, где им приходится донабирать одну и ту же последовательность цифр (PIN код, навигация по голосовому меню, тестирование GSM шлюза и т.п).
В Asterisk есть несколько вариантов позволяющих автоматически послать DTMF (тональные сигналы, чаще всего использующиеся для донабора внутреннего номера или навигации по голосовому меню) после ответа вызываемого номера.
Функция SendDTMF() — один из таких вариантов. Пример использования:
[ext-local-custom] exten => 7777,1,Dial(SIP/8888,120,M(senddtmf,74956360636#)) [macro-senddtmf] exten => s,1,Set(DTMFSTR=${ARG1}) exten => s,n,Wait(0.5) exten => s,n,SendDTMF(${DTMFSTR},500,500) exten => s,n,Wait(0.5)
Если у вас на пире 8888 после ответа ожидается какой-то донабор, то при звонке на 7777 астериск после ответа 8888 донаберет в канал 74956360636# и соединит с вызывающей стороной.
У SendDTMF есть дополнительные опции позволяющие регулировать паузы между набором отдельных цифр (или букв) , а так же длительность тона. Еще можно выбрать другой channel для посыла тонов вместо текущего. Регулировать паузы между цифрами можно другим способом: символ w в передаваемой строке будет заменен на 0.5 секундную паузу.
В режиме DTMF по RFC2833 (dtmfmode=rfc2833) предложенная схема работает без нареканий. Однако при режиме in-band (dtmfmode=inband) наблюдались ошибки: например если номер содержит последовательность повторяющихся цифр, то передается только одна из всей последовательности. Этот bug был замечен в трекере ошибок asterisk но не получил должного внимания: SendDTMF fails for repeating number . Возможно в новых версиях Asterisk он не наблюдается: ошибка была замечена при взаимодействии версий 11.17.1 и 1.8.20.0