ServiceNow에 Webex Contact Center 통합 (버전 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 개발자 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입니다. 자세한 정보는 ServiceNow에 Webex Contact Center 통합을 참조하십시오.
아래 두 가지 방법 중 하나를 따르십시오.
개발자 인스턴스의 경우, 개발자 인스턴스 안내서에 있는 단계를 따르는 것이 좋습니다.
기업 라이센스 인스턴스를 소유하고 있는 경우, 기업 라이센스 인스턴스에 대한 지침을 따르십시오.
기업 라이센스 앱을 개발자 샌드박스 인스턴스와 혼합하는 것은 권장하지 않습니다.
다음 섹션에서는 개발자 인스턴스에 대해 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 데스크탑의 URL을 입력합니다. |
5 |
업데이트를 클릭하여 변경 사항을 저장합니다. |
6 |
(선택 사항) 활동 표 이름을 변경하려면 필요한 webexccactivitytable 등록 정보를 편집합니다. 시스템 등록 정보 페이지에서 webexccactivitytable을 클릭합니다. 필요에 따라 값 필드를 변경합니다. |
7 |
(선택 사항) 다음 방법으로 사용자 그룹을 추가합니다.
|
1 |
필터 네 비게이터 필드에서 |
2 |
새로 만들기를 클릭합니다. |
3 |
URL에 대해 다음 속성을 입력합니다.
|
4 |
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 |
저장을 클릭하여 구성을 저장합니다. 이제 ServiceNow 콘솔 에서 Webex Contact Center 데스크탑을 시작할 수 있습니다. |
8 |
내비게이터 필터 필드에서 을 탐색합니다. |
다음 섹션에서는 라이센스가 있는 기업 인스턴스에 대해 ServiceNow 커넥터를 설치하는 단계를 설명합니다.
1 |
ServiceNow 개발자 포털 계정에 로그인하고 관리 콘솔을 엽니다. |
2 |
계정 메뉴 의 내 인스턴스 영역에 있는 빌딩 시작 을 클릭합니다. |
3 |
개발자 인스턴스의 창의 상단 왼쪽에 있는 내비게이터 필터 필드에서 플러그인을 탐색합니다. |
4 |
Openframe 제목의 Openframe 플러그인 을 검색합니다. 목록을 스크롤해야 할 수도 있습니다. |
5 |
설치 를 클릭하여 Openframe 플러그인을 설치합니다. |
6 |
플러그인 활성화 대화 상자 활성화를 클릭합니다. |
7 |
플러그인 활성화가 완료되면 플러그인 활성화 대화 상자에서 양식 닫기 및 다시 로드 를 클릭합니다. |
8 |
플러그인 활성화를 확인하기 위해 창의 상단 왼쪽에 있는 필터 네비게이터 필드에서 OpenFrame을 탐색합니다. |
9 |
구성 을 클릭하고 OpenFrame 구성 목록에 OpenFrame 플러그인이 나타나는지 않습니다. |
기업 라이센스가 있는 인스턴스는 ServiceNow 스토어에서 직접 Webex Contact Center 응용프로그램을 설치할 수 있습니다.
ServiceNow 스토어에서 Webex Contact Center 패키지를 다운로드하고 설치합니다. https://store.servicenow.com/sn_appstore_store.do#!/store/application/6c8e2a4edbc73410e1c75e25ca961947. |
1 |
창의 상단 왼쪽에 있는 필터 네비게이터 필드에서 .list를 |
2 |
시스템 등록 정보 페이지에서 업데이트된 날짜별로 등록 정보를 정렬합니다. 다음 Webex Contact Center 등록 정보를 볼 수 있도록 합니다. |
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 관리 포털에 업로드해야 합니다. 자세한 정보는 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 |
저장을 클릭하여 구성을 저장합니다. 이제 ServiceNow 콘솔 에서 Webex Contact Center 데스크탑을 시작할 수 있습니다. |
8 |
내비게이터 필터 필드에서 을 탐색합니다. |
1 |
내비게이터 필터 필드에서 문제 > 미해결 문제를 탐색합니다. |
2 |
발신자 필드를 오른쪽 클릭하고 사전 구성을 클릭합니다. |
3 |
콤마로 구분된 속성 이제 ServiceNow 콘솔 내에서 Webex Contact Center 데스크탑을 사용하기 시작할 수 있습니다. |
4 |
내비게이터 필터 필드에서 을 탐색합니다. |
현재 데스크탑 옵션(WebRTC)을 사용하여 Agent Desktop에 로그인을 지원하지 않습니다.
ServiceNow 콘솔의 Agent Desktop
개요
이 문서에서는 ServiceNow CRM 커넥터에 대한 비즈니스 규칙을 사용자 정의하는 다양한 방법을 다룹니다. 여기에는 ServiceNow에 국한된 비즈니스 규칙에 따라 사용 사례를 사용자 정의할 수 있는 방법에 대해 자세히 설명합니다.
고객은 ServiceNow에서 이러한 사용 사례를 직접 관리해야 합니다. 구성은 Webex Contact Center 소프트웨어 또는 전문 지식이 아닌 ServiceNow에 따라 다릅니다.
이는 비즈니스 규칙을 수정하는 데 도움이 되는 참조 문서입니다. 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", "속성": { "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" : "문제 만들기" }, "래퍼": { "title": "SNOW Actions !", "maximizeAreaName": "app-maximize-area" } } ] }
- 실시간 통화 메모 추가—텍스트 영역에서 통화에 대한 추가 정보를 캡처하고 통화를 후속 작업할 수 있습니다. 활동 기록에서 통화 메모로 추가된 해당 메모를 볼 수 있습니다.
ServiceNow에서 코드 변경
스크립트에 변경 사항이 포함됩니다.-
필터 내비게이터로 이동하고
스크립트 포함
을 검색합니다.시스템 UI 아래에서 스크립트 포함을 선택합니다.
-
이름 을 필터링하고
propUtils
를 검색합니다. -
스크립트
에서 UserGetSysId 메서드를 변경합니다.큐렌트:
사용자 GetSysId : 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(); return sysid; },
문제에 대한 새로운 샘플 코드:
사용자 GetSysId : 함수 () { var opened_for; //문제 관련 변경 var sysidlist = {}; var 사용자 = 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(); 만약 (inc.next()) { sysidlist.incsysid=inc.getUniqueValue(); }else{ inc.initialize(); inc.caller_id=opened_for분류: INC.contact_type='전화'; 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; return JSON.stringify(sysidlist); },
-
내비게이터 필터로 이동하고
UI 페이지
를 검색합니다.시스템 UI 아래에서 UI 페이지를 선택합니다.
-
이름 을 필터링하고
agentdesktop
을 검색합니다. -
클라이언트 스크립트
에서 스크린팝 기능을 변경합니다.현재 기능:
// 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: 상호 작업', 쿼리: '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: '문제', 쿼리: '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 표에 추가 열을 추가하는 과정을 자세히 설명하고 webexcc_imp_activity ServiceNow CRM 커넥터용 Webex CC를 설치할 때 sn_openframe_phone_log 만듭니다.
기본적으로 테이블에는 상자 시스템 필드 및 값이 포함되어 있습니다.
WebexCC 흐름 디자이너 내에서 더 많은 비즈니스 특정 변수(CAD 변수)를 만들고 ServiceNow 통화 후 활동 로그 내에 CAD 변수를 추가하고 통화 후 활동 테이블 데이터에도 유지할 수 있습니다.
이는 참조 문서에만 해당하며, IVR 내에 고객 이름을 저장하고 이를 ServiceNow에 게시하는 고객 이름이라는 샘플 CAD 변수에 대해 이 작업을 수행하는 방법을 보여줍니다.
파트너+고객 ServiceNow 개발자는 이 구성을 구성하고 관리할 예정입니다. 이는 기존의 커넥터에 대한 사용자 정의이기 때문입니다.
Cisco는 커넥터를 사용자 정의하고 확장하는 방법에 대한 기술만 제공합니다.
이 문서에서 Cisco 팀은 아래에 설명된 기술을 사용하여 활동 로그 및 활동 표에 CAD 변수를 추가하는 지원의 유효성을 검증했습니다.
WebexCC IMP 활동에 열 추가
-
ServiceNow의 개발자 버전에서 표를 편집합니다.
-
필터 내비게이터로 이동하고 스튜디오를 검색합니다.
Webex Contact Center
선택또는
-
WebexCC IMP 활동
표를 선택합니다. -
새로운 열을 추가합니다. 예:
CustomerName
전화기 로그에 열 추가
-
전화기 로그 테이블을 편집합니다.
-
새로운 열을 추가합니다. 예:
CustomerName
.
WebexCC 활동 변환 맵
CustomerName
필드 매핑 등 새로운 열을 추가합니다.
목록 열 개인화
지금 서비스에서 권장하는 대로 선택 작업을 만들기에서 무시로 변경합니다.
전화기 로그 목록 구성
스크립트 포함으로 이동
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'); 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 / 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 : 함수 () { 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.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"수저.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(); } } } return sys_id; }, 유형: 'propUtils' });
흐름 디자이너에서 CAD 변수 만들기
데스크탑 레이아웃에 CAD 변수 추가
예제
"CadName1:SnowField1,CadName2:SnowField2" CadName1은 CustomerName입니다. SnowField1은 "actInfo.CustomerName" 위의 샘플 scirpt showen의 일부인 CustomerName으로도 사용됩니다.
데모 스크린샷
WebexCC 활동 표에서 새롭게 추가된 CAD 변수를 확인합니다.
흐름 디자이너에 대한 CAD 변수 만들기
문제 긴급문제 영향
지금 서비스 스크립트 업데이트
스크립트에 대한 업데이트 포함
-
필터 내비게이터로 이동하고
스크립트 포함
을 검색합니다.시스템 UI 아래에서 스크립트 포함 옵션을 선택합니다.
-
propUtils 로
이름
을 필터링합니다. -
스크립트
필드에서 UserGetSysId 메서드를 변경합니다.현재 스크립트:
사용자 GetSysId : 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(); return sysid; },
문제에 대한 새로운 샘플 코드:
사용자 GetSysId : 함수 () { var opened_for; var sysidlist = {}; var 사용자 = 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(); 만약 (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; return 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: 상호 작업', 쿼리: 'sys_id='+sysid }); }
문제에 대한 샘플 코드:
// screen pop function screenpop(callerani,callSessionInfo) { var Impact=3; if(callSessionInfo.callAssociatedData.Impact != null && callSessionInfo.callAssociatedData.Impact.value; } var IncUrgency=3; if(callSessionInfo.callAssociatedData.Urgency != null && callSessionInfo.callAssociatedData.Urgency != undefined) { IncUrgency=callSessionInfo.callAssociatedData.Urgency != undefined) { IncUrgency=callSessionInfo.callAssociatedData.Urgency.value; } if(callerani===callSessionInfo.callAssociatedData.Urgency.value){ callerani=stripPrefixes(callerani); gaout.addParam('sysparm_name', 'UserGetSysId'); gaout.addParam('field', 'phone'); '문제', 쿼리: '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 새 열 추가 - IncidentNumber
업데이트를 클릭합니다.
전화 로그
테이블에 새로운 열 추가
전화 로그
표 열기
WebexCC 활동 변환 맵
필터 내비게이터에서 변환 맵
열기
WebexCC 활동 변환 맵
을 클릭합니다.
업데이트를 클릭합니다.
스크립트에 대한 변경 사항 포함
-
필터 내비게이터로 이동하고 "스크립트 포함"을 검색합니다.
시스템 UI 아래에서 스크립트 포함을 선택합니다.
-
propUtils 로
이름
을 필터링합니다. -
메서드
setWebexcctable
을 변경합니다.문제에 대한 새로운 샘플 코드:
setWebexcctable : 함수 () { 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()) { //사고 기록의 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 ); 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("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= 강조; sys_id=webexcc.insert(); } 반환 sys_id; },
UI 페이지의 방법 변경
-
내비게이터 필터로 이동하고
UI 페이지
검색시스템 UI 아래에서 UI 페이지 옵션을 선택합니다.
-
이름 으로
UI 페이지
를 필터링하고 에이전트데스크탑을 검색합니다. -
스크립트에서
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 sysObjson=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 커넥터에 대한 모든 새로운 통화에 대해 새로운 문제 기록을 만듭니다.
필터 내비게이터에서 비즈니스 규칙 검색
새로 만들기를 클릭합니다.
참조용용 샘플 코드:
함수 customcti() { var url = null; var name = sysparm_caller_name이드 = sysparm_caller_id; var 전화 = sysparm_caller_phone; var taskID = sysparm_task_id; var fQuery = sysparm_query(fQuery == null) fQuery = ''; var view = sysparm_view; 경우 (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"; (fQuery != null) url += "&sysparm_query=" + fQuery; } 응답 = url; return url; } 함수 UserGetSysId(필드, 값) { var user = new GlideRecord("sys_user"); user.addQuery(field, value); user.query(); (user.next())가 사용자를 반환하는 경우.sys_id그렇지 않으면 null을 반환합니다. }
비즈니스 규칙의 샘플 구성
클라이언트 통화 가능 활성화
문제에 대해 CTI(Computer Telephony Integration) 처리 가 True로 표시됩니다.
사용자 정의 CTI 규칙으로 화면 팝 url 업데이트 " 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 CRM 커넥터용 Webex CC를 설치할 때 생성되는 webexcc_activity ServiceNow 표에 추가 열을 추가하는 과정에 대해 자세히 설명합니다.
기본적으로 테이블에는 사용할 수 없는 시스템 필드와 값이 포함되어 있습니다.
WebexCC 흐름 디자이너 내에 더 많은 비즈니스 특정 변수(CAD 변수)를 만들고 ServiceNow 통화 후 활동 로그 내에 해당 CAD 변수를 추가하고, 이를 통화 후 활동 테이블 데이터에 유지할 수 있습니다.
-
이는 참조 문서에만 해당하며, IVR 내에 고객 이름을 저장하고 이를 ServiceNow에 게시하는 고객 이름이라는 샘플 CAD 변수에 대해 이 작업을 수행하는 방법을 보여줍니다.
-
파트너+고객 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'); return JSON.stringify(webexccprop); }, 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.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"수저.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(); } } } return sys_id; }, 유형: 'propUtils2' });
새로운 스크립트 이름으로 UI 페이지 편집흐름 디자이너에서 CAD 변수 만들기
데스크탑 레이아웃에 CAD 변수 추가
데모 스크린샷
WebexCC 활동 표에서 새롭게 추가된 CAD 변수를 확인합니다.