지원되는 웹 서비스

SOAP

스니펫 언어는 프록시 생산 프로세스를 통해 SOAP 기반 웹 서비스를 지원합니다. Studio을(를) 사용하여 프록시를 생성한 다음 CXone 파일 시스템에 .NET DLL 형식으로 저장해야 합니다. 모든 웹 서비스 프록시는 사용할 사업부의 루트 폴더에 저장해야 합니다. 시스템 관리자가 공유 사용을 위해 사업부 3 하에 프록시를 생성하는 것은 가능하지만 아직 프로덕션 단계에서는 수행되지 않았습니다.

SOAP 기반 웹 서비스는 RESTful 웹 서비스가 그 자리를 차지하면서 감소하고 있습니다. SOAP 웹 서비스 프록시 생성 프로세스는 어느 시점에서 중단될 수 있습니다. 가까운 미래에 새로운 개선 사항이 계획되어 있지 않습니다.

프록시 생성 프로세스 내에서 특정 기능이 프록시 개체에 추가되어 CXone와(과) 잘 작동합니다. 이러한 추가 기능 중 하나는 2진 스트림으로 나열하는 기능입니다. 프록시를 포함한 모든 유형은 VC 중복성 및 스크립트 정렬 기능이 실행되도록 나열할 수 있어야 합니다. 그러므로 Studio 프록시 생성 프로세스가 필수적입니다.

직렬화 기능 외에도 프록시는 웹 서비스 호출이 완료되기를 기다리는 동안 VC 실행 엔진이 스레드 풀을 적절하게 활용되도록 구성됩니다. 이 기능이 없는 경우 VC 스레드 풀은 올바르게 사용되지 않으며 결과적으로 고객에게 부정적인 영향을 줄 수 있습니다. 적절한 스레드 풀을 사용하는 것이 중요합니다.

Studio 프로세스가 추가한 최종 기능은 웹 서비스 사용량을 추적하는 기능입니다. 프록시가 외부 웹 서비스를 호출하기 위해 호출될 때 카운터와 시간 추적기를 사용하여 사용량과 영향을 기록합니다. 이러한 메트릭은 관리 용도로 하루 종일 여러 번 데이터베이스 테이블에 저장됩니다.

USES

스니펫 내에서 USES 명령어를 사용하면 스니펫 내에서 사용할 웹 서비스 프록시 DLL을 스니펫에 포함할 수 있습니다. DLL 파일은 파일 서버의 현재 사업부 루트 폴더 혹은 사업부 3 루트 폴더(공유 전용)에 위치해야 합니다. 구문:

USES "<proxy>.dll" 

예:

