AF
Asterisk Forum
обсуждения телефонии, VoIP и IP-PBX
12разделов
5 423тем
34 385сообщений
← К списку тем

Определение факса при исходящем звонке на SIP канале. HELP!

Asterisk IP PBX 10 сообщений 16.09.2010 09:19 - 19.11.2010 14:09
#1 16.09.2010 09:19

Определение факса при исходящем звонке на SIP канале. HELP!


Добрый день!
Как сделать определения факса при исходящем звонке на канале SIP ?
Бьюсь об стену с этим вопросом уже 2ю неделю - решил спросить у сообщества.
Также пробовал использовать для этой цели Answering Machine Detect (AMD) - amd определяет факс с той стороны как MACHINE (автоответчик) исходя из этого можно конечно выполнять определенный алгоритм, но мне нужно определения тона факса в любой момент разговора когда с той стороны нажали "СТАРТ". AMD для этих целей не подходит.

Использую на данный момент последнюю версию * 1.6.2.11.
Faxdetect на sip канале при входящем звонке работет хорошо, а вот как заставить * что бы faxdetect заработал при исходящем звонке ?

Код:

; FAX detection will cause the SIP channel to jump to the 'fax' extension (if it exists)
; based one or more events being detected. The events that can be detected are an incoming
; CNG tone or an incoming T.38 re-INVITE request.
;
faxdetect = yes ; Default 'no', 'yes' enables both CNG and T.38 detection
; faxdetect = cng ; Enables only CNG detection
; faxdetect = t38 ; Enables only T.38 detection
; faxdetect = both ; Enables both CNG and T.38 detection (same as 'yes')


В конфиге написано что будет работать только при incoming (входящих) звонках.
Пробовал править исходник как описано тут - http://asterisk-support.ru/forum/topics/5470/?page=1 - не помогло Sad
Разбираться самому в миллионах строк кода и поправить что нужно - увы мне не по силе Smile
Посоветуйте что-то пожалуйста - очень надо.
Заранее благодарен.
#3 16.09.2010 09:40

_Pavel_ - очень смешно.
Читайте внимательно - faxdetect при исходящем вызове.
#4 16.09.2010 09:46

Пробовали посмотреть NVFaxDetect ?
В 1 десятке поиска для 1.6 он есть...
#5 16.09.2010 10:04

Снова читаете не внимательно - прочтите здесь http://asterisk-support.ru/forum/topics/5470/?page=1

Пробовал NVFaxDetect, NVBackgroundDetect - даже пропатчил их что бы скомпилировать под 1.6.
Но они тоже не "ловят" факс при исходящем звонке.
Вообще NVFaxDetect, NVBackgroundDetect не нужны в 1.6 - там это уже встроено, но опять же для входящих звонков. На chan_dahdi есть возможность детектить все факсы, но мне нужно именно на SIP канале.

Added after 12 minutes:

Вот кстати что говорит voip-info.org по этому поводу http://www.voip-info.org/wiki/view/outgoing+fax+detect Sad
#6 26.09.2010 15:45

exten => _X.,n,Dial(SIP/line3,,tTM(send,${EXTEN}))

а в макросе send запускай свой детектор чего хочешь и как хочешь.
вместо штатного АМД, можешь подцепить к разговору любое приложение, детекторы чего угодно записывальщики голоса и т.д.
Для макроса, твой звонок будет входящим, и детектор его нормально должен отработать.....

