Автоматический донабор DTMF, номера


Допустим пользователи вашей телефонной системы часто звонят туда, где им приходится донабирать одну и ту же последовательность цифр (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

 

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *