將 Webex Contact Center 與 ServiceNow 整合
當您 Webex Contact Center 與 ServiceNow CRM 控制台整合時,您可以從 ServiceNow 中啟動 Webex Contact Center Desktop。
先決條件
在您將 Webex Contact Center 與 ServiceNow CRM 主控台整合之前,請確保您具備下列各項:
-
存取 Webex 客服中心。
-
位於 https://admin.webex.com 的 Control Hub 和 Webex Contact Center Management Portal 的系統管理員存取權限。 Management Portal 的 URL 為您所在的地區所特有。
-
可存取桌面的代理。 桌面的 URL 是您所在地區特有的。
-
代理存取內容安全原則允許清單中新增的以下域:
-
*.service-now.com
有關如何定義允許清單的詳細資訊,請參閱文章 Webex Contact Center 的安全性設定。
-
-
一個 ServiceNow 開發人員入口網站帳戶。 若要創建帳戶,請 轉到 https://developer.servicenow.com/dev.do 處的 ServiceNow 開發人員門戶,然後按兩下 「註冊並開始構建」。
-
在 https://github.com/CiscoDevNet/webex-contact-center-crm-integrations/tree/main/ServiceNow 存取以下檔案:
-
ServiceNow 更新集 (XML)
-
ServiceNow Contact Center 桌面排列 (JSON)
-
- Webex Contact Center 支援的 ServiceNow 版本包括溫哥華、猶他州、托克亞、華盛頓和世外桃源。 有關更多資訊,請參見 Webex Contact Center 與 ServiceNow 的整合。
請遵循以下兩種方法之一:
對於開發人員實例,我們建議按照開發人員實例指南中的步驟操作。
如果您擁有企業許可實例,請遵循企業許可實例的準則。
我們不建議將企業許可的應用與開發人員沙盒實例混合使用。
以下部分介紹了為開發人員實例安裝 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 |
在視窗左上角的「過濾器導航器 」欄位中,鍵入 |
2 |
在「 系統屬性 」頁上,按更新日期對屬性進行排序。 確保您可以看到以下 Webex Contact Center 屬性: |
3 |
按兩下 agentdesktop_url 以打開「 系統屬性 agentdesktop_url 」頁。 |
4 |
在值 欄位 中,根據營運區域輸入 Webex Contact Center Desktop 的 URL。 |
5 |
按一下 「更新」 以儲存變更。 |
6 |
(選用)若要更改“活動”表名稱,請根據需要編輯 webexccactivitytable 屬性。 在「系統屬性 」頁上,按一下 webexccactivitytable。 視需要變更「 值 」欄位。 |
7 |
(選用)透過以下方式新增使用者群組:
|
1 |
從過濾器導航器 欄位中,導航到 。 |
2 |
按一下新增。 |
3 |
輸入 URL 的下列屬性:
|
4 |
在 URL 欄位的 右側,點按 鎖定 按鈕,然後添加 agentdesktop.do |
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 |
從 Management Portal 導航欄中,選擇 ”。 |
5 |
按下 新建佈局 並輸入桌面佈局的詳細資訊。 |
6 |
上傳 ServiceNow 桌面配置 JSON 檔案。 |
7 |
按一下 儲存 ,以儲存組態。 您現在可以在 ServiceNow 控制台中啟動 Webex Contact Center Desktop。 |
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 |
在「 系統屬性 」頁上,按更新日期對屬性進行排序。 確保您可以看到以下 Webex Contact Center 屬性: |
3 |
按兩下 agentdesktop_url 以打開「 系統屬性 agentdesktop_url 」頁。 |
4 |
在值 欄位 中,根據營運區域輸入 Webex Contact Center Desktop 的 URL。 |
5 |
按一下 「更新」 以儲存變更。 |
6 |
(選用)若要更改活動表名稱,請根據需要編輯 x_caci_webexcc.webexccactivitytable 屬性。
|
7 |
(選用)透過以下方式新增使用者群組:
|
1 |
從過濾器導航器 欄位中,導航到 。 |
2 |
按一下新增。 |
3 |
輸入 URL 的下列屬性:
|
4 |
在 URL 欄位的 右側,點按鎖定 按鈕並將 x_caci_webexcc_agentdesktop.do 新增 |
5 |
(選用)選取要指定組態的使用者/代理群組。 |
6 |
按一下遞交。 URL 即會顯示為連結。 |
7 |
從篩選器導航器 欄位中,導航到 。 |
8 |
(選用)在「 使用者群組 」清單中,將可以存取 Webex Contact Center Desktop 的使用者群組從 「可用 」移至 「已選取」。 |
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 |
從 Management Portal 導航欄中,選擇 ”。 |
5 |
按下 新建佈局 並輸入桌面佈局的詳細資訊。 |
6 |
上傳 ServiceNow 桌面配置 JSON 檔案。 |
7 |
按一下 儲存 ,以儲存組態。 您現在可以在 ServiceNow 控制台中啟動 Webex Contact Center Desktop。 |
8 |
從篩選器導航器 欄位中,導航到 。 |
1 |
從篩選器導航器 欄位中,導航到 事件 >打開事件。 |
2 |
在來電者欄位上按一下滑鼠右鍵,然後按一下「 設定字典」。 |
3 |
添加逗號分隔的 您現在可以在 ServiceNow 控制台中使用 Webex Contact Center Desktop。 |
4 |
從篩選器導航器 欄位中,導航到 。 |
概覽
本文介紹了為 ServiceNow CRM 連接器自定義業務規則的幾種方法。 它詳細介紹了如何根據特定於 ServiceNow 的業務規則自定義用例。
客戶必須在 ServiceNow 上自行管理這些用例。 該組態特定於 ServiceNow 而非 Webex Contact Center 軟體或專業知識。
這是説明修改業務規則的參考文檔。 ServiceNow 開發人員將創建和管理業務規則,並提供支援。
Cisco 僅提供範例文件。
以下部分提供了有關如何為開發人員和企業實例設置、啟用和管理操作小組件的詳細資訊。
提交操作小組件的更新集
授權的企業實例方面請自 ServiceNow 商店安裝最新的 Webex Contact Center 應用程式。
要為開發人員實例設置操作小組件,請下載 github 儲存庫上提供的最新系統更新集 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 模組等修改記錄類型。 要更改記錄類型,請在操作小組件配置中修改 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”} } ] }
- 新增即時通話備註 -- 您可以在文字區域中擷取有關通話的其他資訊並整理通話。 您可以在活動記錄中看到這些作為通話筆記添加的註釋。
服務現在的代碼變更
指令檔包含變更-
移至過濾器導航器並搜尋
指令檔包括
.選擇「系統 UI」 下的 「腳本包括」。
-
過濾名稱 , 然後搜尋
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(); 傳回 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;返回 JSON.stringify (sysidlist);},
-
轉到篩選器導航器並搜索
UI 頁面
。選擇 「系統 UI」下的 「UI」 頁。
-
過濾名稱 , 然後搜尋
代理桌面
. -
變更
螢幕彈出
用戶端腳本 中的函數。目前功能:
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 在安裝 Webex CC for ServiceNow CRM 連接器時建立 sn_openframe_phone_log。
默認情況下,該表包含某些現成的系統欄位和值。
您可以在 WebexCC Flow 設計器中創建更多業務特定變數 (CAD 變數),並將 CAD 變數新增到 ServiceNow 通話後活動日誌中,並將其保存到通話後活動表資料中。
這隻是一個參考文檔 - 並展示了如何對名為「客戶名稱」的示例 CAD 變數執行此操作,該變數將客戶名稱存儲在 IVR 中並將其發佈到 ServiceNow。
預計合作夥伴 + 客戶 ServiceNow 開發人員將配置和管理此配置,因為它是對現有連接器的自定義。
Cisco 僅提供有關如何自訂和擴展連接器的技術。
截至本文,Cisco 團隊已驗證支援使用下述技術將 CAD 變數添加到活動日誌和活動表:
新增欄至 WebexCC IMP 活動
-
在 ServiceNow 的開發人員版本中編輯該表。
-
轉到過濾器導航器並搜索工作室。
選取
Webex Contact Center
或
-
選取
WebexCC IMP 活動
桌子 -
新增一欄例如,
客戶名稱
新增欄到電話紀錄
-
編輯電話日誌表。
-
新增一欄例如,
客戶名稱
.
WebexCC 活動轉換對應
新增一欄例如, 客戶名稱
欄位映射。
個人化清單欄
按照「服務立即」的建議,將“選擇”操作從“創建”更改為“忽略”。
設定電話紀錄清單
移至文稿包含
僅新增一行 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'); 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;//返回 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();返回 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 (“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(); } } }返回 sys_id;},type:'propUtils' });
在 Flow 設計器中建立 CAD 變數
將 CAD 變數新增到桌面佈局
範例
“CadName1:SnowField1,CadName2:SnowField2”CadName1 是 CustomerName SnowField1 也用作 CustomerName,這是“actInfo.CustomerName”上方的示例 scirpt show 的一部分。
簡報截圖
在 WebexCC 活動表格中檢視新新增的 CAD 變數。
為 Flow Designer 建立 CAD 變數
事件緊急性事件影響
立即服務指令碼更新
對文稿的更新包括
-
移至篩選器導航器並搜尋
文稿包含
選擇「系統 UI」 下的 「腳本包含」選項。
-
使用 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(); 傳回 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;返回 JSON.stringify (sysidlist);//sysid;},
-
轉到篩選器導航器並搜索
UI 頁面
。選擇「系統 UI」下的 「 UI 頁面」 選項。
-
使用名稱過濾 UI 頁面 並搜尋 代理桌面 。
-
變更
螢幕彈出
指令檔欄位中的函數。目前功能:
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 }); }
事件的範例代碼:
螢幕彈出功能 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 活動轉換圖
按一下更新。
對文稿的變更包括
-
轉到過濾器導航器並搜索「腳本包含」。
選擇「系統 UI」 下的 「腳本包括」。
-
過濾 名稱 以
propUtils
. -
變更方法
設定網路可執行
.事件的新範例代碼:
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()){ //Activity 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 行為資訊['interaction_sys_id'];刪除行為資訊['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=英寸;sys_id=webexcc.insert();} 傳回 sys_id;},
UI 頁面上的方法變更
-
移至過濾器導航器並搜尋
UI 頁面
選擇「系統 UI」下的 「 UI 頁面 」 選項。
-
使用 名稱 過濾 UI 頁面並搜尋
代理桌面
。 -
變更
Now 活動與螢幕彈出
腳本中的函數。目前功能:
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 - 為呼叫流用例新增自訂業務規則
為每個呼叫建立新的事件記錄每當有新通話進入 ServiceNow 中的 WebexCC CRM 連接器時,皆需建立新的事件記錄。
在篩選器導航器上搜尋業務規則
點撃新增。
範例代碼供參考:
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;返回 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; }
業務規則的範例配置
啟用 Client callable
Computer Telephony Integration (CTI) Processing For Incident (針對事件 的計算機電話集成() 處理被標記為 True。
使用自定義 CTI 規則 “ cti.do?sysparm_cti_rule=createIncident&sysparm_caller_phone=”更新 screenpop url
sysparm_cti_rule=name 其中 'name' 是函數 的名稱 ,用於 CTI Processing 而不是使用預設腳本。
在標記為 client callable 的 sys_script 條目中定義函數。
如果您必須在函數中插入、更新或刪除任何 GlideRecords,請調用單獨的非用戶端可調用函數來執行更新。
要使文稿可用戶端調用,您必須選中顯示 sys_script 條目時顯示的表單上的 client-callable 複選框。
默認情況下,client-callable 複選框不顯示。 要查看,您必須使用齒輪圖示和 slush 儲存桶機制修改表單上顯示的欄位。
自訂 # 2 - 在 Contact Center 活動表中添加 CAD 變數 Webex
概覽本文詳細介紹了向 ServiceNow 表添加附加列的過程,該列是在安裝 Webex CC for ServiceNow CRM 連接器時創建的 webexcc_activity。
默認情況下,該表包含現成的系統欄位和值。
您可以在 WebexCC 流設計器中創建更多業務特定變數 (CAD 變數),並將這些 CAD 變數添加到 ServiceNow 呼叫後活動日誌中,並將其保存到 呼叫後活動表 數據中。
-
這隻是參考文檔 - 並展示了如何對名為 Customer Name 的示例 CAD 變數執行此操作,該變數將客戶名稱存儲在 IVR 中並將其發佈到 ServiceNow。
-
合作夥伴 + 客戶服務 ServiceNow 開發人員將配置和管理此配置,因為它是對現有連接器的自定義。
-
Cisco 將僅提供有關如何自定義和擴展連接器的技術。
-
截至本文,Cisco 團隊已驗證支援使用下述技術將 CAD 變數添加到活動日誌和活動表中。
在 ServiceNow 的開發人員版本中編輯表。
轉到
。選擇 WebexCC 活動 表。
例如, CustomerName。
選擇 WebexCC 活動 的清單佈局。
如果您使用的是更新集 XML 則不需要此步驟 - 只需將一行“webexcc.u_customername=actInfo.CustomerName”添加到 propUtils。
示例腳本
參見 with: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 (“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(); } } }返回 sys_id;},輸入:'propUtils2' });
使用新文稿名稱編輯 UI 頁面在 Flow Designer 中創建 CAD 變數
將 CAD 變數添加到 Desktop Layout 中
Demo 螢幕截圖
在 WebexCC 活動表中查看新添加的 CAD 變數。