Man вики
Строка 51: Строка 51:
   
 
apt-get update
 
apt-get update
apt-get install asterisk iaxmodem hylafax-server procmail fetchmail
+
apt-get install lamp-server^ asterisk iaxmodem hylafax-server postfix procmail fetchmail
   
  +
Мастера установки спросят пароль для сервера mysql (запомним его), libvpb0 оставим по умолчанию '''7''', а для Postfix Configuration выберем '''Без настройки'''
Настраивается пакет libvpb0
 
7
 
 
Postfix Configuration
 
Без настройки
 
   
 
Нужно заранее подготовить почтовый ящик с доступом по pop3 на внешнем почтовом сервере
 
Нужно заранее подготовить почтовый ящик с доступом по pop3 на внешнем почтовом сервере

Версия от 02:46, 11 июня 2012

Задача

  1. Организовать автоматизированный шлюз для пересылки документов полученных через электронную почту, адресатам на типовые факсовые аппараты подключенные в телефонную сеть.
  2. Обеспечить статистику и контроль доставки с ведением базы данных по событиям

Требования к системе

  • Наличие доступа по протоколу POP3 к выделенному для этой цели почтовому ящику
  • Наличие доступа к телефонной сети посредством VoIP (IAX2,SIP) с поддержкой aLaw или uLaw или иных средств доступных для использования совместно с Asterisk.

Условия в примере

Реальный или виртуальный сервер на базе ОС Ubuntu Server 12.04 имеющий сетевой доступ к учетным записям:

  • IAX2 (VoIP Asterisk пользователь: user пароль: 123 адрес: asterisk.local)
  • POP3 (пользователь: user пароль: 123 адрес: mail.local)

Письма автоматически формируются платформой 1Сv82 по принципу:

  • Адрес получателя - efax@mail.local
  • Тема и содержимое не важно
  • Только одно почтовое вложение в формате pdf (средствами платформы 1с)

Имя вложения содержит всю необходимую информацию, например:

  • msk_0004567_84991112233-1_9-18_1-5.pdf где:
    • "_" - знак разделения значащих полей
    • msk - префикс базы 1с (филиала)
    • 0004567 - номер документа
    • 84991112233 - номер абонента (получателя факса). 1 - добавочный номер, если указан то до набрать в тоновом режиме (например прямой номер факса автомата)
    • 9-18 - время доступности факса у абонента с 9 до 18 часов
    • 1-5 - дни недели, когда доступен прием факса у абонента (с пн по пт)

Принцип работы

Логический

  1. Выполняется периодическая проверка почтового ящика и в случае обнаружения в нем писем они скачиваются системой
  2. Генерируется случайный уникальный код, который будет участвовать во всех этапах движения этого документа и попадет в статистику
  3. Из скачиваемых писем извлекаются вложения и складываются в папку входящих
  4. Из этой папки выбирается файл отвечающий требованиям к формату имени
  5. Из имени файла выделяются значащая информация и сохраняется в базу данных
  6. Файл отправляется на доставку факсовому серверу, сам файл перемещается в папку обработка
  7. Факсовый сервер на основании переданных параметров помещает факс в очередь на отправку
  8. Через виртуальный модем подключенный к серверу ИП телефонии производится дозвон до получателя
  9. С помощью синтеза голоса получатель уведомляется о сути звонка
  10. С помощью распознавания голоса в базу данных заносится информация от получателя (напр. ФИО, должность)
  11. По результату звонка в базу заносится информация об успешности или не успешности отправки факса с указанием причины
  12. На том-же основании файл перемещается в соответствующую папку

По компонентам

  • MySQL сервер для хранения статистики
  • Fetchmail забирает письма с внешнего почтового ящика по протоколу pop3 и передает их Procmail
  • Procmail (обработчик почтовых сообщений) передает тело письма программе ripmime, а затем запускает bash-скрипт обработки
  • Ripmime извлекает из письма прикрепленный файл
  • bash-скрипт анализирует формат названия файла, передает файл в Hylafax, пишет в mysql полученную информацию
  • Hylafax (факс сервер) получив задание выполняет дозвон через iaxmodem, получателю факса
  • iaxmodem подключен к локальному серверу Asterisk (можно создать множество модемов)
  • Asterisk выполняет подключение к городской телефонной сети через voip протокол, обеспечивает голосовое приветствие
  • API Google используется для синтеза и распознавания голоса в момент ответа абонента, через ARI скрипты Asterisk

Настройка

Установка компонентов

apt-get update
apt-get install lamp-server^ asterisk iaxmodem hylafax-server postfix procmail fetchmail

Мастера установки спросят пароль для сервера mysql (запомним его), libvpb0 оставим по умолчанию 7, а для Postfix Configuration выберем Без настройки

Нужно заранее подготовить почтовый ящик с доступом по pop3 на внешнем почтовом сервере

