факс машина + active directory+ jabber
дано: домен где внесены все данные юзеров, в том числе и телефонов
pstnldk-100asteriskldk100pstn ну и sipnet
jabber server OpenFire и базой юзеров в ад
miranda как jabber клиент у всех
нужно :
что бы по пользователю можно было отправить факс на электронку и сообщение о его приходе пришло в jabber
что бы пользователь мог отправить факс наружу как на обычный принтер
что бы пользователь мог во время разговора отправить факс с виртуального принтера
приём факса:
так как у меня много mfu hp а их у меня отказывается принимать ReceiveFax и rxfax(пробовал и callweaver там тоже самое)
пришлось использовать связку asterisk+iaxmodem+hylafax
iaxmodem
wget http://switch.dl.sourceforge.net/sourcef ... 1.0.tar.gz
распаковываем и если у нас в системе уже стоит spandsp то делаем
./build static
./configure
make
hylafax взят hylafax.org
установка как обычно,
./configure
make
make install
после этого запускаем мой скриптик create_iaxmodems.pl
он создаст файлы в /etc/iaxmodem/iaxmodem-cfg.ttyIAXn
n - сколько виртуальных модемом создать
так же он создаст файлы в для hylafax в папке /var/spool/hylafax/etc/config.ttyIAXn
ну и напоследок создаст файлик start_iaxmodems который запускает iaxmodem и gaxgetty
перед этим на всякий случай убивает их
можно этот файлик поменстить в rc.local Только правим путь к iaxmodem
теперь если присмотримся в файлики config.ttyIAX
там есть команды
FaxrcvdCmd: bin/faxrcvd-custom
NotifyCmd: bin/notify-custom
это сделано что бы не перезатирать оригинальные файлы принятия файлов и извещениях
скопируем мои файлики faxrcvd-custom и notify-custom в /var/spool/hylafax/bin,
это мои первые попытки освоить скриптовые языки, так что если что присылайте где ошибки
в файле faxrcvd-custom нам нужно заменить mail='admin@domain,secretar@domain.ru'
на нужные нам, это куда слать сообщения о неопознанных факсах, в моём случае из города или если юзер перевёл на виртуальный факс не существуюешего пользователя
в notify-custom ни чегоменять не надо
теперь нужно скопировать в папку /var/lib/asterisk/agi-bin из папки agi-bin
в ней
logging.php ,xmlobj.php, xmlstream.php ,xmpp.php - это php библиотеки для отправки сообщений в jabber
sendmessage.php файл отправки сообщений в jabber. В нём нужно вбить свои данные в строке XMPP('jabber server', 5222, 'fax', 'password', 'xmpphp', 'domain', $printlog=False, $loglevel=LOGGING_INFO);
первый пакаметра это jid кому второй сообщение
sendstdin.php немножко изменённый файл, в нём так же нужно поменять это строку
толко сообщение он посылает из stin
standart.agi это файл отправки сообщения информации о звонящем вызываемогу абоненту, данные берутся из ad.
Удобно потом смотреть кто тебе звонит ну и пропущенные звонки
правда для оптарвки сообщений использыется asterisk как jabber клиент, так приянее так как он показывает статут "в сети", в отличии от варианта со скриптом.
для этого копируем файл jabber.conf из asterisk в /etc/asterisk
и меняем там ip сервера, имена и пароли
так же нам нужно изменить файл unit_ldap.pl
my $prefix="\@domain"; это дописывается к sAMAccountName для получения jid
$ldap = Net::LDAP->new("ip-pdc"); ну и тут вбиваем ип контроллера домена
$ldap->bind("username\@domain", password=>"password"); username\@domain это имя пользователя дляподключения к АД, права админа юзеру не нужны
использовать например так
;---------- Просто звонить с установкой счётчика групп и caller id из AD-------------------
[macro-dial]
; ${ARG1} - Номер на который звоним с указанием технологии, например SIP/XXX
; ${ARG2} - Номер на который звоним
; ${ARG3} - Номер с которого звоним
exten => s,1,Set(Num=${ARG2})
exten => s,n,Set(Dev=${ARG1})
exten => s,n,Set(GROUP(${ARG2})=${ARG2})
exten => s,n,Set(GROUP(${ARG3})=${ARG3})
exten => s,n,NoOp(User ${ARG2} have ${GROUP_COUNT(${ARG2})} calls)
exten => s,n,NoOp(User ${ARG3} have ${GROUP_COUNT(${ARG3})} calls)
exten => s,n,AGI(standart.agi|${Num}|${CALLERID(num)}|Send)
exten => s,n(Dial),Dial(${ARG1},120,tT)
в extensions.conf добавляем #include extensions_fax.conf
и в #include extensions_fax.conf добавим стоки
exten => _6XXX,1,Set(CALLERID(num)=${EXTEN:1})
exten => _6XXX,2,Goto(fax,600,1)
по идее уже должно приходить сообщение о звонке и о приходе факса
теперь при звонке пользователю он может в любой момент перевести atxfer'ом (atxfer потому что в этому случае поставляется номер перевадящего что нам и нужно)
на номер 600 и там стартанёт факс и пришлёт ему на электронку
если же факс нужно принять для другова юзера, то перевести на номер 6XXX и факс придёт нужному юзеру
перерь отпрака факсов и использванием принтера
способ 1й) автоматический
для этого нужна самба
smb.conf прилагается
в нём меняем workgroup
interfaces = внутренний ип, что бы самба не была доступна извне, если астериск смотрит наружу
realm = domain.ru тоже имя вашего домена
так же нужно поменять файлик в /etc/krb5.conf по образу и подобию моего
после этого вводим samba в домен
net ads join -U administrator -S ip pdc
если всё ок, то после ввода команды wbinfo -u должен вывалится список всех юзеров в домене.
Обязательно синхронизируйте время с контроллером домена, если разница больше 5 мин, кербреос не даст ввести в домен и всё остальное
например так ntpdate 10.0.0.150
теперь нам нужен пакет smbfax
wget http://inconnu.isu.edu/~ink/new/projects ... 1.5.tar.gz
заменяем на мои файлики и следуем инструкции
в файле smbfax меняем $user\@domain на ваш домен
system "/var/lib/asterisk/agi-bin/sendmessage.php $user\@domain \"введите данные для отправки факса $BASE_URL?ID=$temp0 \"";
smbfax.conf тоже правим под себя
компилим gcc -o smbfax-html smbfax-html.c
копируем файлы smbfax-html и мой файл smbfax-html.pl в /var/www/cgi-bin
заходим
\\asterisk устанавливаем принтер fax выбираем драйвер HP LaserJet IIP PostScript Cartridge v52.2 , хотя насколько я понимаю пойдёт любой ps принтер
при попытки печати на этот принтер сразу получаем в jabber сообщение типа введите данные для отправки факса http://10.0.0.111/cgi-bin/smbfax-html?ID=username6492j1SDxt
заходим на страницу и отправляем факс, сообщения о удачах или неудачах приходят так же в jabber
вариант 2 полуатомат:
устанавливает так же принтер fax_manual
создаём папку /fax
в extensions.conf добавляем
extensions.conf
exten => 333,1,AGI(name.agi|${CALLERID(num)})
exten => 333,2,SendFAX(/fax/${name}/fax.tif)
exten => 333,3,Dial(Local/${EXTEN}@GLOBAL_OFFICE) ;здесь ваш контекс
последовательность действий
говорим с кем-нить, он просит какой-нить документ, пускаем его на этот принтер
файлик создаётся в папке /fax/username
переводим на номер 333
выполняется agi скрипт , он получает имя пользователя из его номера
и отправляет
после этого снова соединяет Вас с говорящим (это не проверял ещё, но при приёме ReceiveFax такое срабатывало)
ps: долго мучался как переконвертировать ps файл в tiff, пришлось нало слизать из скрипта Cache
pss: вариант Cache у меня не прижился так как все работают в терминале, а его вариант так же как Winprint HylaFAX(очень хорошее решение если нет терминального сервера) в терминале не пашут
psss: может кто победит как сделать что бы hylafax формировал страничку на русском , во всяком случае поле кому, не стесняйтесь пишите

