将Webex Contact Center与ServiceNow集成(版本1 -旧版)
必要条件
目前,此功能仅适用于代理。
在将 Webex Center 与 ServiceNow CRM 控制台集成之前,请确保您有下列设备:
-
访问 Webex Contact Center。
-
管理员访问 https://admin.webex.com 的Control Hub和Webex联系中心管理门户。管理门户的 URL 特定于地区。
-
能够访问桌面的 代理。桌面的 URL 特定于地区。
-
代理对以下域的访问,这些域已添加到内容安全策略允许列表:
-
*.service-now.com
有关如何定义允许列表的信息 ,请参阅文章 Contact Center Webex设置。
-
-
ServiceNow 开发者门户帐户。要创建帐户,请转至 ServiceNow 开发者门户(在 https://developer.servicenow.com/dev.do 上)并单击 注册并开始构建。
-
访问以下文件 https://github.com/CiscoDevNet/webex-contact-center-crm-integrations/tree/main/ServiceNow::
-
ServiceNow 更新设置(XML)
-
ServiceNow Contact Center 桌面布局 (JSON)
-
- Webex Contact Center支持的ServiceNow版本包括温哥华、犹他州、托亚、华盛顿和Xanadu。有关详细信息,请参阅 Webex Contact Center与ServiceNow集成。
请遵循以下两种方法之一:
对于开发者实例,我们建议遵循开发者实例指南中的步骤。
如果您拥有企业许可实例,请遵循针对企业许可实例的指南。
我们不建议将企业许可的应用程序与开发者沙箱实例混合。
以下部分描述了为开发人员实例安装ServiceNow连接器的步骤。
1 |
登录您的ServiceNow开发者门户帐户并打开管理 控制台。 |
2 |
在“ 帐户”菜单 的“我的 实例” 区域中,单击 开始构建。 |
3 |
在您的开发者实例中,从窗口左上角的过滤器导航器 字段导航至插件。 |
4 |
搜索标题为 Openframe 的 Openframe 插件。您可能需要滚动浏览列表。 |
5 |
单击 安装 以安装 Openframe 插件。 |
6 |
在激活 插件对话框 ,单击 激活。 |
7 |
当插件激活完成后,单击插件激活 对话框中的关闭和重新加载表单 。 |
8 |
要验证插件激活,从 窗口左上角的过滤器导航器字段中导航至 OpenFrame。 |
9 |
单击 配置 并确保 OpenFrame 插件出现在 OpenFrame 配置 列表中。 |
1 |
在此位置下载github repo上可用的最新系统更新集XML文件:https://github.com/CiscoDevNet/webex-contact-center-crm-integrations/tree/main/ServiceNow。 文件名:webexcc-servicenow-update-setV(X)。xml |
2 |
在ServiceNow实例上,从窗口左上角的 Filter navigator 字段导航至 。 |
3 |
单击从 XML 导入更新设置 链接。 |
4 |
单击选择文件,选择系统更新集XML文件,然后单击上传。
更新集显示在检索 更新集 列表中,并且已载入 状态。
|
5 |
从检索的更新集 列表中,单击更新集文件名称(链接)打开更新集。 |
6 |
在窗口的右上角,单击 预览更新设置 ,检查针对问题的更新集。 |
7 |
预览完成后,单击“更新设置预览”对话框上的关闭 。 |
8 |
单击 提交更新集。 |
9 |
提交更新集后,单击关闭更新集提交 对话框。 |
1 |
在窗口左上角的过滤器导航器 字段中,输入 |
2 |
在系统 属性 页面上,按更新日期对属性排序。确保您在 Contact Center 属性 Webex以下信息: |
3 |
单击 agentdesktop_url 打开系统 属性 agentdesktop_url 页面。 |
4 |
在值 字段中,根据操作区域输入Webex Contact Center桌面的URL。 |
5 |
单击 更新 以保存更改。 |
6 |
(可选)要更改活动表名称,请根据 要求编辑 Webexccactivity 表 属性。 在系统属性 页面上,单击Webexccactivitytable。 根据需要更改值 字段。 |
7 |
(可选)通过以下方式添加用户组:
|
1 |
从过滤器 导航器字段中 ,导航到 |
2 |
单击“新建”。 |
3 |
为URL输入以下属性:
|
4 |
在URL 字段右侧,单击锁定 按钮,然后将 |
5 |
(可选)选择用户/代理组以分配配置。 |
6 |
点击提交。URL 显示为链接。 |
7 |
在尝试使用OpenFrame电话之前,请确保将ServiceNow自定义桌面布局JSON文件上传到Webex Contact Center Management Portal。有关详细信息,请参阅在Webex Contact Center上设置ServiceNow桌面布局。 |
1 |
从 https://github.com/CiscoDevNet/webex-contact-center-crm-integrations/tree/main/ServiceNow 下载ServiceNow的桌面布局。 |
2 |
如果需要,请更新桌面布局文件中的属性。 |
3 |
转至 Webex Contact Center Management Portal。 |
4 |
从“管理门户”导航栏选择 |
5 |
单击 新布局 ,然后输入桌面布局的详细信息。 |
6 |
上传 ServiceNow 桌面布局 JSON 文件。 |
7 |
单击保存以保存配置。 现在您可以在 ServiceNow 控制台Webex Contact Center 桌面。 |
8 |
从过滤器导航器 字段导航至 。 |
以下部分描述了为许可企业实例安装ServiceNow连接器的步骤。
1 |
登录您的ServiceNow开发者门户帐户并打开管理 控制台。 |
2 |
在“ 帐户”菜单 的“我的 实例” 区域中,单击 开始构建。 |
3 |
在您的开发者实例中,从窗口左上角的过滤器导航器 字段导航至插件。 |
4 |
搜索标题为 Openframe 的 Openframe 插件。您可能需要滚动浏览列表。 |
5 |
单击 安装 以安装 Openframe 插件。 |
6 |
在激活 插件对话框 ,单击 激活。 |
7 |
当插件激活完成后,单击插件激活 对话框中的关闭和重新加载表单 。 |
8 |
要验证插件激活,从 窗口左上角的过滤器导航器字段中导航至 OpenFrame。 |
9 |
单击 配置 并确保 OpenFrame 插件出现在 OpenFrame 配置 列表中。 |
拥有企业许可证的实例可以直接从ServiceNow Store安装Webex Contact Center应用程序。
从ServiceNow商店下载并安装Webex Contact Center包:https://store.servicenow.com/sn_appstore_store.do#!/store/application/6c8e2a4edbc73410e1c75e25ca961947。 |
1 |
在窗口左上角的过滤导航器 字段中,输入 |
2 |
在系统 属性 页面上,按更新日期对属性排序。确保您在 Contact Center 属性 Webex以下信息: |
3 |
单击 agentdesktop_url 打开系统 属性 agentdesktop_url 页面。 |
4 |
在值 字段中,根据操作区域输入Webex Contact Center桌面的URL。 |
5 |
单击 更新 以保存更改。 |
6 |
(可选)要更改活动表名称,请根据需要编辑 x_caci_webexcc。webexccactivitytable 属性。
|
7 |
(可选)通过以下方式添加用户组:
|
1 |
从过滤器 导航器字段中 ,导航到 |
2 |
单击“新建”。 |
3 |
为URL输入以下属性:
|
4 |
在URL 字段右侧,单击锁定 按钮并添加 |
5 |
(可选)选择用户/代理组以分配配置。 |
6 |
点击提交。URL 显示为链接。 |
7 |
从过滤器导航器 字段导航至 。 |
8 |
(可选)在用户组 列表中,将可访问Webex Contact Center桌面的用户组从可用 移动到已选中。 |
9 |
在尝试使用OpenFrame电话之前,请确保将ServiceNow自定义桌面布局JSON文件上传到Webex Contact Center Management Portal。有关详细信息,请参阅在Webex Contact Center上设置ServiceNow桌面布局。 |
1 |
从 https://github.com/CiscoDevNet/webex-contact-center-crm-integrations/tree/main/ServiceNow 下载ServiceNow的桌面布局。 |
2 |
如果需要,请更新桌面布局文件中的属性。 |
3 |
转至 Webex Contact Center Management Portal。 |
4 |
从“管理门户”导航栏选择 |
5 |
单击 新布局 ,然后输入桌面布局的详细信息。 |
6 |
上传 ServiceNow 桌面布局 JSON 文件。 |
7 |
单击保存以保存配置。 现在您可以在 ServiceNow 控制台Webex Contact Center 桌面。 |
8 |
从过滤器导航器 字段导航至 。 |
1 |
从筛选器导航器字段导航至事件 >打开事件。 |
2 |
右键单击呼叫者字段,然后单击配置词典。 |
3 |
添加逗号分隔属性 您现在可以在ServiceNow控制台中开始使用Webex Contact Center桌面。 |
4 |
从过滤器导航器 字段导航至 。 |
概览
本文介绍了ServiceNow CRM连接器定制业务规则的几种方法。它详细介绍了如何根据特定于ServiceNow的业务规则自定义用例。
客户必须在ServiceNow上自行管理这些用例。此配置是ServiceNow特有的,而不是Webex Contact Center软件或专业知识。
这是用于帮助修改业务规则的参考文档。ServiceNow开发人员将创建和管理业务规则并提供支持。
Cisco仅提供示例文档。
以下部分提供了有关如何为开发人员和企业实例设置、启用和管理操作小工具的详细信息。
提交操作小工具的更新集
对于持照的企业实例,请从 ServiceNow商店安装最新的Webex Contact Center应用程序。
要为开发人员实例设置Actions小部件,请在此位置下载github repo上可用的最新系统更新集XML文件:https://github.com/CiscoDevNet/webex-contact-center-crm-integrations/tree/main/ServiceNow/ActionsWidget。文件名是webexcc-servicenow-update-setv7-1-ActionsWidget.xml。要提交操作小件的更新集,请参阅提交更新集中的步骤2至9。
启用操作小部件
使用 isWidgetDisplayEnabled 属性启用操作Widget。您不能在自定义桌面布局的无头部分中修改此属性的值。在自定义桌面布局的无头部分中,属性始终设置为false。仅应在自定义桌面布局的面板部分更新该属性的值。
在自定义桌面布局中启用“操作”小部件后,您可以执行以下操作:
- 管理活动记录—单击查看/编辑活动记录 可查看与呼叫者关联的活动记录列表。
- 关联CRM对象—单击关联至活动记录 以将CRM对象(呼叫类型(入站或出站)、呼叫对象、呼叫笔记等,添加到活动记录中。
- 管理事件—单击创建事件。已预填充呼叫者详细信息创建新事件。您可以对事件进行必要的更新。您可以根据您的要求选择从事件到案例、HR模块等更改记录类型。要更改记录类型,请在Actions小部件配置中修改 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", "属性":{"isWidgetDisplayEnabled":true,“typeOfRecord” :“创建事件” },“包装器”:{“标题”:“雪地行动!”,“maximizeAreaName”:“app-maximize-area” } } ] }
- 添加实时呼叫备注—您可以在文本区域中捕获有关呼叫的其他信息并完成呼叫。您可以在活动记录中看到这些注释,作为呼叫注释。
ServiceNow上的代码更改
脚本包含更改-
转至过滤导航并搜索
脚本包含
。在系统用户界面 下选择脚本包含。
-
筛选名称 并搜索
propUtils
。 -
在
脚本
中更改UserGetSysId方法。curent:
UserGetSysId:函数() { 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:函数() { varopened_for; //与事件相关的更改var sysidlist ={}; var user = new GlideRecordSecure("sys_user"); user.addQuery(this.getParameter('field'),this.getParameter('value')); user.query(); if(user.next()) {opened_for=用户。sys_id;//返回用户。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;公司。contact_type=“电话”; inc.short_description='从'+ 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;返回JSON.stringify(sysidlist); },
-
转至过滤导航并搜索
UI页面
。在系统用户界面 下选择UI页面。
-
筛选名称 并搜索
代理桌面
。 -
在
客户端脚本
中更改屏幕弹出功能。当前功能:
// screen pop功能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:“交互”,查询:'sys_id='+sysid });
事件示例代码:
// screen pop功能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 sysObj = JSON.parse(gaout.getAnswer()); if(sysObj.incsysid){ openFrameAPI.openServiceNowForm({ entity:“事件”,查询:'sys_id='+sysObj.incsysid,'interaction_sys_id':sysObj.sysid }); else{ openFrameAPI.openServiceNowForm({ entity:“事件”,查询:'sys_id=-1', 'interaction_sys_id': sysObj.sysid //'a2ba0ba62fd121106446cc96f699b6b8' }); }
如果CRM中存在呼叫者信息,并且此联系人已打开新事件,应用程序将打开未进展事件
如果CRM中不存在呼叫者信息,应用程序将打开一个新事件
如果呼叫者信息在CRM中存在,应用程序将打开一个包含预填充详细信息的新事件
概览
此用例详细介绍了在安装ServiceNow CRM连接器的Webex CC后,向ServiceNow表中添加额外列和创建webexcc_imp_activitysn_openframe_phone_log 的流程。
默认情况下,该表包含框系统字段和值。
您可以在WebexCC Flow设计器中创建更多业务特定变量(CAD变量),并在ServiceNow后呼叫活动日志中添加CAD变量,并将此持续到呼叫后活动表数据。
这仅为参考文档-并说明了如何对名为“客户名称”的样本CAD变量执行此操作,该变量将客户名称存储在IVR中,并将其发布到ServiceNow。
预计合作伙伴+Customer ServiceNow开发人员将配置和管理此配置,因为它是对现有连接器的自定义。
Cisco仅提供有关如何自定义和扩展连接器的技术。
截至本文中,Cisco团队已使用以下技术验证了在活动日志和活动表中添加CAD变量方面的支持:
向WebexCC IMP活动添加列
-
在ServiceNow开发者版本中编辑表格。
-
转至过滤器导航器并搜索工作室。
选择
Webex联系中心
或
-
选择
WebexCC IMP活动
表 -
添加新列,例如,
CustomerName
将列添加到电话日志
-
编辑电话日志表。
-
添加新列,例如
CustomerName
。
WebexCC活动转换地图
添加新列,例如,CustomerName
字段映射。
自定义列表列
根据Service Now的建议,将选择操作从“创建”更改为忽略。
配置电话日志列表
转至“包含脚本”
仅向propUtils添加一行 webexcc.u_customername=actInfo.CustomerName
。
示例脚本
查看此行: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');返回JSON.stringify(webexccprop); }, UserGetSysId:函数() { 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 :函数() { varsys_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.queuename; webexcc.wrapuptime =actInfo.CallDurationInSeconds; webexcc.ringingtime =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("phone", this.getParameter('ani')); suser.query(); if(suser.next()) { var inc = new GlideRecordSecure('incident'); inc.addQuery('caller_id”””苏塞。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' });
在Flow设计器中创建CAD变量
将CAD变量添加到桌面布局
示例
"CadName1:SnowField1,CadName2:SnowField2" CadName1是CustomerName SnowField1也可用作CustomerName,这是在"actInfo.CustomerName"上方的样本剪切的一部分。
演示屏幕截图
查看WebexCC活动表中新添加的CAD变量。
为Flow Designer创建CAD变量
事件紧急事件影响
Service Now脚本更新
脚本的更新包括
-
转至过滤器导航器并搜索
脚本包括
在系统用户界面 下选择脚本包含选项。
-
使用propUtils 筛选
名称
。 -
更改
脚本
字段中的UserGetSysId 方法。当前脚本:
UserGetSysId:函数() { 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:函数() { varopened_for; var sysidlist ={}; var user = new GlideRecordSecure("sys_user"); user.addQuery(this.getParameter('field'),this.getParameter('value')); user.query(); if(user.next()) {opened_for=用户。sys_id;//返回用户。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;公司。contact_type='phone'; inc.urgency=this.getParameter('IncUrgency'); inc.impact=this.getParameter('Impact'); inc.short_description='从'+ 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;返回JSON.stringify(sysidlist);//sysid; },
-
转至过滤器导航器并搜索
UI页面
。在系统用户界面 下选择UI页面选项。
-
使用名称 筛选用户界面页面,并搜索代理桌面 。
-
更改脚本字段中的
屏幕弹出
功能。当前功能:
// screen pop功能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:“交互”,查询:'sys_id='+sysid });
事件示例代码:
//屏幕弹出功能screenpop(callerani,callSessionInfo) { var Impact=3; if(callSessionInfo.callAssociatedData.Impact != null && callSessionInfo.callAssociatedData.Impact != undefined) { var IncUrgency=3; if(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:“事件”,查询:'sys_id='+sysObj.incsysid,'interaction_sys_id':sysObj.sysid }); else{ openFrameAPI.openServiceNowForm({ entity:“事件”,查询:'sys_id=-1', 'interaction_sys_id': sysObj.sysid }); } window.localStorage.setItem("screenpopinteraction",JSON.stringify(sysObj)); }
如果呼叫者信息在CRM中存在,并且没有新事件或未进展事件,则应用程序将打开新事件
更改ServiceNow上的代码
向 WebexCC IMP活动
表添加新列
打开 WebexCC IMP活动表 添加新列- InteractionsNumber 添加新列-事件编号
单击更新。
向电话日志
表添加新列
打开电话日志
表
WebexCC活动转换地图
从过滤器导航器打开转换地图
单击 WebexCC Activity TransformMap
单击更新。
脚本的更改包括
-
转至filter navigator并搜索“脚本包含”。
在系统用户界面 下选择脚本包含。
-
使用propUtils 筛选
名称
。 -
更改方法
setWebexcctable
。事件的新示例代码:
setWebexcctable:函数() { varsys_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="";删除actInfo['interaction_sys_id'];删除actInfo['incident_sys_id']; if( interactionsysid!= null && interactionsysid != undefined){ var inte = new GlideRecordSecure('interaction'); //inte.get('sys_id', interactionsysid ); int.addQuery('sys_id', interactionsysid ); int.query(); if (int.next()) { intenum=int.number; // inte.setValue('state', 'Closed Complete'); int.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("phone", this.getParameter('ani')); suser.query(); if(suser.next()) { var inc = new GlideRecordSecure('incident'); inc.addQuery('caller_id”””苏塞。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页面上的方法更改
-
转至过滤导航并搜索
UI页面
在系统用户界面 下选择UI页面选项。
-
使用名称 筛选用户界面页面,并搜索
代理桌面
。 -
更改脚本中的
nowActivities and 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:“事件”,查询:'sys_id='+sysObj.incsysid,'interaction_sys_id':sysObj.sysid }); else{ openFrameAPI.openServiceNowForm({ entity:“事件”,查询:'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连接器中的每次新呼叫,请创建新的事件记录。
在Filter导航器上搜索业务规则
单击“新建”。
供参考的示例代码:
函数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;如果(fQuery == null) fQuery = ''; var view =sysparm_view,如果(视图==零)|| view =='') view = "itil"; var userID = null; if (eid != null && eid !='') { userID = UserGetSysId("employee_number",eid); }如果(userID == null && name != null && name !='') { userID = UserGetSysId("name", name); }如果(userID == null && phone != null && phone !='') { userID = UserGetSysId("phone", phone); }如果(userID != null) { if (fQuery.length > 0) fQuery += "^"; fQuery += ""caller_id=" + userID; }如果(url == null) { url = "incident.do?sys_id=-1";如果(fQuery != null) url += "&sysparm_query=" + fQuery; }答案= url;返回url; }函数UserGetSysId(field, value) { var user = new GlideRecord("sys_user"); user.addQuery(field, value); user.query();如果(user.next())返回用户。sys_id; else return null; }
业务规则的示例配置
启用客户端可呼叫
事件计算机电话集成(CTI)处理 标记为正确。
使用自定义CTI规则更新屏幕弹出网址" cti.do?sysparm_cti_rule=createIncident&sysparm_caller_phone="
sysparm_cti_rule=name ,其中“name”是函数 的名称将被调用CTI处理 ,而不是使用默认脚本。
在sys_script 标记为客户端可呼叫的条目中定义功能。
如果您必须在函数中插入、更新或删除任何GlideRecord,请呼叫单独的非客户端可呼叫功能以执行更新。
要使脚本可客户端呼叫,您必须选中显示的sys_script 条目时表单上的客户端呼呼复选框。
默认情况下,客户端可呼叫复选框不会显示。要查看,您必须使用齿轮图标和螺丝桶机制修改表单上显示的字段。
自定义# 2 -在Webex Contact Center活动表中添加CAD变量
概述本文详细介绍了向ServiceNow表添加额外列的过程,webexcc_activity 该列表是在安装ServiceNow CRM Connector的Webex CC时创建的。
默认情况下,该表包含出箱式系统字段和值。
您可以在WebexCC Flow设计器中创建更多业务特定变量(CAD变量),并在ServiceNow 呼叫后活动日志中添加这些CAD变量,并将其持续到呼叫后活动表 数据中。
-
这仅为参考文档-并说明了如何对名为“客户名称”的样本CAD变量执行此操作,该变量将客户名称存储在IVR中,并将其发布到ServiceNow。
-
合作伙伴+Customer ServiceNow开发人员将配置和管理此配置,因为它是对现有连接器的自定义。
-
Cisco将仅提供有关如何自定义和扩展连接器的技术。
-
截至本文中,Cisco团队已使用以下技术验证了将CAD变量添加到活动日志和活动表中的支持。
在ServiceNow开发者版本中编辑表格。
转至
。选择 WebexCC活动 表。
例如,CustomerName。
选择 WebexCC活动的列表布局。
如果您使用更新集XML,则无需此步骤-只需向propUtils添加“webexcc.u_customername=actInfo.CustomerName”一行。
示例脚本
查看带有以下内容的线条: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');返回JSON.stringify(webexccprop); }, setWebexcctable:函数() { varsys_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.queuename; webexcc.wrapuptime =actInfo.CallDurationInSeconds; webexcc.ringingtime =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("phone", this.getParameter('ani')); suser.query(); if(suser.next()) { var inc = new GlideRecordSecure('incident'); inc.addQuery('caller_id”””苏塞。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(); } } }返回sys_id; },类型:'propUtils2' });
使用新的脚本名称编辑UI页面在Flow设计器中创建CAD变量
将CAD变量添加到桌面布局
演示屏幕截图
查看WebexCC活动表中新添加的CAD变量。