8(343)382-23-32

info@unix-ekb.ru

Реализация работы с факсами в asterisk

Появилась необходимость настроить прием и отправку факсов на asterisk. По техническому заданию прием и отправка факсов должны происходить с участием операторов и возможностью предварительного разговора.

В интернете нашел примеры реализации, но в них как правило: 
1) была автоматическая отправка факсов на определенный номер без предварительного разговора с оператором;
2) использовались различные связки iaxmodem либо t38modem + hylafax, в которых на мой взгляд особой надобности в данном случае нет. Asterisk умеет работать с факсами через SpanDSP (должен быть собран с поддержкой SpanDSP).

В итоге все свелось к следующему:
1) любой оператор компании должен иметь функционал для приема и отправки факсов со своего рабочего места, пользуясь ПК и телефоном;
2) для приема факса необходимо перевести вызов на номер 5555. Система должна преобразовать полученный документ из tiff в pdf, выложить в общую папку FAX и продублировать на почтовый ящик секретаря.
3) при отправке факса должна быть возможность отправки любого электронного документа или документа на бумажном носителе (через сканер). Оператор вначале должен иметь возможность сообщить, кому и что за документ передает, потом так же, как и при приеме, перевести на определенный номер, соответствующий данному документу.

Asterisk установлен на сборке gentoo.

Чтобы избежать участия пользователя в переводе документа в формат tiff, было решено использовать сетевой виртуальный принтер cups-pdf.

Устанавливаем:

emerge -va cups-pdf

Чтобы выложить принтер и папку для полученных факсов в сеть используем пакет samba

emerge -va samba

У меня он уже установлен net-fs/samba-3.6.12

Также необходим пакет cups и собственно samba должна быть собрана с поддержкой этого пакета. Установим наш виртуальный принтер через веб интерфейс сервиса cups, назовем его fax.

Расшариваем принтер, добавив следующие строчки в /etc/samba/smb.conf

[global]
    printing = cups
    printcap name = /etc/printcap

[fax]
    comment = Факс
    public = yes
    printable = yes
    writable = yes
    create mode = 0666

На операторских компьютерах установлена Windows 7. Сетевой принтер устанавливается, как обычно только запросит драйвер, я выбрал HP LaserJet 2300 Series PS (должен подойти любой PostScript драйвер)

При печати на данный принтер сам документ должен попадать на принтер в пригодном формате, а пользователь должен получить четырехзначный номер при переводе, на который произойдет передача этого документа.

Для начала посмотрим настройки этого виртуального принтера nano /etc/cups/cups-pdf.conf
И изменим следующие настройки:

Out /var/spool/cups-pdf		# папка куда сохраняются документы
AnonDirName /var/spool/cups-pdf
Spool /var/spool/cups-pdf

TitlePref 1		# нужно для представлении имени файла
UserUMask 0000	# маска для создаваемых файлов
PostProcessing /opt/pdf_to_tiff	# скрипт запускаемый после создания pdf файла
DecodeHexStrings 1	# нужно для представлении имени файла

Скрипт /opt/pdf_to_tiff считывает текущее значение ext_num (четырехзначный номер факса) прибавляет единичку и переносит pdf файл в папку /usr/dumps под именем ext_num.
Далее преобразует файл в формат tiff и отправляет пользователю, который отправил документ письмо с четырехзначным номером на почту.

Cups-pdf будет запускать /opt/pdf_to_tiff с двумя параметрами:
имя файла — $ARGV[0]
имя пользователя — $ARGV[1]
В организации домен (samba-3.6) и почтовые ящики (корпоративная почта на postfix) соответствуют именам пользователей (кое-где пришлось добавить пару почтовых алиасов).

Сам скрипт:

srv d # cat /opt/pdf_to_tiff 

 

#!/usr/bin/perl -w
use strict;
use File::Copy;

# Устанавливаем путь по умолчанию
$ENV{PATH} = '/bin:/usr/bin:/sbin:/usr/sbin';

# Отладка
my $debug=0;

# Делаем корень текущим каталогом
chdir '/';

my $ext=" ";
my $num=0;

open(ext_num,"/opt/ext_num");
    $ext=<ext_num>;
    $num=int($ext);
close(ext_num);
if ($num > 499) {
    $num=1;
} else {
    $num=$num+1;
}
open(ext_num,">/opt/ext_num");
    print ext_num "$num\n";
close(ext_num);
$num=$num+5000;
move("$ARGV[0]","/usr/dumps/$num.pdf");
system("/usr/bin/gs -dSAFER -dBATCH -dQUIET -sDEVICE=tiffg3 -sPAPERSIZE=a4 -r204x196 -dNOPAUSE -sOutputFile=/usr/dumps/$num.tiff /usr/dumps/$num.pdf");
chmod(0644,"/usr/dumps/$num.tiff");
system("/usr/bin/sendEmail -f asterisk_fax\@name.ru -t $ARGV[1]\@name.ru -u FAX -o message-charset=utf-8 -m Номер для перевода на факс:$num -s localhost");

Проверяем работу, отправив на печать какой либо документ (возможно придется создать и поправить права на доступ к папке /usr/dumps/)

Далее настраиваем Asterisk на прием и отправку факсов:

Главное отключить faxdetect:

/etc/asterisk/sip.conf

 

[general]
    faxdetect=no
    ;faxdetect=yes
    t38pt_udptl=no
    ;t38pt_udptl=yes

 

/etc/asterisk/extensions.conf

 