USES "sf.dll" cStart="{now}" sforce=new SforceService() session=new SessionHeader() loginResult=sforce.login("demo@ucn.net",password6") sforce.sessionheadervalue=session session.sessionid=loginResult.sessionid sforce.url=loginresult.serverUrl t=new Task() t.ActivityDate=#"8/20/2050" t.Description="Call placed by {first }{Last}." t.Subject="Call @{cStart}" t.Status="Completed" t.CallType="Outbound" t.OwnerId=SF_Agent_ID t.ReminderDateTime="{cStart}" SWITCH Type { CASE "CON" { t.WhoId=SF_Obj_ID } CASE "LEA" { t.WhoId=SF_Obj_ID } CASE "ACC" { t.WhatId=SF_Obj_ID } CASE "OPP" { t.WhatId=SF_Obj_ID } CASE "CAS" { t.WhatId=SF_Obj_ID } } SaveResult=sforce.create(t) 

주의: 웹 서비스 프록시 DLL을 플랫폼에서 사용하기 전에(Studio 테스트 외) 승인을 받아야 합니다. 오늘날 인증 프로세스에는 VC가 실행되는 COR 서버에 있는 인증 텍스트 파일에 DLL 이름을 추가하는 작업이 포함됩니다. 웹 관리자 요약 페이지를 사용하고 AuthorizedAssemblies 구성 설정을 확인하여 위치를 확인합니다. 항목 형식은 BUS<busno>\<proxy>.dll입니다. 예: BUS4\LCWS.dll. 구분된 DLL마다 새로운 줄에 있어야 합니다. DLL이 스크립트 내에 사용된 후 업데이트된 경우 업데이트된 DLL을 얻는 방법은 VC를 다시 시작하는 것입니다.

RESTful

스니펫언어는 기본으로 제공되는 몇 가지 서비스를 통해 RESTful 웹 서비스와 함께 실행됩니다. 첫 번째는 다음과 같은 방식으로 새 인스턴스를 만들어 사용할 수 있는 RestProxy 서비스입니다.

proxy = GetRESTProxy() 

RestProxy는 원격 웹 서버와 상호작용하는 몇 가지 속성과 메서드를 제공합니다. 요청을 생성하는 주요 메서드는 MakeRestRequest입니다. 모든 속성과 메서드의 완전한 설명은 아래에 제공됩니다. RESTful 웹 서비스를 사용하는 정보를 교환할 때 RestProxy는 DynamicData 형식이라 불리는 동적 구조화된 데이터 정의 형식을 지원합니다. DynamicData 형식은 XML 및 JSON으로 형식화된 데이터를 받고 데이터를 읽기 위한 개체 지향 액세스 패턴을 제공할 수 있습니다. 또한 XML 또는 JSON으로 변환할 수 있는 개체를 동적으로 생성할 수 있습니다.

새로운 DynamicData 개체를 생성하려면 DYNAMIC 명령어를 사용하십시오.

DYNAMIC <이름> [FROM'<string>' | <var>] 

<이름>은 새로운 스크립트 변수의 이름이며 이는 inControl 스크립팅 사양과 호환되어야 합니다(밑줄‘_’을 제외하고 선행 숫자 또는 특수 문자 없음, 선택적으로 달러 기호‘$’로 끝남) 선택적 FROM 절을 사용하는 경우 텍스트는 명시적 JSON 또는 XML 문자열(작은 따옴표로 묶음) 또는 JSON 또는 XML을 포함하는 스크립트 변수의 이름일 수 있습니다. 초기화는 테스트를 단순화하기 위해 제공되며 동적 변수를 초기화하는 일반적인 수단으로는 제공되지 않습니다. 텍스트 중 한 줄만 승인됩니다. 단일 인용이 닫히기 전에 줄 피드를 접한 경우 오류가 발생합니다.

멤버 및 하위 멤버

이러한 언어 내의 동적 변수는 광범위하고 유용한 기능을 가진 특별히 설계된 엔터티입니다. 표면적으로는 동적으로 생성된 멤버를 가질 수 있는 개체입니다. 예를 들어 스니펫에서 동적 변수를 선언하고 여러 멤버를 만들 수 있습니다.

DYNAMIC employee employee.Name = "John Smith" employee.Phone = "8005551212" employee.Address = "1234 Clay Street 

각 멤버가 지정되면 자동으로 생성됩니다. 그러므로 이름, 전화번호주소 멤버는 이제 직원 변수의 속성으로 동작합니다.

동적 변수 멤버는 대소문자를 구분합니다. 그러므로 employee.Nameemployee.name과 같지 않습니다. 이는 CXone 플랫폼의 정상적인 동작과 다릅니다. 그러나 대부분의 경우 올바른 경우에 따라 달라지는 외부 시스템과 상호 운용할 필요가 있기 때문에 이 결정이 내려졌고 동적 변수에만 적용됩니다.

또한 하위 멤버는 온더플라이 방식으로 생성될 것입니다.

employee.Department.Code = 942 employee.Department.Location = "Olive City" 

반복하자면 하위 멤버가 지정되면 자동으로 구조에 추가됩니다. 이제 단일 표현식으로 구조에 대한 참조를 다른 동적 스크립트 변수에 할당할 수 있습니다.

John = employee 

인식해야 할 중요한 점은 직원과 "John”이 동일한 물리적 데이터를 참조한다는 것입니다. 멤버 중 하나를 변경하려면 둘 다 변경해야 합니다. 데이터를 복사하려면 기본으로 제공되는 함수 복사를 사용하십시오. 다음 스니펫 예시는 이를 설명합니다.

DYNAMIC x x.Name = "John" y = x y.Name = "Sam" 

그 결과는 아래와 같습니다.

내장된 복사 기능의 예입니다.

복사 기능을 사용하면 y는 고유한 복사본을 얻고 x에 영향을 주지 않으면서 변경할 수 있습니다.

DYNAMIC x x.Name = "John" y = x ) y.Name = "Sam" 

