Много перечитал, в основнойм расписано про iaxmodem и hulyfax. Но я так понимаю, что в asterisknow уже есть поддержка приема факсов?
вот какие манипуляцию надо сделать.. (прочитал много и не понял к сожалению ничего).
Custom Destination: custom-faxtoemail,s,1, в inbounds на нужный номер выберете точку Custom Destinations на ваш созданный только что "Custom Destination" . Будет принимать факсы и отправлять на указанный емаил, снизу конфиги, там указывается емаил.
это добавить в /etc/asterisk/extensions_custom.conf
| Код: |
| [custom-faxtoemail] exten => s,1,Answer exten => s,n,Playtones(ring) exten => s,n,Wait(3) exten => s,n,Playtones(dial) exten => s,n,Wait(2) exten => s,n,Goto(in_fax,1) exten => in_fax,1,StopPlayTones exten => in_fax,2,GotoIf($["${FAX_RX}" = "system"]?3:analog_fax,1) exten => in_fax,3,Macro(faxreceive) exten => in_fax,4,Hangup exten => analog_fax,1,GotoIf($["${FAX_RX}" = "disabled"]?4:2) ;if fax is disabled, just hang up exten => analog_fax,2,Set(DIAL=${DB(DEVICE/${FAX_RX}/dial)}); exten => analog_fax,3,Dial(${DIAL},20,d) exten => analog_fax,4,Hangup ;exten => out_fax,1,wait(7) exten => out_fax,1,txfax(${TXFAX_NAME},caller) exten => out_fax,2,Hangup exten => h,1,system(/var/lib/asterisk/bin/fax-process.pl --to info@mail.ru --from fax@mail.ru --subject "Fax from ${URIENCODE(${CALLERID(number)})}" --attachment fax_${URIENCODE(${CALLERID(number)})}.pdf --type application/pdf --file ${FAXFILE}); exten => h,2,Hangup() |
У меня так принимается только по 711, но мне пока этого хватает.
Имеем стандартный AsteriskNow1.7 (CentOS 5.x, 1.4.36, пару заходящих шлангов через DAHDI, столько же через SIP). Задача - прием факсов без железячного аппарата (ну и отправка в перспективе (пока не сделана))
Делал по инструкции ну и, естественно, вносил свои изменения.
1. Устранял зависимости по пакетам так
| Цитата: |
| yum install libtiff yum install ghostscript yum install ghostscript-fonts yum install libtiff-devel yum install zlib-devel |
2. Устанавливал Hylafax и Iaxmodem сначала по инструкции, но что-то не получилось и нашел другой способ:
Hylafax:
| Цитата: |
| rpm -Uvh http://yum.trixbox.org/centos/5/RPMS/hyl ... 5.i386.rpm |
Iaxmodem:
| Цитата: |
| rpm - Uvh http://yum.trixbox.org/centos/5/RPMS/iax ... 4.i386.rpm |
Не помню, нужно ли после этого выполнять yum install hylafax и yum install iaxmodem или нет =)
3. /etc/iaxmodem/ttyIAX0
| Цитата: |
| device /dev/ttyIAX0 owner uucp:uucp mode 660 #уникальный порт для каждого устройства! port 4570 refresh 300 server 127.0.0.1 # это IAX экстеншн в Asterisk! peername iaxmodem # пароль экстеншена secret **** cidname Fax cidnumber 78142****** codec alaw |
4. Создал в Freepbx iax экстеншн с номером факса (в моем случае 200) - все поля стандартные.
В файле /etc/asterisk/iax_custom.conf прописал
| Цитата: |
| [iaxmodem] type=friend secret=**** port=4570 host=dynamic context=from-internal disallow=all allow=alaw requirecalltoken=no |
5. /var/spool/hylafax/etc/config.TTYIAX0 изменил строки:
| Цитата: |
| CountryCode: 7 AreaCode: 8142 FAXNumber: +7.814.2**.**** LongDistancePrefix: 1 InternationalPrefix: 011 DialStringRules: etc/dialrules.europe ServerTracing: 0xFFF SessionTracing: 0xFFF RecvFileMode: 0600 LogFileMode: 0600 DeviceMode: 0600 RingsBeforeAnswer: 1 SpeakerVolume: off GettyArgs: "-h %l dx_%s" LocalIdentifier: "IAXmodem" TagLineFont: etc/lutRS18.pcf TagLineFormat: "From %%l|%c|Page %%P of %%T" MaxRecvPages: 200 |
6. Далее все по инструкции
Для приема факса в процессе разговора пользователь должен перевести звонок на экстеншен факса (в моём случае двести). В этом случае Hylafax примет факс и отправит его на указанные e-mail. Чтобы работал перевод добавил в файл extensions_override_freepbx.conf строчку
| Цитата: |
| [ext-local] exten => 200,1,Dial(IAX2/iaxmodem/${EXTEN},10,r) |
Кажется всё. Хотя, может и чего забыл...
где я мог накосячить?
Исходящие факсы уходят?
Должно быть какоенибуть сообщение после "faxgetty /dev/ttyIAX0"
Что за чисто 2345 в "iax1:2345:respawn:/usr/local/sbin/iaxmodem ttyIAX0"
| Цитата: |
| iax1:2345:respawn:/usr/local/sbin/iaxmodem ttyIAX0 mo1:2345:respawn:/usr/local/sbin/faxgetty ttyIAX0 |
| Mols писал(а): |
| Какое должно быть какоенибуть сообщение после "faxgetty /dev/ttyIAX0" |
?
Вы делали kill -HUP 1 после добавления записей в inittab?(или перегружались?)
| Код: |
| ps ax | grep -E "iaxmod|faxge" |
| xelas писал(а): | ||
| А они(faxgetty/iaxmodem) вообще запущены? Вы делали kill -HUP 1 после добавления записей в inittab?(или перегружались?) |
| Код: |
| ps ax | grep -E "iaxmod|faxge" |
да faxgetty/iaxmodem запущены. kill сделал сейчас.
[root@Asterisk etc]# ps ax | grep -E "iaxmod|faxge"
14997 ? Ss 0:00 /usr/sbin/iaxmodem
14998 ? S 0:00 /usr/sbin/iaxmodem
18884 ? Ss 0:00 iaxmodem ttyIAX
18895 pts/0 S+ 0:00 grep -E iaxmod|faxge
рестартанул iaxmodem и hylafax
ничего не изменилось (
iax1:2345:respawn:/usr/local/sbin/iaxmodem ttyIAX
mo1:2345:respawn:/usr/local/sbin/faxgetty ttyIAX
это то что в мане было, или ещё чтото надо?
нашел оштбку в иниттаб. теперь faxgetty вроде грузиться
[root@Asterisk etc]# ps ax | grep -E "iaxmod|faxge"
14997 ? Ss 0:00 /usr/sbin/iaxmodem
14998 ? S 0:00 /usr/sbin/iaxmodem
18884 ? Ss 0:00 iaxmodem ttyIAX
19296 ? Ss 0:00 faxgetty ttyIAX
19309 pts/0 S+ 0:00 grep -E iaxmod|faxge
но все по старому осталось...
Последний раз редактировалось: Mols (Пн Фев 21, 2011 12:20)
| Код: |
| which faxgetty |
и
| Код: |
| ls -l /usr/local/sbin/faxgetty |
так то у вас все правильно, только faxgetty по какой-то причине, судя по выводу ps, не стартует.
Последний раз редактировалось: xelas (Пн Фев 21, 2011 12:22)
/usr/sbin/faxgetty
[root@Asterisk etc]# ls -l /usr/local/sbin/faxgetty
ls: /usr/local/sbin/faxgetty: No such file or directory
Последний раз редактировалось: Mols (Пн Фев 21, 2011 12:23)
Теперь давайте посмотрим, что происходит, если позвонить на этот номер.
Покажите iaxmodem.ttyIAX и кусок dial plan -а отвечающего за связь с iaxmodem
device /dev/ttyIAX
owner uucp:uucp
mode 660
port 4570
refresh 300
server 127.0.0.1
peername 1640
secret ххх
cidname Fax
cidnumber 1640
codec alaw
в CLI консоле видно входящий звонок
Последний раз редактировалось: Mols (Пн Фев 21, 2011 12:33)
== Using SIP RTP TOS bits 184
== Using SIP RTP CoS mark 5
== Using SIP VRTP TOS bits 136
== Using SIP VRTP CoS mark 6
-- Executing [1640@from-internal:1] Macro("SIP/1630-000001ba", "exten-vm,novm,1640") in new stack
-- Executing [s@macro-exten-vm:1] Macro("SIP/1630-000001ba", "user-callerid,") in new stack
-- Executing [s@macro-user-callerid:1] Set("SIP/1630-000001ba", "AMPUSER=1630") in new stack
-- Executing [s@macro-user-callerid:2] GotoIf("SIP/1630-000001ba", "0?report") in new stack
-- Executing [s@macro-user-callerid:3] ExecIf("SIP/1630-000001ba", "1?Set(REALCALLERIDNUM=1630)") in new stack
-- Executing [s@macro-user-callerid:4] Set("SIP/1630-000001ba", "AMPUSER=1630") in new stack
-- Executing [s@macro-user-callerid:5] Set("SIP/1630-000001ba", "AMPUSERCIDNAME=Ivan") in new stack
-- Executing [s@macro-user-callerid:6] GotoIf("SIP/1630-000001ba", "0?report") in new stack
-- Executing [s@macro-user-callerid:7] Set("SIP/1630-000001ba", "AMPUSERCID=1630") in new stack
-- Executing [s@macro-user-callerid:8] Set("SIP/1630-000001ba", "CALLERID(all)="Ivan" ") in new stack
-- Executing [s@macro-user-callerid:9] ExecIf("SIP/1630-000001ba", "1?Set(CHANNEL(language)=ru)") in new stack
-- Executing [s@macro-user-callerid:10] GotoIf("SIP/1630-000001ba", "0?continue") in new stack
-- Executing [s@macro-user-callerid:11] Set("SIP/1630-000001ba", "__TTL=64") in new stack
-- Executing [s@macro-user-callerid:12] GotoIf("SIP/1630-000001ba", "1?continue") in new stack
-- Goto (macro-user-callerid,s,19)
-- Executing [s@macro-user-callerid:19] Set("SIP/1630-000001ba", "CALLERID(number)=1630") in new stack
-- Executing [s@macro-user-callerid:20] Set("SIP/1630-000001ba", "CALLERID(name)=Ivan") in new stack
-- Executing [s@macro-user-callerid:21] NoOp("SIP/1630-000001ba", "Using CallerID "Ivan" ") in new stack
-- Executing [s@macro-exten-vm:2] Set("SIP/1630-000001ba", "RingGroupMethod=none") in new stack
-- Executing [s@macro-exten-vm:3] Set("SIP/1630-000001ba", "VMBOX=novm") in new stack
-- Executing [s@macro-exten-vm:4] Set("SIP/1630-000001ba", "EXTTOCALL=1640") in new stack
-- Executing [s@macro-exten-vm:5] Set("SIP/1630-000001ba", "CFUEXT=") in new stack
-- Executing [s@macro-exten-vm:6] Set("SIP/1630-000001ba", "CFBEXT=") in new stack
-- Executing [s@macro-exten-vm:7] Set("SIP/1630-000001ba", "RT=""") in new stack
-- Executing [s@macro-exten-vm:8] Macro("SIP/1630-000001ba", "record-enable,1640,IN") in new stack
-- Executing [s@macro-record-enable:1] GotoIf("SIP/1630-000001ba", "1?check") in new stack
-- Goto (macro-record-enable,s,4)
-- Executing [s@macro-record-enable:4] ExecIf("SIP/1630-000001ba", "0?MacroExit()") in new stack
-- Executing [s@macro-record-enable:5] GotoIf("SIP/1630-000001ba", "0?Group:OUT") in new stack
-- Goto (macro-record-enable,s,15)
-- Executing [s@macro-record-enable:15] GotoIf("SIP/1630-000001ba", "1?IN") in new stack
-- Goto (macro-record-enable,s,20)
-- Executing [s@macro-record-enable:20] ExecIf("SIP/1630-000001ba", "1?MacroExit()") in new stack
-- Executing [s@macro-exten-vm:9] Macro("SIP/1630-000001ba", "dial,,tr,1640") in new stack
-- Executing [s@macro-dial:1] GotoIf("SIP/1630-000001ba", "1?dial") in new stack
-- Goto (macro-dial,s,3)
-- Executing [s@macro-dial:3] AGI("SIP/1630-000001ba", "dialparties.agi") in new stack
-- Launched AGI Script /var/lib/asterisk/agi-bin/dialparties.agi
dialparties.agi: Starting New Dialparties.agi
dialparties.agi: Caller ID name is 'Ivan' number is '1630'
dialparties.agi: Methodology of ring is 'none'
-- dialparties.agi: Added extension 1640 to extension map
-- dialparties.agi: Extension 1640 cf is disabled
-- dialparties.agi: Extension 1640 do not disturb is disabled
dialparties.agi: EXTENSION_STATE: 0 (NOT_INUSE)
dialparties.agi: Extension 1640 has ExtensionState: 0
-- dialparties.agi: Checking CW and CFB status for extension 1640
-- dialparties.agi: dbset CALLTRACE/1640 to 1630
-- dialparties.agi: Filtered ARG3: 1640
-- AGI Script dialparties.agi completed, returning 0
-- Executing [s@macro-dial:7] Dial("SIP/1630-000001ba", "IAX2/1640,,tr") in new stack
-- Called 1640
== Extension Changed 1640[ext-local] new state Ringing for Notify User 1630
-- Call accepted by 127.0.0.1 (format alaw)
-- Format for call is alaw
-- IAX2/1640-9008 is ringing
-- Hungup 'IAX2/1640-9008'
== Extension Changed 1640[ext-local] new state Idle for Notify User 1630
== Spawn extension (macro-dial, s, 7) exited non-zero on 'SIP/1630-000001ba' in macro 'dial'
== Spawn extension (macro-exten-vm, s, 9) exited non-zero on 'SIP/1630-000001ba' in macro 'exten-vm'
== Spawn extension (from-internal, 1640, 1) exited non-zero on 'SIP/1630-000001ba'
-- Executing [h@from-internal:1] Macro("SIP/1630-000001ba", "hangupcall") in new stack
-- Executing [s@macro-hangupcall:1] GotoIf("SIP/1630-000001ba", "1?noautomon") in new stack
-- Goto (macro-hangupcall,s,3)
-- Executing [s@macro-hangupcall:3] NoOp("SIP/1630-000001ba", "TOUCH_MONITOR_OUTPUT=") in new stack
-- Executing [s@macro-hangupcall:4] GotoIf("SIP/1630-000001ba", "1?skiprg") in new stack
-- Goto (macro-hangupcall,s,7)
-- Executing [s@macro-hangupcall:7] GotoIf("SIP/1630-000001ba", "1?skipblkvm") in new stack
-- Goto (macro-hangupcall,s,10)
-- Executing [s@macro-hangupcall:10] GotoIf("SIP/1630-000001ba", "1?theend") in new stack
-- Goto (macro-hangupcall,s,12)
-- Executing [s@macro-hangupcall:12] Hangup("SIP/1630-000001ba", "") in new stack
== Spawn extension (macro-hangupcall, s, 12) exited non-zero on 'SIP/1630-000001ba' in macro 'hangupcall'
== Spawn extension (from-internal, h, 1) exited non-zero on 'SIP/1630-000001ba'
| xelas писал(а): |
| попробуйте поискать здесь: /var/spool/hylafax/etc/config.TTYIAX |
это дело я правил
CountryCode: 7
AreaCode: 9044
FAXNumber: +7.904.4хх.хххх
LongDistancePrefix: 1
InternationalPrefix: 011
DialStringRules: etc/dialrules
ServerTracing: 0xFFF
SessionTracing: 0xFFF
RecvFileMode: 0600
LogFileMode: 0600
DeviceMode: 0600
RingsBeforeAnswer: 1
SpeakerVolume: 5
GettyArgs: "-h %l dx_%s"
LocalIdentifier: "IAXmodem"
TagLineFont: etc/lutRS18.pcf
TagLineFormat: "From %%l|%c|Page %%P of %%T"
MaxRecvPages: 200
-------//-----------
дальше ничего не правил
| Код: |
| mv /var/spool/hylafax/etc/config.TTYIAX /var/spool/hylafax/etc/config.ttyIAX killall -TERM faxgetty |
| xelas писал(а): | ||
| Код: |
| mv /var/spool/hylafax/etc/config.TTYIAX /var/spool/hylafax/etc/config.ttyIAX killall -TERM faxgetty |
команда выполнилась так:
mv /var/spool/hylafax/etc/config.ttyIAX /var/spool/hylafax/etc/config.TTYIAX
тоже самое. можем не берет трубку
после этих настроек надо рестартовать хулафакс или яксмодем?
| Код: |
| mv /var/spool/hylafax/etc/config.TTYIAX /var/spool/hylafax/etc/config.ttyIAX |
Поясню: вы звоните в iaxmodem, и ему ктото должен "снять трубку". Этим занимается faxgetty.
Снимает он трубку после кол-ва звонков указаных в конфиге о котором мы говорим в директиве:
| Код: |
| RingsBeforeAnswer: 1 |
Раз трубка не снимается, то по всей видимости faxgetty не зачитал конфиг.
Стоит проверить: а действительно ли конфиг лежит в правильном месте? Например в моем случае все конфиги hylafax-a лежат в /var/spool/fax. Но это сильно зависит от дистрибутива.
Если же место правильное и все равно нет желаемого результата -- то вариант один -- включать отладку и анализировать логи.
Больше, боюсь, нечем помочь не смогу.
буду мучить факс дальше. мне кстати название сразу не понравилось
БОЛЬШОЕ Вам спасибо за помощь. у меня появилось осмысленность действий а это тоже многова стоит. СПАСИБО!
попробуйте добавить в конфиг faxgetty следущие строки:
| Код: |
| Class1AdaptRecvCmd: AT+FAR=1 ModemResetCmds: AT+VCID=1 |
и создать файл в /var/spool/hylafax/config/ с названием iaxmodem следущего содержания:
| Код: |
| # $Id: iaxmodem,v 1.2 2007/11/26 14:03:45 aidan Exp $ # # prototype config for the IAXmodem softmodem which uses # the spandsp soft-DSP library # # CONFIG:CLASS1:spandsp:.*:.*: Manufacturer=spandsp Model=IAXmodem # # BEGIN-SERVER # END-SERVER # # # Modem-related stuff: should reflect modem command interface # and hardware connection/cabling (e.g. flow control). # ModemType: Class1 # use this to supply a hint # # The modem is taken off-hook during initialization, and then # placed back on-hook when done to prevent glare. # ModemResetCmds: "ATH1\nAT+VCID=1" # enables CallID display ModemReadyCmds: ATH0 Class1AdaptRecvCmd: AT+FAR=1 Class1TMConnectDelay: 400 # counteract quick CONNECT response # # Older iaxmodem versions didn't support V.17 very well. It can be # disabled in this fashion: # #Class1RMQueryCmd: "!24,48,72,96" # V.17 fast-train recv doesn't work well #Class1TMQueryCmd: "!24,48,72,96" # V.17 fast-train recv doesn't work well CallIDPattern: "NMBR=" CallIDPattern: "NAME=" CallIDPattern: "ANID=" CallIDPattern: "NDID=" #CallIDPattern: "DATE=" #CallIDPattern: "TIME=" |
после чего перестартуйте hylafax и выполните killall -TERM faxgetty
через минуту попробуйте сделать звонок.
Интересует такой момент, как сделать так, чтобы после приёма факса звонок переводился на юзера? Т.е. получается такой процесс: кто-то звонит с внешки, говорит "примите факс", юзер переключает на экстеншен факса, там hylafax всё принимает, и вот надо чтобы этот звонок переключился обратно на юзера. А hylafax просто кладёт трубку.
все запущенно, все ок, Но нет логов почему то и нет ответа от faxgetty
но при этом :
| Цитата: |
| cat /dev/ttyIAX0 RING OK |
звонок на девайсе есть
и
| Цитата: |
| HylaFAX[30817]: HylaFAX INET Protocol Server: restarted. Jan 23 03:35:04 Asterisk2 FaxGetty[30718]: CAUGHT SIGNAL 15 Jan 23 03:35:04 Asterisk2 FaxGetty[30718]: CLOSE /dev/ttyIAX0 Jan 23 03:35:04 Asterisk2 FaxGetty[30824]: OPEN /dev/ttyIAX0 HylaFAX (tm) Version 4.4.4 |
| Цитата: |
| [root@Asterisk2 common]# faxstat -r HylaFAX scheduler on Asterisk2: Running Modem ttyIAX0 (): Listening to rings from modem |
Если кто решил эту засаду, ответьте плиз. запарился уже бороться.
Added after 58 minutes:
упс. кажись поборол