После первой половины нулевых годов, когда Интернет и электронная почта широко распространились даже в мелких городах, а на сканерах появилась кнопка «отправить на 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/
Добавить комментарий