Определение факса при исходящем звонке
DAHDI-канал
Сообщений: 33
|
Определение факса при исходящем звонке
Встала задача определять при исходящих звонках, что на другом конце подняло трубку - человек или факс, и в зависимости от результата делать различные действия.
Канал - chan_dahdi.
В настройках стоит faxdetect=both (пробовал и outgoing).
Если делаю Dial на номер с голосом, то звонок проходит.
Если же на номер с факсом - соединение устанавливается (факс снимает трубку), успевает пропищать 0.5-1 секунду приблизительно, и потом звуки прекращаются. При этом дальше по контексту не идёт, только если руками повесить трубку - тогда Dial заканчивается.
Поиск даёт описания о том как слать и принимать факсы - с этим проблем-то нет.
А вот как определить, кто снял трубку на твой звонок?
|
Сообщений: 6521
|
Re: Определение факса при исходящем звонке
Параметр faxdetect= отключает эхокомпенсацию, если факс, потому что для факса эхокомпенсация - вредит. На вашу задачу этот параметр не влияет.
Изучайте amd.conf
|
Сообщений: 33
|
Re: Определение факса при исходящем звонке
ded: Параметр faxdetect= отключает эхокомпенсацию, если факс, потому что для факса эхокомпенсация - вредит. На вашу задачу этот параметр не влияет.
Ух ты, ничего себе... Как-то неочевидно это, и не описано вроде нигде, к сожалению. Спасибо!
ded:
Изучайте amd.conf
Приложение AMD - это понятно, им я умею отличить человека от автоответчика. Я думал, есть что-нибудь что работает как NVFaxDetect (эх, почему оно на вход только работает...)
|
Сообщений: 33
|
Re: Определение факса при исходящем звонке
Ну то есть вот вопрос даже как с помощью AMD различить человека, автоответчика, и факса...
В случае "machine" запускать второй раз AMD с другими параметрами, адаптированными под различение автоответчик/факс, что ли?
|
Сообщений: 866
|
Re: Определение факса при исходящем звонке
ded: Параметр faxdetect= отключает эхокомпенсацию, если факс, потому что для факса эхокомпенсация - вредит. На вашу задачу этот параметр не влияет.
это откуда такие сведения?
faxdetect таки говорит что нужно скать CNG тон в звуке на канале. и в зависимости от incoming/outgoing/both - ищется либо в одном направлении либо в обоих.
Проблема как я понимаю в том, что астериск ищет CNG - то есть тон _передающего_ факса. А на той стороне твечает принимающий. И отвечает он тоном CED который по умолчанию не ловится. Опций чтобы включить обнаружение CED - нет, нужно код поправить. Но изменения не сложные, нужно просто ast_dsp_set_faxmode вызвать и передать ему DSP_FAXMODE_DETECT_CNG|DSP_FAXMODE_DETECT_CED.
|
Откуда: Москва
Сообщений: 3421
|
Re: Определение факса при исходящем звонке
dimas, развей мысль плз!
В этом случае, мы ставим faxdetect=both, и ловим на fax exten'е звонки исходящие на факс, где можем либо hangup, либо, например, TxFax, right?
|
Сообщений: 6521
|
Re: Определение факса при исходящем звонке
dimas, а для чего искать CNG тон в звуке на канале? Смысл?
Мой ответ: чтобы отключить эхокомпенсацию, если факс, потому что для факса эхокомпенсация - вредит.
Как на приём (в одном направлении) так и в обоих.
|
Сообщений: 866
|
Re: Определение факса при исходящем звонке
litnimax,
все чуть сложнее чуть я написал но не сильно. В main/dsp.c нужно найти ast_dsp_new. В нем есть строчка:
dsp->faxmode = DSP_FAXMODE_DETECT_CNG;
Ее поменять на
dsp->faxmode = DSP_FAXMODE_DETECT_CNG|DSP_FAXMODE_DETECT_CED;
С этого момента при при установленном faxdetect, chan_dahdi в дополнение к DTMF "фрейму" 'f' получаемому от DSP при обнаружении CNG будет получать фрейм 'e' при обнаружении CED. Теперь в chan_dahdi.c в dahdi_handle_dtmfup находим
} else if (f->subclass == 'f') {
и "расширяем" до
} else if (f->subclass == 'f' || f->subclass == 'e' ) {
и астериск будет прыгать на fax-экстеншен при обнаружении этого СED.
PS: это 1.6
PPS: я этого не пробовал :=) это теоретически :=)
ded,
имхо chan_dahdi НЕ дизаблит EC при получении CED/CNG тонов. Это делает или сама плата или кернел-драйвер о чем chan_dahdi только уведомляется (посредством DAHDI_EVENT_EC_DISABLED). Так что смысл опции faxdetect это ТОЛЬКО переход на факс-экстеншен при обнаружении тона.
|
Сообщений: 6521
|
Re: Определение факса при исходящем звонке
А, это альтернатива NVbackgroundDetect? От компании Digium? Где-то я это название компании встречал.... не помню.
|
Откуда: Москва
Сообщений: 3421
|
Re: Определение факса при исходящем звонке
ded, NVBackgroundDetect имеет другое применение. Она стримит файл типа приветствия и если обнаружит факс во этот период переведет на обработку. А опция faxdetect ловит факс во время разговора! Вы просто говорите, потом собеседник говорит примите факс, а Вы ему - принимаю! И он жмет start. В этот момент звонок убегает на fax exten. Я еще делал так, что после отправки он снова соединяется с абонентом, с которым говорил.
|
|