[Из песочницы] Asterisk. Отправка и прием факсов

Всем привет. Сегодня я хочу написать заметку о том, как наладить отправку/прием факсов с помощью программной АТС 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 -r204×196 -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Вроде всё. Если что-то забыл написать или что то непонятно — заранее извнияюсь. Если этот материал был полезен очень рад.

© Habrahabr.ru