Публикация

Отправка факсов из Terrasoft (Oktell)

Реализовали у себя отправку и прием факсов из Terrasoft. Версия Terrasoft 3.4.0.136, Oktell 111007.

Карточка звонка
Для этого:
1. В окно wnd_CallEdit в меню amToolbar добавляем два компонента ActionMenuItem:

  • amiFaxTransmit
  • amiFaxReceive

С подписью Отправить факс и Принять факс соответственно.
На событии onExecute amiFaxTransmit прописываем:

Connector.Attributes('CallClientObject').FaxStartTransmit();

На событии onExecute amiFaxReceive прописываем:
Connector.Attributes('CallClientObject').FaxStartReceive();

2. Открываем scr_OktellClientUtils и в функцию OktellCallClientObject() добавляем следующие строки:

         //------ Отправка факса -------//
        this.FaxStartTransmit = function() {                                                   
                OktellFaxStartTransmit();

        }
         //------ Получение факса -------//
        this.FaxStartReceive = function() {
            OktellFaxStartReceive();
        }

3. Открываем scr_OktellUtils и Добавляем функции:

//------------   Получение факсового сообщения -----------------
function OktellFaxStartReceive(){
        var date;
        date = new Date();
        CurrentDay = date.getDate();
        CurrentMonth = (date.getMonth() + 1);
        CurrentHours = date.getHours();
        CurrentMinutes = date.getMinutes();
        CurrentSeconds = date.getSeconds();
         
   FileName = String(CurrentDay) + '_' + String(CurrentMonth) + '   '
                        + String(CurrentHours) + '_' + String(CurrentMinutes) + '_' + String(CurrentSeconds);


        var wshshell = new ActiveXObject("wscript.shell");
        var FullName = wshshell.ExpandEnvironmentStrings("%HOMEPATH%") +
                                '\\Desktop\\Принятые_факсы\\fax_' + FileName + '.tiff';

        var CommandXml =
                '' +
                '' +
                '' +
                '' +
                '+ FullName +']]>' +
                '' +
                '' +
                '';
        Oktell.Instance.FaxStartReceive(CommandXml);

               
}
//------------   Отправка факсового сообщения -----------------
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;
       
        var CommandXml =
                '' +
                '' +
                '' +
                '' +
                '+ FullName +']]>' +
                '' +
                '' +
                '';
        Oktell.Instance.FaxStartTransmit(CommandXml);
 }

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);
        }
                else if (SuccessFax == 0){
                var Message = FormatStr("Ошибка получения факса: '%1'", ErrorFax);
                ShowConfirmationDialog(Message);
        }

}

6. Сервис окна wnd_FaxStartProgress: wnd_faxstartprogress.7z
wnd_FaxStartProgress

7. Ну и сами картинки в карточку звонка il_call.7z

Принятые факсы сохраняются на рабочем столе пользователя в папке Принятые_факсы (папка создается автоматически) с расширением *.tiff. Для отправки подходят файлы изображений *.jpeg, *.bmp, *.tiff. Во время отправки и получения факса, пользователь Terrasoft слышит в трубке музыку из сценария Oktell (вместо служебных сигналов факса). Отправка других форматов файлов находится в стадии разработки :smile:

Документация Oktell для разработчиков rukovodstvo.7z

Очень интересно будет услышать Ваше мнения, а также предложения и замечания.

Нравится

Поделиться

6 комментариев

Вылетает ошибка "предполагается наличие объекта"
Скрипты во вложении

Добрый день, Алексей! Возможно эта ошибка возникает из-за отсутствия в wnd_CallEditScript прикрепленного скрипта scr_FileUtils. Для общей картины вот мои скрипты .

Скрипт прикрепил
Теперь в момент выбора файла для отправки вылетает сообщение (во вложении). При этом сервер Октелла факс не отправляет (т.е. скорее всего факс-сеанс не начинается)
Оно же вылетает и при приеме факса, (при старте приема и при окончании), но тем не менее факс приходит успешно и сохраняется на рабочем столе.

Да, спасибо. Все работает!

Скажите, удалось ли добавить отправку факсом doc и xls файлов?

"bayborodin" написал:

Скажите, удалось ли добавить отправку факсом doc и xls файлов?


Напрямую не удалось реализовать такую функцию, пришлось воспользоваться сторонней коммерческой разработкой Total Doc Converter, который в фоновом режиме конвертирует doc в jpeg. Очень полезная особенность Total Doc Converter - возможность "склеивать" несколько страниц doc в один "рулон" jpeg. С pdf файлами все намного сложнее из-за функции сжатия. При их конвертации иногда случаются проблемы с отображением символов.

Показать все комментарии