Настройка Asterisk

Необходимо создать учетную запись IAX а так-же транк для подключения к провайдеру IP телефонии по SIP протоколу для совершения исходящих вызовов.

копируем оригинальный файл

cp /etc/asterisk/iax.conf /etc/asterisk/iax.conf.orig

очищаем оригинальный файл

echo ""> /etc/asterisk/iax.conf

открываем файл

nano /etc/asterisk/iax.conf

и прописываем следующий конфиг

[general]
allow=alaw

[iaxprovider]
type=peer
host=asterisk.local
username=user
fromuser=user
secret=123
qualify=yes
[910]
host=dynamic
type=friend
secret=faxfax123
requirecalltoken=no
context=from-internal

копируем оригинальный файл

cp /etc/asterisk/extensions.conf /etc/asterisk/extensions.conf.orig

очищаем оригинальный файл

echo ""> /etc/asterisk/extensions.conf

открываем файл

nano /etc/asterisk/extensions.conf

и прописываем следующий конфиг

[from-internal]
exten => _.,1,Dial(iax2/iaxprovider/${EXTEN})

Перезапускаем Asterisk

/etc/init.d/asterisk restart


Настройка IAXMODEM

Создаем конфигурацию виртуального модема

nano /etc/iaxmodem/iaxmodem-cfg.ttyIAX1
device /dev/ttyIAX1
owner uucp:uucp
mode 660
port 4570
refresh 300
server 127.0.0.1
peername 910
secret faxfax123
codec alaw

Запускаем виртуальный модем

/etc/init.d/iaxmodem start

Проверяем лог запуска

cat /var/log/iaxmodem/iaxmodem

Настройка hylafax Server

Запускаем мастер настройки

faxsetup

Отвечаем на все вопросы по умолчанию пока не появится вопрос:

Serial port that modem is connected to [ttyS0]?

Пишем имя порта ttyIAX1 и продолжаем отвечать на вопросы мастера, пока не появится запрос о добавлении второго модема Do you want to run faxaddmodem to configure another modem [yes]? . На него отвечаем No Перезапускаем hylafax

/etc/init.d/hylafax restart

Настройка сбора почты

Настройка окружения

Добавим пользователя

adduser efax

указываем любой пароль по вкусу Добавим папки для факсов

cd /home/efax
mkdir IN PROC ERR OK

ripmime

Соберем пакет ripmime для извлечения атачментов из писем.

cd /tmp
wget http://www.pldaniels.com/ripmime/ripmime-1.4.0.10.tar.gz
cd /usr/src
tar zxvf /tmp/ripmime-*
cd ripmime-*
make
checkinstall --install=yes -y

fetchmail

копируем оригинальный файл

cp /etc/default/fetchmail /etc/default/fetchmail.orig

очищаем оригинальный файл

echo ""> /etc/default/fetchmail

открываем файл

nano /etc/default/fetchmail

и прописываем следующий конфиг

START_DAEMON=yes
nano /etc/fetchmailrc
set daemon      10
set no bouncemail
defaults:
 antispam -1
 batchlimit 100
 sslproto ""
poll mail.local
proto pop3
user user
pass 123
is efax here
mda 'procmail -d %T'

procmail

nano /etc/procmailrc
DEFAULT=/home/efax/
:0
* ^From:.*
{
      :0 fbw
      | ripmime -i - --no-nameless -d /home/efax/IN/
              :0 Afhw
              | /home/efax/mailtofax
}
# Все остальные письма отправить в /dev/null
:0
* ^From:.*
/dev/null

Скрипт пересылки письма на факс

nano /home/efax/mailtofax
#!/bin/bash
# Ищем самый свежий файл соответствующий шаблону имени и разбираем на переменные
namefile=`ls -tr /home/efax/IN| grep -P ".+_.+_.+\.pdf"|tail -n1`
  preffil=`echo $namefile|awk -F "_" '{print $1}'`
  id=`echo $namefile|awk -F "_" '{print $2}'`
  numbertel=`echo $namefile|awk -F "_" '{print $3}'`
# Перемещаем файл в обработку
mv /home/efax/IN/$namefile /home/efax/PROC/$namefile
# Генерим уникальный ключ сессии 
datetime=`date +"%Y/%m/%d %T"`
  uniqid=`echo $RANDOM$datetime|openssl md5 -r|awk '{print $1}'`
# Отправляем файл на доставку
istr=`sendfax -n -d $numbertel-$uniqid /home/efax/PROC/$namefile`
  jobnumber=`echo $istr|grep -Po "request id is \d+"|awk '{print $4}'`
echo "$uniqid;$datetime;$preffil;$id;$numbertel;$namefile;$jobnumber" >> /var/log/mailfax.log

Делаем его исполняемым

chmod +x /home/efax/mailtofax