_________________
Мои рекомендации: Asterisk-1.8 + G.722 кодек = лучший выбор!
Успехов!
пришлось конечно поподпиливать кое что, а так все работает!
Есть только несколько вопросов:
1. Как победить русский в хидере (не получилось у мя, кракозяблы)
2. Смог ли ты прикрутить авторизацию сипов к АД?
2) нет, решил что пока это лишее
ps: ну хоть кому-то пригодился мой опыт
TagLineFont: etc/lutRS18.pcf
TagLineFormat: "From %%l|%c|Page %%P of %%T"
что б на русском было?
А если внутри на джаббер а ЛЦС от Микросовта? (Windows Messenger в частности)
Или дать материал для чайников - спасибо!
Есть вопрос - как сделать на базе твоего решения отправку факса вручную без AD ?
Как я понял, нужно только добавить виртуальный факс с нужным экстеншном и прописать в диалплане 3 строчки из твоей статьи:
exten => 333,1,AGI(name.agi|${CALLERID(num)})
exten => 333,2,SendFAX(/fax/${name}/fax.tif)
exten => 333,3,Dial(Local/${EXTEN}@from-internal-custom) ;здесь ваш контекст.
Я сделал по этому алгоритму - звоню на этот экстеншн, факс пищит, но меня завёл в тупик путь к файлу fax.tif.... Относительно какой папки он у тебя расположен?
В общем, идея такая - сделать возможность отправки факсов во время разговора по схеме предложенной в этом описании, только без АД и чтобы была возможность отправлять .pdfЫ.
Может кто уже делал???
Нужно, чтобы любой файл можно было отправить на факс (виртуальным принтером и т.п.) без указания номера получателя и он там (на экстеншне) ждал, пока на него позвонят, а при звонке на этот номер файл автоматом бы отправлялся тому, кого переключили на этот факс и после его отправки звонок снова возвращался бы на переключившего?
_________________
Shit happens
Выкладываю моё КРИВОЕ решение - может, кому поможет.
1. ответ первый - путь относительно корня (как сам не догадался- хез
2. без AD получилось сделать это из диалплана - прописал в диалплане путь к файлу, через самбу расшарил папку, в которую вручную ложу этот файл tif, один экстеншн привязал к факсу для отправки и в диалплане для него прописал этот путь.
Вот кусок диалплана - 303 это номер факса, на который переключаю для отправки исходящего, 333 - номер, на который возвращается звонок после отправки факса.
exten => 303,1,AGI(name.agi|${CALLERID(num)})
exten => 303,2,SendFAX(/var/smbsharefolder/faxtosend/fax.tif)
exten => 303,3,Dial(SIP/333,60,Ttr) ;здесь ваш контекс
В чём кривизна:
Гемор 1. Номер для обратного вызова тупо прописан в диалплане, поэтому если попытаться отправить факс с другого номера, звонок вернётся на экстеншн из диалплана.
Гемор 2. Файл в папку нужно ложить вручную в формате tif, предварительно в него сконвертировав.
Что хочется исправить:
1. соответственно, номер для обратного вызова брать из переменной;
2. поставить виртуальный принтер, который был бы доступен из виндов по сетке и конвертил бы любой файл в tiff а потом ложил его в папку для отправки и удалял его после отправки (удалять скорее не принтер должен, а астериск. Удаление как-то можно сделать через диалплан???);
Если кто знает, как это всё грамотно разрулить, прошу помочь.
_________________
Shit happens
http://asteriskforum.ru/viewtopic.php?t= ... highlight=
все работает на ура
_________________
Shit happens
| bbv wrote: |
| pss: вариант Cache у меня не прижился так как все работают в терминале, а его вариант так же как Winprint HylaFAX(очень хорошее решение если нет терминального сервера) в терминале не пашут |
Принтер в терминальный сервер можно как локальный поставить, что я и сделал