Добрый день, коллеги!

Интересует работа связки: Oktell – коннектор – Creatio. 

Прошу поделиться информацией о том, как взаимодействует коннектор с Creatio при звонках. Какие данные из Oktell проходят через коннектор, а какие берутся напрямую? 

Информация необходима в ознакомительных целях, для избежания спорных ситуация в  работе Creatio – Oktell.

В сети нашёл очень много разрозненной информации по этой теме, но какой-то общей документации найти не смог. На сайте Террасофта есть немного информации по этой теме здесь, но этого недостаточно.

Ранее в сообществе был похожий вопрос здесь, но ссылки в ответе уже неактуальны.

Нравится

1 комментарий

Виктор, актуальная ссылка на инструкцию тут, хотя особых отличий от приведенной Вами не вижу.

 

Для Oktell «коннектор» — не отдельная сущность, а просто лицензия на использование соответствующей функциональности в системе. Это для ряда других телефоний ставится отдельный сервер TMS, через который идёт взаимодействие с сервером телефонии, а именно в этой интеграции такого нет, работает сразу напрямую.

 

Посмотреть, как идёт обмен данными браузера с сервером приложения и сервером телефонии можно в «инструментах разработчика» на вкладке «Сеть».

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

Коллеги, добрый день!
Есть вопросы при подключении bpm к oktell с помощью штатного коннектора: 
1) Требуются ли стационарные телефоны или можно ограничиться гарнитурой usb? В документации на академии описано, что можно пользоваться как софтфоном, так и стац. телефоном, а на другой странице в сравнительной характеристика написано, что стац. телефон обязателен:

https://academy.terrasoft.ru/documents/administration/7-15/sravnenie-vozmozhnostey-integracii-s-razlichnymi-ats

https://academy.terrasoft.ru/documents/technic-sdk/7-15/oktell

Если все-таки стац. телефон обязателен, то нужен ли сам софтфон oktell? 

А если софтфон стоит - возможно совершать звонки из него и фиксировать их в bpm?

Благодарю!

Нравится

1 комментарий

Не вижу в указанных статьях, где там об обязательности стационарного.

 

 

Судя по схеме из статьи, интеграция идёт на уровне браузера с сервером Oktell, а  не напрямую с телефонами. То есть важно, чтобы аппаратный или программный телефон был совместим с сервером телефонии.

 

Если интеграция настроена, то в системе будут фиксироваться входящие и исходящие звонки, производимые через телефонный аппарат (или программу для звонков). А если совершить исходящий звонок средствами 7.Х (например, из детали средств связи или правой панели), то сервер позвонит на Ваш телефон, а когда поднимете трубку, соединит с тем, куда звоните.

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

При звонке из задачи нажимаю ПОЗВОНИТЬ. Звоню, звонок сохраняется, но к задаче не привязывается (не появляется на вкладке Звонки и SQL запросом видно, что ActivityId = NULL).

При этом на сервере разработки ОК, на проде - не работает привязка. 

Чего не хватает7

Нравится

3 комментария

Если на сервере разработки и проде отличается, то дело может быть в самих доработках или разных настройках.

Вообще, механизм привязки задачи к звонку доделывали в более поздних версиях, чем 7.11, есть смысл обновиться.

У меня 7.11.2 

Если дело не в доработках на тесте, попробуйте обновиться.

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

Разбираюсь с интеграцией с Октелл.

При попытке позвонить в консоли пишет "телефония не подключена". 

Что смотреть, настраивать?

Нравится

3 комментария
Лучший ответ

Начни с этого потом этого а потом посмотри это

Начни с этого потом этого а потом посмотри это

Это всё я конечно же изучил, не помогает, потому и спрашиваю.

Очистите Redis.

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

Добрый день.
Может кто-нибудь подсказать как настроить интеграцию BPMonline SD 5.4.1.879 c Oktell? Желательно пошаговое руководство, с описанием действий со справочниками, системными настройками и т.д.
Заранее спасибо.

Нравится

4 комментария

День добрый.
Для интеграции со стороны bpm'online необходимо:
1) Указать значение системной настройки "Библиотека обмена сообщениями по умолчанию" = "Библиотека интеграции с телефонией по протоколу Oktell"
2) Убедиться, что у пользователя есть лицензия на продукт "BPMonline Oktell Call Centre"
3) В настройках (кнопка шестеренки) выбрать пункт меню "Настройка параметров Call-Centre" и внести параметры подключения к Oktell

