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

в 5:46, , рубрики: fax, freeswitch, метки: ,

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

Автор: alexovchinnicov

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js