복사 기능의 예시를 표시하는 이미지입니다.

하위 멤버도 복사할 수 있습니다.

DYNAMIC x x.Name.First = "John" x.Name.Last = "Smith" y = copy(x.Name) y.First = "Sam" 

하위 멤버의 예시를 표시하는 이미지입니다.

복사 기능 관련: 개체를 텍스트 표현으로 변환한 다음 다시 개체로 변환하여 전체 복사를 수행할 수 있습니다. 이는 단순히 참조를 복사하는 것보다 플랫폼 리소스에서 더 비쌉니다. 매우 큰 개체는 많은 오버헤드를 생성하고 스크립트 실행 속도를 잠재적으로 늦출 수 있습니다. 필요할 때 사용하되 남용하지 마십시오.

동적 변수는 배열도 처리할 수 있습니다. 개체 자체를 최상위 배열로 취급하거나 멤버를 배열로 취급할 수 있습니다.

DYNAMIC employees employees[1] = john or employees.Person[1] = john 

중요!! 모든 배열은 인덱스 1로 시작합니다. 아직 존재하지 않는 배열 인덱스를 참조하면 생성됩니다. 새로 참조된 인덱스 아래에 있는 요소가 존재하지 않는 경우에도 생성됩니다. 그러므로 실수로 인덱스 100을 지정하면 인덱스 1~99에 대해 빈 요소가 생성되므로 주의하십시오. 배열에서 요소 수를 얻으려면 count() 함수를 사용하십시오. x = count(employees.Person)

다음은 Studio스니펫 속성 편집기의 Inspector 탭입니다. 최상위 배열이 있는 동적 변수를 나타냅니다.

최상위 배열이 있는 동적 변수를 표시하는 이미지입니다.

요소를 Name이라 불리는 하위 멤버로 옮기면 다음과 같이 표시됩니다.

하위 요소 예시를 표시하는 이미지입니다.

동적 변수와 동적 변수의 배열인 일반 스크립트 변수와 비교하면 차이가 있습니다. 다음 예시는 이 점을 나타냅니다.

DYNAMIC a DYNAMIC b DYNAMIC c a.Name = "John" b.Name = "Sam" c.Name = "Arnold" x[1] = a x[2] = b x[3] = c DYNAMIC y y[1] = a y[2] = b y[3] = c 

조사할 두 가지 변수는 x와 y입니다. 우선 x는 동적 변수의 배열을 포함하는 일반 스크립트 변수입니다. 다음으로 y는 최상위 배열인 동적 변수입니다. Inspector에서는 둘 다 비슷해 보입니다.

동적 변수 예시를 표시하는 이미지입니다.

비록 비슷하게 보이지만 다릅니다. 다음 섹션에서는 동적 변수에 대한 직렬화의 개념을 설명합니다. 아래 예시에서 중요한 점은 X는 Y와 같은 방식으로 원격 시스템과 상호 운용하는 데 사용할 수 없다는 점입니다. X는 직렬화할 수 없으며 Y는 직렬화할 수 있습니다.

직렬화