Клименко Николай, это понятно. Но что делать, если такого значения системной настройки нет? И что представляют собой "параметры подключения Oktell"?

В этом случае нужно разбирать вопрос в частном порядке - Создавать обращение в техническую поддержку и разбираться почему такой настройки нет - Возможно у Вас нет лицензий на телефонию в bpm'online.
А параметры подключения - это адрес сервера Oktell, логин и пароль пользователя.

Здравствуйте, Акмаль!

В коробочной версии bpm'online 5.4.1 интеграция с Oktell официально не поддерживается.

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

Здравствуйте,
используем Terrrasoft CRM 3.3.2.. в связке с Oktell. У ряда пользователей есть права на лицензии Terrasoft Oktell Call Centre Operator 3.X. И при входе таких пользователей в систему появляется сообщение:
"Ошибка открытия конфигурации. Лицензия модуля 'call' не найдена". Запустить систему не получается.

Перезаказ лицензий не помогает. Контакты и Контрагенты пользователей не изменялись.
Если одному из этих пользователей в разделе администрирование дать права Администратора (повесить соответствующую галочку), то сообщение об ошибке уходит и удается войти в систему. Т.е. лицензии работают только для администраторов.

Подскажите, в чем может быть причина?

Нравится

3 комментария

Добрый день, Анна!

Причина данной ошибки только одна - права доступа. Дело в том, что пользователи с правами администратора читают данные на прямую из таблиц базы данных и не имеет значения какие запреты Вы им поставите в системе. А если пользователь не имеет прав администратора, то он будет проверятся системой на наличие необходимых прав. Собственно, из-за этого Вы и наблюдаете такую ситуацию у себя сейчас. В данном случае Вам необходимо проверить, чтоб каждый пользователь, который участвует в лицензировании имел права доступа на чтение всех контактов, привязанных к этим пользователям. Также каждый пользователь должен иметь права доступа на чтение всех контрагентов, которые привязаны к контактам, так как не все пользователи могу быть привязаны к одному и тому же контрагенту. Обращаю внимание на тот факт, что права должны иметь именно все пользователи, а не только тот, который привязан к контакту/контрагенту, упомянутому выше.

Здравствуйте, Валерий. Спасибо за разъяснения.

1. Что касается прав.
- У группы "Все пользователи" есть права на чтение таблиц tbl_Contact и tbl_Account
- У группы "Все пользователи" есть права на чтение абсолютно всех контактов системе, в том числе и контактов пользователей. В подтверждение следующий запрос возвращает 0 строк.

select * from tbl_Contact c 
where not exists (select cr.ID from tbl_ContactRight cr
join tbl_AdminUnit au on au.ID=cr.AdminUnitID
where c.ID=cr.RecordID and au.Name = 'Все пользователи' and cr.CanRead=1)

- У группы "Все пользователи" есть права на чтение абсолютно всех контрагентов системы, в том числе и контрагентов, привязанным к контактам пользователей. В подтверждение следующий запрос возвращает 0 строк.

select * from tbl_Account a 
where not exists (select ar.ID from tbl_AccountRight ar
join tbl_AdminUnit au on au.ID=ar.AdminUnitID
where a.ID=ar.RecordID and au.Name = 'Все пользователи' and ar.CanRead=1)

- Кроме того все пользователи системы включены в группу "Все пользователи"

Может быть я что то еще упустила при проверке прав?

2. Дело в том, что поломка лицензий произошла после обновления таблицы tbl_Contact. Было добавлено новое поле. При этом сначала конкурентные лицензии перестали работать у пользователей С правами администратора. Затем после перезапроса лицензий получилась противоположная ситуация, и лицензии перестали работать у пользователей БЕЗ прав администратора.

Попробовала:
- Откатить сервис tbl_Contact на версию до изменений - не помогло
- Восстановила базу для теста из старого бэкапа, сделанного до внесения изменений в таблицу и снова пересохранила таблицу . Т.е. попробовала сделать другие изменения в таблице, а не добавление конкретного поля. Лицензии также перестали работать.

Каким образом обновление таблицы могло повлиять на лицензии ? Отмечу, что ранее таблица tbl_Contact уже изменялась и таких проблем не наблюдалось.

Здравствуйте, Анна.
Ситуация требует более тщательного анализа, чем обсуждение на Community. Благодарим за предоставленную базу. Вопросом занимается мой Коллега. По результату сразу сообщим.

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

Добрый день.

Кто-нибудь реализовывал просмотр экрана пользователей (используя Oktell)? как реализовать это в скрипте?

Нравится

1 комментарий

Здравствуйте.

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

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

Реализовали у себя отправку и прием факсов из 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 файлами все намного сложнее из-за функции сжатия. При их конвертации иногда случаются проблемы с отображением символов.

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

Добрый день!
Необходима ваша помощь, при совершениии звонка, вылетает ошибка :

ошибка

а потом еще парочка таких:

ош

но при этом звонок физически совершается.
Скорее всего необходимо подключение для показа, готов в рабочее время.

Нравится

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

Добрый день, Константин.
Пожалуйста, проверьте предварительно версии Oktell на клиентской и северной частях.
По логам в каталогах Starter определите какая версия FrameWork используется приложениями.

Версии бинарных файлов приложения и FrameWork должны быть идентичными.

Performing via CLR version 1.1.4322.2032 если это оно, то и там и там одинаковы.

Вылетает ошибка на одном из прохождении этого цикла

function OnOktellCommunicate(StringParam) {
	var OktellXmlDom = OktellGetXmlDom();
	MsxmlParseXmlString(OktellXmlDom, StringParam);
	WriteOktellLog('FullLog' + DateToStr(new Date().getVarDate(), '_'), 
		'OnOktellCommunicate: ', StringParam);
	var RootNode = OktellXmlDom.selectSingleNode('//event');
	if (!RootNode) {
		return;
	}
	var EventID = MsxmlGetXmlAttributeValueByName(RootNode, 'id');
	switch (EventID) {
		case ocmUserStateChanged:
			OktellProcessUserStateChanged(RootNode);
			break;
		case ocmRingStarted:
			OktellProcessRingStarted();
			break;
		case ocmCommutationStarted:
			OktellProcessCommutationStarted(RootNode);
			break;
		case ocmRingFinished:
			OktellProcessRingFinished(RootNode);
			break;
		case ocmFlashHoldAction:
			OktellProcessFlashHoldAction(RootNode);
			break;
		case ocmACMStarted:
			OktellProcessACMStarted(RootNode);
			break;
		case ocmChainStateChange:
			OktellProcessChainStateChange(RootNode);
			break;
		case ocmLineStateChange:
			OktellProcessLineStateChanged(RootNode);
			break;
		case ocmFaxFilesReceived:
			OktellProcessFaxFilesReceived(RootNode);
			break;
	}
 
}

Добрый день, всем!

Как оказалось, в ходе удаленного подключения, ошибки конфигурации были причиной проблем. Например на событие объекта Oktell 'ocmLineStateChange' внутри функции OktellProcessLineStateChanged(RootNode) вызывалась функция UpdateCaption(LineStateID), где LineStateID - объект, сожержащий в себе два свойство: LineStateID и OpponentNumber. Но принимаемым параметром функции UpdateCaption должна была быть строка, а именно свойство LineStateID объекта LineStateID.

Переназначение вызова в UpdateCaption(LineStateID.LineStateID) здесь помогло.

Действительно дело было в объекте, неправильно брал параметр. Проблема решена, Благодарю за оказанную помощь. Тему закрываем.

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

Простой способ звонить из карточки Контрагента и Контакта.
Используется десктопная версия Terrasoft (можно для BPM сделать подобным образом) и ip-АТС Oktell.

На поле значения средства связи ставится обработчик двойного нажатия (клика):

if ((edtCommunication1Type.DataField.DisplayValue=='Телефон') || (edtCommunication1Type.DataField.DisplayValue=='Мобильный')) {
var webAddress = "http://localhost:4059/callto?number="+edtCommunication1.Value;
var xmlHttpReq = new ActiveXObject("MSXML2.XMLHTTP.6.0");
xmlHttpReq.open("GET", webAddress, false);
xmlHttpReq.send();
}

Нравится

Поделиться

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