先决条件

在将 Webex 联络中心与 ServiceNow CRM 控制台集成之前,请确保您具备以下条件:


 

请遵循以下两种方法之一:

对于开发人员实例,我们建议遵循开发人员实例指南中的步骤。

如果您拥有企业许可实例,请遵循企业许可实例的指南。

我们不建议将企业许可的应用程序与开发人员沙箱实例混合。

以下部分介绍了为开发人员实例安装 ServiceNow 连接器的步骤。

1

登录您的 ServiceNow 开发者门户帐户并打开 管理 控制台。

2

帐户 菜单的 我的实例 区域中,单击 开始构建

3

在您的开发人员实例上,从窗口左上角的 过滤器导航器 字段导航到 插件

4

搜索标题为 Openframe 的 Openframe 插件。 您可能需要滚动浏览列表。

5

点击 安装 安装 Openframe 插件。

6

激活插件 对话框中,单击 激活

7

插件激活完成后,点击 关闭&在 插件激活 对话框中重新加载表单

8

要验证插件激活,请从窗口左上角的 过滤器导航器 字段导航至 OpenFrame

9

单击 配置 并确保 OpenFrame 插件出现在 OpenFrame 配置 列表中。

1

在 github 存储库上下载最新的系统更新集 XML 文件有空,位置: https://github.com/CiscoDevNet/webex-contact-center-crm-integrations/tree/main/ServiceNow

文件名:webexcc-servicenow-update-setV(X).xml

2

在您的 ServiceNow 实例上,从窗口左上角的 过滤器导航器 字段导航到 系统更新集 > 更新集提交

3

单击 从 XML 导入更新集链接。

4

单击 选择文件,选择系统更新集 XML 文件,然后单击 上传

更新集出现在 检索的更新集 列表中,并处于 已加载 状态。
5

检索的更新集 列表中,单击更新集文件名(链接)以打开更新集。

6

在窗口右上角,单击 预览更新集 以检查更新集是否存在问题。

7

预览完成后,单击“更新集预览”对话框上的 关闭

8

单击 提交更新集

9

更新集提交完成后,单击 更新集提交 对话框上的 关闭

1

在窗口左上角的 过滤器导航器 字段中,输入 sys_properties.list 并按 Enter 键。

2

系统属性 页面上,按更新日期对属性进行排序。 确保您可以看到以下 Webex 联络中心属性:

3

单击 agentdesktop_url 打开 系统属性 agentdesktop_url 页面。

4

字段中,根据操作区域输入 Webex 联络中心桌面的 URL。

5

单击 更新 保存更改。

6

(可选)要更改活动表名称,请根据需要编辑 webexccactivitytable 属性。

系统属性 页面上,单击 webexccactivitytable

根据需要更改 字段。

7

(可选)通过以下方式添加用户组:

  1. 在窗口左上角的 过滤器导航器 字段中,导航至“系统安全”下的

  2. 创建一个新用户组或使用现有用户组。

  3. 单击编辑

  4. 集合 下搜索 sn_openframe_user 并将其移至您的用户组。

  5. 单击保存

  6. 将用户添加为组成员。

1

过滤器导航器 字段,导航至 OpenFrame > 配置

2

单击新建

3

输入 URL 的以下属性:

  • 名称:Webex 联络中心桌面

  • 标题:Webex 联系中心

  • 宽度:550(推荐)

  • 高度:600(推荐)

4

URL 字段右侧,点击 锁定 按钮并添加 agentdesktop.do 作为 URL。 (执行此步骤将配置指向 UI 页面)

5

(可选)选择用户/代理组以分配配置。

6

单击提交。 URL 显示为链接。

7

在尝试使用 OpenFrame 电话之前,请确保将 ServiceNow 自定义桌面布局 JSON 文件上传到 Webex 联络中心管理门户。 有关详细信息,请参阅 在 Webex 联络中心设置 ServiceNow 桌面布局

1

https://github.com/CiscoDevNet/webex-contact-center-crm-integrations/tree/main/ServiceNow 下载 ServiceNow 的桌面布局。

2

如果需要,更新桌面布局文件中的属性。

3

转至 Webex 联络中心管理门户。

4

从管理门户导航栏中,选择 配置 > 桌面布局

5

单击 新建布局 并输入桌面布局的详细信息。

6

上传 ServiceNow 桌面布局 JSON 文件。

7

点击 保存 保存配置。

您现在可以在 ServiceNow 控制台中启动 Webex 联络中心桌面。

8

过滤器导航器 字段,导航至 代理工作区 > 代理工作区主页

单击左下角的电话图标。

以下部分介绍了为许可企业实例安装 ServiceNow 连接器的步骤。

1

登录您的 ServiceNow 开发者门户帐户并打开 管理 控制台。

2

帐户 菜单的 我的实例 区域中,单击 开始构建

3

在您的开发人员实例上,从窗口左上角的 过滤器导航器 字段导航到 插件

4

搜索标题为 Openframe 的 Openframe 插件。 您可能需要滚动浏览列表。

5

点击 安装 安装 Openframe 插件。

6

激活插件 对话框中,单击 激活

7

插件激活完成后,点击 关闭&在 插件激活 对话框中重新加载表单

8

要验证插件激活,请从窗口左上角的 过滤器导航器 字段导航到 OpenFrame

9

单击 配置 并确保 OpenFrame 插件出现在 OpenFrame 配置 列表中。

1

在窗口左上角的 过滤器导航器 字段中,输入 sys_properties.list

2

系统属性 页面上,按更新日期对属性进行排序。 确保您可以看到以下 Webex 联络中心属性:

3

单击 agentdesktop_url 打开 系统属性 agentdesktop_url 页面。

4

字段中,根据操作区域输入 Webex 联络中心桌面的 URL。

5

单击 更新 保存更改。

6

(可选)要更改活动表名称,请根据需要编辑 x_caci_webexcc.webexccactivitytable 属性。

  1. 系统属性 页面上,单击 x_caci_webexcc.webexccactivitytable

  2. 根据需要更改 字段。

7

(可选)通过以下方式添加用户组:

  1. 在窗口左上角的 过滤器导航器 字段中,导航至 下的 系统安全

  2. 单击 编辑 并添加以下角色:

    • sn_openframe_user

    • x_caci_webexcc.agent

    • 代理工作空​​间用户

    • x_caci_webexcc.webexcc_imp_activity_user

    • x_caci_webexcc.webex_contact_center

1

过滤器导航器 字段中,导航至 OpenFrame > 配置

2

单击新建

3

输入 URL 的以下属性:

  • 姓名:Webex 联络中心桌面

  • 标题:Webex 联系中心

  • 宽度:550(推荐)

  • 高度:600(推荐)

4

URL 字段右侧,单击 锁定 按钮并添加 x_caci_webexcc_agentdesktop .do 作为 URL。 (执行此步骤将配置指向 UI 页面)

5

(可选)选择用户/代理组以分配配置。

6

单击提交。 URL 显示为链接。

7

过滤器导航器 字段,导航至 代理工作区 > 代理工作区主页

单击左下角的电话图标。

8

(可选)在 用户组 列表中,从 可用 移动可以访问 #dntr_bifejgbjdz 联络中心桌面的用户组至 已选择

9

在尝试使用 OpenFrame 电话之前,请确保将 ServiceNow 自定义桌面布局 JSON 文件上传到 Webex 联络中心管理门户。 有关详细信息,请参阅 在 Webex 联络中心设置 ServiceNow 桌面布局

1

https://github.com/CiscoDevNet/webex-contact-center-crm-integrations/tree/main/ServiceNow 下载 ServiceNow 的桌面布局。

2

如果需要,更新桌面布局文件中的属性。

3

转至 Webex 联络中心管理门户。

4

从管理门户导航栏中,选择 配置 > 桌面布局

5

单击 新建布局 并输入桌面布局的详细信息。

6

上传 ServiceNow 桌面布局 JSON 文件。

7

点击 保存 保存配置。

