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

Виртуальные факсы, без дополнительного ПО

Asterisk GUI 33 сообщений -
#1

Использую freepbx. Скажите, возможно ли через freepbx настроить виртуальный факс. Нужна всего одна линия с последующей отправкой факса на email.
Много перечитал, в основнойм расписано про iaxmodem и hulyfax. Но я так понимаю, что в asterisknow уже есть поддержка приема факсов?
вот какие манипуляцию надо сделать.. (прочитал много и не понял к сожалению ничего).
#2

Зайдите "Custom Destination" добавьте
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, но мне пока этого хватает.
#3

A Hylafax считается дополнительным ПО? У меня через него с практически нулевыми знаниями по предмету удалось настроить виртуальный факс на прием, так что если есть интерес, отпишусь.
#4

интересно, отпишись
#5

Вот и дошли руки.
Имеем стандартный 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)


Кажется всё. Хотя, может и чего забыл...
#6

делаю все по инструкции. факс зарегился как IAX устройство, завонок на него проходит, он он не отвечает т.е. слышен только гудок вызова
где я мог накосячить?
#7

Думаю, на шаге 6.

Исходящие факсы уходят?
#8

Исходящие тоже не иду. в CLI ничего. ошибок никаких нее вылазит. естьпара вопростов:
Должно быть какоенибуть сообщение после "faxgetty /dev/ttyIAX0"
Что за чисто 2345 в "iax1:2345:respawn:/usr/local/sbin/iaxmodem ttyIAX0"
#9

Мой \etc\initab заканчивается так
Цитата:

iax1:2345:respawn:/usr/local/sbin/iaxmodem ttyIAX0
mo1:2345:respawn:/usr/local/sbin/faxgetty ttyIAX0
#10

У меня также в иниттабе. а
Mols писал(а):

Какое должно быть какоенибуть сообщение после "faxgetty /dev/ttyIAX0"

?
#11

А они(faxgetty/iaxmodem) вообще запущены?
Вы делали kill -HUP 1 после добавления записей в inittab?(или перегружались?)

Код:
ps ax | grep -E "iaxmod|faxge"
#12

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
ничего не изменилось (
#13

У вас не запущен faxgetty. Если он действительно прописан в inittab и все равно не стартует -- смотрите логи hylafax.
#14

В иниттаб у меня прописано:
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)
#15

наберите
Код:
which faxgetty


и
Код:
ls -l /usr/local/sbin/faxgetty


так то у вас все правильно, только faxgetty по какой-то причине, судя по выводу ps, не стартует.


Последний раз редактировалось: xelas (Пн Фев 21, 2011 12:22)
#16

[root@Asterisk etc]# which faxgetty
/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)
#17

Уже лучше.
Теперь давайте посмотрим, что происходит, если позвонить на этот номер.

Покажите iaxmodem.ttyIAX и кусок dial plan -а отвечающего за связь с iaxmodem
#18

при звонке на экстенше 1640 - модем не берет "трубку".

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)
#19

вывод консоли во время звонка покажите? и конфиг faxgetty тоже сразу давайте.
#20

Вот CLI а конфиг faxgetty я не правил. где он обитает? в /etc/ нет.


== 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'
#21

попробуйте поискать здесь: /var/spool/hylafax/etc/config.TTYIAX
#22

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
-------//-----------
дальше ничего не правил
#23

Код:
mv /var/spool/hylafax/etc/config.TTYIAX /var/spool/hylafax/etc/config.ttyIAX
killall -TERM faxgetty
#24

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

тоже самое. можем не берет трубку
после этих настроек надо рестартовать хулафакс или яксмодем?
#25

Тогда верните как было:
Код:
mv /var/spool/hylafax/etc/config.TTYIAX /var/spool/hylafax/etc/config.ttyIAX


Поясню: вы звоните в iaxmodem, и ему ктото должен "снять трубку". Этим занимается faxgetty.
Снимает он трубку после кол-ва звонков указаных в конфиге о котором мы говорим в директиве:
Код:
RingsBeforeAnswer: 1


Раз трубка не снимается, то по всей видимости faxgetty не зачитал конфиг.
Стоит проверить: а действительно ли конфиг лежит в правильном месте? Например в моем случае все конфиги hylafax-a лежат в /var/spool/fax. Но это сильно зависит от дистрибутива.

Если же место правильное и все равно нет желаемого результата -- то вариант один -- включать отладку и анализировать логи.
Больше, боюсь, нечем помочь не смогу.
#26

конфиг лежит /var/spool/hylafax/ ( у меня еластикс)
буду мучить факс дальше. мне кстати название сразу не понравилосьSmile
БОЛЬШОЕ Вам спасибо за помощь. у меня появилось осмысленность действий а это тоже многова стоит. СПАСИБО!
#27

пожалуй вот еще что.
попробуйте добавить в конфиг 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
через минуту попробуйте сделать звонок.
#28

все эти настройки у меня имеются... факсгетти не отвечает...
#29

Настроил asterisk + iaxmodem + hylafax, приём и отправка факсов работает.

Интересует такой момент, как сделать так, чтобы после приёма факса звонок переводился на юзера? Т.е. получается такой процесс: кто-то звонит с внешки, говорит "примите факс", юзер переключает на экстеншен факса, там hylafax всё принимает, и вот надо чтобы этот звонок переключился обратно на юзера. А hylafax просто кладёт трубку.
#30

http://wiki.opennet.ru/Hylafax почитай может поможет, у меня такая же проблемка. Сижу мучаю))
#31

та же хрень, все поставил, кучи неточностей в ваших примерах. Но да ладно.

все запущенно, все ок, Но нет логов почему то и нет ответа от 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:

упс. кажись поборол Smile буду тестить.
#32

Добрый день! Тоже мучаюсь второй день, ситуация 1в1. Подскажите пожалуйста, как и чем решилась засада?
#33

Есть ещё вариант - ls -l - права на чтение...