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 관리 포털에 대한 관리자 액세스. 관리 포털의 URL은 해당 지역에 따라 다릅니다.
-
데스크톱에 액세스할 수 있는 상담원입니다. 데스크톱의 URL은 지역에 따라 다릅니다.
-
콘텐츠 보안 정책 허용 목록에 추가된 다음 도메인에 대한 에이전트 액세스:
-
*.service-now.com
허용 목록을 정의하는 방법에 대한 자세한 내용은 Webex 컨택 센터에 대한 보안 설정 문서를참조하십시오.
-
-
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입니다. 자세한 내용은 ServiceNow 와 컨택 센터 통합을 참조하십시오Webex
아래 두 가지 방법 중 하나를 따르십시오.
개발자 인스턴스의 경우 개발자 인스턴스 안내서의 단계를 따르는 것이 좋습니다.
엔터프라이즈 라이선스 인스턴스를 소유하고 있는 경우, 엔터프라이즈 라이선스 인스턴스에 대한 지침을 따르십시오.
엔터프라이즈 라이선스 앱을 개발자 샌드박스 인스턴스와 혼합하는 것은 권장하지 않습니다.
다음 섹션에서는 개발자 인스턴스용 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 |
[업데이트 세트 가져오기XML 링크를 클릭합니다. |
4 |
Choose File(파일 선택)을 클릭하고System Update Set XML 파일을 선택한 다음 Upload(업로드 )를 클릭합니다.
업데이트 세트가 검색된 업데이트 세트 목록에 나타나 며 로드 됨 상태입니다.
|
5 |
검색된 업데이트 세트 목록에서 업데이트 세트 파일 이름(링크)을 클릭하여 업데이트 세트를 엽니다. |
6 |
창의 오른쪽 상단에서 업데이트 세트 미리 보기 를 클릭하여 업데이트 세트에 문제가 있는지 확인하세요. |
7 |
미리 보기가 완료되면 업데이트 세트 미리 보기 대화 상자에서 닫기 를 클릭합니다. |
8 |
업데이트 세트 커밋을 클릭합니다. |
9 |
업데이트 세트 커밋이 완료되면 업데이트 세트 커밋 대화 상자에서 닫기 를 클릭합니다. |
1 |
창의 왼쪽 위에 있는 필터 탐색기 필드에 |
2 |
시스템 속성 페이지에서 속성을 업데이트 날짜순으로 정렬합니다. 다음 Webex 컨택센터 속성을 볼 수 있는지 확인하세요. |
3 |
agentdesktop_url 을 클릭하여 시스템 속성 agentdesktop_url 페이지를 엽니다. |
4 |
값 필드에 운영 지역에 따른 Webex 컨택센터 데스크톱의 URL을 입력합니다. |
5 |
업데이트 를 클릭하여 변경 사항을 저장하세요. |
6 |
(선택 사항) 활동 테이블 이름을 변경하려면 필요에 따라 webexccactivitytable 속성을 편집합니다. 시스템 속성 페이지에서 webexccactivitytable을 클릭합니다. 필요에 따라 값 필드를 변경하세요. |
7 |
(선택 사항) 다음 방법으로 사용자 그룹을 추가합니다.
|
1 |
필터 탐색기 필드에서 으로 이동합니다. |
2 |
새로 만들기를 클릭합니다. |
3 |
URL에 대해 다음 속성을 입력하세요.
|
4 |
URL 필드 오른쪽에 있는 잠금 버튼을 클릭하고 URL로 |
5 |
(선택 사항) 구성을 할당할 사용자/에이전트 그룹을 선택합니다. |
6 |
제출을 클릭합니다. URL이 링크로 나타납니다. |
7 |
OpenFrame 전화를 사용하기 전에 ServiceNow 사용자 지정 데스크톱 레이아웃 JSON 파일을 Webex 컨택센터 관리 포털에 업로드해야 합니다. 자세한 내용은 Webex 컨택센터에서 ServiceNow 데스크톱 레이아웃 설정을 참조하세요. |
1 |
ServiceNow의 데스크톱 레이아웃을 다운로드하려면 https://github.com/CiscoDevNet/webex-contact-center-crm-integrations/tree/main/ServiceNow를 클릭하세요. |
2 |
필요한 경우 데스크톱 레이아웃 파일의 속성을 업데이트합니다. |
3 |
Webex 컨택센터 관리 포털로 이동하세요. |
4 |
관리 포털 탐색 모음에서 을 선택합니다. |
5 |
새 레이아웃 을 클릭하고 데스크톱 레이아웃에 대한 세부 정보를 입력합니다. |
6 |
ServiceNow Desktop Layout JSON 파일을 업로드합니다. |
7 |
저장 을 클릭하여 구성을 저장합니다. 이제 ServiceNow 콘솔에서 Webex 컨택센터 데스크톱을 시작할 수 있습니다. |
8 |
필터 탐색기 필드에서 으로 이동합니다. |
다음 섹션에서는 라이선스가 있는 엔터프라이즈 인스턴스에 ServiceNow 커넥터를 설치하는 단계를 설명합니다.
1 |
ServiceNow 개발자 포털 계정에 로그인하고 관리 콘솔을 엽니다. |
2 |
계정 메뉴의 내 인스턴스 영역에서 빌드 시작을 클릭합니다. |
3 |
개발자 인스턴스에서 창의 왼쪽 위에 있는 필터 탐색기 필드에서 플러그인으로 이동합니다. |
4 |
Openframe이라는 제목의 Openframe 플러그인을 검색하세요. 목록을 스크롤해야 할 수도 있습니다. |
5 |
설치 를 클릭하여 Openframe 플러그인을 설치하세요. |
6 |
플러그인 활성화 대화 상자에서 활성화를 클릭합니다. |
7 |
플러그인 활성화가 완료되면 플러그인 활성화(Plugin Activation ) 대화 상자에서 Close & Reload Form(양식 닫기 및 다시 로드)을 클릭합니다 . |
8 |
플러그인 활성화를 확인하려면 창의 왼쪽 상단에 있는 필터 탐색기 필드에서 OpenFrame으로 이동합니다. |
9 |
구성을 클릭하고 OpenFrame 플러그인이 OpenFrame 구성 목록에 나타나 는지 확인합니다. |
엔터프라이즈 라이센스가 있는 인스턴스는 ServiceNow Store에서 직접 Webex Contact Center 애플리케이션을 설치할 수 있습니다.
ServiceNow store: https://store.servicenow.com/sn_appstore_store.do#!/store/application/6c8e2a4edbc73410e1c75e25ca961947에서 Webex Contact Center 패키지를 다운로드하여 설치합니다. |
1 |
창의 왼쪽 위에 있는 필터 탐색기 필드에 sys_properties.list |
2 |
시스템 속성 페이지에서 업데이트된 날짜별로 속성을 정렬합니다. 다음과 같은 Webex Contact Center 등록 정보를 볼 수 있는지 확인합니다. |
3 |
agentdesktop_url 클릭하여 시스템 속성 agentdesktop_url 페이지를 엽니다 . |
4 |
값 필드에 작업 지역에 따라 Webex Contact Center Desktop의 URL을 입력합니다. |
5 |
업데이트를 클릭하여 변경 사항을 저장합니다. |
6 |
(선택 사항) 활동 테이블 이름을 변경하려면 필요에 따라 x_caci_webexcc.webexccactivitytable 속성을 편집 합니다.
|
7 |
(선택 사항) 다음과 같은 방법으로 사용자 그룹을 추가합니다.
|
1 |
필터 탐색기 필드에서 OpenFrame 이동합니다. |
2 |
새로 만들기를 클릭합니다. |
3 |
URL에 대해 다음 속성을 입력합니다.
|
4 |
URL 필드 오른쪽 에서 잠금 버튼을 클릭하고 x_caci_webexcc_agentdesktop.do 를 URL로 추가합니다 |
5 |
(선택 사항) 구성을 할당할 사용자/에이전트 그룹을 선택합니다. |
6 |
제출을 클릭합니다. URL이 링크로 나타납니다. |
7 |
필터 탐색기 필드에서 서비스 운영 작업 영역으로 이동합니다. |
8 |
(선택 사항) 사용자 그룹 목록에서 Webex Contact Center 데스크톱에 액세스할 수 있는 사용자 그룹을 사용 가능 에서 선택됨 으로이동합니다. |
9 |
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 Management Portal로 이동합니다. |
4 |
관리 포털 탐색 모음에서 구축 . |
5 |
새 레이아웃을 클릭하고 데스크톱 레이아웃에 대한 세부 정보를 입력합니다. |
6 |
ServiceNow 데스크톱 레이아웃 JSON 파일을 업로드합니다. |
7 |
Save(저장 )를 클릭하여 구성을 저장합니다. 이제 ServiceNow 콘솔 내에서 Webex Contact Center Desktop을 시작할 수 있습니다. |
8 |
필터 탐색기 필드에서 서비스 운영 작업 영역으로 이동합니다. |
1 |
필터 탐색기 필드에서 인시던트 > 열기 인시던트로 이동합니다 . |
2 |
caller(발신자) 필드를 마우스 오른쪽 단추로 클릭하고 Configure Dictionary(사전 구성)를 클릭합니다 . |
3 |
쉼표로 구분된 특성 이제 ServiceNow 콘솔 내에서 Webex Contact Center Desktop 사용을 시작할 수 있습니다. |
4 |
필터 탐색기 필드에서 서비스 운영 작업 영역으로 이동합니다 . |
ServiceNow 콘솔의 Agent Desktop
아웃다이얼 통화를 걸기 전에 다음을 수행해야 합니다.
-
아웃다이얼 진입점을 생성하고 아웃다이얼 진입점 전략을 설정합니다.
-
상담원 프로파일에 대해 아웃다이얼 ANI를 활성화합니다.
-
아웃다이얼 ANI를 다이얼 번호-진입점 매핑으로 설정합니다.
자세한 내용은 Cisco Webex Contact Center Setup and Administration Guide 의 설정 장을 참조하십시오.
필터 탐색기 필드에서 서비스 운영 작업 영역으로 이동합니다.
데스크톱 사용 방법에 대한 내용은 Webex 컨택 센터 도움말에서 에이전트 탭을 참조하십시오 .
개요
이 문서에서는 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 에서 스크립트 포함 을선택합니다.
-
이름을 필터링하고
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.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); },
-
필터 네비게이터로 이동하여 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('필드', '전화'); gaout.addParam('값', callerani); gaout.getXMLWait(); var sysid = gaout.getAnswer(); openFrameAPI.openServiceNowForm({ 엔터티: 'interaction', 쿼리: '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(); // 인시던트 관련 변경 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 테이블에 추가 열을 추가하는 프로세스(ServiceNow CRM 커넥터용 Webex CC 설치 시 webexcc_imp_activity 및 sn_openframe_phone_log 만들기에 대해 자세히 설명합니다.
기본적으로 테이블에는 기본 제공 시스템 필드와 값이 포함되어 있습니다.
WebexCC 플로우 디자이너 내에서 더 많은 비즈니스 특정 변수(CAD 변수)를 생성하고 ServiceNow 통화 후 활동 로그 내에 CAD 변수를 추가할 수 있을 뿐만 아니라 통화 후 활동 테이블 데이터에 이를 유지할 수 있습니다.
이 설명서는 참조 설명서일 뿐이며, 고객 이름을 IVR 내에 저장하고 ServiceNow에 게시하는 Customer Name이라는 샘플 CAD 변수에 대해 이 작업을 수행하는 방법을 보여 줍니다.
파트너+고객 ServiceNow 개발자는 기존 커넥터에 대한 사용자 지정이므로 이 구성을 구성하고 관리할 것으로 예상됩니다.
Cisco는 커넥터를 사용자 정의하고 확장하는 방법에 대한 기술만 제공합니다.
이 문서를 기준으로 Cisco 팀은 아래에 설명된 기술을 사용하여 활동 로그 및 활동 테이블에 CAD 변수를 추가하는 것에 대한 지원을 검증했습니다.
WebexCC IMP 활동에 열 추가
-
개발자 버전의 ServiceNow에서 테이블을 편집합니다.
-
필터 네비게이터로 이동하여 스튜디오를 검색합니다.
선택
Webex Contact Center
또는
-
동일한 수준의 다른 테넌트 폴더를 트리 구조
WebexCC IMP 활동
테이블 -
새 열을 추가합니다(예:
고객 이름
전화 로그에 열 추가
-
전화기 로그 테이블을 편집합니다.
-
새 열을 추가합니다(예:
고객 이름
.
WebexCC 활동 변환 맵
새 열을 추가합니다(예: 고객 이름
필드 매핑.
목록 열 개인 설정
Service Now에서 권장하는 대로 선택 작업을 만들기에서 무시로 변경합니다.
전화 로그 목록 구성
스크립트 포함으로 이동
한 줄만 추가 webexcc.u_customername=actInfo.CustomerName
를 propUtils로 설정합니다.
샘플 스크립트
행을 참조하십시오. webexcc.u_customername=actInfo.CustomerName; 지원 코멘트와 함께.
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 활동테이블 새 열 추가 - InteractionsNumber 새 열 추가 - IncidentNumber
업데이트를 클릭합니다.
에 새 열을 추가합니다. 전화 로그
테이블
를 엽니다. 전화 로그
테이블
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(Computer Telephony Integration ) 처리가 True로 표시됩니다.
사용자 지정 CTI 규칙 " cti.do?sysparm_cti_rule=createIncident&sysparm_caller_phone="로 스크린팝 URL을 업데이트합니다.
sysparm_cti_rule =name 여기서 'name'은 호출될 함수 의 이름입니다CTI 기본 스크립트를 사용하는 대신 처리합니다 .
클라이언트 호출 가능 으로 표시된 sys_script항목에서 함수를 정의합니다.
함수에서 GlideRecords를 삽입, 업데이트 또는 삭제해야 하는 경우 별도의 비클라이언트 호출 가능 함수를 호출하여 업데이트를 수행합니다.
스크립트를 클라이언트 호출 가능으로 만들려면 sys_script 항목이 표시될 때 표시되는 양식에서 클라이언트 호출 가능 확인란을 선택해야 합니다.
클라이언트 호출 가능 확인란은 기본적으로 표시되지 않습니다. 보려면 톱니바퀴 아이콘과 슬러시 버킷 메커니즘을 사용하여 양식에 표시되는 필드를 수정해야 합니다.
사용자 정의 # 2 - 컨택 센터 활동 테이블에 CAD 변수 Webex 추가
개요이 문서에서는 ServiceNow CRM 커넥터용 Webex CC 설치 시 만들어지는 webexcc_activity ServiceNow 테이블에 열을 추가하는 프로세스에 대해 자세히 설명합니다.
기본적으로 테이블에는 기본 시스템 필드와 값이 포함되어 있습니다.
WebexCC 플로우 디자이너 내에서 더 많은 비즈니스 특정 변수(CAD 변수)를 만들어 ServiceNow 통화 후 활동 로그 내에 CAD 변수를 추가하고 이를 통화 후 활동 테이블 데이터에 유지할 수 있습니다.
-
이 설명서는 참조 설명서일 뿐이며 고객 이름을 IVR 내에 저장하고 ServiceNow에 게시하는 Customer Name이라는 샘플 CAD 변수에 대해 이 작업을 수행하는 방법을 보여 줍니다.
-
파트너+고객 ServiceNow 개발자는 기존 커넥터에 대한 사용자 지정이므로 이 구성을 구성하고 관리합니다.
-
Cisco는 커넥터를 사용자 정의하고 확장하는 방법에 대한 기술만 제공합니다.
-
이 문서를 기준으로 Cisco 팀은 아래에 설명된 기술을 사용하여 활동 로그 및 활동 테이블에 CAD 변수를 추가하는 것에 대한 지원을 검증했습니다.
개발자 버전의 ServiceNow에서 테이블을 편집합니다.
Studio
이동합니다.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 변수를 봅니다.