Факсы в Freeswitch без «факса»

от автора

image
После первой половины нулевых годов, когда Интернет и электронная почта широко распространились даже в мелких городах, а на сканерах появилась кнопка «отправить на e-mail», считал что факсы — это из разряда ископаемых как аналоговые модемы.
Но, на мою беду, любовь к факс-аппаратам более всего питали сотрудницы бухгалтерий, к которым, в свою очередь, питали любовь «исполнительные» и «генеральные». Учитывая состояние аналоговых линий в целом, на тот момент обращения о «плохих факсах» портили общую картину тикетов Service desk , и моей любви к этой технологии передачи документов не было совсем.
С 2006 года в своих проектах я стал использовать Аsterisk либо Avaya из бизнес процессов по средствам Brainwashing у «принимающих решения», мысли о факсах удалялись, в редких случаях для вышеупомянутой бухгалтерии оставляли одну аналоговую линию.
В 2012 году, при проектировании заказчику потребовалось иметь возможность звонить с сайта. О WebRTC читал, но не проникся, остановился на Skype. Решения на Freeswitch, как стабильном гейте уже было отработано многими, да и на Аsterisk уже было не интересно.
После внедрения, с подачи местной бухгалтерии, возник вопрос о факсах. Аналоговых линий проект не предусматривал. Посовещались и сошлись в решении «хотя бы на прием».
Специально для прохождения факсов в «компьютерной телефонии» был разработан протокол
Т.38 . В моем случае на дополнительное оборудование с его поддержкой бюджета не предусматривалось, а от местного Ростелекома ответа не дождался. Остановился на решении в использовании кодека G.711 и приеме документа сразу в файл.

В диалплане добавилось:

    <extension name="fax">       <condition field="destination_number" expression="^fax$">         <action application="answer"/>         <action application="playback" data="silence_stream://2000"/>         <action application="rxfax" data="/opt/freeswitch/fax/${strftime(%Y-%m-%d-%H-%M-%S)}-${caller_id_number}.tiff"/>         <action application="hangup"/>       </condition>     </extension> 

У Freeswitch имеется функция анализа тонов факса в течение всей голосовой сессии tone detect , ей и воспользовался, прописав:

        <action application="tone_detect" data="fax 1100 r +5000 transfer fax XML default"/> 

сразу после ответа голосового приветствия. Папку с файлами раздал в сеть через Samba . Заказчик, в лице главного бухгалтера, была недовольна реализацией без привычного аппарата, но против преимущества в экономии средств на бумагу не смогла в прениях высказать обратные доводы. Бухгалтерии ничего не осталось, как изучать «новые технологии».

Логичным продолжением истории стала острая необходимость отправки факсов. Работа в Hylafax с web интерфейсом, я посчитал, будет непосильной задачей для заказчика. Идея печати документа на виртуальный принтер была красива, но требовала дополнительных действий отправляющего по вводу номера получателя. Учитывая, что в организации бизнес процессы предусматривали сканирование документов в определенное хранилище, имелись несколько рабочих мест, оборудованных планшетными и док. сканерами, а также использовался формат tiff, я решил, что с наименьшим сопротивлением можно внедрить следующую схему; документ для отправки сканируется в файл формата tiff на samba ресурс для оправки факсов, с присвоением имени вида 8923ХХХХХХХ.tiff, где имя файла до расширения — это номер получателя.

Скрипт для отправки имел следующий вид:

send_fax.sh  #/bin/bash # Скрипт отправки факса # Send FAX script # Aleksey Ovchinnikov 2012 +7 913 ХХХ ХХХХ  find /home/fax/*.tif -printf "%f\n" | while read fname do  mydate=$(date +%Y-%m-%d_%H-%M-%S) /usr/bin/convert -page Letter -density 204x98 -resize 1728!x1186 -units pixelsperinch -monochrome -compress Fax  /home/fax/${fname%} /op t/freeswitch/fax/.Отправленные/$mydate"_"${fname%} rm /home/fax/${fname%} /opt/freeswitch/bin/fs_cli -x "originate sofia/gateway/rt/${fname%.*} &txfax(/opt/freeswitch/fax/.Отправленные/$mydate"_"${fname%})"  done 

Сканирование документов в нужных параметрах иногда приводило к ошибке, пришлось переписать скрипт и принудительно конвертировать файлы посредством ImageMagick.

Для исключения вопросов «ушел факс?» добавил в диалплан следующий экстеншен:

<extension name="send_fax">    <condition field="destination_number" expression="^205$">       <action application="export" data="api_hangup_hook=system /opt/freeswitch/scripts/send_fax.sh"/>       <action application="answer"/> <action application="playback" data="/opt/freeswitch/sounds/ru/RU/elena/заявка_на_отправку_принята.wav"/>         <action application="hangup"/>       </condition>     </extension> 

ссылка на оригинал статьи http://habrahabr.ru/post/159393/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *