Интеграция контакт-центра Webex с ServiceNow (версия 1 — устаревшая версия)
Предварительные требования
Минимальный поддерживаемый размер интерфейса софтфона составляет 500 пикселей. Любое значение ниже 500 пикселей может привести к проблемам с отображением или функциональностью.
Прежде чем интегрировать контактный центр Webex с консолью ServiceNow CRM, убедитесь, что у вас есть следующее:
-
Доступ к контакт-центру Webex.
-
Доступ администратора к Центру управления по адресу https://admin.webex.com и контактному центру Webex. Management Portal URL-адреса этих адресов Management Portal относятся к вашему региону.
-
Агент с доступом к рабочему столу. URL-адрес рабочего стола относится к вашему региону.
-
Доступ агентов к следующему домену, добавленному в список разрешенных политик безопасности контента:
-
*.service-now.com
Дополнительные сведения о том, как определить разрешенный список, см. в статье Настройки безопасности для Webex Contact Center.
-
-
Учетная запись на портале для разработчиков ServiceNow. Чтобы создать учетную запись, перейдите на портал для разработчиков ServiceNow по адресу https://developer.servicenow.com/dev.do и нажмите «Зарегистрироваться» и «Начать разработку».
-
-
Набор обновлений ServiceNow (XML)
-
Макет рабочего стола контактного центра ServiceNow (JSON)
-
- Контактный центр Webex поддерживает следующие версии ServiceNow: Ванкувер (Юта), Токио, Вашингтон и Ксанаду. Дополнительные сведения см. в разделе Интеграция контакт-центра Webex с ServiceNow.
Воспользуйтесь одним из двух способов, описанных ниже:
- Для экземпляров для разработчиков мы рекомендуем выполнить шаги, описанные в руководстве по экземплярам для разработчиков.
- Если у вас есть экземпляр с корпоративной лицензией, следуйте рекомендациям по инстансам с корпоративной лицензией.
Мы не рекомендуем смешивать приложение с корпоративной лицензией и экземплярами в песочнице для разработчиков.
Цифровые каналы, такие как чат и электронная почта, не поддерживаются коннекторами CRM. Это относится ко всем интеграциям CRM, использующим эти коннекторы. Пожалуйста, соответствующим образом спланируйте рабочие процессы развертывания и привлечения клиентов.
В следующих разделах описаны шаги по установке коннектора ServiceNow для экземпляров разработчиков.
| 1 |
Войдите в свою учетную запись на портале разработчиков ServiceNow и откройте консоль администрирования. |
| 2 |
В разделе «Мой экземпляр» меню «Учетная запись» нажмите «Начать создание».
|
| 3 |
На вашем экземпляре разработчика в поле «Навигатор фильтров» в верхнем левом углу окна перейдите в раздел Плагины.
|
| 4 |
Найдите плагин Openframe с названием Openframe. Возможно, вам придется прокрутить список.
|
| 5 |
Нажмите кнопку «Установить», чтобы установить плагин Openframe. |
| 6 |
В диалоговом окне «Активировать плагин» нажмите «Активировать».
|
| 7 |
После завершения активации плагина нажмите кнопку Закрыть и перезагрузить форму в диалоговом окне «Активация плагина».
|
| 8 |
Чтобы проверить активацию плагина, в поле «Навигатор фильтров» в верхнем левом углу окна перейдите в OpenFrame. |
| 9 |
Нажмите «Конфигурации» и убедитесь, что плагин OpenFrame появился в списке конфигураций OpenFrame.
|
| 1 |
Имя файла: WebExcc-ServiceNow-Update-Setv (X) .xml
|
| 2 |
|
| 3 |
Нажмите ссылку Импортировать набор обновлений из XML.
|
| 4 |
Нажмите «Выбрать файл», выберите XML-файл «Набор обновлений системы» и нажмите «Загрузить».
Набор обновлений отображается в списке «Полученные наборы обновлений» и находится в состоянии «Загружен».
|
| 5 |
В списке извлеченных наборов обновлений нажмите на имя файла набора обновлений (ссылка), чтобы открыть набор обновлений.
|
| 6 |
В правом верхнем углу окна нажмите кнопку «Предварительный просмотр набора обновлений», чтобы проверить набор обновлений на наличие проблем.
|
| 7 |
После завершения предварительного просмотра нажмите кнопку «Закрыть» в диалоговом окне «Предварительный просмотр набора обновлений».
|
| 8 |
Нажмите «Зафиксировать набор обновлений».
|
| 9 |
После завершения фиксации набора обновлений нажмите кнопку «Закрыть» в диалоговом окне «Зафиксировать набор обновлений».
|
| 1 |
В поле «Навигатор фильтров» в верхнем левом углу окна введите
|
| 2 |
На странице «Свойства системы» отсортируйте свойства по дате обновления. Убедитесь, что вы видите следующие свойства контактного центра Webex:
|
| 3 |
Нажмите agentdesktop_url, чтобы открыть agentdesktop_url страницу свойств системы. |
| 4 |
В поле Значение введите URL-адрес рабочего стола Webex Contact Center в соответствии с регионом работы.
|
| 5 |
Нажмите «Обновить», чтобы сохранить изменения. |
| 6 |
(Необязательно) Чтобы изменить имя таблицы Activity, внесите необходимые изменения в свойства webexcactivitytable. На странице «Свойства системы» нажмите на таблицу webexcactivitytable. При необходимости измените поле «Значение».
|
| 7 |
(Необязательно) Добавьте группы пользователей следующими способами:
|
| 1 |
В поле перейдите в OpenFrame > Конфигурации.
|
| 2 |
Нажмите кнопку «Создать».
|
| 3 |
Введите следующие свойства URL-адреса:
|
| 4 |
Справа от поля URL нажмите кнопку «Заблокировать» и добавьте в
|
| 5 |
(Необязательно) Выберите группу (группы) пользователя/агента для назначения конфигурации.
|
| 6 |
Нажмите кнопку «Отправить». URL-адрес отображается в виде ссылки.
|
| 7 |
Прежде чем пытаться использовать телефон OpenFrame, обязательно загрузите JSON-файл пользовательского макета рабочего стола ServiceNow в контактный центр Webex. Management Portal Дополнительные сведения см. в разделе Настройка макета рабочего стола ServiceNow в контакт-центре Webex. |
| 1 |
|
| 2 |
При необходимости обновите свойства в файле макета рабочего стола. |
| 3 |
Перейдите в контактный центр Webex. Management Portal |
| 4 |
|
| 5 |
Нажмите «Новый макет» и введите сведения о макете рабочего стола. |
| 6 |
Загрузите JSON-файл макета рабочего стола ServiceNow. |
| 7 |
Нажмите кнопку Сохранить, чтобы сохранить конфигурацию. Теперь можно запустить рабочий стол Webex Contact Center в консоли ServiceNow. |
| 8 |
|
В следующих разделах описаны шаги по установке коннектора ServiceNow для лицензированных корпоративных экземпляров.
| 1 |
Войдите в свою учетную запись на портале разработчиков ServiceNow и откройте консоль администрирования. |
| 2 |
В разделе «Мой экземпляр» меню «Учетная запись» нажмите «Начать создание».
|
| 3 |
На вашем экземпляре разработчика в поле «Навигатор фильтров» в верхнем левом углу окна перейдите в раздел Плагины.
|
| 4 |
Найдите плагин Openframe с названием Openframe. Возможно, вам придется прокрутить список.
|
| 5 |
Нажмите кнопку «Установить», чтобы установить плагин Openframe. |
| 6 |
В диалоговом окне «Активировать плагин» нажмите «Активировать».
|
| 7 |
После завершения активации плагина нажмите кнопку Закрыть и перезагрузить форму в диалоговом окне «Активация плагина».
|
| 8 |
Чтобы проверить активацию плагина, в поле «Навигатор фильтров» в верхнем левом углу окна перейдите в OpenFrame. |
| 9 |
Нажмите «Конфигурации» и убедитесь, что плагин OpenFrame появился в списке конфигураций OpenFrame.
|
Инстансы с корпоративными лицензиями могут установить приложение Webex Contact Center непосредственно из магазина ServiceNow.
|
|
| 1 |
В поле «Навигатор фильтров» в верхнем левом углу окна введите.
|
| 2 |
На странице «Свойства системы» отсортируйте свойства по дате обновления. Убедитесь, что вы видите следующие свойства контактного центра Webex:
|
| 3 |
Нажмите agentdesktop_url, чтобы открыть agentdesktop_url страницу свойств системы. |
| 4 |
В поле Значение введите URL-адрес рабочего стола Webex Contact Center в соответствии с регионом работы.
|
| 5 |
Нажмите «Обновить», чтобы сохранить изменения. |
| 6 |
(Необязательно) Чтобы изменить имя таблицы активности, внесите необходимые изменения в x_caci_webexccсвойства.webexcactivitytable.
|
| 7 |
(Необязательно) Добавьте группы пользователей следующими способами:
|
| 1 |
В поле перейдите в OpenFrame > Конфигурации.
|
| 2 |
Нажмите кнопку «Создать».
|
| 3 |
Введите следующие свойства URL-адреса:
|
| 4 |
Справа от поля URL нажмите кнопку «Заблокировать» и добавьте в
|
| 5 |
(Необязательно) Выберите группу (группы) пользователя/агента для назначения конфигурации.
|
| 6 |
Нажмите кнопку «Отправить». URL-адрес отображается в виде ссылки.
|
| 7 |
|
| 8 |
(Необязательно) В списке «Группа пользователей» переместите группы пользователей, которые имеют доступ к рабочему столу Webex Contact Center, из «Доступно» в «Выбранные». |
| 9 |
Прежде чем пытаться использовать телефон OpenFrame, обязательно загрузите JSON-файл пользовательского макета рабочего стола ServiceNow в контактный центр Webex. Management Portal Дополнительные сведения см. в разделе Настройка макета рабочего стола ServiceNow в контакт-центре Webex. |
| 1 |
|
| 2 |
При необходимости обновите свойства в файле макета рабочего стола. |
| 3 |
Перейдите в контактный центр Webex. Management Portal |
| 4 |
|
| 5 |
Нажмите «Новый макет» и введите сведения о макете рабочего стола. |
| 6 |
Загрузите JSON-файл макета рабочего стола ServiceNow. |
| 7 |
Нажмите кнопку Сохранить, чтобы сохранить конфигурацию. Теперь можно запустить рабочий стол Webex Contact Center в консоли ServiceNow. |
| 8 |
|
| 1 |
В поле навигатора фильтров перейдите в раздел Инциденты > Открыть инцидент. |
| 2 |
Щелкните правой кнопкой мыши на поле вызывающего абонента и выберите «Настроить словарь».
|
| 3 |
Добавьте атрибуты
Теперь можно начать использовать рабочий стол Webex Contact Center в консоли ServiceNow. |
| 4 |
|
- Мы поддерживаем вход Agent Desktop с использованием WebRTC только для коннекторов Salesforce (SFDC) и Microsoft Dynamics (MS Dynamics).
- В настоящее время эта функция доступна только агентам.
Agent Desktopв консоли ServiceNow
Прежде чем совершать исходящие звонки, убедитесь, что вы сделали следующее:
-
Создайте точку входа для исходящих вызовов и настройте стратегию исходящих точек входа.
-
Включите исходящий ANI для профиля агента.
-
Настройте ANI исходящих вызовов в качестве сопоставления телефонного номера с точкой входа.
Дополнительные сведения см. в главе «Подготовка» руководства по Cisco Webex Contact Centerустановке и администрированию.
Сведения об использовании настольного компьютера см. на вкладке Агент в справке Webex Contact Center.
Обзор
В этой статье описывается несколько способов настройки бизнес-правил для коннектора ServiceNow CRM. В ней подробно описывается, как настроить сценарии использования на основе бизнес-правил, специфичных для ServiceNow.
Заказчик должен самостоятельно управлять этими вариантами использования ServiceNow. Конфигурация специфична для ServiceNow, а не для программного обеспечения или опыта Webex Contact Center.
Это справочная документация, помогающая изменять бизнес-правила. Разработчики ServiceNow будут создавать бизнес-правила и управлять ими, а также оказывать поддержку.
Cisco предоставляет только образцы документации.
В следующих разделах подробно описано, как настроить, включить и управлять виджетом Actions для разработчиков и корпоративных экземпляров.
Зафиксируйте виджет «Набор обновлений для действий»
Для лицензированных корпоративных экземпляров установите последнюю версию приложения Webex Contact Center из магазина ServiceNow.
Чтобы настроить виджет «Действия» для экземпляров разработчиков, загрузите последний XML-файл набора обновлений системы, доступный в репозитории github по следующему адресу: https://github.com/CiscoDevNet/webex-contact-center-crm-integrations/tree/main/ServiceNow/ActionsWidget. Имя файла — webexcc-servicenow-update-setv7-1-ActionsWidget.xml. Чтобы зафиксировать набор обновлений для виджета «Действия», см. шаги 2—9 раздела Зафиксировать набор обновлений.
Включите виджет действий
Используйте свойство IsWidgetDisplayEnabled, чтобы включить виджет «Действия». Не следует изменять значение этого свойства в разделе без заголовков пользовательского макета рабочего стола. В разделе без заголовков пользовательского макета рабочего стола этому свойству всегда присваивается значение false. Значение свойства следует обновлять только в разделе панели пользовательского макета рабочего стола.
После включения виджета «Действия» в пользовательском макете рабочего стола можно выполнять следующие действия:
- Управление записями активности — нажмите Просмотреть/изменить запись активности, чтобы просмотреть список записей активности, связанных с звонящим.
- Свяжите объекты CRM — нажмите Связать с записями активности, чтобы добавить в запись активности такие объекты CRM, как тип вызова (входящий или исходящий), объект вызова, заметки о звонках и т. д.
- Управление инцидентами — нажмите кнопку Создать инцидент. Создается новый инцидент с предварительно заполненными данными о вызывающем абоненте. В инцидент можно внести необходимые изменения. Вы можете изменить тип записи: от инцидента к случаю, модулю управления персоналом и т. д. в зависимости от ваших требований. Чтобы изменить тип записи, измените значение свойства TypeOfRecord в конфигурации виджета «Действия». Например:
{ "comp": "md-tab-panel", "attributes": { "slot": "panel", "class": "widget-pane" }, "children": [ { "comp": "agentx-custom-desktop", "script": "https://cx-crmconnector.ciscoccservice.com/servicenow/v5/dist/index.js", "properties": { "isWidgetDisplayEnabled": true, "typeOfRecord" : "Create Incident" }, "wrapper": { "title": "SNOW Actions !", "maximizeAreaName": "app-maximize-area" } } ] } - Добавляйте заметки о звонках в реальном времени — вы можете сохранить дополнительную информацию о звонке в текстовом поле и завершить разговор. Вы можете увидеть эти заметки, добавленные как заметки о звонках, в записи об активности.
Изменение кода на ServiceNow
Скрипт включает изменения-
Перейдите в навигатор фильтров и найдите
скрипт, включенный в него
.Выберите скрипт, включенный в меню «Системный интерфейс».
-
Отфильтруйте имя и найдите
PropUtils
. -
Измените метод
UserGetSysid
в скрипте.Текущий:
UserGetSysId : function () { var opened_for; var user = new GlideRecord("sys_user"); user.addQuery(this.getParameter('field'),this.getParameter('value')); user.query(); if (user.next()) opened_for=user.sys_id; var grInt = new GlideRecord('interaction'); grInt.initialize(); grInt.assigned_to= gs.getUserID(); grInt.type= 'phone'; grInt.opened_for= opened_for; var sysid=grInt.insert(); return sysid; },Новый пример кода инцидента:
UserGetSysId : function () { var opened_for; //Incident related changes var sysidlist = {}; var user = new GlideRecordSecure("sys_user"); user.addQuery(this.getParameter('field'),this.getParameter('value')); user.query(); if(user.next()) { opened_for=user.sys_id;//return user.sys_id; var inc = new GlideRecordSecure('incident'); inc.addQuery('caller_id', opened_for); inc.addQuery('state','IN','1,2'); inc.orderByDesc('sys_created_on'); inc.query(); if (inc.next()) { sysidlist.incsysid=inc.getUniqueValue(); }else{ inc.initialize(); inc.caller_id=opened_for; inc.contact_type='phone'; inc.short_description='Call Received From '+ this.getParameter('value'); sysidlist.incsysid=inc.insert(); } } var grInt = new GlideRecordSecure('interaction'); grInt.initialize(); grInt.assigned_to= gs.getUserID(); grInt.type= 'phone'; grInt.opened_for= opened_for; var sysid=grInt.insert(); sysidlist.sysid=sysid; return JSON.stringify(sysidlist); },
-
Перейдите в навигатор фильтров и выполните поиск
UI page.Выберите страницы пользовательского интерфейса в разделе «Системный интерфейс».
-
Отфильтруйте имя и найдите
agentdesktop
. -
Измените функцию
screenpop
в клиентском скрипте.Текущая функция:
// screen pop function screenpop(callerani,callSessionInfo) { if(callerani===callSessionInfo.phoneNumber){ callerani=stripPrefixes(callerani); } var gaout = new GlideAjax('propUtils'); gaout.addParam('sysparm_name', 'UserGetSysId'); gaout.addParam('field', 'phone'); gaout.addParam('value', callerani); gaout.getXMLWait(); var sysid = gaout.getAnswer(); openFrameAPI.openServiceNowForm({ entity: 'interaction', query: 'sys_id='+sysid });Пример кода инцидента:
// screen pop function screenpop(callerani,callSessionInfo) { if(callerani===callSessionInfo.phoneNumber){ callerani=stripPrefixes(callerani); } var gaout = new GlideAjax('propUtils'); gaout.addParam('sysparm_name', 'UserGetSysId'); gaout.addParam('field', 'phone'); gaout.addParam('value', callerani); gaout.getXMLWait(); // For Incident-related change var sysObj = JSON.parse(gaout.getAnswer()); if(sysObj.incsysid){ openFrameAPI.openServiceNowForm({ entity: 'incident', query: 'sys_id='+sysObj.incsysid, 'interaction_sys_id': sysObj.sysid }); }else{ openFrameAPI.openServiceNowForm({ entity: 'incident', query: 'sys_id=-1', 'interaction_sys_id': sysObj.sysid //'a2ba0ba62fd121106446cc96f699b6b8' }); } }
Если информация о звонящем есть в CRM и с этим контактом уже открыт новый инцидент, программа откроет незавершенный инцидент
Если информация о звонящем отсутствует в CRM, приложение открывает новый инцидент
Если информация о звонящем существует в CRM, приложение открывает новый инцидент с предварительно заполненными данными
Обзор
В этом примере использования подробно описан процесс добавления дополнительного столбца в таблицу ServiceNow webexcc_imp_activity и создания sn_openframe_phone_log его после установки коннектора Webex CC for ServiceNow CRM.
По умолчанию таблица содержит некоторые стандартные системные поля и значения.
В конструкторе WebExcc Flow можно создать дополнительные бизнес-переменные (CAD-переменные) и добавить переменные CAD в журнал активности после звонков ServiceNow, а также сохранить их в данных таблицы активности после звонков.
Это только справочная документация, в которой показано, как это сделать для образца переменной CAD под названием «Имя клиента», которая сохраняет имя клиента в IVR и отправляет его в ServiceNow.
Ожидается, что разработчики ServiceNow, являющиеся партнерами и заказчиками, будут настраивать эту конфигурацию и управлять ею, поскольку она адаптирована к существующему коннектору.
Cisco предоставляет только методы настройки и расширения коннектора.
В этой статье команда Cisco подтвердила поддержку добавления переменной CAD в журнал активности и таблицу активности, используя метод, описанный ниже:
Добавить столбец в активность WebExcc IMP
-
Отредактируйте таблицу в версии ServiceNow для разработчиков.

-
Перейдите в навигатор фильтров и найдите студию.

Выберите
контактный центр Webex

или же



-
Выберите таблицу активности
WebEXCC IMP

-
Добавьте новый столбец, например CustomerName


Добавить столбец в телефонный журнал
-
Отредактируйте таблицу телефонного журнала.


-
Добавьте новый столбец, например
CustomerName
.

Карта трансформации активности WebExcc

Добавьте новый столбец, например сопоставление полей CustomerName
.


Персонализируйте столбцы списка

В соответствии с рекомендациями Service Now измените действие «Выбор» с «Создать» на «Игнорировать».


Настройте список телефонных журналов

Перейдите в раздел Включить скрипт
Добавьте только одну строку webexcc. u_customername=ActInfo.Имя клиента
в PropUtils.



См. строку: webexcc. u_customername=ActInfo.customerName; со вспомогательным комментарием.
var propUtils = Class.create();
propUtils.prototype = Object.extendsObject(global.AbstractAjaxProcessor,{
getWebexccProp : function () {
var webexccprop = {};
webexccprop.instanceurl= 'https://'+gs.getProperty('instance_name')+'.service-now.com/';
webexccprop.url=gs.getProperty('x_caci_webexcc.agentdesktop_url');
// webexccprop.popupurl=gs.getProperty('x_caci_webexcc.screenpop_url');
return JSON.stringify(webexccprop);
},
UserGetSysId : function () {
var opened_for;
var user = new GlideRecord("sys_user");
user.addQuery(this.getParameter('field'),this.getParameter('value'));
user.query();
if (user.next())
opened_for=user.sys_id;//return user.sys_id;
// else
// return null;
var grInt = new GlideRecord('interaction');
grInt.initialize();
grInt.assigned_to= gs.getUserID();
grInt.type= 'phone';
grInt.opened_for= opened_for;
var sysid=grInt.insert();
return sysid;
},
setWebexcctable : function () {
var sys_id=0;
var actInfo = JSON.parse(this.getParameter('actInfo'));
var webexcc = new GlideRecordSecure(gs.getProperty('x_caci_webexcc.webexccactivitytable'));
webexcc.addQuery("callobject", actInfo.CallObject);
webexcc.query();
if(!webexcc.next()) {
webexcc.ani = actInfo.ani;
webexcc.dnis =actInfo.dnis;
webexcc.queuename =actInfo.queuename;
webexcc.wrapuptime =actInfo.wrapuptime;
webexcc.callduration =actInfo.CallDurationInSeconds;
webexcc.ringingtime =actInfo.ringingtime;
webexcc.activitydate =actInfo.ActivityDate;
webexcc.callobject =actInfo.CallObject;
webexcc.calltype =actInfo.CallType;
webexcc.calldisposition=actInfo.CallDisposition;
// This line is Added - to capture it in the Activity Log
webexcc.u_customername=actInfo.CustomerName;
sys_id=webexcc.insert();
//Activities on Incident record;
var actInfoString =this.getParameter('actInfo');
var suser = new GlideRecordSecure("sys_user");
suser.addQuery("phone", this.getParameter('ani'));
suser.query();
if(suser.next()) {
var inc = new GlideRecordSecure('incident');
inc.addQuery('caller_id', suser.sys_id);
inc.orderByDesc('sys_created_on');
inc.query();
if (inc.next()) {
var jsonPretty = JSON.stringify(JSON.parse(actInfoString),null,2);
inc.comments =jsonPretty;
inc.update();
}
}
}
return sys_id;
},
type: 'propUtils'
});
Создайте переменную CAD в конструкторе Flow

Добавьте переменную CAD в макет рабочего стола
Пример
"CadName1:SnowField1,CadName2:SnowField2"
CadName1 is CustomerName
SnowField1 is also used as CustomerName which is part of sample scirpt showen above "actInfo.CustomerName".

Демо-снимки экрана
Просмотрите недавно добавленную переменную CAD в таблице активности WebExcc.



Создайте переменную CAD для Flow Designer
Срочность инцидента
Воздействие инцидента

Обновление скрипта Service Now
Обновления сценария включают
-
Перейдите в навигатор фильтров и выполните поиск
script includesВыберите опцию «Скрипт включает в себя» в разделе «Системный интерфейс».

-
Отфильтруйте имя с помощью
propUtils.
-
Измените метод
UserGetSysid
в поле «Скрипт».
Текущий скрипт:
UserGetSysId : function () { var opened_for; var user = new GlideRecord("sys_user"); user.addQuery(this.getParameter('field'),this.getParameter('value')); user.query(); if (user.next()) opened_for=user.sys_id; var grInt = new GlideRecord('interaction'); grInt.initialize(); grInt.assigned_to= gs.getUserID(); grInt.type= 'phone'; grInt.opened_for= opened_for; var sysid=grInt.insert(); return sysid; },Новый пример кода инцидента:
UserGetSysId : function () { var opened_for; var sysidlist = {}; var user = new GlideRecordSecure("sys_user"); user.addQuery(this.getParameter('field'),this.getParameter('value')); user.query(); if(user.next()) { opened_for=user.sys_id;//return user.sys_id; var inc = new GlideRecordSecure('incident'); inc.addQuery('caller_id', opened_for); inc.addQuery('state','IN','1,2'); inc.orderByDesc('sys_created_on'); inc.query(); if (inc.next()) { sysidlist.incsysid=inc.getUniqueValue(); }else{ inc.initialize(); inc.caller_id=opened_for; inc.contact_type='phone'; inc.urgency=this.getParameter('IncUrgency'); inc.impact=this.getParameter('Impact'); inc.short_description='Call Received From '+ this.getParameter('value'); sysidlist.incsysid=inc.insert(); } } var grInt = new GlideRecordSecure('interaction'); grInt.initialize(); grInt.assigned_to= gs.getUserID(); grInt.type= 'phone'; grInt.opened_for= opened_for; var sysid=grInt.insert(); sysidlist.sysid=sysid; return JSON.stringify(sysidlist);//sysid; },
-
Перейдите в навигатор фильтров и выполните поиск
UI pages.Выберите опцию Страницы пользовательского интерфейса в разделе Системный пользовательский интерфейс.

-
Отфильтруйте страницы пользовательского интерфейса по имени и выполните поиск
agentdesktop.
-
Измените функцию
screenpop
в поле скрипта.
Текущая функция:
// screen pop function screenpop(callerani,callSessionInfo) { if(callerani===callSessionInfo.phoneNumber){ callerani=stripPrefixes(callerani); } var gaout = new GlideAjax('propUtils'); gaout.addParam('sysparm_name', 'UserGetSysId'); gaout.addParam('field', 'phone'); gaout.addParam('value', callerani); gaout.getXMLWait(); var sysid = gaout.getAnswer(); openFrameAPI.openServiceNowForm({ entity: 'interaction', query: 'sys_id='+sysid }); }Пример кода инцидента:
// screen pop function screenpop(callerani,callSessionInfo) { var Impact=3; if(callSessionInfo.callAssociatedData.Impact != null && callSessionInfo.callAssociatedData.Impact != undefined) { Impact=callSessionInfo.callAssociatedData.Impact.value; } var IncUrgency=3; if(callSessionInfo.callAssociatedData.Urgency != null && callSessionInfo.callAssociatedData.Urgency != undefined) { IncUrgency=callSessionInfo.callAssociatedData.Urgency.value; } if(callerani===callSessionInfo.phoneNumber){ callerani=stripPrefixes(callerani); } var gaout = new GlideAjax('propUtils'); gaout.addParam('sysparm_name', 'UserGetSysId'); gaout.addParam('field', 'phone'); gaout.addParam('value', callerani); gaout.addParam('IncUrgency', IncUrgency); gaout.addParam('Impact', Impact); gaout.getXMLWait(); // var sysid = gaout.getAnswer(); var sysObj = JSON.parse(gaout.getAnswer()); if(sysObj.incsysid){ openFrameAPI.openServiceNowForm({ entity: 'incident', query: 'sys_id='+sysObj.incsysid, 'interaction_sys_id': sysObj.sysid }); }else{ openFrameAPI.openServiceNowForm({ entity: 'incident', query: 'sys_id=-1', 'interaction_sys_id': sysObj.sysid }); } window.localStorage.setItem("screenpopinteraction",JSON.stringify(sysObj)); }
Если информация о вызывающем абоненте существует в CRM и нет нового или незавершенного инцидента, программа откроет новый инцидент


Измените код на ServiceNow
Добавьте новые столбцы в таблицу активности WebEXCC IMP
Откройте таблицу активности WebEXCC IMP





Нажмите «Обновить».


Добавьте новые столбцы в таблицу телефонного журнала
Откройте таблицу телефонного журнала





Карта трансформации активности WebExcc
Откройте карту преобразований
в навигаторе фильтров


Нажмите на карту активности WebExcc




Нажмите «Обновить».

Изменения, внесенные в сценарий, включают
-
Перейдите в навигатор фильтров и введите в поиске «скрипт включает».
Выберите скрипт, включенный в меню «Системный интерфейс».

-
Отфильтруйте имя с помощью
PropUtils
.
-
Измените метод setWebExccTable.

Новый пример кода для Incident:
setWebexcctable : function () { var sys_id=0; var actInfo = JSON.parse(this.getParameter('actInfo')); var webexcc = new GlideRecordSecure(gs.getProperty('webexccactivitytable')); webexcc.addQuery("u_callobject", actInfo.CallObject); webexcc.query(); if(!webexcc.next()) { //Activities on Incident record; //var actInfoString =this.getParameter('actInfo'); var incsysid=actInfo.incident_sys_id; var interactionsysid=actInfo.interaction_sys_id; var incnum=""; var intenum=""; delete actInfo['interaction_sys_id']; delete actInfo['incident_sys_id']; if( interactionsysid!= null && interactionsysid != undefined){ var inte = new GlideRecordSecure('interaction'); //inte.get('sys_id', interactionsysid ); inte.addQuery('sys_id', interactionsysid ); inte.query(); if (inte.next()) { intenum=inte.number; // inte.setValue('state','Closed Complete'); inte.work_notes='Update State to closed.'; inte.update(); } } if( incsysid!= null && incsysid != undefined){ var inci = new GlideRecordSecure('incident'); inci.addQuery('sys_id', incsysid ); inci.query(); if (inci.next()) { incnum=inci.number; var jsonPretty = JSON.stringify(actInfo,null,2); //JSON.stringify(JSON.parse(actInfoString),null,2); inci.comments =jsonPretty; inci.update(); } }else{ var suser = new GlideRecordSecure("sys_user"); suser.addQuery("phone", this.getParameter('ani')); suser.query(); if(suser.next()) { var inc = new GlideRecordSecure('incident'); inc.addQuery('caller_id', suser.sys_id); inc.addQuery('state','IN','1,2'); inc.orderByDesc('sys_created_on'); inc.query(); if (inc.next()) { var jsonPretty = JSON.stringify(actInfo,null,2); inc.comments =jsonPretty; inc.update(); } } } webexcc.u_ani = actInfo.ani; webexcc.u_dnis =actInfo.dnis; webexcc.u_queuename =actInfo.queuename; webexcc.u_wrapuptime =actInfo.wrapuptime; webexcc.u_callduration =actInfo.CallDurationInSeconds; webexcc.u_ringingtime =actInfo.ringingtime; webexcc.u_activitydate =actInfo.ActivityDate; webexcc.u_callobject =actInfo.CallObject; webexcc.u_calltype =actInfo.CallType; webexcc.u_calldisposition=actInfo.CallDisposition; webexcc.u_incidentnumber=incnum; webexcc.u_interactionsnumber=intenum; sys_id=webexcc.insert(); } return sys_id; },
Изменения методов на страницах пользовательского интерфейса
-
Перейдите в навигатор фильтров и найдите
страницы пользовательского интерфейса
Выберите опцию Страницы пользовательского интерфейса в разделе Системный пользовательский интерфейс.

-
Отфильтруйте страницы пользовательского интерфейса по имени и выполните поиск
agentdesktop.
-
Измените функции
NowActivities и screenpop
в скрипте.
Текущая функция:
function nowActivities(actInfo, ani) { var gaout = new GlideAjax('propUtils'); gaout.addParam('sysparm_name', 'setWebexcctable'); gaout.addParam('actInfo', JSON.stringify(actInfo)); gaout.addParam('ani', stripPrefixes(ani)); gaout.getXML(SetCCsysId); }Пример кода инцидента:
function nowActivities(actInfo, ani) { var sysObjstr = window.localStorage.getItem("screenpopinteraction"); if(sysObjstr != null && sysObjstr != undefined) { var sysObjjson=JSON.parse(sysObjstr); actInfo.interaction_sys_id=sysObjjson.sysid; actInfo.incident_sys_id=sysObjjson.incsysid; } var gaout = new GlideAjax('propUtils'); gaout.addParam('sysparm_name', 'setWebexcctable'); gaout.addParam('actInfo', JSON.stringify(actInfo)); gaout.addParam('ani', stripPrefixes(ani)); gaout.getXML(SetCCsysId); } function screenpop(callerani,callSessionInfo) { if(callerani===callSessionInfo.phoneNumber){ callerani=stripPrefixes(callerani); } var gaout = new GlideAjax('propUtils'); gaout.addParam('sysparm_name', 'UserGetSysId'); gaout.addParam('field', 'phone'); gaout.addParam('value', callerani); gaout.getXMLWait(); // var sysid = gaout.getAnswer(); var sysObj = JSON.parse(gaout.getAnswer()); if(sysObj.incsysid){ openFrameAPI.openServiceNowForm({ entity: 'incident', query: 'sys_id='+sysObj.incsysid, 'interaction_sys_id': sysObj.sysid }); }else{ openFrameAPI.openServiceNowForm({ entity: 'incident', query: 'sys_id=-1', 'interaction_sys_id': sysObj.sysid }); } window.localStorage.setItem("screenpopinteraction",JSON.stringify(sysObj)); }
Результаты после обновления

Следующие настройки применимы к версиям 1.0.5 и ниже. Для настройки новых версий 1.0.7 и выше выполните указанные выше действия.
Настройка № 1. Добавьте собственные бизнес-правила для сценариев использования потока вызовов
Создавайте новую запись инцидента для каждого вызоваДля каждого нового вызова коннектора WebExcc CRM в ServiceNow создавайте новую запись инцидента.
Найдите бизнес-правила в навигаторе фильтров

Нажмите кнопку «Создать».

Пример кода для справки:
function customcti() { var url = null; var name = sysparm_caller_name; eid = sysparm_caller_id; var phone = sysparm_caller_phone; var taskID = sysparm_task_id; var fQuery = sysparm_query; if (fQuery == null) fQuery = ''; var view = sysparm_view; if (view == null || view == '') view = "itil"; var userID = null; if (eid != null && eid != '') { userID = UserGetSysId("employee_number",eid); } if (userID == null && name != null && name != '') { userID = UserGetSysId("name", name); } if (userID == null && phone != null && phone != '') { userID = UserGetSysId("phone", phone); } if (userID != null) { if (fQuery.length > 0) fQuery += "^"; fQuery += "caller_id=" + userID; } if (url == null) { url = "incident.do?sys_id=-1"; if (fQuery != null) url += "&sysparm_query=" + fQuery; } answer = url; return url; } function UserGetSysId(field, value) { var user = new GlideRecord("sys_user"); user.addQuery(field, value); user.query(); if (user.next()) return user.sys_id; else return null; }Пример конфигурации бизнес-правила

Включите функцию вызова клиента

Обработка инцидентов при интеграции компьютерной телефонии (CTI) помечена как True.

Обновите URL-адрес screenpop с помощью специального правила CTI "cti.do? sysparm_cti_rulesysparm_caller_phone=Создать инцидент& = "

sysparm_cti_ruleПараметр =name, где «name» — имя функции, следует вызывать для обработки CTI, а не использовать сценарий по умолчанию.
Определите функцию в sys_scriptзаписи, помеченной как вызываемая клиентом.
Если вам необходимо вставить, обновить или удалить какие-либо GlideRecord (ы) в функции, вызовите отдельную функцию, не вызываемую клиентом, для выполнения обновлений.
Чтобы сделать скрипт доступным для вызова клиента, необходимо установить флажок «Вызываемый клиентом» в форме, которая отображается при отображении записи. sys_script
Флажок, вызываемый клиентом, по умолчанию не отображается. Для просмотра необходимо изменить поля, отображаемые в форме, используя значок шестеренки и механизм слякоти.
Настройка № 2 — добавление переменной CAD в таблицу активности Webex Contact Center
ОбзорВ этой статье описывается процесс добавления дополнительного столбца в таблицу ServiceNow, созданную при установке webexcc_activity коннектора Webex CC for ServiceNow CRM.
По умолчанию таблица содержит стандартные системные поля и значения.
Потенциально в конструкторе WebEXCC Flow можно создать больше специфичных для бизнеса переменных (CAD-переменных), добавить эти переменные CAD в журнал активности ServiceNow после звонков и сохранить их в данных таблицы активности после звонков.
-
Это только справочная документация. В ней показано, как это сделать с образцом переменной CAD под названием «Имя клиента», в которой имя клиента хранится в IVR и передается в ServiceNow.
-
Разработчики ServiceNow, являющиеся партнерами и заказчиками, будут настраивать эту конфигурацию и управлять ею, поскольку она адаптирована к существующему коннектору.
-
Cisco предоставит только методы настройки и расширения соединителя.
-
В этой статье команда Cisco подтвердила поддержку добавления переменной CAD в журнал активности и таблицу активности, используя метод, описанный ниже.
Отредактируйте таблицу в версии ServiceNow для разработчиков.

Перейдите в раздел .



Выберите таблицу активности WebExCC.

Например, имя клиента.


Выберите «Макет списка» для активности WebExcc.

Этот шаг необязателен, если вы используете набор обновлений XML — для добавления только одной строки «webexcc» требуется добавить только одну строку. u_customername=ActInfo.CustomerName» в PropUtils.



Пример сценария
См. строку с текстом: webexcc. u_customername=ActInfo.CustomerName; со вспомогательным комментарием.
var propUtils2 = Class.create();
propUtils2.prototype = Object.extendsObject(global.AbstractAjaxProcessor,{
getWebexccProp : function () {
var webexccprop = {};
webexccprop.instanceurl= 'https://'+gs.getProperty('instance_name')+'.service-now.com/';
webexccprop.url=gs.getProperty('x_caci_webexcc.agentdesktop_url');
webexccprop.popupurl=gs.getProperty('x_caci_webexcc.screenpop_url');
return JSON.stringify(webexccprop);
},
setWebexcctable : function () {
var sys_id=0;
var actInfo = JSON.parse(this.getParameter('actInfo'));
var webexcc = new GlideRecordSecure(gs.getProperty('x_caci_webexcc.webexccactivitytable'));
webexcc.addQuery("callobject", actInfo.CallObject);
webexcc.query();
if(!webexcc.next()) {
webexcc.ani = actInfo.ani;
webexcc.dnis =actInfo.dnis;
webexcc.queuename =actInfo.queuename;
webexcc.wrapuptime =actInfo.wrapuptime;
webexcc.callduration =actInfo.CallDurationInSeconds;
webexcc.ringingtime =actInfo.ringingtime;
webexcc.activitydate =actInfo.ActivityDate;
webexcc.callobject =actInfo.CallObject;
webexcc.calltype =actInfo.CallType;
webexcc.calldisposition=actInfo.CallDisposition;
// This line is Added - to capture it in the Activity Log
webexcc.u_customername=actInfo.CustomerName;
sys_id=webexcc.insert();
// Activities on Incident record;
var actInfoString =this.getParameter('actInfo');
var suser = new GlideRecordSecure("sys_user");
suser.addQuery("phone", this.getParameter('ani'));
suser.query();
if(suser.next()) {
var inc = new GlideRecordSecure('incident');
inc.addQuery('caller_id', suser.sys_id);
inc.orderByDesc('sys_created_on');
inc.query();
if (inc.next()) {
var jsonPretty = JSON.stringify(JSON.parse(acting string),null,2);
inc.comments =jsonPretty;
inc.update();
}
}
}
return sys_id;
},
type: 'propUtils2'
});
Отредактируйте страницу пользовательского интерфейса, указав новое имя скрипта
Создайте переменную CAD в конструкторе Flow
Добавьте переменную CAD в макет рабочего стола
Демо-снимки экрана
Просмотрите недавно добавленную переменную CAD в таблице активности WebExcc.

Коннектор CRM работает на основе версии виджета, указанной в макете рабочего стола JSON. Чрезвычайно важно постоянно обновлять версию виджета в макете рабочего стола.
Ожидается, что администраторы обеспечат использование этой версии виджета во всех макетах рабочего стола этого коннектора CRM. If the layout is not updated to use the latest version, functionality will no longer be supported and may cease to work correctly.
- Последнее обновление сервиса Now — ServiceNow_Desktop_0 .1.0_v5.0.3.json. По состоянию на март 2024 года версия пакета — 1.0.9
- Последнее обновление XML — WebExcc-ServiceNow-Update-Setv7-1-Actionswidget.xml, июнь 2024 г.











