[internal]
exten => 5555,1,NoOp(-------------------Call from ${CALLERID(number)} to ${EXTEN}------------------)
 same => n,Goto(fax-rx,receive,1)

exten => _5[0-4]XX,1,NoOp(-------------------Call from ${CALLERID(number)} to ${EXTEN}------------------)
 same => n,Set(FAXFILENAME=${EXTEN})
 same => n,Goto(fax-tx,send,1)

[fax-rx]
exten => receive,1,NoOP(------------------- FAX from ${CALLERID(number)} ------------------)
 same => n,Answer()
 same => n,Set(DT=${TIMESTAMP}-${CALLERIDNUM}-${UNIQUEID})
 same => n,Set(FAXOPT(headerinfo)=Received by ${CALLERID(number)} ${STRFTIME(${EPOCH},,%Y-%m-%d %H-%M)})
 same => n,Set(FAXOPT(localstationid)=Name)
 same => n,Set(FAXOPT(maxrate)=14400)
 same => n,Set(FAXOPT(minrate)=2400)
 same => n,NoOp(FAXOPT(ecm) : ${FAXOPT(ecm)})
 same => n,NoOp(FAXOPT(headerinfo) : ${FAXOPT(headerinfo)})
 same => n,NoOp(FAXOPT(localstationid) : ${FAXOPT(localstationid)})
 same => n,NoOp(FAXOPT(maxrate) : ${FAXOPT(maxrate)})
 same => n,NoOp(FAXOPT(minrate) : ${FAXOPT(minrate)})
 same => n,NoOp(**** RECEIVING FAX : ${DT} ****)
 same => n,ReceiveFax(/var/spool/asterisk/fax/${FAXOPT(headerinfo)}.tif)
 same => n,System(/usr/bin/tiff2pdf "/var/spool/asterisk/fax/${FAXOPT(headerinfo)}.tif" -o "/var/spool/asterisk/fax/${FAXOPT(headerinfo)}.pdf")
 same => n,System(/bin/cp "/var/spool/asterisk/fax/${FAXOPT(headerinfo)}.pdf" /mnt/public/samba/public/FAX )
 same => n,System(/usr/bin/sendEmail -f asterisk_fax@name.ru -t office@name.ru -u FAX -o message-charset=utf-8 -m Смотри вложение -s localhost -a "/var/spool/asterisk/fax/${FAXOPT(headerinfo)}.pdf")
 same => n,HangUp()

[fax-tx]
exten => send,1,NoOp(------------------- FAX from ${CALLERID(number)} ------------------)
 same => n,Wait(1)
 same => n,Set(DT=${TIMESTAMP}-${CALLERIDNUM}-${UNIQUEID})
 same => n,Set(FAXOPT(headerinfo)=Received by ${CALLERID(number)} ${STRFTIME(${EPOCH},,%Y-%m-%d %H-%M)})
 same => n,Set(FAXOPT(localstationid)=Name)
 same => n,Set(FAXOPT(maxrate)=14400)
 same => n,Set(FAXOPT(minrate)=2400)
 same => n,NoOp(FAXOPT(headerinfo) : ${FAXOPT(headerinfo)})
 same => n,NoOp(FAXOPT(localstationid) : ${FAXOPT(localstationid)})
 same => n,NoOp(FAXOPT(maxrate) : ${FAXOPT(maxrate)})
 same => n,NoOp(FAXOPT(minrate) : ${FAXOPT(minrate)})
 same => n,NoOp(**** RECEIVING FAX : ${DT} ****)
 same => n,SendFAX(/usr/dumps/${FAXFILENAME}.tiff,d)
 same => n,NoOp(${FAXSTATUS})
 same => n,NoOp(number is ${CALLERID(number)})
 same => n,System(/usr/bin/sendEmail -f asterisk_fax@name.ru -t office@name.ru -u 'Fax message Sent' -o message-charset=utf-8 -m 'Номер:${CALLERID(number)}\nStatus:${FAXSTATUS}' -s localhost -l /var/log/fax.log)
 same => n,HangUp()

Вот и все. В итоге не нужен дополнительный софт и проще обучить операторов работе с факсами.

Все статьи


Деятельность

Настройка серверов

Центром сети любой компании являются сервера. Очень важна бесперебойная работа и грамотная настройка данных узлов.

Готовое решение

Уважаемые клиенты, компания Юникс-ЕКБ готова предложить настройку и внедрение сервера для малых рабочих групп под ключ.

IP АТС Asterisk

Настройка корпоративных АТС и Call-центров на базе Asterisk.

Создание сайтов

Мы предлагаем полный комплекс услуг, связанных с созданием и поддержкой веб-сайта.

IT-аутсорсинг

IT-Аутсорсинг позволяет компании-заказчику сократить затраты на содержание собственной IT-структуры. Дает возможность сконцентрироваться на основных бизнес-процессах компании, а работу с информационными системами предоставить специалистам в этой области.

Новости

Разработана инструкция по созданию запросов

Разработана инструкция по созданию запроса в службу поддержки через систему регистрации запросов "Создание запросов". 

Внедрение системы регистрации запросов

Теперь наши клиенты для регистрации запросов о технической поддержке могут использовать систему регистрации запросов HESK.

Все новости

Наши клиенты

Наши технологии

Ajax программирование
Ajax программирование
Drupal CMS
Drupal CMS
PHP программирование
PHP программирование
 

Использование материалов данного сайта возможно только с письменного согласия владельца сайта

Яндекс.Метрика