您现在可以在 ServiceNow 控制台中启动 Webex 联络中心桌面。

8

过滤器导航器 字段,导航至 代理工作区 > 代理工作区主页

单击左下角的电话图标。

1

过滤器导航器 字段,导航至 事件 >开放事件。

2

右键单击调用方字段,然后单击 配置词典

3

添加逗号分隔的属性 "ref_contributions=show_phone,

您现在可以开始在 ServiceNow 控制台中使用 Webex 联络中心桌面。

4

过滤器导航器 字段,导航至 代理工作区 > 代理工作区主页

单击左下角的电话图标。

ServiceNow 控制台中的 Agent Desktop

在拨打外拨电话之前,请确保执行以下操作:

  • 创建外拨入口点并设置外拨入口点策略。

  • 为座席配置文件启用外拨 ANI。

  • 将外拨 ANI 设置为拨号号码到入口点映射。

有关详细信息,请参阅《Cisco Webex Contact Center 设置和管理指南》预配置一章。

过滤器导航器 字段,导航至 代理工作区 > 代理工作区主页

单击左下角的电话图标。

有关如何使用 Desktop 的信息,请参阅 Cisco Webex Contact Center Agent Desktop 用户指南

第三方存储分区

Google Chrome 和 Edge 116 或更高版本的最新更新可能存在问题,可能会扰乱您在 Webex 联络中心的 CRM 连接器的登录体验。 此问题影响 ServiceNow CRM 控制台上的桌面登录。

要在 Google Chrome 浏览器上解决此问题:

  1. 打开 Google Chrome 浏览器并在地址栏中输入 chrome://flags/#third-party-storage-partitioning

  2. 禁用 实验性第三方存储分区 标志。

  3. 关闭并重新启动 Chrome。

  4. 再次登录 ServiceNow CRM 控制台内的桌面。

要在 Edge 浏览器上解决此问题:

  1. 打开浏览器并在地址栏中输入 edge://flags/#third-party-storage-partitioning

  2. 禁用 实验性第三方存储分区 标志。

  3. 保存更改并重新启动浏览器。

  4. 再次登录 ServiceNow CRM 控制台内的桌面。

要在 Firefox 浏览器上解决此问题:

  1. 打开浏览器,在地址栏中输入 about:config

    可能会出现警告页面。 点击 接受风险并继续 进入 about:config 页面。

  2. 顶部的 搜索首选项名称 框中输入 network.cookie.cookieBehavior 以在 about:config页面查找首选项。

  3. 双击首选项或单击 编辑 图标来编辑首选项。

  4. 将值更改为 0。

  5. 保存更改并重新启动浏览器。

  6. 再次登录 ServiceNow CRM 控制台内的桌面。

概述

本文介绍了为 ServiceNow CRM 连接器自定义业务规则的多种方法。 它详细介绍了如何根据特定于 ServiceNow 的业务规则自定义用例。

客户必须在 ServiceNow 上自行管理这些用例。 该配置特定于 ServiceNow,而不是 Webex 联络中心软件或专业知识。


 

这是帮助修改业务规则的参考文档。 ServiceNow 开发人员将创建和管理业务规则,并提供支持。

思科仅提供示例文档。

ServiceNow 上的代码更改

