Webex Contact Center를 ServiceNow와 통합(버전 1 - 레거시)
사전 요구 사항
현재 이 기능은 상담원에게만 해당됩니다.
Webex Contact Center을(를) ServiceNow CRM 콘솔과 통합하기 전에 다음이 있는지 확인합니다.
-
Webex Contact Center에 액세스합니다.
-
https://admin.webex.com 및 Webex Contact Center 관리 포털에 있는 Control Hub에 대한 관리자 액세스. 관리 포털의 URL은 해당 지역에 따라 다릅니다.
-
데스크톱에 액세스할 수 있는 상담원입니다. 데스크톱의 URL은 지역에 따라 다릅니다.
-
콘텐츠 보안 정책 허용 목록에 추가된 다음 도메인에 대한 에이전트 액세스:
-
*.service-now.com
허용 목록을 정의하는 방법에 대한 자세한 내용은 Webex Contact Center에 대한 보안 설정 문서를 참조하세요.
-
-
ServiceNow 개발자 포털 계정. 계정을 만들려면 ServiceNow 개발자 포털( https://developer.servicenow.com/dev.do )로 이동하여 등록 및 빌드 시작을 클릭합니다.
-
https://github.com/CiscoDevNet/webex-contact-center-crm-integrations/tree/main/ServiceNow 에서 다음 파일에 액세스합니다.
-
ServiceNow 업데이트 집합(XML)
-
ServiceNow JSON(Contact Center Desktop Layout)
-
- Webex Contact Center에서 지원하는 ServiceNow 버전은 Vancouver, Utah, Tokya, Washington 및 Xanadu입니다. 자세한 내용은 Webex Contact Center ServiceNow 와의 통합을 참조하세요.
아래 두 가지 방법 중 하나를 따르십시오.
개발자 인스턴스의 경우 개발자 인스턴스 안내서의 단계를 따르는 것이 좋습니다.
엔터프라이즈 라이선스 인스턴스를 소유하고 있는 경우, 엔터프라이즈 라이선스 인스턴스에 대한 지침을 따르십시오.
엔터프라이즈 라이선스 앱을 개발자 샌드박스 인스턴스와 혼합하는 것은 권장하지 않습니다.
다음 섹션에서는 개발자 인스턴스용 ServiceNow 커넥터를 설치하는 단계를 설명합니다.
1 |
ServiceNow 개발자 포털 계정에 로그인하고 관리 콘솔을 엽니다 . |
2 |
[계정 ] 메뉴의 [내 인스턴스 ] 영역에서 [빌드 시작]을 클릭합니다. |
3 |
개발자 인스턴스의 창 왼쪽 상단에 있는 Filter navigator(필터 탐색기 ) 필드에서 Plugins(플러그인)로 이동합니다. |
4 |
Openframe이라는 제목 의 Openframe 플러그인을 검색합니다. 목록을 스크롤해야 할 수도 있습니다. |
5 |
Install(설치 )을 클릭하여 Openframe 플러그인을 설치합니다. |
6 |
Activate Plugin( 플러그인 활성화) 대화 상자에서 Activate(활성화 )를 클릭합니다. |
7 |
플러그인 활성화가 완료되면 플러그인 활성화(Plugin Activation ) 대화 상자에서 Close & Reload Form(양식 닫기 및 다시 로드)을 클릭합니다 . |
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 |
Import Update Set from XML (#에서 업데이트 세트 가져오기) 링크를 클릭합니다. |
4 |
Choose File(파일 선택)을 클릭하고System Update Set XML 파일을 선택한 다음 Upload(업로드 )를 클릭합니다.
업데이트 세트가 검색된 업데이트 세트 목록에 나타나 며 로드 됨 상태입니다.
|
5 |
검색된 업데이트 세트 목록에서 업데이트 세트 파일 이름(링크)을 클릭하여 업데이트 세트를 엽니다. |
6 |
창의 오른쪽 상단에서 업데이트 세트 미리보기를 클릭하여 업데이트 세트에 문제가 있는지 확인합니다. |
7 |
미리 보기가 완료되면 업데이트 세트 미리 보기 대화 상자에서 닫기 를 클릭합니다 . |
8 |
Commit Update Set(업데이트 세트 커밋)를 클릭합니다. |
9 |
Update Set Commit 커밋이 완료되면 Update Set Commit(집합 커밋 업데이트) 대화 상자에서 Close(닫기 )를 클릭합니다 . |
1 |
창의 왼쪽 위에 있는 필터 탐색기 필드에 sys_properties.list |
2 |
시스템 속성 페이지에서 업데이트된 날짜별로 속성을 정렬합니다. 다음 Webex Contact Center 속성을 볼 수 있는지 확인합니다. |
3 |
agentdesktop_url 클릭하여 시스템 속성 agentdesktop_url 페이지를 엽니다 . |
4 |
값 필드에 작업 지역에 따라 Webex Contact Center 데스크톱의 URL을 입력합니다. |
5 |
업데이트를 클릭하여 변경 사항을 저장합니다. |
6 |
(선택 사항) 활동 테이블 이름을 변경하려면 필요에 따라 webexccactivitytable 속성을 편집 합니다. 시스템 속성 페이지에서 webexccactivitytable 을클릭합니다. 필요에 따라 값 필드를 변경합니다. |
7 |
(선택 사항) 다음과 같은 방법으로 사용자 그룹을 추가합니다.
|
1 |
필터 탐색기 필드에서 OpenFrame 이동합니다. |
2 |
새로 만들기를 클릭합니다. |
3 |
URL에 대해 다음 속성을 입력합니다.
|
4 |
URL 필드 오른쪽 에서 잠금 버튼을 클릭하고 agentdesktop.do 를 URL로 추가합니다 |
5 |
(선택 사항) 구성을 할당할 사용자/에이전트 그룹을 선택합니다. |
6 |
제출을 클릭합니다. URL이 링크로 나타납니다. |
7 |
OpenFrame 휴대폰을 사용하기 전에 ServiceNow 사용자 지정 데스크톱 레이아웃 JSON 파일을 Webex Contact Center 관리 포털에 업로드해야 합니다. 자세한 내용은 Webex Contact Center 에서 ServiceNow 데스크톱 레이아웃 설정을 참조하세요. |
1 |
https://github.com/CiscoDevNet/webex-contact-center-crm-integrations/tree/main/ServiceNow 에서 ServiceNow의 데스크톱 레이아웃을 다운로드합니다. |
2 |
필요한 경우, 데스크톱 레이아웃 파일의 속성을 업데이트합니다. |
3 |
Webex Contact Center 관리 포털로 이동합니다. |
4 |
관리 포털 탐색 모음에서 구축 . |
5 |
새 레이아웃을 클릭하고 데스크톱 레이아웃에 대한 세부 정보를 입력합니다. |
6 |
ServiceNow 데스크톱 레이아웃 JSON 파일을 업로드합니다. |
7 |
Save(저장 )를 클릭하여 구성을 저장합니다. 이제 ServiceNow 콘솔 내에서 Webex Contact Center 데스크톱을 시작할 수 있습니다. |
8 |
필터 탐색기 필드에서 서비스 운영 작업 영역으로 이동합니다. |
다음 섹션에서는 사용이 허가된 엔터프라이즈 인스턴스용 ServiceNow 커넥터를 설치하는 단계를 설명합니다.
1 |
ServiceNow 개발자 포털 계정에 로그인하고 관리 콘솔을 엽니다 . |
2 |
[계정 ] 메뉴의 [내 인스턴스 ] 영역에서 [빌드 시작]을 클릭합니다. |
3 |
개발자 인스턴스의 창 왼쪽 상단에 있는 Filter navigator(필터 탐색기 ) 필드에서 Plugins(플러그인)로 이동합니다. |
4 |
Openframe이라는 제목 의 Openframe 플러그인을 검색합니다. 목록을 스크롤해야 할 수도 있습니다. |
5 |
Install(설치 )을 클릭하여 Openframe 플러그인을 설치합니다. |
6 |
Activate Plugin( 플러그인 활성화) 대화 상자에서 Activate(활성화 )를 클릭합니다. |
7 |
플러그인 활성화가 완료되면 플러그인 활성화(Plugin Activation ) 대화 상자에서 Close & Reload Form(양식 닫기 및 다시 로드)을 클릭합니다 . |
8 |
플러그인 활성화를 확인하려면 창의 왼쪽 상단에 있는 필터 탐색기 필드에서 OpenFrame 으로이동합니다. |
9 |
구성을 클릭하고 OpenFrame 플러그인이 OpenFrame 구성 목록에 나타나 는지 확인합니다. |
엔터프라이즈 라이센스가 있는 인스턴스는 ServiceNow Store에서 직접 Webex Contact Center 애플리케이션을 설치할 수 있습니다.
ServiceNow store에서 Webex Contact Center 패키지를 다운로드하여 설치합니다. https://store.servicenow.com/sn_appstore_store.do#!/store/application/6c8e2a4edbc73410e1c75e25ca961947. |
1 |
창의 왼쪽 위에 있는 필터 탐색기 필드에 sys_properties.list |
2 |
시스템 속성 페이지에서 업데이트된 날짜별로 속성을 정렬합니다. 다음 Webex Contact Center 속성을 볼 수 있는지 확인합니다. |
3 |
agentdesktop_url 클릭하여 시스템 속성 agentdesktop_url 페이지를 엽니다 . |
4 |
값 필드에 작업 지역에 따라 Webex Contact Center 데스크톱의 URL을 입력합니다. |
5 |
업데이트를 클릭하여 변경 사항을 저장합니다. |
6 |
(선택 사항) 활동 테이블 이름을 변경하려면 필요에 따라 x_caci_webexcc.webexccactivitytable 속성을 편집 합니다.
|
7 |
(선택 사항) 다음과 같은 방법으로 사용자 그룹을 추가합니다.
|
1 |
https://github.com/CiscoDevNet/webex-contact-center-crm-integrations/tree/main/ServiceNow에서 ServiceNow의 데스크톱 레이아웃을 다운로드합니다. |
2 |
필요한 경우, 데스크톱 레이아웃 파일의 속성을 업데이트합니다. |
3 |
Webex Contact Center 관리 포털로 이동합니다. |
4 |
관리 포털 탐색 모음에서 구축 . |
5 |
새 레이아웃을 클릭하고 데스크톱 레이아웃에 대한 세부 정보를 입력합니다. |
6 |
ServiceNow 데스크톱 레이아웃 JSON 파일을 업로드합니다. |
7 |
Save(저장 )를 클릭하여 구성을 저장합니다. 이제 ServiceNow 콘솔 내에서 Webex Contact Center 데스크톱을 시작할 수 있습니다. |
8 |
필터 탐색기 필드에서 서비스 운영 작업 영역으로 이동합니다. |
1 |
필터 탐색기 필드에서 인시던트 > 열기 인시던트로 이동합니다 . |
2 |
caller(발신자) 필드를 마우스 오른쪽 단추로 클릭하고 Configure Dictionary(사전 구성)를 클릭합니다. |
3 |
쉼표로 구분된 특성 이제 ServiceNow 콘솔 내에서 Webex Contact Center 데스크톱 사용을 시작할 수 있습니다. |
4 |
필터 탐색기 필드에서 서비스 운영 작업 영역으로 이동합니다. |
WebRTC for Salesforce(SFDC) 및 Microsoft Dynamics(MS Dynamics) 커넥터만 사용하여 Agent Desktop에 로그인할 수 있습니다.
ServiceNow 콘솔의 Agent Desktop
아웃다이얼 통화를 걸기 전에 다음을 수행해야 합니다.
-
아웃다이얼 진입점을 생성하고 아웃다이얼 진입점 전략을 설정합니다.
-
상담원 프로파일에 대해 아웃다이얼 ANI를 활성화합니다.
-
아웃다이얼 ANI를 다이얼 번호-진입점 매핑으로 설정합니다.
자세한 내용은 Cisco Webex Contact Center Setup and Administration Guide 의 설정 장을 참조하십시오.
필터 탐색기 필드에서 서비스 운영 작업 영역으로 이동합니다.
Desktop 사용 방법에 대한 자세한 내용은 Webex Contact Center 도움말의 Agent Tab를 참조하십시오 .
개요
이 문서에서는 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 속성을 사용하여 동작 위젯을 활성화합니다. 사용자 지정 데스크톱 레이아웃의 헤드리스 섹션에서 이 속성의 값을 수정해서는 안 됩니다. 이 속성은 사용자 지정 데스크톱 레이아웃의 헤드리스 섹션에서 항상 false로 설정됩니다. 사용자 지정 데스크톱 레이아웃의 패널 섹션에서만 속성 값을 업데이트해야 합니다.
사용자 정의 데스크탑 레이아웃에서 작업 위젯을 활성화하면 다음 작업을 수행할 수 있습니다.
- 활동 레코드 관리 - 활동 레코드 보기/편집을 클릭하여 발신자와 연결된 활동 레코드 목록을 봅니다.
- CRM 개체 연결 - 활동 레코드 에 연결을 클릭하여 통화 유형(인바운드 또는 아웃바운드), 통화 개체, 통화 메모 등과 같은 CRM 개체를 활동 레코드에 추가합니다.
- 인시던트 관리 - 인시던트 만들기를 클릭합니다. 발신자 세부 정보가 미리 채워진 새 인시던트가 생성됩니다. 인시던트에 필요한 업데이트를 수행할 수 있습니다. 요구 사항에 따라 레코드 종류를 인시던트에서 서비스 케이스, HR 모듈 등으로 수정하도록 선택할 수 있습니다. 레코드 유형을 변경하려면 [액션] 위젯 구성에서 typeOfRecord 속성의 값을 수정합니다. 예:
{ "comp": "md-tab-panel", "attributes": { "slot": "패널", "class": "위젯 창" }, "children": [ { "comp": "agentx-custom-desktop", "script": "https://cx-crmconnector.ciscoccservice.com/servicenow/v5/dist/index.js", "properties": { "isWidgetDisplayEnabled": true, "typeOfRecord" : "인시던트 생성" }, "래퍼": { "title": "스노우 액션!", "maximizeAreaName": "앱 최대화 영역" } } ] }
- 실시간 통화 메모 추가 - 텍스트 영역에 통화에 대한 추가 정보를 캡처하고 통화를 요약할 수 있습니다. 이러한 메모가 활동 레코드에 통화 메모로 추가된 것을 볼 수 있습니다.
ServiceNow의 코드 변경
스크립트에 변경 내용이 포함됩니다.-
필터 탐색기로 가서 검색하세요
스크립트 포함
.시스템 UI에서 스크립트 포함 을 선택하세요.
-
이름 을 필터링하고 검색하세요
프로프유틸리티
. -
방법을 변경하세요
사용자GetSysId
대본에서.현재:
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: 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.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; return JSON.stringify(sysidlist); },
-
필터 탐색기로 가서
UI 페이지
를 검색하세요.시스템 UI 아래의 UI 페이지를 선택하세요.
-
이름 을 필터링하고 검색하세요
에이전트데스크탑
. -
변경하다
스크린팝
클라이언트 스크립트의 함수입니다.현재 기능:
// 화면 팝 함수 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) { 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: 'incident', query: '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 Connector용 Webex CC 설치 시 ServiceNow 테이블에 추가 열인 webexcc_imp_activity를 추가하고 sn_openframe_phone_log를 생성하는 프로세스를 자세히 설명합니다.
기본적으로 테이블에는 특정 기본 시스템 필드와 값이 포함되어 있습니다.
WebexCC Flow Designer 내에서 비즈니스별 변수(CAD 변수)를 추가로 생성하고, ServiceNow POST 호출 활동 로그 내부에 CAD 변수를 추가할 수 있으며, 이를 POST 호출 활동 테이블 데이터에 유지할 수 있습니다.
이는 참조 문서일 뿐이며, IVR 내부에 고객 이름을 저장하고 이를 ServiceNow에 게시하는 Customer Name이라는 샘플 CAD 변수에 대해 이 작업을 수행하는 방법을 보여줍니다.
이 구성은 기존 커넥터에 대한 사용자 정의이므로 파트너+고객 ServiceNow 개발자가 이 구성을 구성하고 관리할 것으로 예상됩니다.
Cisco는 커넥터를 사용자 정의하고 확장하는 방법에 대한 기술만 제공합니다.
이 문서를 기준으로 Cisco 팀은 아래에 설명된 기술을 사용하여 활동 로그 및 활동 테이블에 CAD 변수를 추가하는 데 대한 지원을 검증했습니다.
WebexCC IMP 활동에 열 추가
-
ServiceNow 개발자 버전에서 테이블을 편집합니다.
-
필터 탐색기로 가서 스튜디오를 검색하세요.
선택
Webex Contact Center
또는
-
선택하세요
WebexCC IMP 활동
테이블 -
예를 들어 새 열을 추가합니다.
고객 이름
전화 기록에 열 추가
-
전화 기록 표를 편집합니다.
-
예를 들어 새 열을 추가합니다.
고객 이름
.
WebexCC 활동 변환 맵
예를 들어 새 열을 추가합니다. 고객 이름
현장 매핑.
목록 열 개인화
Service Now에서 권장하는 대로 선택 작업을 생성에서 무시로 변경하세요.
전화 기록 목록 구성
스크립트 포함으로 이동
한 줄만 추가하세요 webexcc.u_customername=actInfo.고객 이름
propUtils로.
다음 줄을 보세요: webexcc.u_customername=actInfo.고객이름; 지지하는 의견과 함께.
var propUtils = 클래스.create(); propUtils.prototype = Object.extendsObject(전역. 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 // null을 반환합니다. var grInt = 새로운 GlideRecord('interaction'); grInt.초기화(); grInt.assigned_to= gs.getUserID(); grInt.type= '전화'; grInt.opened_for= opened_for; var sysid=grInt.Insert(); 반환 sysid; }, setWebexcctable: 함수() { 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 = 새로운 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은 "actInfo.CustomerName" 위의 샘플 scirpt showen의 일부인 CustomerName으로도 사용됩니다.
데모 스크린샷
WebexCC 활동 테이블에서 새로 추가된 CAD 변수를 봅니다.
흐름 디자이너에 대한 CAD 변수 만들기
인시던트 긴급성인시던트 영향
Service Now 스크립트 업데이트
스크립트 업데이트에는 다음이 포함됩니다.
-
필터 탐색기로 이동하여 스크립트 포함을 검색합니다.
시스템 UI 에서 스크립트 포함옵션을 선택합니다.
-
propUtils를 사용하여 이름을
필터링합니다
. -
방법 변경
사용자GetSysId
를 입력합니다 .현재 스크립트:
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= '전화'; 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('상태','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='에서 수신한 통화 '+ this.getParameter('value'); sysidlist.incsysid=inc.Insert(); } } var grInt = 새로운 GlideRecordSecure('interaction'); grInt.초기화(); grInt.assigned_to= gs.getUserID(); grInt.type= '전화'; grInt.opened_for= opened_for; var sysid=grInt.Insert(); sysidlist.sysid=sysid; 반환 JSON.stringify(sysidlist);//sysid; },
-
필터 탐색기로 이동하여 UI 페이지를
검색합니다
.시스템 UI 에서 UI 페이지옵션을 선택합니다.
-
UI 페이지를 이름으로 필터링하고 agentdesktop
을
검색합니다. -
변경
스크린팝
함수를 입력합니다.현재 기능:
화면 팝 함수 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({ 엔터티: 'interaction', 쿼리: '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 활동테이블
업데이트를 클릭합니다.
에 새 열을 추가합니다. 전화 로그
테이블
를 엽니다. 전화 로그
테이블
WebexCC 활동 변환 맵
열기 변환 맵
필터 탐색기에서
클릭 WebexCC 활동 TransformMap
업데이트를 클릭합니다.
스크립트 포함에 대한 변경 내용
-
필터 탐색기로 이동하여 "스크립트 포함"을 검색합니다.
시스템 UI에서 스크립트 포함 을 선택합니다.
-
이름 필터링 기준
propUtils
. -
방법 변경
setWebexcctable
.인시던트에 대한 새 샘플 코드:
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=""; 삭제 행위정보['interaction_sys_id']; 삭제 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='상태를 닫힘으로 업데이트합니다.'; 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('상태','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=인턴; webexcc.u_interactionsnumber=인테넘; sys_id=webexcc.Insert(); } 반환 sys_id; },
UI 페이지의 메서드 변경 내용
-
필터 탐색기로 이동하여
UI 페이지
시스템 UI 에서 UI 페이지옵션을 선택합니다.
-
UI 페이지를 이름으로 필터링하고 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({ 엔터티: '인시던트', 쿼리: '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("이름", 이름); } 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; }
비즈니스 규칙의 샘플 구성Sample configuration of the business rule
클라이언트 통화 가능 활성화
인시던트 에 대한 컴퓨터 텔레포니 통합(CTI) 처리가 True로 표시됩니다.
사용자 지정 CTI 규칙 " cti.do?sysparm_cti_rule=createIncident&sysparm_caller_phone="로 스크린팝 URL을 업데이트합니다.
'name ' 이함수의 이름인 sysparm_cti_rule=name 은 기본 스크립트를 사용하는 대신 CTI 처리를 위해 호출됩니다.
클라이언트 호출 가능 으로 표시된 sys_script항목에서 함수를 정의합니다.
함수에서 GlideRecords를 Insert, 업데이트 또는 삭제해야 하는 경우 별도의 비클라이언트 호출 가능 함수를 호출하여 업데이트를 수행합니다.
스크립트를 클라이언트 호출 가능으로 만들려면 sys_script 항목이 표시될 때 표시되는 양식에서 클라이언트 호출 가능 확인란을 선택해야 합니다.
클라이언트 호출 가능 확인란은 기본적으로 표시되지 않습니다. 보려면 톱니바퀴 아이콘과 슬러시 버킷 메커니즘을 사용하여 양식에 표시되는 필드를 수정해야 합니다.
사용자 정의 # 2-Webex Contact Center 활동 테이블에 CAD 변수 추가
개요이 문서에서는 ServiceNow 테이블에 Webex CC for ServiceNow CRM 커넥터를 설치할 때 만들어지는 webexcc_activity 열을 추가하는 프로세스에 대해 자세히 설명합니다.
기본적으로 테이블에는 기본 시스템 필드와 값이 포함되어 있습니다.
WebexCC 플로우 디자이너 내에서 더 많은 비즈니스 특정 변수(CAD 변수)를 만들고 해당 CAD 변수를 ServiceNow POST 통화 활동 로그에 추가하며 이를 POST 통화 활동 테이블 데이터에 유지할 수 있습니다.
-
이 설명서는 참조 설명서일 뿐이며 IVR 내에 고객 이름을 저장하고 ServiceNow에 게시하는 Customer Name이라는 샘플 CAD 변수에 대해 이 작업을 수행하는 방법을 보여 줍니다.
-
파트너+고객 ServiceNow 개발자는 기존 커넥터에 대한 사용자 지정이므로 이 구성을 구성하고 관리합니다.
-
Cisco에서는 커넥터를 사용자 지정하고 확장하는 방법에 대한 기술만 제공합니다.
-
이 문서를 기준으로 Cisco 팀은 아래에 설명된 기술을 사용하여 활동 로그 및 활동 테이블에 CAD 변수를 추가하는 것에 대한 지원을 검증했습니다.
개발자 버전의 ServiceNow에서 테이블을 편집합니다.
스튜디오
이동합니다.WebexCC 활동 테이블을 선택합니다 .
예를 들면 CustomerName과 같습니다.
WebexCC 활동에 대한목록 레이아웃을 선택합니다.
업데이트 집합 XML - propUtils에 "webexcc.u_customername=actInfo.CustomerName"을 추가하는 데 한 줄만 필요한 경우 이 단계가 필요하지 않습니다.

샘플 스크립트
줄을 참조하십시오.webexcc.u_customername=actInfo.CustomerName; 지원 코멘트와 함께.
var propUtils2 = 클래스.create(); propUtils2.prototype = Object.extendsObject(전역. AbstractAjaxProcessor,{ getWebexccProp: 함수() { 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: 함수() { var sys_id=0; var actInfo = JSON.parse(this.getParameter('actInfo')); var webexcc = 새로운 GlideRecordSecure(gs.getProperty('x_caci_ webexcc.webexccactivitytable')); webexcc.addQuery("호출 객체", 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 = 새로운 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(acting string),null,2); inc.comments =jsonPretty; inc.update(); } } } 반환 sys_id; }, 유형: 'propUtils2' });
새 스크립트 이름으로 UI 페이지 편집
흐름 디자이너에서 CAD 변수 만들기
CAD 변수를 데스크탑 레이아웃에 추가합니다
데모 스크린샷
WebexCC 활동 테이블에서 새로 추가된 CAD 변수를 봅니다.