пример со штатным детектором.
[macro-send]
exten => s, 1,Wait(2)
exten => s,n,SIPDtmfMode(inband)
exten => s, n,SendDTMF(${ARG1}#,50)
exten => s, n,Wait(2)
exten => s, n,AMD
exten => s,,nGotoIf($[${AMDSTATUS}=HUMAN]?humn:mach)
далее с разговором делай что хочешь....

можнов макросе еще заюзать вот такое приложение, короче фантазируй... Smile

BackgroundDetect(имяфайла[,sil[,min[,max]]])

Аналогично Background(), но пытается выявить разговор.
Во время воспроизведения файла выполняется отслеживание аудио-
сигналов во входящем потоке. Если период отсутствия тишины длится
больше min миллисекунд, но еще меньше max миллисекунд и за ним сле-
дует пауза продолжительностью как минимум sil миллисекунд, вос-
произведение звука прерывается и выполнение переходит в добавоч-
ный номер talk (разговор), если таковой доступен.
Если не заданы, параметры sil, min и max по умолчанию принимают
значения 1000 мс, 100 мс и бесконечное количество соответственно.
exten => 123,1,BackgroundDetect(tt-monkeys)
exten => 123,2,Playback(im-sorry)
exten => talk,1,Playback(yes-dear)
================

у меня детектор работает на исходящих звонках при оповещении клиентов о том что машина прибыла, только звонки делаются из внешней программы через originate (SIP/TRUNK@$Out_number,0001$Number_Car$Number_Zakaza,autodial), где $Oout_number номер вызываемого абонента?$Number_Car - номер машины.$Number_Zakaza -номер заявки

результат пишем в базу для дальнейшей обработки клиентской программой. которая должна видель что клиенту дозвонились, и быть уверенной что дозвонились клиенту, а не факсу или автоответчику.

по сути тот же принцип , для оператора звонок исходящий, для екстеншена _0001XXX это входящий и для АМД соответственно тоже входящий звонок.

а в плане
exten => _0001XXX.,1,Set(TIMEOUT(digit)=5) ; Set Digit Timeout to 5 seconds
exten => _0001XXX.,n,Set(TIMEOUT(response)=10) ; Set Response Timeout to 10 seconds
exten => _0001XXX.,n,Answer
exten => _0001XXX.,n,AMD
exten => _0001XXX.,n,NoOp(human=${AMDSTATUS})
exten => _0001XXX.,n,Wait(1)
exten => _0001XXX.,n,Background(../ru/out/go ; "К Вам подъехал автомобиль номер"
exten => _0001XXX.,n,Background(../ru/out/${EXTEN:4:1} ; "первая цифра номера машины"
exten => _0001XXX.,n,Background(../ru/out/${EXTEN:5:1} ; "вторая цифра номера машины"
exten => _0001XXX.,n,Background(../ru/out/${EXTEN:6:1} ; "третья цифра номера машины"
exten => _0001XXX.,n,MYSQL(Connect connid localhost root "" ams)
exten => _0001XXX.,n,MYSQL(Query resultid ${connid} insert into client ( zakaz, status ) VALUES ("${EXTEN:7}","${AMDSTATUS}"))
exten => _0001XXX.,n,Hangup()

==
результат в базе:
182 93288 HUMAN
183 93291 HUMAN
184 93265 HUMAN
185 93276 MACHINE
186 93267 HUMAN
187 93277 HUMAN
188 93274 HUMAN
189 93279 HUMAN
190 93290 HUMAN
191 93294 HUMAN
192 93292 MACHINE
193 93296 HUMAN
#7 18.11.2010 12:41

Решил проблему?
В исходном коде я закоментил обнуление faxdetect, теперь у меня ловятся факсы и при исходящем вызове.
Но появилась следующая проблема: отправка факса.
Т.е. делается исходящий вызов, далее удаленная сторона нажимает кнопку "старт", от провайдера приходит реинвайт на т.38, это успешно обнаруживает faxdetect, идет на экстеншен fax, где у меня настроен прием. Соответственно, оба факса пытаются принять.
Сейчас смотрю исходники на предмет внедрения какой - нибудь переменной, которой можно играться в диалплане (типа контекст, в котором есть или нет fax экстеншн). Потому как если в контексте нет этого эксеншена, то факс отправляется нормально.
Может у кого какие мысли по этому поводу есть?
#8 19.11.2010 09:53

Ладно, раз тут каждый сам себе отвечает...
написал функцию, которая определяет факсовый контекст на канале.
проверил работоспособность на сип канале.
Если кому будет интересно - стучитесь либо тут, либо в асю 259335130. (отдам бесплатно)
И если кто - нибудь подскажет, как сделать diff файл (там затронуто три файла), выложу патч сюда.
#9 19.11.2010 10:00

Приблизительно так:

Код:
diff -ruH каталог_с_оригиналом каталог_с_модификациями > patch.patch
#10 19.11.2010 14:09

Что у меня есть и как это работает.
1) у меня есть факсовые аппараты (панасы), для них у меня в диалплане отведен отдельный контекст, в котором нету экстеншена fax. Это сделано для того, чтобы можно было с НИХ слать факсы, иначе при реинвайте на т38 при отсылке факса с факс аппарата все уходило в экстеншен fax.
2) для всех остальных офисных телефонов у меня настроено в диалплане екстеншен fax, т.е. они могут позвонить наружу и попросить отправить им факс, и как только удаленная сторона стартует, присходит реинвайт на т38 и уходит в fax.
3) для всех входящих в их контексте настроен экстеншен fax.

Таким образом, пользователям только в одном случае надо нажимать копку СТАРТ на факсе, чтобы принять его на бумажке тогда, когда они сами звонят с факс аппарата наружу, чтобы принять факс. В остальное время он сам посреди разговора детектится и складывается на фтп.

пример смотреть в патче.

Может, кто на дигиум в багрепорт выложет?

П.С.: Просьба протестировать, отписать. На си писал второй раз, код может быть кривоват.

П.П.С.: Работает только на реинвайт на т38, на CNG не делал, т.к. получаю то g729 и поэтому без надобности.

Просьба: сделайте кто нибудь нормальный патч и, пожалуйста, выложите в тему.

В аттаче уже пропатченные файлы.