脚本包含更改
  1. 转到过滤器导航器并搜索 脚本包括.

    选择 系统 UI 下的 脚本包含

  2. 过滤 名称 并搜索 道具工具.

  3. 改变方法 用户获取系统 ID脚本中。

    当前:

    UserGetSysId:function () { var opening_for; var user = new GlideRecord("sys_user"); user.addQuery(this.getParameter('field'),this.getParameter('value'));用户。query(); if(user.next())opened_for=user.sys_id; var grInt = new GlideRecord('交互'); grInt.initialize(); grInt.assigned_to=gs.getUserID(); grInt.type='电话'; grInt.opened_for=opened_for; var sysid=grInt.insert();返回系统 ID;},

    该事件的新示例代码:

    UserGetSysId:function () { var opening_for; //事件相关的更改 var sysidlist = {}; var user = new GlideRecordSecure("sys_user"); user.addQuery(this.getParameter('field'),this.getParameter('value'));用户。query(); if(user.next()) { opening_for=user.sys_id;//返回 user.sys_id; var inc = new GlideRecordSecure('事件'); 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(); }其他{ inc.initialize(); inc.caller_id=opened_for;inc.contact_type='电话'; inc.short_description='呼叫接收自 '+ this.getParameter('value'); sysidlist.incsysid=inc.insert(); var grInt = new GlideRecordSecure('交互'); grInt.initialize(); grInt.assigned_to=gs.getUserID(); grInt.type='电话'; grInt.opened_for=opened_for; var sysid=grInt.insert(); sysidlist.sysid=系统 id;返回 JSON.stringify(sysidlist); },

UI 页面方法变更
  1. 转到筛选器导航器并搜索 UI 页面

    选择 系统 UI 下的 UI 页面

  2. 过滤 名称 并搜索 座席桌面.

  3. 改变 弹屏 客户端脚本中的函数。

    当前功能:

    // 弹屏 function screenpop(callerani,callSessionInfo){ if(callerani===callSessionInfo.phoneNumber){ callerani=stripPrefixes(callerani); var gaout = new GlideAjax('propUtils'); gaout.addParam('sysparm_name', 'UserGetSysId'); gaout.addParam('字段', '电话'); gaout.addParam('值', callerani); gaout.getXMLWait(); var sysid = gaout.getAnswer(); openFrameAPI.openServiceNowForm({ 实体:'交互', 查询:'sys_id='+sysid });

    该事件的示例代码:

    // 弹屏 function screenpop(callerani,callSessionInfo){ if(callerani===callSessionInfo.phoneNumber){ callerani=stripPrefixes(callerani); var gaout = new GlideAjax('propUtils'); gaout.addParam('sysparm_name', 'UserGetSysId'); gaout.addParam('字段', '电话'); gaout.addParam('值', callerani); gaout.getXMLWait(); // 对于与事件相关的更改 var sysObj = JSON.parse(gaout.getAnswer()); if(sysObj.incsysid){ openFrameAPI.openServiceNowForm({ 实体:'事件', 查询:'sys_id='+sysObj.incsysid, 'interaction_sys_id':sysObj.sysid }); }else{ openFrameAPI.openServiceNowForm({ 实体:'事件', 查询:'sys_id=-1', 'interaction_sys_id':sysObj.sysid //'a2ba0ba62fd121106446cc96f699b6b8' }); } }

如果 CRM 中存在呼叫者信息,并且已经有与此联系人打开的新事件,则应用程序将打开正在进行的事件

如果 CRM 中不存在呼叫者信息,应用程序将打开一个新事件

如果 CRM 中存在呼叫者信息,应用程序将打开一个包含预填充详细信息的新事件

概述

此用例详细介绍了在安装 ServiceNow CRM 连接器的 Webex CC 时向 ServiceNow 表添加额外列 - webexcc_imp_activity 并创建 sn_openframe_phone_log 的过程。

默认情况下,该表包含某些开箱即用的系统字段和值。

您可以在 WebexCC Flow 设计器内创建更多特定于业务的变量(CAD 变量),并将 CAD 变量添加到 ServiceNow 呼叫后活动日志中,并将其保留到呼叫后活动表数据中。


 

这只是参考文档 - 展示了如何对名为“客户名称”的示例 CAD 变量执行此操作,该变量将客户名称存储在 IVR 中并将其发布到 ServiceNow。

预计合作伙伴+客户 ServiceNow 开发人员将配置和管理此配置,因为它是对现有连接器的自定义。

思科仅提供有关如何定制和扩展连接器的技术。

截至本文,思科团队已使用下述技术验证了对将 CAD 变量添加到活动日志和活动表的支持:

将列添加到 WebexCC IMP 活动

  1. 在 ServiceNow 的开发人员版本中编辑表。

  2. 转到过滤器导航器并搜索 studio。

    选择 Webex Contact Center

  3. 选择 WebexCC IMP 活动 桌子

  4. 添加新列,例如 顾客姓名

将列添加到电话日志

  1. 编辑电话日志表。

  2. 添加新列,例如 顾客姓名.

WebexCC 活动转换图

添加新列,例如 顾客姓名 字段映射。

个性化列表列

按照 Service Now 的建议,将选择操作从创建更改为忽略。

配置电话日志列表

转到脚本包含


 

仅添加一行 webexcc.u_customername=actInfo.CustomerName 到 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 opening_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;//返回 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; // 添加此行 - 以在活动日志中捕获它 webexcc.u_customername=actInfo.CustomerName; sys_id=webexcc.insert(); //事件记录上的活动;var actInfoString =this.getParameter('actInfo'); var suser = new GlideRecordSecure("sys_user"); suser.addQuery(“电话”, this.getParameter('ani')); suser.query(); if(suser.next()) { var inc = new GlideRecordSecure('事件'); 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();返回 sys_id;},输入:'propUtils' });

在流程设计器中创建 CAD 变量

将 CAD 变量添加到桌面布局

示例

“CadName1:SnowField1,CadName2:SnowField2”CadName1 是 CustomerName SnowField1 也用作 CustomerName,它是上面“actInfo.CustomerName”所示示例脚本的一部分。

演示截图

查看 WebexCC 活动表中新添加的 CAD 变量。

为 Flow Designer 创建 CAD 变量

事件紧急程度

事件影响

立即服务脚本更新

脚本更新包括

  1. 转到过滤器导航器并搜索 脚本包含

    选择 系统 UI 下的 脚本包含选项。

  2. 使用 propUtils 过滤 名称

  3. 改变方法 用户获取系统 ID脚本 字段中。

    当前脚本:

    UserGetSysId:function () { var opening_for; var user = new GlideRecord("sys_user"); user.addQuery(this.getParameter('field'),this.getParameter('value'));用户。query(); if(user.next())opened_for=user.sys_id; var grInt = new GlideRecord('交互'); grInt.initialize(); grInt.assigned_to=gs.getUserID(); grInt.type='电话'; grInt.opened_for=opened_for; var sysid=grInt.insert();返回系统 ID;},

    该事件的新示例代码:

    UserGetSysId:function () { var opening_for; var sysidlist = {}; var user = new GlideRecordSecure("sys_user"); user.addQuery(this.getParameter('field'),this.getParameter('value'));用户。query(); if(user.next()) { opening_for=user.sys_id;//返回 user.sys_id; var inc = new GlideRecordSecure('事件'); 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(); }其他{ inc.initialize(); inc.caller_id=opened_for;inc.contact_type='电话'; inc.urgency=this.getParameter('IncUrgency'); inc.impact=this.getParameter('影响'); inc.short_description='呼叫接收自 '+ this.getParameter('value'); sysidlist.incsysid=inc.insert(); var grInt = new GlideRecordSecure('交互'); grInt.initialize(); grInt.assigned_to=gs.getUserID(); grInt.type='电话'; grInt.opened_for=opened_for; var sysid=grInt.insert(); sysidlist.sysid=系统 id;return JSON.stringify(sysidlist);//sysid; },

UI 页面上的方法更改
  1. 转到过滤器导航器并搜索 UI 页面

    选择 系统 UI 下的 UI 页面选项。

  2. 使用 名称 过滤 UI 页面 并搜索 agentdesktop.

  3. 改变 弹屏 脚本字段中的函数。

    当前功能:

    // 弹屏 function screenpop(callerani,callSessionInfo){ if(callerani===callSessionInfo.phoneNumber){ callerani=stripPrefixes(callerani); var gaout = new GlideAjax('propUtils'); gaout.addParam('sysparm_name', 'UserGetSysId'); gaout.addParam('字段', '电话'); gaout.addParam('值', callerani); gaout.getXMLWait(); var sysid = gaout.getAnswer(); openFrameAPI.openServiceNowForm({ 实体:'交互', 查询:'sys_id='+sysid }); }

    该事件的示例代码:

    // 弹屏函数 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('字段', '电话'); gaout.addParam('值', callerani); gaout.addParam('IncUrgency', IncUrgency); gaout.addParam('影响', 影响); gaout.getXMLWait(); // var sysid = gaout.getAnswer(); var sysObj = JSON.parse(gaout.getAnswer()); if(sysObj.incsysid){ openFrameAPI.openServiceNowForm({ 实体:'事件', 查询:'sys_id='+sysObj.incsysid, 'interaction_sys_id':sysObj.sysid }); }else{ openFrameAPI.openServiceNowForm({ 实体:'事件', 查询:'sys_id=-1', 'interaction_sys_id':sysObj.sysid }); window.localStorage.setItem("screenpopinteraction",JSON.stringify(sysObj)); }

如果 CRM 中存在呼叫者信息,并且没有新的或正在进行的事件,则应用程序将打开一个新事件

更改 ServiceNow 上的代码

将新列添加到 WebexCC IMP 活动 桌子

打开 WebexCC IMP 活动 桌子

添加新列 - InteractionsNumber

添加新列 - IncidentNumber

点击 更新

将新列添加到 电话记录 桌子

打开 电话记录 桌子

添加新列 - InteractionsNumber

添加新列 - IncidentNumber

WebexCC 活动转换图

开放 变换映射 从过滤器导航器

点击 WebexCC 活动 TransformMap

添加新的 - 用于互动号码图

添加新的 - 用于事件编号图

单击更新

脚本的更改包括

  1. 转到过滤器导航器并搜索“脚本包含”。

    选择 系统 UI 下的 脚本包含

  2. 过滤 名称 道具工具.

  3. 改变方法 设置 WebExcctable.

    事件的新示例代码:

    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()) { //事件记录上的活动;//var actInfoString =this.getParameter('actInfo'); var incsysid=actInfo.incident_sys_id; var interactionsysid=actInfo.interaction_sys_id; var incnum=""; var intenum="";删除 actInfo['interaction_sys_id'];删除 actInfo['incident_sys_id']; if(interactionsysid!= null &&interactionsysid != undefined){ var inte = new GlideRecordSecure('interaction'); } //inte.get('sys_id', 交互 sysid); inte.addQuery('sys_id',interactionsysid);inte.query(); if(inte.next()) { intenum=inte.number; // inte.setValue('state','关闭完成'); inte.work_notes='将状态更新为关闭。'; 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(“电话”, this.getParameter('ani')); suser.query(); if(suser.next()) { var inc = new GlideRecordSecure('事件'); 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();返回 sys_id;},

UI 页面方法变更

  1. 转到过滤器导航器并搜索 用户界面页面

    选择 系统 UI 下的 UI 页面选项。

  2. 使用 名称 过滤 UI 页面并搜索 agentdesktop

  3. 改变 nowActivities 和 screenpop 脚本中的函数。

    当前功能:

    函数 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); }

    该事件的示例代码:

    函数 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('字段', '电话'); gaout.addParam('值', callerani); gaout.getXMLWait(); // var sysid = gaout.getAnswer(); var sysObj = JSON.parse(gaout.getAnswer()); if(sysObj.incsysid){ openFrameAPI.openServiceNowForm({ 实体:'事件', 查询:'sys_id='+sysObj.incsysid, 'interaction_sys_id':sysObj.sysid }); }else{ openFrameAPI.openServiceNowForm({ 实体:'事件', 查询:'sys_id=-1', 'interaction_sys_id':sysObj.sysid }); window.localStorage.setItem("screenpopinteraction",JSON.stringify(sysObj)); } 

更新后的结果


 

以下自定义适用于 1.0.5 及更低版本。 对于较新版本 1.0.7 及更高版本的自定义,请按照上述步骤操作。

自定义 #1 - 为呼叫流程用例添加自定义业务规则

为每个呼叫创建新的事件记录

对于 ServiceNow 中的 WebexCC CRM 连接器的每个新呼叫,创建一个新事件记录。

  1. 在过滤器导航器上搜索业务规则

  2. 单击新建。

    示例代码供参考:

    函数 customcti() { var url = null; var name = sysparm_caller_name; eid = sysparm_caller_id; var 电话 = sysparm_caller_phone; var 任务 ID = sysparm_task_id; var fQuery = sysparm_query; if(fQuery == null)fQuery = ''; var 视图 = sysparm_view; if(view == null || view == '')view = "itil"; var 用户 ID = null; if(eid != null && eid != ''){ userID = UserGetSysId("employee_number",eid); } if(userID == null && name != null && name != ''){ userID = UserGetSysId("name", name); } if(userID == null && 电话 != null && 电话 != ''){ userID = UserGetSysId(“电话”, 电话); } 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; } 答案 = 网址;返回网址;} function UserGetSysId(field, value){ var user = new GlideRecord("sys_user"); user.addQuery(字段,值);用户。query(); if(user.next()) 返回 user.sys_id;否则返回空;}

    业务规则配置示例

  3. 启用客户端可调用

    计算机电话集成(CTI)事件处理 被标记为 真的

  4. 使用自定义 CTI 规则更新 screenpop url cti.do?sysparm_cti_rule=createIncident&sysparm_caller_phone=

