MAX POST 메시지 통합
IFrame 통합에 POST 메시지 사용
고급 데스크톱 기반 통합을 용이하게 하기 위해 MAX(My Agent eXperience) 상담원 클라이언트는 사용자 정의 내장 웹 페이지를 통한 이벤트 구독을 지원합니다. MAX에는 컨택 패널(연관된 컨택과 함께 열리고 닫힘) 또는 사용자 정의 작업 영역(개별 컨택과 상관없이 항상 열려 있고 사용 가능)을 사용하여 웹 페이지를 임베드(IFrame)하는 기능이 있습니다. 컨택 패널의 일반적인 사용 사례는 전화 통화에 대해 스크린 팝으로 열리는 고객별 CRM 웹 페이지(통화가 완료되면 닫힘)입니다. 사용자 정의 작업 영역의 일반적인 사용 사례는 컨택 또는 고객 상호작용과 직접 연결되지 않은 기술 자료 페이지 또는 기타 사이트입니다.
두 경우 모두(컨택 패널 또는 사용자 정의 작업 영역) 임베디드 "하위" 웹 페이지는 POST 메시지를 통해 "상위" MAX 창에서 수신한 시스템 이벤트를 구독할 수 있습니다. MAX는 ACD 플랫폼에서 상담원 상태 또는 개별 컨택에 대한 세부 정보를 정기적으로 수신합니다. 이러한 이벤트를 구독함으로써 IFramed 웹 페이지는 MAX의 동작에 응답하는 사용자 정의 로직을 구현할 수 있습니다. 예를 들어 상담원이 상태를 대화 가능에서 작업 중으로, 작업 중에서 대화 불가로 변경하면 사용자 정의 내장 웹 페이지가 비즈니스 규칙에 따라 응답하도록 선택할 수 있습니다. 또는 새 통화가 수신되면 웹 페이지에는 새 통화가 알려지고 페이지는 그에 따라 응답할 수 있습니다. 자세한 내용은 https://developer.niceincontact.com/API, https://developer.niceincontact.com/Documentation/AgentSessionEvents 및 https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage의 추가 문서를 참조하십시오.
데이터 개체 변수
MAX는 다음 값을 포함하는 데이터 개체에서 고객의 게시물 메시지를 수신하도록 설정됩니다. 모든 속성 키는 대소문자가 구분됩니다. 지정된 경우 값도 대소문자가 구분됩니다.
- contactCardData: 이것은 고객 이름과 전화 컨택의 이미지를 포함하는 데이터 개체입니다. name과 userImg라는 두 개의 키가 있습니다. 대소문자를 구분합니다.
- contactId: 이것은 선택적 int입니다. 컨택 ID를 알고 있는 경우 여기에 제공할 수 있습니다. 컨택 ID는 없지만 컨택 ID가 컨택 패널에 로드된 경우 연관된 패널의 컨택 ID를 찾습니다. 일반 사용자 정의 작업 영역에는 이러한 방식으로 위치할 수 있는 컨택 ID가 없으므로 컨택별 항목이 필요한 경우 제공해야 합니다.
- issuer: 이것은 선택적 문자열입니다. 고유할 필요는 없지만 발신자의 식별자 이름으로 작동합니다. 이 문자열은 콘솔 로그에 컨텍스트를 추가하는 로깅에 도움이 됩니다. 테스트 중에 게시물 메시지 수신기가 사용자가 보낸 등록 메시지를 선택하는 것을 볼 수도 있습니다. 이 필드를 사용하여 메시지가 사용자 본인으로부터 온 것인지 확인할 수 있습니다. MAX는 'MAX'를 issuer로 하여 응답 이벤트를 보냅니다.
- messageType: 필수 문자열입니다. 대소문자를 구분합니다. 두 가지 유효한 항목이 있습니다.
항목 값 결과 "RegisterForClientEvents" 이것이 MAX가 사용자가 클라이언트 이벤트 구독을 설정하려는 것을 인식하는 방법입니다. "UnregisterFromClientEvents" 이렇게 하면 MAX에서 창 참조 연결이 끊기고 클라이언트 이벤트 전송이 종료됩니다. 구독 유형 또는 contactId를 변경하려면 다시 등록하기 전에 이를 호출해야 합니다. 이렇게 하지 않고 contactPanel에 새로 등록한 동일한 창을 사용하면 버그가 발생합니다.
"ContactCardData" 이것이 MAX가 고객 이름과 전화 컨택 이미지를 가져오고 있음을 인식하는 방법입니다. - subscriptionTypes: 필수 문자열 배열입니다. 배열의 모든 항목이 소문자로 정규화되므로 대소문자가 구분되지 않습니다. 배열의 값은 추가 가능합니다. 각 옵션은 수신할 메시지 유형을 지정합니다. 몇 가지 가능한 유효한 항목이 있습니다.:
항목 값 결과 ”all” 모두를 반환합니다. ”agent” 컨택 ID가 없는 모든 이벤트가 반환됩니다. "contact" IFrame이 스킬이나 컨택에 연결된 경우 요청된 컨택 ID 또는 연결된 패널의 컨택 ID로 제한된 이벤트를 반환합니다. "contacts" 컨택 ID가 있는 모든 이벤트가 반환됩니다. 컨택 패널에 있고 패널의 컨택에 대한 추가 정보가 필요한 경우 이 필드를 추가합니다. "sessioninfo" 상담원의 세션 토큰이 반환됩니다. 상담원 세션별 API 호출을 하려면 이 이벤트에 등록합니다.
subscriptionTypes에 빈 배열을 사용하면 오류가 발생합니다.
MAX가 구독을 수신하면 승인 메시지와 함께 요청된 구독 유형의 현재 상태가 전달되므로 작업 영역을 적절하게 설정할 수 있습니다. 이러한 이벤트는 시작 시 보장됩니다.
항목 값 | 현재 상태 |
---|---|
"all" | 현재 AgentState 및 MAX 범위 내에 있는 모든 현재 컨택을 반환합니다. |
"agent" | 현재 AgentState를 반환합니다. 여기에는 상담원의 세션 토큰이 포함되지 않습니다. |
"contact" | 컨택이 MAX 범위 내에 있으면 현재 컨택 상태를 반환합니다. |
"contacts" | MAX 범위 내에 존재하는 모든 현재 컨택을 반환합니다. |
등록의 경우 초기화 시 기본 AgentState 및 컨택보다 더 많이 수신하는 경우가 있습니다. 이러한 이벤트에는 AgentLegEvent, AgentSessionStart 및 MchAgentSettingsChangeEvent가 포함될 수 있습니다. 이 데이터에 대한 로컬 참조를 설정하기 전에 구독 요청이 들어오는 경우 이러한 추가 이벤트를 볼 수 있습니다. 이 경우 일반적으로 사용 중에 수신하는 것처럼 get-next-event를 통해 MAX로 전송되는 모든 이벤트를 저장하고 전달합니다. 유일한 차이점은 기본 초기화를 위한 선택 핵심 이벤트를 선택할 수 없다는 것입니다. 등록된 데이터에 동일한 필터가 적용되므로 비정상적인 결과가 나오지 않습니다.
호출 명령
MAX가 주어진 명령을 수락할 수 있는 유효한 상태에 있으면 애플리케이션에서 해당 작업을 호출합니다. 이러한 명령은 컨택 처리에 사용되는 기본 버튼과 거의 동일합니다. 이런 명령은 메시지를 회신하지는 않습니다.
항목 값 |
결과 |
---|---|
AnswerEvent 및 RefuseEvent | 수락/거부 대화상자를 표시하는 인바운드 통화가 있을 때 발생합니다. |
HoldEvent, MuteEvent 및 MaskEvent |
토글로 취급됩니다. 예를 들어 보류를 한 번 호출하면 통화가 보류되고 다시 호출하면 통화가 복원됩니다. |
RecordEvent | 일회성 작업입니다. 예를 들어 레코드가 호출되면 중지할 수 없습니다. |
HangupEvent | 통화는 확인 대화상자 없이 즉시 종료됩니다. |
호출 예(messageType만 필요)
opener.postMessage({ messageType: 'MuteEvent' }, '');*
구현 예
// 이벤트에 대해 등록할 상위 창(MAX)을 찾습니다.
var opener = window.opener || window.parent;
// 구독 설정
var subscriptionTypes = ['agent', 'contacts'];
// 응답 메시지 수신 시작
var doSomething = function (events) {
spacevar event = null;
space var eventIndex = null;
space for(eventIndex in events){
space space if (events.hasOwnProperty(eventIndex)){
spacespacespaceevent = events[eventIndex];
space space }
space }
};
var listenForPostMessage = function (event) {
if (event.data && event.data.events && event.data.issuer === 'MAX') {
logToConsole('=== [' + event.data.events.length + '] 이벤트가 있는 게시물 메시지를 수신합 ===');
doSomething(event.data.events);
}
};
// MAX 클라이언트 이벤트에 대한 수신기를 추가합니다.
window.addEventListener('message', listenForPostMessage);
// MAX에 등록 메시지 보내기
opener.postMessage({ contactId: contactId, issuer: 'MyTestSite', messageType: 'Register-ForClientEvents', subscriptionTypes: subscriptionTypes }, '*');
응답 개체
응답 개체
{
issuer: 'MAX',
contactId: int (Nullable) - 영구 패널로 발견되었거나 전달된 컨택 ID. contactId가 전달되거나 발견되지 않은 경우 null이 됩니다.
이벤트: [ object, object, object ... ] - 구독 유형 또는 컨택 필터와 일치하는 이 이벤트 집합에서 반환된 모든 이벤트입니다.
}
"SessionInfo" 구독의 메시지 형태에 대한 응답:
{
messageType: "SessionInfo"
sessionToken: "mysessiontoken=="
}
구독 확인 이벤트
하나 이상의 subscriptionType이 있으면 구독이 허용됩니다. 유효한 subscriptionTypes가 없으면 잘못된 유형을 표시하는 콘솔 경고가 기록됩니다. 반환된 이벤트 집합의 첫 번째 이벤트는 메시지 유형이 ClientEventSubscriptionAcknowledge인 이벤트입니다. 이 이벤트의 구조는 다음과 같습니다.
{
contactId: (int) - null인 경우 구독과 연결된 contactId가 없는 것입니다. 이것은 클라이언트가 "컨택" 구독이 작동했는지 확인하는 방법입니다.
messageType: ClientEventSubscriptionAcknowledge - (string). 이것은 특정 확인 이벤트 메시지 유형입니다.
이유: "성공" | "잘못된 컨택 ID" | "잘못된 구독 유형" - ERROR 상태 코드에 대한 이유와 함께 응답하는 경우. 너무 복잡하지 않도록 간단히 설명합니다. 하나의 실패 이유만 반환합니다. 먼저 유효성 검증을 위해 컨택 ID를 확인합니다(0이 아니거나 정수가 아닌 문자열이 아님). 실패했지만 잘못된 구독 유형도 있는 경우 컨택 ID를 수정한 후 다시 시도할 때까지 하위 오류가 표시되지 않습니다. 이는 창에 대한 참조가 유지되지 않았으므로 구독 실패를 의미합니다.
상태: "OK" 또는 "ERROR" - 오류가 반환되면 게시물 메시지 구독 연결을 성공적으로 생성하지 못한 것입니다. 이러한 오류를 수정하고 다시 시도해야 합니다.
}
어떤 경우에는 구독 승인이 전송되지 않습니다. 동일한 창에서 두 번째 구독을 요청할 때 기존 구독을 먼저 제거하지 않으면 응답이 전송되지 않고 추가 구독도 인식되지 않습니다. 다음과 같은 구조의 콘솔 경고를 출력합니다.
{
console.warn('Error processing Client Even Subscription. Issuer: [' + subscriberObject.data.issuer + '] has already subscribed.')
}