직렬화에 대해 토론하기 전에 일반 스크립트 변수와 비교하여 동적 변수와 상호작용하는 방법을 보여주는 것이 도움이 될 것입니다. 일반 변수에는 문자열 구문 분석, 날짜로 변환, 정렬 등과 같은 것을 허용하는 기본 제공 메서드의 긴 목록이 있습니다. 다음 드롭다운을 클릭하면 동적 변수와 상호작용하는 방법에 대한 다양한 예를 표시합니다.

동적 변수 사용의 장점 중 하나는 직렬화 능력입니다. 웹을 통한 전송에 적합한 텍스트 형식으로 개체를 변환하는 기능입니다. 현재 2가지 형식(XML 및 JSON)이 지원됩니다. RestProxy(이 섹션의 앞에서 설명)를 사용하는 경우 직렬화 프로세스가 자동으로 발생합니다. 수동으로 직렬화된 문자열을 생성하려면 2가지 문자열 메서드가 제공됩니다.

<var>.asjson() <var>.asxml() 

문자열 컨텍스트 내에서 개체의 직렬화된 버전을 생성하는 데 사용합니다.

text = "{y.asjson()}" 

다음은 y 값이 이전 예시와 유사하다고 가정할 때 텍스트에 포함될 수 있는 내용입니다.

{"Name":[{"First":"Sam","Last":"Smith"},{"First":"Bill","Last":"Smith"}]} 

마찬가지로 .asxml 메서드는 다음과 같은 출력을 생산합니다.

<?xml version="1.0" encoding="utf-16" standalone="yes"?> <DynamicDataObject><Name><First>Sam</First<Last>Smith</Last></Name> <Name><First>Bill</First><Last>Smith</Last></Name></DynamicDataObject> 

RestProxy 멤버

GetRestProxy()를 호출하여 얻은 RextProxy는 RESTful 웹 서비스 규칙을 사용하여 원격 웹 서버와 통신하는 서비스를 제공합니다. Studio Snippet Editor를 사용하는 경우 이용 가능한 속성과 메서드가 입력하는 동안 표시됩니다. 새로운 프록시 예시를 선언하기만 하면 됩니다.

proxy = GetRESTProxy() 

그러면 새로운 줄에 프록시와 마침표(.)를 차례로 입력합니다.

RESTProxy 예시를 표시하는 이미지입니다.

Intelli-Prompt 시스템은 사용 가능한 멤버가 표시된 목록 상자를 자동으로 표시합니다. 메서드가 선택되면 여는 괄호를 입력하면 Intelli-Prompt 시스템이 다시 활성화되어 매개변수가 표시됩니다.

사용 가능한 멤버가 포함된 Litbox를 보여주는 Intelli-Prompt 시스템을 표시하는 이미지입니다.

속성

속성 내용
StatusCode MakeRestRequest()를 호출 후 HTTP 상태 코드를 포함합니다.
StatusDescription MakeRestRequest()를 호출 후 HTTP 상태 설명을 포함합니다.
ContentType 기본 콘텐츠 유형 헤더를 재정의할 수 있습니다. 기본값은 ‘Form-urlencoded’입니다. JSON을 송신하는 경우 ‘application/json’으로 변경해야 합니다.
ProxyTimeoutSeconds 기본 요청 제한 시간을 변경할 수 있습니다. 기본값은 10초입니다.

메서드

메서드 내용
문자열 URL인코드(문자열 값)
설명 문자열을 Url 인코딩 형식으로 인코딩하는 도움 메서드입니다.
MakeRestRequest 지정된 URL에 HTTP 요청을 수행합니다.
ClearHeaders AddHeader로 추가된 모든 사용자 정의 헤더를 지웁니다.
AddHeader HTTP 요청에 사용자 정의 헤더를 추가합니다.
MakeTwitterOauthRequest Twitter와 통신하기 위한 특별 요청을 구성합니다.
GetSalesForceOAuthToken SalesForce.com에서 요구하는 특별한 인증 토큰을 생성합니다.