示例

sysparm_cti_rule=名称 在哪里 '姓名' 是一个名字 功能 将被调用 CTI 处理 而不是使用默认脚本。

在 a 中定义函数 系统脚本 条目已标记 客户端可调用

如果必须在函数中插入、更新或删除任何 GlideRecord,请调用单独的非客户端可调用函数来执行更新。


 

要使脚本可供客户端调用,必须选中显示 sys_script 条目时显示的表单上的客户端可调用复选框。

默认情况下,客户端可调用复选框不会显示。 要查看,您必须使用齿轮图标和泥桶机制修改表单上显示的字段。

参考资料

自定义 #2 - 在 Webex 联络中心活动表中添加 CAD 变量

概述

本文详细介绍了向 ServiceNow 表添加附加列 - webexcc_activity 的过程,该表是在安装 ServiceNow CRM 连接器的 Webex CC 时创建的。

默认情况下,该表包含现成的系统字段和值。

您可以在 WebexCC Flow 设计器中创建更多特定于业务的变量(CAD 变量),并将这些 CAD 变量添加到 ServiceNow 呼叫后活动日志中,并将其保留到 通话后活动表 数据。


 
  • 这只是参考文档 - 并展示了如何对名为“客户名称”的示例 CAD 变量执行此操作,该变量将客户名称存储在 IVR 内并将其发布到 ServiceNow。

  • 合作伙伴+客户 ServiceNow 开发人员将配置和管理此配置,因为它是对现有连接器的自定义。

  • 思科将仅提供有关如何定制和扩展连接器的技术。

  • 截至本文,思科团队已验证支持使用下述技术将 CAD 变量添加到活动日志和活动表中。

将列添加到 WebexCC 活动
  1. 在 ServiceNow 的开发人员版本中编辑表。

  2. 转至 Studio > Webex 联系中心

  3. 选择 WebexCC 活动 表格。

  4. 例如, 客户名称

  5. 选择 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; // 添加此行 - 以在活动日志中捕获它 webexcc.u_customername=actInfo.CustomerName; sys_id=webexcc.insert(); // 事件记录上的活动;var actInfoString =this.getParameter('actInfo'); var suser = new GlideRecordSecure("sys_user"); suser.addQuery(“电话”, this.getParameter('ani')); suser.query(); if(suser.next()) { var inc = new GlideRecordSecure('事件'); inc.addQuery('caller_id', suser.sys_id); inc.orderByDesc('sys_created_on'); inc.query(); if(inc.next()) { var jsonPretty = JSON.stringify(JSON.parse(代理字符串),null,2); inc.comments =jsonPretty; inc.update();返回 sys_id;},输入:'propUtils2' });
使用新的脚本名称编辑 UI 页面

在流程设计器中创建 CAD 变量

将 CAD 变量添加到桌面布局

演示截图

查看 WebexCC 活动表中新添加的 CAD 变量。