} //------------ Отправка факсового сообщения ----------------- function OktellFaxStartTransmit(){ var FileName = System.CreateObject('TSObjectLibrary.Value'); var DialogCaption ="Выбор файла FAX"; // Фильтр по расширению прикрепляемых файлов var DefaultExt ='*.jpg'; var IMGFilter ="Файл изображения"+' (*.jpg)|*.jpg|(*.tif)|*.tif|(*.bmp)|*.bmp'; if(!(System.OpenDialog(FileName, IMGFilter , DefaultExt, DialogCaption, EmptyStr))){ return; } // Получаем полный путь к файлу с раширением var FullName = FileName.Value;
4. Для того, чтобы увидеть ход процесса и получать информацию о возможных ошибках отправки и получения факсовых сообщений в функцию OnOktellCommunicate() скрипта scr_OktellUtils добавим:
case ocmFaxStopped://----- Событие АТС о завершении факс-сеанса
OktellFaxStopped(RootNode); break; case ocmFaxFilesReceived://----- Событие АТС о завершении файла по факс-сеансу
OktellFaxFilesReceived(RootNode);// -- Содержит признак успешности приема и ... break; case ocmFaxStarted://----- Событие АТС о начале факс-сеанса
OktellFaxStarted(RootNode); break;
5. В scr_OktellUtils добавим:
function OktellFaxStarted(){//----- Событие АТС о начале факс-сеанса var wnd_Information = Services.GetSingleItemByUSI('wnd_FaxStartProgress');
wnd_Information.Prepare();
wnd_Information.Show(); }
function OktellFaxStopped(){//----- Событие АТС о завершении факс-сеанса var wnd_Information = Services.GetSingleItemByUSI('wnd_FaxStartProgress');
wnd_Information.Close(); }
function OktellFaxFilesReceived(RootNode){//----- Событие АТС о завершении приема файла по факс-сеансу var wnd_Information = Services.GetSingleItemByUSI('wnd_FaxStartProgress');
wnd_Information.Close();
// --- Успешно принято ? ---// var SuccessXML = MsxmlGetChildXmlNodeByAttributeValue(RootNode,'key','success'); var SuccessFax = MsxmlGetXmlAttributeValueByName(SuccessXML,'value');
// --- Текст ошибки ---// var ErrorXML = MsxmlGetChildXmlNodeByAttributeValue(RootNode,'key','errortext'); var ErrorFax = MsxmlGetXmlAttributeValueByName(ErrorXML,'value');
if(SuccessFax ==1){ var Message ="Операция приема/отправки факсового сообщения успешно завершена."
ShowInformationDialog(Message); } elseif(SuccessFax ==0){ var Message = FormatStr("Ошибка получения факса: '%1'", ErrorFax);
ShowConfirmationDialog(Message); }
7. Ну и сами картинки в карточку звонка il_call.7z
Принятые факсы сохраняются на рабочем столе пользователя в папке Принятые_факсы (папка создается автоматически) с расширением *.tiff. Для отправки подходят файлы изображений *.jpeg, *.bmp, *.tiff. Во время отправки и получения факса, пользователь Terrasoft слышит в трубке музыку из сценария Oktell (вместо служебных сигналов факса). Отправка других форматов файлов находится в стадии разработки
Добрый день, Алексей! Возможно эта ошибка возникает из-за отсутствия в wnd_CallEditScript прикрепленного скрипта scr_FileUtils. Для общей картины вот мои скрипты .
Скрипт прикрепил
Теперь в момент выбора файла для отправки вылетает сообщение (во вложении). При этом сервер Октелла факс не отправляет (т.е. скорее всего факс-сеанс не начинается)
Оно же вылетает и при приеме факса, (при старте приема и при окончании), но тем не менее факс приходит успешно и сохраняется на рабочем столе.
Скажите, удалось ли добавить отправку факсом doc и xls файлов?
Напрямую не удалось реализовать такую функцию, пришлось воспользоваться сторонней коммерческой разработкой Total Doc Converter, который в фоновом режиме конвертирует doc в jpeg. Очень полезная особенность Total Doc Converter - возможность "склеивать" несколько страниц doc в один "рулон" jpeg. С pdf файлами все намного сложнее из-за функции сжатия. При их конвертации иногда случаются проблемы с отображением символов.
Всем привет. Продолжая свои изыскания, хотел бы запросить уважаемое сообщество на тему Факсов.
Собственно изжил ли себя факс или ещё используется?
Актуальна ли тема: Ну скажем Факс на емайл?
Идея какая стоит некий сервер на нём номер При дозвоне на него система просит ввести добавачный номер получателя факса, Отправитель вводит номер система принимает факс и конвертит его в файл, И отправляет на емайл сопоставленный данному добавочному номеру.
Просто сервис есть , можно потестить.
Я поставил у себя отладил, работает.
Если есть желание попробывать Пишите в личку . Дам тестовый аккуант на пару месяцев. Факсовый номер в москве код 495.
От вас нужен только емайл куда слать факсы. Добавочный я вам вышлю.
Если есть электронная версия документа то да, проще мылом.
Но факсы на удивление живучи, любят их во многих местах по сей день))
И бумажку с подписями/печатями еще просканировать надо.
"Карло Сергей" написал:Александр, у меня вопрос: "А не проще ли взять и отправить e-mail без этого промежуточного сервера?"
Да сергей нам с тобой может и проше , Но есть много людей и фирм которые пользуются факсами . Вот собственно и хочу понять сколько их осталось и насколько актуальна тема.
Александр, могу ответить на твой вопрос однозначно. Их не просто много, их на сегодня очень много.
Особенно это востребовано в средних компаниях, где с утра секретарь передает почту Руководителю на "подносе". Просмотреть почту "с подноса", рассортрованную профессиональным секретарем намного проще, нежели тратитьвремя на сортировку пришедших сообщений по e-mail (Знаю компании, где директор получает до 200 писем в день.)
Так же знаю торговые точки (например, сеть элит салонов) где иннет отсутствует, а факс - нууууу очень активно используется.
Хотя для компаний, где факс приходит на ресепшен и ресепшеонистам приходится каким-то образом "переправлять" отсортированные факсы в приемные директоров - удобнее "перенаправить" факс на e-mail секретаря указанного директора.
Пока что востребовано...
порядка 40% контрагентов в нашей компании до сих пор пользуются факсом...
Но не единым неумением пользоваться имейлами живут факсы.
Как говорилось ранее
"Владимир Соколов" написал:Факс имеет большую юридическую силу, чем полученный e-mail.
не смотря на то что есть умельцы), которые в случае срочной надобности смогут любой документ подать в факсимильном виде.
К примеру приглашение на конференцию от зарубежного партнёра, для получения бизнес-визы...
Посольства принимают только оригиналы и факсимильные документы с номером и именем факса отправителя)
Наверно предполагают что факс подделать сложнее)
К сожалению, WinFax не оправдал мои ожидания, в связи с нестабильностью работы.
Мы нашли альтернативу - ActFax http://www.actfax.com/en/ - работает намного стабильней.
Вариантов реализации задачи отправки факсов много.
Приведу алгоритм того варианта, который я посчитал наиболее удобным, по причине:
- простоты;
- возможности отправки любых типов документов, используя установленное ПО ассоциированное с типом документа (MS Office, Adobe Reader и др.);
Итак:
1. Копируем необходимый для отправки файл во временную папку, включая в имя файла атрибуты (datafield) необходимые для отправки факса (номер телефона, тему, приоритет и др.). Атрибуты описаны в файле справки к приложению;
2. Запоминаем, какой принтер сейчас установлен по умолчанию;
3. Устанавливаем виртуальный принтер "ActFax" активным по умолчанию;
4. Отправляем файл на печать, используя ShellExecute. При желании, наслаждаемся видом предварительного просмотра факса в окне приложения;
5. Восстанавливаем принтер по умолчанию.
"Карло Сергей" написал:Не могли бы Вы привести небольшой прмер кода, который делает все описаное?
По многочисленным просьбам, привожу ... :)
Примечание: необходимо установить DynamicWrapper (http://community.terrasoft.com.ua/node/2402), т.к., к сожалению, не удалось обойтись без него в реализации ф-ции SetDefaultPrinter. Если кто-нибудь предложит еще рабочий вариант - буду безмерно благодарен. В примере есть еще 2 - не рабочих.
// Use: scr_FileUtils
function GetActFaxDataField(Name, Value){if(IsEmptyValue(Value)){return'';}return'@F'+ Name + Value +'@';}
function GetActFaxDataFields(Number, To, Subject){return GetActFaxDataField('211', Number)+
GetActFaxDataField('201', To)+
GetActFaxDataField('307', Subject)+
GetActFaxDataField('501', 2);}
function SetDefaultPrinter(PrinterName){
var WinApi =new ActiveXObject('DynamicWrapper');
WinApi.Register('winspool.drv', 'SetDefaultPrinter', 'i=s', 'f=s', 'r=l');
WinApi.SetDefaultPrinter(PrinterName);// 1.// var WshShell = new ActiveXObject('WScript.Shell'); // var RegPathWinNT = // "HKCU\\Software\\Microsoft\\Windows NT\\CurrentVersion\\Windows\\Device"; // WshShell.RegWrite(RegPathWinNT, PrinterName); // 2.// var WshNetwork = new ActiveXObject('WScript.Network');// WshNetwork.SetDefaultPrinter(PrinterName); }
function GetDefaultPrinter(){
var RegPathWinNT ="HKCU\\Software\\Microsoft\\Windows NT\\CurrentVersion\\Windows\\Device";
var WshShell =new ActiveXObject('WScript.Shell');
var DefaultPrinter = WshShell.RegRead(RegPathWinNT);
var CommaIndex = DefaultPrinter.indexOf(',');if(CommaIndex >1){
DefaultPrinter = DefaultPrinter.substr(0, CommaIndex);}return DefaultPrinter;}
function SendActFaxFromFile(Number, FileName, To, Subject){if(IsEmptyValue(Number)){returnfalse;}if(IsEmptyValue(FileName)){returnfalse;}if(!CheckFileExists(FileName)){returnfalse;}// Получение параметров для отправки факса
var DataFields = GetActFaxDataFields(Number, To, Subject);// Копирование файла во временную папку// В название включаются параметры для отправки факса
var FileSystemObject = GetFileSystemObject();
var FileBaseName = FileSystemObject.GetBaseName(FileName);
var FileExtensionName = FileSystemObject.GetExtensionName(FileName);
var ParamFileName = System.GetTempFileName(FileBaseName + DataFields,
FileExtensionName);
FileSystemObject.CopyFile(FileName, ParamFileName);
var DefaultPrinter = GetDefaultPrinter();
SetDefaultPrinter('ActiveFax');try{
var Shell =new ActiveXObject('Shell.Application');
Shell.ShellExecute(ParamFileName, '', '', 'print', 0);
System.Sleep(100);} finally {
SetDefaultPrinter(DefaultPrinter);}// TODO: Удалять временный файл после отправки// FileSystemObject.DeleteFile(ParamFileName, true); }
Пример модуля с функцией отправки факсов, используя приложение от Symantec - WinFax. Обратите внимание, что версия WinFax должна быть не ниже 10.0.4 если Вы планируете его устанавливать на XP SP2 и выше. Также рекомендую использовать только лицензионный софт.
В самом простом варианте:
SendFax('258', 'c:\\test.doc'), где '258' - номер телефона, 'c:\\test.doc' имя файла Word, который Вы хотите отправить.
В данном случае на локальной машине должен быть установлен Word (хотя возможно можно отправлять файлы и другого формата - проверьте!).
var ErrorSendFaxText ="Ошибка отправки факса. "; var SDKSend;
function CheckError(Result){ if(Result ==1){
Log.Write(2, ErrorSendFaxText +" Код ошибки: "+ SDKSend.GetLastError()) } }
function SendFax(Number, FileName, To, Company, Subject){ if(IsEmptyStr(Number)){
Log.Write(2, ErrorSendFaxText +"Номер не указан."); returnfalse; } if(IsEmptyStr(FileName)){
Log.Write(2, ErrorSendFaxText +"Имя файла не указано."); returnfalse; } if(!CheckFileExists(FileName)){
Log.Write(2, ErrorSendFaxText +"Файл '"+ FileName +"' не найден."); returnfalse; }
SDKSend =new ActiveXObject('WinFax.SDKSend'); // Set some properties to avoid WinFax to Show on the Screen.
CheckError(SDKSend.EnableBillingCodeKeywords(0));
CheckError(SDKSend.SetUseCreditCard(0));
CheckError(SDKSend.ShowSendScreen(0));
CheckError(SDKSend.SetQuickCover(0));
CheckError(SDKSend.SetPreviewFax(0)); // Not use cover
CheckError(SDKSend.SetUseCover(0)); // Make sure WinFax shows it monitor window while sending the Fax.
CheckError(SDKSend.ShowCallProgess(0)); // Leave the Controller Running after procesing this fax.
CheckError(SDKSend.LeaveRunning()); // Check that the WinFax Printer is ready. if(SDKSend.IsReadyToPrint()!=1){
Log.Write(2, ErrorSendFaxText +"WinFax не готов к отправке."); return; } // Setup the Recipient information here.
CheckError(SDKSend.SetTo(To));
CheckError(SDKSend.SetSubject(Subject));
CheckError(SDKSend.SetNumber(Number));
CheckError(SDKSend.SetAreaCode(''));
CheckError(SDKSend.SetCompany(Company)); // Finish the WinFax Setup Commands.
CheckError(SDKSend.AddRecipient());
CheckError(SDKSend.AddAttachmentFile(FileName));
CheckError(CheckError(SDKSend.Send(1)));
SDKSend.Done();
SDKSend =null; returntrue; }