Pull to refresh

Asterisk. Отправка и прием факсов

Reading time 4 min
Views 45K
Всем привет. Сегодня я хочу написать заметку о том, как наладить отправку/прием факсов с помощью программной АТС Asterisk (физических факсов в наличии нет). Итак.

Дано:
1. Есть организация, занимающаяся скажем продажами (на самом деле чем угодно, потому что факсы используются много где). В этой организации есть пользователи, которые иногда/часто отпрвляют/принимают факсимильные сообщения.
2. Также имеется Asterisk, с подключенными городскими линиями (по SIP или через какой либо VOIP шлюз — не важно. Главное что эти пиры прописаны в sip.conf).

Задача:
Настроить Asterisk таким образом, что бы каждый пользователь мог принять/отправить факсимильное сообщение нажав определенную комбинацию клавиш на телефоне.

Решение:
Всё описанное работает на asterisk 1.8.27.0. Факсы отправленные мной принимаются без проблем на факсах типа МФУ и на обычных аппаратах, находящихся например в таможне. Наша АТС должна быть собрана/либо установлен модуль app_fax.so. В этот модуль входят две команды SendFAX и ReceiveFAX, их и будем использовать.

Файл sip.conf

[sipnet5]
type = friend
username = 004ххххххххххх
secret = ххххххххххххх
allerid = "ххххххххххххх/sipnet.ru"
host = 212.53.40.40
port = 5060
nat = yes
fromuser = ххххххххххххх
fromdomain = sipnet.ru
insecure=invite
context = incoming_calls
disallow = all
;allow = g729
;allow = ulaw
allow = alaw
allow = gsm
allow = g723
allow = g723.1

Как видите это кусок моего файла sip.conf. Здесь описан пир, который зарегистрирован на sipnet.ru. С него и на него я/мне будут звонить и я буду отправлять/принимать факсы.
allow = alaw — предпочитаемы кодек. Именно аlaw, т.к. он является «родным» кодеком факсов (будет работать как на факсах в виде МФУ так и на «железных» аппаратах).

Так же надо прописать в sip.conf служебный номер например «5555». На этот номер мы будем переводить звонок, что бы принять факс. Сделано это для того, что бы явно задать набор используемых кодеков (здесь кодек один — alaw).

[5555]
type = friend
host = 192.168.4.1
port = 5060
username = 5555
secret = ххххххххххххх
qualify = yes
videosupport = yes
nat = yes
context = office-1
host = dynamic
insecure=port,invite
dtmfmode = rfc2833
disallow = all
allow = alaw
call-limit = 0
callgroup = 1
pickupgroup = 1

Далее. Мы хотим что бы отправка/прием факса происходили при нажатии некой комбинации клавиш. Пусть это будет комбинация *3 для отправки и *4 для приема факса.

Для этого добавляем в файл features.conf в раздел [applicationmap] следующее:

[applicationmap]

fax_rec => *4,callee,Goto(office-1,5555,1)
fax_send => *3,callee,Macro(fax)

Как видим, при нажатии *3 запускается макрос fax, а при нажатии *4 происходит переход в контекст office-1, экстеншн 5555.

Файл extensions.conf:

exten => _92XXXXXX,1,Set(DYNAMIC_FEATURES=fax_rec#fax_send)
exten => _92XXXXXX,n,dial(sip/sipnet5/8863${EXTEN:1},,wWtT)

Здесь мы устанавливаем значение переменной DYNAMIC_FEATURES=fax_rec#fax_send.
fax_rec#fax_send — перечисление тех «программ» и комбинаций, которые можно запустить с этого номера, скажем так. Если значение переменной не установить, то АТС не отреагирует на комбинации *3 и *4, совсем.
Далее идет шаблон набора номера по г. Ростов-на-Дону. 92932214 (номер взят от балды).

Алгоритм отправки следующий:
0. Пользователь конвертирует текстовый файл/документ (любым способом) в формат PDF и копирует его в папку /var/spool/asterisk/fax.
1. Пользователь набирает номер 92932214.
2. АТС звонит 88632932214 — Ростов-на-дону.
3. Снимают трубку, мы говорим «примите факс», нам отвечают «стартую»
4. Мы ждем пока в трубке затрещит и жмем *3.

Теперь сам макрос отправки факса:

[macro-fax]
exten => s,1,answer()
exten => s,n,NoOp(************** SENDING FAX... *****************)
exten => s,n,System(/usr/bin/gs -dSAFER -dBATCH -dQUIET -sDEVICE=tiffg3 -sPAPERSIZE=a4 -r204x196 -dNOPAUSE -sOutputFile=/var/spool/asterisk/fax/fax.tiff /var/spool/asterisk/fax/fax.pdf)
exten => s,n,Set(LOCALSTATIONID=+78632204352)
exten => s,n,Set(LOCALHEADERINFO="OOO Roga i Kopita")
exten => s,n,SendFAX(/var/spool/asterisk/fax/fax.tiff)
exten => s,n,Hangup()

С помошью, /usr/bin/gs мы конвертируем файл PDF в TIFF(формат для отправки факсов). LOCALSTATIONID — переменая, где задаем номер с которого мы отправляем факс.
LOCALHEADERINFO — указываем название организации. Подробнее об этих переменных прочитать можно в документации к Asterisk.
Все настройки просты. Их можно усложнять по вашему жеалнию.

Далее собственно отправляем факс и после отправки кладем трубку.

Прием факса. Это фрагмент файла, где прописаны действия для входящих звонков на наш sip номер (контекст incoming_calls).

exten => 0042081926,1,Set(DYNAMIC_FEATURES=fax_rec)

Значение переменной DYNAMIC_FEATURES должно быть установлено.

1. Нам звонят (наш номер скажем 2204352, он же прописан в sip.conf как sipnet5).
2. Мы снимаем трубку, разговариваем, потом нам говорят «примите факс», мы говорим «стартую».
3. Жмём *4.
4. Происходит переход к extension 5555 на первую позицию.

Кусок файла extensions.conf

exten => 5555,1,answer()
exten => 5555,n,Set(DYNAMIC_FEATURES=fax_rec)
exten => 5555,n,receivefax(/var/spool/asterisk/fax/sss.tif)
exten => 5555,n,System(/usr/bin/tiff2pdf /var/spool/asterisk/fax/sss.tif -o /var/spool/asterisk/fax/sss.pdf)
exten => 5555,n,System(rm -f /var/spool/asterisk/fax/sss.tif)
exten => 5555,n,hangup()

1. Отвечаем
2. принимаем факс
3. конвертируем из tiff в pdf.
4. удаляем tiff

Вроде всё. Если что-то забыл написать или что то непонятно — заранее извнияюсь. Если этот материал был полезен очень рад.
Tags:
Hubs:
+10
Comments 26
Comments Comments 26

Articles