CTIOperationRequest - 범위가 지정됨, 전역

  • 릴리스 버전: Xanadu
  • 업데이트 날짜 2024년 08월 01일
  • 읽기74분
  • CTIOperationRequest 스크립트 포함은 현재 CTIOperationRequest 객체에서 데이터를 설정하고 가져오는 메서드를 제공합니다.

    CTIOperationRequest 개체를 사용하여 프레임워크 내의 ServiceNow 음성 메시지 변환기와 작업 처리기 간에 정보를 전달합니다.

    일반적으로 메시지 변환기는 들어오는 CTI 관련 페이로드를 구문 분석하고 연결된 CTIOperationRequest 개체에서 페이로드 데이터를 설정하는 작업을 담당합니다. 그런 다음 작업 처리기는 CTIOperationRequest 개체에서 정보를 가져오고 데이터를 사용하여 요청된 작업을 처리해야 합니다.

    ServiceNow 기본 시스템은 Amazon Connect Connect에 연결할 수 있는 작업 핸들러 및 메시지 변환기를 제공합니다. Amazon Connect 내에서 고객 응대 흐름을 구축할 때 Amazon 서비스와 인스턴스 간에는 두 가지 통합 지점이 ServiceNow 있습니다.
    • AWS(Amazon Web Services) Lambda 프록시(AWS Lambda 함수 호출)
    • AWS Lex 봇(고객 입력 가져오기)
    작업 처리기 [sn_cti_operation_handler] 및 제공자 메시지 변환기 [sn_cti_provider_msg_transormer] 테이블에서 이러한 통합 지점에 사용 가능한 작업 핸들러 및 메시지 변환기를 찾을 수 있습니다.

    페이로드는 작업을 요청하는 CTI(컴퓨터 전화 통합 시스템) 제공자와 같은 외부 소스에서 인스턴스로 전달 ServiceNow 됩니다. 요청이 수신되면 메시지 변환기는 페이로드를 구문 분석하고 CTIOperationRequest 집합 메서드를 사용하여 작업 처리기 이름과 같은 페이로드 값을 작업 및 연락처별 CTIOperationRequest 개체에 설정합니다.

    예를 들어 다음 메시지 변환기 스크립트는 전달된 JSON 페이로드를 구문 분석하고 CTIOperationRequest 개체에서 연결된 작업 처리기에 필요한 값을 설정합니다.

    {	
      try {
        var jsonPayload = httpRequest.body.data;
        if (jsonPayload) {
    	var event = jsonPayload.event;
    	if (event) {
    	  var details = event.Details;
    	  if (details) {					
    	    operationRequest.setOperationName(details.Parameters['sn_operation']);
    	    var contactData = details.ContactData;
    	    if(contactData) {
    		// Call id should be surfaced in openframe call log so it can be tied to transcription later
    		operationRequest.setParameter('contact.call_id', contactData.ContactId);
    		for(var ck in contactData.CustomerEndpoint) {
    		  operationRequest.setParameter('contact.' + ck, contactData.CustomerEndpoint[ck]);
    	       }
    	       operationRequest.setParameter('contact.id', contactData.ContactId);
    	       operationRequest.setParameter('contact.phone', contactData.CustomerEndpoint.Address);
    	    }
    	    var parameters = details.Parameters;
    	    if (parameters) {
    		for (var pk in parameters) {
    		  switch(pk) {
    		    case 'interactionId':
    			operationRequest.setInteractionSysId(parameters[pk]);
    			break;
    		    case 'authToken':
    			operationRequest.setAuthToken(parameters[pk]);
    			break;
    		    case 'language':
    			operationRequest.setLanguage(parameters[pk]);
    			break;
    								
    		    default:
    			operationRequest.setParameter(pk, parameters[pk]);
    		 }						
                }
              }					
            }
          }
        }
      } catch(e) {
    		ctx.setError(e);
      }
    })(httpRequest, operationRequest, ctx);

    메시지 변환기가 전달된 페이로드의 구문 분석을 완료한 후 프레임워크는 ServiceNow 음성 지정된 작업 처리기를 인스턴스화합니다. 운영 처리기는 CTIOperationResponse 스크립트 포함 get 메서드를 사용하여 연결된 CTIOperationRequest 개체에서 필요한 정보를 가져와 요청된 작업을 처리합니다.

    예를 들어 다음 작업 핸들러 스크립트는 CTIOperationRequest 개체에 설정된 값을 호출과 연결된 상호 작용 기록에 저장합니다.

    (function(/*CTIOperationRequest*/ request, /*CTIOperationResponse*/ response, ctx) {
      // Returns the sys_id of the interaction record.
      var interactionSysId = request.getInteractionSysId();
      var number = request.getParameter('number');
      var addComment = request.getParameter('add_comment');
      addComment = addComment ? addComment.toLowerCase() : addComment;
      addComment = 'yes' === addComment || 'true' === addComment || '1' === addComment;
      var workNotes = request.getParameter('work_notes');
      var message = gs.getMessage('Thankyou');
      var interactionGr = request.getInteractionRecord();
      var openedFor = interactionGr ? interactionGr.getValue('opened_for') : null;
      if (openedFor && number && addComment && workNotes) {
        var now_GR = new GlideRecordSecure('incident');
        now_GR.addQuery('caller_id', openedFor);
        now_GR.addQuery('number', number);
        now_GR.query();
        if (now_GR.next()) {
          now_GR.work_notes += workNotes;
          now_GR.update();
          message = now_GR.getMessage('Your comment was added');
        }
      }
      response.setStatusCode(200);
      response.setMessage(message);
    })(request, response, ctx);

    작업 처리기 생성에 대한 자세한 내용은 자동화된 호출자 상호 작용에 대한 연락처 흐름 구성을 참조하세요.

    이 스크립트 포함은 sn_cti_core 네임스페이스에서 실행됩니다. CTIOperationRequest 스크립트 포함에 접근하기 전에 (sn_cti_core) 플러그인이 ServiceNow 음성 활성화되어 있어야 합니다. 활성화 ServiceNow 음성에 대한 자세한 내용은 ServiceNow 음성 애플리케이션 설치를 참조하십시오.

    ServiceNow 음성대한 자세한 내용은 ServiceNow 음성 기능 문서를 참조하십시오.

    CTIOperationRequest - CTIOperationRequest(문자열 원본)

    CTIOperationRequest 개체를 인스턴스화합니다.

    표 1. 매개변수
    이름 유형 설명
    원본 문자열 옵션입니다. 요청의 원점입니다. 일반적으로 컴퓨터 전화 통신 통합 공급자의 이름입니다.

    기본값: null

    var request = new sn_cti_core.CTIOperationRequest('AWS Connect');
    request.setSessionAttribute('contact.phone', '+15552222345');
    request.setSessionAttribute('contact.okToCall', true);
    request.setSessionAttribute('contact.address', {
        street: '1234 Main St'
        city: 'API City',
        zip: 91335
    });

    CTIOperationRequest - getAuthToken()

    연결된 CTIOperationRequest 개체에 설정된 인증 토큰을 반환합니다.

    이 토큰은 처리기 auth_required 의 플래그가 true로 설정된 경우 요청된 작업 처리기를 실행하기 전에 프레임워크에서 현재 ServiceNow 음성 사용자를 인증하는 데 사용됩니다ServiceNow 음성. auth_required 플래그는 운영 핸들러 [sn_cti_operation_handler] 테이블의 필드입니다. 인증 토큰의 수명은 호출 세션의 수명 동안이어야 하지만 CTI 공급자에 의해 결정됩니다.

    사용자 고유의 인증 작업 처리기를 만들어 구현에 필요한 인증/권한 부여 처리를 정의할 수 있습니다. 인증 토큰이 생성되는 방법에 관계없이 메시지 번역기는 CTI 페이로드에 토큰을 다시 전달해야 합니다. 또한 CTI 공급자는 이 인증 토큰을 로컬에 저장하고 인증이 필요한 각 작업 요청에 전달해야 합니다.

    인스턴스가 제공한 인증 작업 핸들러를 사용하는 경우 핸들러는 사용자가 입력한 4자리 PIN을 기반으로 인증 토큰 만들기를 시작합니다. 그런 다음 CTIOperationResponse 개체의 sessionAttributes 개체에 인증 토큰을 설정합니다. 연결된 메시지 변환기는 sessionAttributes 객체를 CTI 관련 페이로드로 변환한 다음 CTI 공급자에게 보냅니다.

    주:
    인증 토큰이 전달되지 않으면 플래그가 설정된 작업 처리기를 auth_required 실행하기 위한 모든 요청이 실패합니다. 인증을 사용하지 않는 경우 인증 토큰을 유지 관리할 필요가 없습니다.
    ServiceNow 기본 시스템은 Amazon Connect Connect에 연결할 수 있는 작업 핸들러 및 메시지 변환기를 제공합니다. Amazon Connect 내에서 고객 응대 흐름을 구축할 때 Amazon 서비스와 인스턴스 간에는 두 가지 통합 지점이 ServiceNow 있습니다.
    • AWS(Amazon Web Services) Lambda 프록시(AWS Lambda 함수 호출)
    • AWS Lex 봇(고객 입력 가져오기)
    작업 처리기 [sn_cti_operation_handler] 및 제공자 메시지 변환기 [sn_cti_provider_msg_transormer] 테이블에서 이러한 통합 지점에 사용 가능한 작업 핸들러 및 메시지 변환기를 찾을 수 있습니다.
    표 2. 매개변수
    이름 유형 설명
    없음
    표 3. 반환
    유형 설명
    문자열 현재 ServiceNow 음성 사용자와 연결된 인증 토큰입니다.
    (function( /*CTIProviderResponseExecutionContext*/ ctx, /*CTIOperationRequest*/ operationRequest, /*CTIOperationResponse*/ operationResponse, /*HTTPResponse*/ httpResponse) {
      var sessionAttributes = {},
          intentResponse;
      var statusCode = -1;
      var message = 'Unprocessed';
      if (operationResponse) {
        statusCode = operationResponse.getStatusCode();
        sessionAttributes = operationResponse.getSessionAttributes();
        message = operationResponse.getMessage();
        var error = operationResponse.getError();
        if (error) {
          sessionAttributes.error = error;
        }
      }
      if (sn_cti_core.CTIRequestDispatcher.Constants.HTTP.Status.AUTH_REQUIRED.code === statusCode) {
        //first call for a secure action without authentication token
        sessionAttributes.statusCode = 401;
        sessionAttributes.message = message;
        intentResponse = {
          sessionAttributes: sessionAttributes,
          dialogAction: {
            type: 'Close',
            fulfillmentState: 'Fulfilled',
            message: {
              contentType: 'PlainText',
              content: 'This operation requires authentication. Say authenticate for authentication.'
            }
          }
        };
      } else if ('DialogCodeHook' === operationRequest.getParameter('$$invocationSource')) {
          //pass back authToken and interactionId
          sessionAttributes.authToken = operationRequest.getAuthToken();
          sessionAttributes.interactionId = operationRequest.getInteractionSysId();
          var originalSlots = operationRequest.getParameter('$$slots');
          var responseParameters = operationResponse ? operationResponse.getParameters() : {};
          responseParameters = responseParameters ? responseParameters : {};
          // See if processing happened and we got a dialogAction
          var responseDialogAction = responseParameters['dialogAction'];
          // Default dialog action
          var dialogAction = {
            type: 'Delegate',
            slots: originalSlots
          };
          // If the response doesn't contain an override replay the inputs
          if (responseDialogAction) {
            // We bypassed dialoghook so delegate and pass through inputs
            dialogAction = responseDialogAction;
          }
          intentResponse = {
            sessionAttributes: sessionAttributes,
            dialogAction: dialogAction
          };
      } else {
        // Override required session attributes
        sessionAttributes.statusCode = statusCode;
        sessionAttributes.message = message;
        // Build response template
        intentResponse = {
          sessionAttributes: sessionAttributes,
          dialogAction: {
            type: 'Close',
            fulfillmentState: 'Fulfilled',
            message: {
              contentType: 'PlainText',
              content: message
            }
          }
        };
      }
      httpResponse.setBody(intentResponse);
    })(ctx, operationRequest, operationResponse, httpResponse);

    CTIOperationRequest - getInteractionRecord()

    작업 요청과 관련된 상호작용 GlideRecord를 반환합니다.

    상호 작용은 고객이 채팅, 전화 통화 또는 대면을 통해 제출한 지원 요청을 나타냅니다. 상호작용은 할당을 위해 큐로 라우팅되거나 에이전트에게 직접 할당될 수 있습니다. 상호작용 기록은 상호작용 [interaction] 테이블에 저장되며 특정 세션에서 고객과의 서비스 계정 상호작용을 설명하는 모든 유형의 데이터를 포함할 수 있습니다.

    상호작용 기록은 CTIOperationRequest - setInteractionSysId(String Id) 메서드를 통해 CTIOperationRequest 객체와 연결됩니다. 이 메서드는 일반적으로 메시지 변환기에 의해 호출되며 getInteractionRecord() 메서드를 호출하기 전에 호출해야 합니다.

    표 4. 매개변수
    이름 유형 설명
    없음
    표 5. 반환
    유형 설명
    GlideRecord 현재 CTIOperationRequest 객체와 연결된 상호작용 GlideRecord 객체입니다. 상호 작용 레코드 sys_id CTIOperationRequest 개체에 설정되지 않은 경우 null을 반환합니다.
    (function(/*CTIOperationRequest*/ request, /*CTIOperationResponse*/ response, /*Context*/ ctx) {	
      var notes = '', lang = request.getLanguage();
      try { 
        // Returns the interaction record (GlideRecord) set on the passed in CTIOperationRequest object		
        var interactionGr = request.getInteractionRecord();
    
        var now_GR = new GlideRecord('sys_user');
        if(interactionGr && now_GR.get(interactionGr.opened_for.toString())) {	
        if(now_GR.locked_out == true) {
            notes += gs.getMessageLang("User record found locked. Unlocking the account.\n", lang);
            now_GR.locked_out=false;
            now_GR.update();
            response.setStatusCode(200);
            response.setMessage(gs.getMessageLang("Your account has been unlocked.", lang));
          } else {
            notes += gs.getMessageLang("User record not locked.\n", lang);
            response.setStatusCode(200);
            response.setMessage(gs.getMessageLang("Your account doesn't seem to be locked.", lang));
          }	
        } else {
          notes += gs.getMessageLang("User record not found. Transfer to agent\n", lang);
          response.setStatusCode(302);
          response.setMessage(gs.getMessageLang("I am unable to find your record. Let me transfer to someone who can help.", lang));
        }
        if(interactionGr) {
          interactionGr.work_notes = notes;
          interactionGr.update();
        }
      } catch(e) {
        ctx.setError(e);
      }
    })(request, response, ctx);

    CTIOperationRequest - getInteractionSysId()

    현재 CTIOperationRequest 객체와 연결된 상호 작용 기록의 sys_id 반환합니다.

    CTIOperationRequest - setInteractionSysId(String Id) 메서드는 이 메서드를 호출하기 전에 호출되어야 합니다.

    표 6. 매개변수
    이름 유형 설명
    없음
    표 7. 반환
    유형 설명
    문자열 현재 CTIOperationRequest 객체에 설정된 상호 작용 기록의 sys_id입니다.

    연결된 CTIOperationRequest 개체에 sys_id 설정되지 않은 경우 메서드는 null을 반환합니다.

    (function( /*CTIOperationRequest*/ request, /*CTIOperationResponse*/ response, ctx) {
      // Returns the sys_id of the interaction record associated with the CTIOperationRequest object.
      var interactionSysId = request.getInteractionSysId();
      var number = request.getParameter('number');
      var addComment = request.getParameter('add_comment');
      addComment = addComment ? addComment.toLowerCase() : addComment;
      addComment = 'yes' === addComment || 'true' === addComment || '1' === addComment;
      var workNotes = request.getParameter('work_notes');
      var message = gs.getMessage('Thankyou');
      var interactionGr = request.getInteractionRecord();
      var openedFor = interactionGr ? interactionGr.getValue('opened_for') : null;
      if (openedFor && number && addComment && workNotes) {
        var now_GR = new GlideRecordSecure('incident');
        now_GR.addQuery('caller_id', openedFor);
        now_GR.addQuery('number', number);
        now_GR.query();
        if (now_GR.next()) {
        now_GR.work_notes += workNotes;
        now_GR.update();
          message = gs.getMessage('Your comment was added');
        }
      }
      response.setStatusCode(200);
      response.setMessage(message);
    })(request, response, ctx);

    CTIOperationRequest - getLanguage()

    현재 CTIOperationRequest 개체에 설정된 ISO 639.1 언어 코드를 반환합니다.

    고객 기본 설정 언어를 사용하면 플랫폼에서 제공하는 국제화 및 현지화 기능을 사용하여 관련 호출자와의 메시지 및 기타 커뮤니케이션을 사용자 지정할 수 있습니다.

    일반적으로 작업 처리기는 getLanguage() 메서드를 호출하고 메시지 변환기는 CTIOperationRequest - setLanguage(String languageCode) 메서드를 호출하여 CTIOperationRequest 개체의 언어를 설정합니다.

    표 8. 매개변수
    이름 유형 설명
    없음
    표 9. 반환
    유형 설명
    문자열 현재 CTIOperationRequest 개체에 설정된 ISO 639.1 언어 코드입니다. 언어 코드가 설정되지 않은 경우 en을 반환합니다.

    다음 예제에서는 호출자의 기본 설정 언어를 가져오기 위해 getLanguage() 를 호출하는 작업 핸들러를 보여 줍니다.

    (function(/*CTIOperationRequest*/ request, /*CTIOperationResponse*/ response) {
      // Obtain the contact's preferred language
      var notes = "", announcement, lang = request.getLanguage();
      try {
    		
        var interactionGr = request.getInteractionRecord();
    		
        announcement = gs.getMessageLang("We are currently experiencing issues with VPN. If you are calling about VPN issues, you may hang up the call.", lang);
        // Use the contact's language to customize the response messages and notes	
        if(announcement) {	
          notes = gs.getMessageLang("Listened to announcement: {0}", lang, [announcement]);
          response.setStatusCode(200);
        } else {
          announcement = gs.getMessageLang("There are currently no known outage announcements", lang);
          //use the status case as the flag to check for announcements in contact flow
          response.setStatusCode(404);
        }			
        response.setMessage(announcement);	
    			
        if(interactionGr && notes) {			
          interactionGr.work_notes = notes;		
          interactionGr.update();
        }
    		
      } catch(e) {
        ctx.setError(e);
      }
    
    })(request, response);

    CTIOperationRequest - getMajorVersion()

    현재 CTIOperationRequest 개체에 설정된 CTI(Computer Telephony Integrator) 소프트웨어의 주 버전을 반환합니다.

    인스턴스에 연결된 ServiceNow CTI 제공자가 여러 버전의 소프트웨어를 실행하는 경우 소프트웨어 버전에 따라 다른 처리 동작이 필요할 수 있으므로 이 방법을 사용합니다. 처리 동작이 소프트웨어 버전 간에 약간만 다른 경우 단일 작업 처리기만 사용하는 것이 합리적일 수 있습니다. 그런 다음 요청을 수행하는 소프트웨어의 버전을 확인하고 작업 처리기 내에서 요청/데이터를 처리하여 처리 차이를 처리할 수 있습니다. 필요한 처리가 버전 간에 크게 다른 경우 여러 작업 처리기를 사용하는 것이 더 효과적일 수 있습니다.

    일반적으로 메시지 변환기는 CTIOperationRequest - setMajorVersion(Number, majorVersion) 메서드를 호출하여 CTIOperationRequest 개체의 소프트웨어 버전을 설정하고 작업 처리기는 이 메서드를 사용하여 설정된 값을 사용합니다. CTIOperationRequest - getMinorVersion()CTIOperationRequest - setMinorVersion(Number minorVersion) 메서드를 사용하여 제공자 소프트웨어의 부 버전 값을 가져오거나 설정할 수도 있습니다.

    표 10. 매개변수
    이름 유형 설명
    없음
    표 11. 반환
    유형 설명
    번호 CTI 소프트웨어의 주 버전 번호입니다.

    주 버전이 설정되지 않은 경우 1을 반환합니다.

    var request = new sn_cti_core.CTIOperationRequest('origin');
    var majorVersion = request.getMajorVersion();

    CTIOperationRequest - getMinorVersion()

    CTIOperationRequest 개체와 연결된 CTI(Computer Telephony Integrator) 소프트웨어의 부 버전을 반환합니다.

    인스턴스에 연결된 ServiceNow CTI 제공자가 여러 버전의 소프트웨어를 실행하는 경우 소프트웨어 버전에 따라 다른 처리 동작이 필요할 수 있으므로 이 방법을 사용합니다. 처리 동작이 소프트웨어 버전 간에 약간만 다른 경우 단일 작업 처리기만 사용하는 것이 합리적일 수 있습니다. 그런 다음 요청을 수행하는 소프트웨어의 버전을 확인하고 작업 처리기 내에서 요청/데이터를 처리하여 처리 차이를 처리할 수 있습니다. 필요한 처리가 버전 간에 크게 다른 경우 여러 작업 처리기를 사용하는 것이 더 효과적일 수 있습니다.

    일반적으로 메시지 변환기는 CTIOperationRequest - setMinorVersion(Number, minorVersion) CTIOperationRequest - setMinorVersion(번호 minorVersion) 메서드를 호출하여 CTIOperationRequest 개체의 소프트웨어 버전을 설정한 다음 작업 처리기가 이 메서드를 사용하여 설정된 값을 사용합니다. CTIOperationRequest - getMajorVersion() CTIOperationRequest - getMajorVersion()CTIOperationRequest - setMajorVersion(Number, majorVersion) CTIOperationRequest - setMajorVersion(번호: majorVersion) 메서드를 사용하여 공급자 소프트웨어의 주 버전 값을 가져오거나 설정할 수도 있습니다.

    표 12. 매개변수
    이름 유형 설명
    없음
    표 13. 반환
    유형 설명
    번호 CTI 소프트웨어의 부 버전 번호입니다.

    부 버전이 설정되지 않은 경우 0을 반환합니다.

    var request = new sn_cti_core.CTIOperationRequest('origin');
    var minorVersion = request.getMinorVersion();

    CTIOperationRequest - getOperationName()

    CTI(컴퓨터 전화 통합 시스템) 공급자가 실행을 요청하는 작업의 이름을 반환합니다.

    작업 이름은 요청을 처리하는 데 사용되는 작업 처리기를 결정합니다. 일반적으로 메시지 변환기는 CTIOperationRequest - setOperationName(String name) 메서드를 사용하여 CTIOperationRequest 개체의 작업 이름을 설정합니다.

    주:
    getOperationName() 메서드는 연결된 작업 핸들러를 인스턴스화하지 않습니다. 이 작업은 프레임워크에 ServiceNow 음성의해 수행됩니다. 이 메서드는 단순히 연결된 작업 처리기 이름을 반환합니다.
    주:
    Amazon Connect Lex 봇 구현의 경우 서로 다른 Amazon 의도가 동일한 의도 이름을 가질 수 없으므로 의도 이름에 5자 접미사가 추가됩니다. 프레임워크에서 ServiceNow 음성 의도 이름은 작업 핸들러 이름과 같습니다. 작업 핸들러는 이 접미사(myOperation_SUFFX)를 포함하는 작업 핸들러 이름을 사용하여 의도에 특정하거나, HR 요청 및 지원 센터 요청(myOperation)을 처리하기 위해 동일한 핸들러를 사용하는 것과 같이 여러 CTI 제공자 또는 다른 사용 사례에서 사용되는 제네릭일 수 있습니다.
    표 14. 매개변수
    이름 유형 설명
    없음
    표 15. 반환
    유형 설명
    문자열 CTI 제공자가 실행을 요청하는 작업의 이름입니다. 작업 이름이 설정되지 않은 경우 null을 반환합니다.
    var request = new sn_cti_core.CTIOperationRequest('origin');
    var name = request.getOperationName();
    

    CTIOperationRequest - getOperationSubStepName()

    현재 CTIOperationRequest 객체에 설정된 하위 단계 작업 핸들러 이름을 반환합니다.

    하위 단계를 사용하여 작업을 처리하기 전에 초기화 및 확인과 같은 작업을 수행합니다. 모든 CTI 공급자가 사용하는 일반 작업 처리기와 달리 하위 단계는 CTI 공급자에 따라 다르며 CTI 공급자와 관련된 용어 및 명명 규칙을 사용합니다.

    프레임워크는 ServiceNow 음성 다음 단계를 수행하여 필요한 작업 핸들러 및 연관된 하위 단계 오퍼레이션 핸들러를 찾습니다.
    주:
    Amazon Connect Lex 봇 구현의 경우 서로 다른 Amazon 의도가 동일한 의도 이름을 가질 수 없으므로 의도 이름에 5자 접미사가 추가됩니다. 프레임워크에서 ServiceNow 음성 의도 이름은 작업 핸들러 이름과 같습니다. 작업 핸들러는 이 접미사(myOperation_SUFFX)를 포함하는 작업 핸들러 이름을 사용하여 의도에 특정하거나, HR 요청 및 지원 센터 요청(myOperation)을 처리하기 위해 동일한 핸들러를 사용하는 것과 같이 여러 CTI 제공자 또는 다른 사용 사례에서 사용되는 제네릭일 수 있습니다.
    1. 요청과 연결된 작업 핸들러를 찾으려고 시도합니다.
      • 먼저 myOperation_SUFFX라는 작업 처리기를 확인합니다.
      • 찾을 수 없는 경우 작업 처리기 myOperation을 검사합니다. 찾을 수 없는 경우 오류가 발생합니다.
    2. 처리기가 발견되면 작업 처리기에서 플래그를 auth_required 확인합니다. 설정된 경우 유효한 인증 토큰( getAuthToken() 메서드를 통해 획득)이 요청에 있는지 확인합니다. 존재하고 유효한 경우 처리를 계속하고, 그렇지 않으면 오류가 발생합니다.
    3. 전달된 하위 단계에 대한 운영 핸들러를 조회합니다. 이 예제에서는 subStepName=SubStep이라고 가정해 보겠습니다.
      • 먼저 myOperation_SUFFX라는 작업 처리기를 확인합니다 . 하위 단계. 발견되면 처리기를 실행합니다.
      • 찾을 수 없는 경우 myOperation.SubStep 처리기를 확인합니다. 발견되면 처리기를 실행합니다.
      • 찾을 수 없는 경우 요청 개체에 subStepNotFoundBehavior 가 설정되어 있는지 확인합니다.
      • 설정하면 동작을 실행하고, 그렇지 않으면 오류가 발생합니다.
    4. 기본 작업 핸들러(myOpersation_SUFFX 또는 myOperation)를 실행합니다.

    일반적으로 메시지 변환기는 CTIOperationRequest - setOperationSubStepName(String name) 메서드를 사용하여 CTIOperationRequest 개체의 하위 단계 이름을 설정합니다. CTIOperationRequest - setSubStepNotFoundBehaviour(Object behavior) 메서드를 호출하여 자체 변환기를 만드는 경우 이 동작을 재정의할 수 있습니다.

    표 16. 매개변수
    이름 유형 설명
    없음
    표 17. 반환
    유형 설명
    문자열 CTIOperationRequest 객체에 설정된 하위 단계 작업 핸들러의 이름입니다. 존재하지 않으면 null을 반환합니다.
    var request = new sn_cti_core.CTIOperationRequest('origin');
    var name = request.getOperationSubStepName();

    CTIOperationRequest - getParameter(문자열 키)

    현재 CTIOperationRequest 개체에 이전에 설정된 지정된 키의 값을 반환합니다.

    get/set 매개 변수 메서드를 사용하면 메시지 변환기와 작업 처리기 간에 거의 모든 문자열 또는 숫자 값을 전달할 수 있습니다. 파라미터 객체에는 현재 작업 요청과 직접 상관 관계가 있는 0개 이상의 키/값 데이터 쌍이 포함될 수 있습니다. 작업 핸들러는 이러한 값을 사용할 때 필요한 키/값 쌍을 결정합니다. 일반적으로 메시지 변환기는 CTIOperationRequest - setParameter(String key, Object value) 메서드를 호출하여 CTIOperationRequest 개체에서 이러한 매개 변수를 설정하고 작업 처리기는 이 메서드를 사용하여 이러한 매개 변수를 사용합니다.

    표 18. 매개변수
    이름 유형 설명
    문자열 반환할 키 값의 이름입니다.
    표 19. 반환
    유형 설명
    문자열 또는 숫자 지정된 키의 값입니다. 이러한 키가 없으면 null을 반환합니다.
    (function( /*CTIOperationRequest*/ request, /*CTIOperationResponse*/ response, ctx) {
      var interactionSysId = request.getInteractionSysId();
      // Returns the number and add_comment parameters from the CTIOperationRequest object
      var number = request.getParameter('number');
      var addComment = request.getParameter('add_comment');
      addComment = addComment ? addComment.toLowerCase() : addComment;
      addComment = 'yes' === addComment || 'true' === addComment || '1' === addComment;
      var workNotes = request.getParameter('work_notes');
      var message = gs.getMessage('Thankyou');
      var interactionGr = request.getInteractionRecord();
      var openedFor = interactionGr ? interactionGr.getValue('opened_for') : null;
      if (openedFor && number && addComment && workNotes) {
        var now_GR = new GlideRecordSecure('incident');
        now_GR.addQuery('caller_id', openedFor);
        now_GR.addQuery('number', number);
        now_GR.query();
        if (now_GR.next()) {
        now_GR.work_notes += workNotes;
        now_GR.update();
          message = gs.getMessage('Your comment was added');
        }
      }
      response.setStatusCode(200);
      response.setMessage(message);
    })(request, response, ctx);

    CTIOperationRequest - getParameters()

    현재 CTIOperationRequest 개체에 이전에 설정된 모든 매개 변수에 대한 키-값 쌍을 반환합니다.

    get/set 매개 변수 메서드를 사용하면 메시지 변환기와 작업 처리기 간에 거의 모든 문자열 또는 숫자 값을 전달할 수 있습니다. 파라미터 객체에는 현재 작업 요청과 직접 상관 관계가 있는 0개 이상의 키/값 데이터 쌍이 포함될 수 있습니다. 작업 핸들러는 이러한 값을 사용할 때 필요한 키/값 쌍을 결정합니다. 일반적으로 메시지 변환기는 CTIOperationRequest - setParameter(String key, Object value) 메서드를 호출하여 CTIOperationRequest 개체에서 이러한 매개 변수를 설정하고 작업 처리기는 이 메서드를 사용하여 이러한 매개 변수를 사용합니다.

    표 20. 매개변수
    이름 유형 설명
    없음
    표 21. 반환
    유형 설명
    객체 이전에 CTIOperationRequest 개체에 설정된 키-값 쌍의 맵입니다. 이 키-값 쌍은 자유 형식이며 작업 처리기의 필요에 따라 정의됩니다. 반환되는 값은 문자열 또는 숫자입니다.
    var request = new sn_cti_core.CTIOperationRequest('origin');
    var parms = request.getParameters();
    for(var key in parms) {
        gs.info(key + '=' + parms[key]);
    }

    CTIOperationRequest - getSessionAttribute(문자열 키)

    현재 CTIOperationRequest 개체에 설정된 지정된 세션 특성 키의 값을 반환합니다.

    get/set session 특성 메서드를 사용하면 메시지 변환기와 작업 처리기 간에 거의 모든 문자열 또는 숫자 값을 전달할 수 있습니다. sessionAttribute 개체에는 연락처의 전화 번호와 같이 컴퓨터 전화 통합 공급자 정의 세션 기간 동안 유효한 0개 이상의 키/값 데이터 쌍이 포함될 수 있습니다. 세션 속성은 연락처 흐름 내에서도 액세스할 수 있습니다. 작업 핸들러는 이러한 값을 사용할 때 필요한 세션 속성 키/값 쌍을 결정합니다. 일반적으로 메시지 변환기는 CTIOperationRequest - setSessionAttribute(String key, Object value) 메서드를 호출하여 CTIOperationRequest 개체에서 이러한 특성을 설정합니다. 세션 특성은 세션의 수명(예: 전체 호출) 동안 유지되며 해당 호출 세션 내의 각 작업 요청과 함께 CTI 공급자가 다시 전달해야 한다는 점에서 매개 변수와 다릅니다.

    표 22. 매개변수
    이름 유형 설명
    문자열 반환할 키 값의 이름입니다.
    표 23. 반환
    유형 설명
    문자열 또는 숫자 지정된 키의 값입니다. 이러한 키가 없으면 null을 반환합니다.
    var request = new sn_cti_core.CTIOperationRequest('origin');
    var phoneAttribute = request.getSessionAttribute('contact.phone');

    CTIOperationRequest - getSessionAttributes()

    현재 CTIOperationRequest 개체에 설정된 모든 세션 특성의 키-값 쌍 맵을 반환합니다.

    get/set session 특성 메서드를 사용하면 메시지 변환기와 작업 처리기 간에 거의 모든 문자열 또는 숫자 값을 전달할 수 있습니다. sessionAttribute 개체에는 연락처의 전화 번호와 같이 컴퓨터 전화 통합 공급자 정의 세션 기간 동안 유효한 0개 이상의 키/값 데이터 쌍이 포함될 수 있습니다. 세션 속성은 연락처 흐름 내에서도 액세스할 수 있습니다. 작업 핸들러는 이러한 값을 사용할 때 필요한 세션 속성 키/값 쌍을 결정합니다. 일반적으로 메시지 변환기는 CTIOperationRequest - setSessionAttribute(String key, Object value) 메서드를 호출하여 CTIOperationRequest 개체에서 이러한 특성을 설정합니다. 세션 특성은 세션의 수명(예: 전체 호출) 동안 유지되며 해당 호출 세션 내의 각 작업 요청과 함께 CTI 공급자가 다시 전달해야 한다는 점에서 매개 변수와 다릅니다.

    표 24. 매개변수
    이름 유형 설명
    없음
    표 25. 반환
    유형 설명
    객체 연결된 CTIOperationResponse 개체에 설정된 세션 특성 키-값 쌍의 맵입니다. 이 맵은 자유 형식이며 작업 핸들러의 필요에 따라 정의됩니다.
    var request = new sn_cti_core.CTIOperationRequest('origin');
    var parms = request.getSessionAttributes();
    for(var key in parms) {
        gs.info(key + '=' + parms[key]);
    }

    CTIOperationRequest - getSubStepNotFoundBehaviour

    하위 단계의 작업 핸들러를 찾을 수 없는 경우 하위 단계에 대한 처리 동작을 반환합니다.

    하위 단계를 사용하여 작업을 처리하기 전에 초기화 및 확인과 같은 작업을 수행합니다. 모든 CTI 공급자가 사용하는 일반 작업 처리기와 달리 하위 단계는 CTI 공급자에 따라 다르며 CTI 공급자와 관련된 용어 및 명명 규칙을 사용합니다.

    요청된 하위 단계 작업 핸들러를 ServiceNow 음성 프레임워크에서 찾을 수 없는 경우 "단계를 찾을 수 없는 동작"을 사용하려고 시도합니다. 이 동작은 일반적으로 작업이 처음 요청될 때 메시지 변환기에 의해 설정됩니다.

    표 26. 매개변수
    이름 유형 설명
    없음
    표 27. 반환
    유형 설명
    OperationNotFound동작 작업/하위 단계 조합(<operation_name>. SubStep>)입니다. 정의되지 않은 경우 null을 반환합니다.
    가능한 값:
    • OperationNotFoundBehaviours.ThrowError: 오류가 발생합니다.
    • OperationNotFoundBehaviours.PassThrough: 요청에 대해 추가 처리를 수행하지 않고 반환하기만 하면 됩니다.
    • OperationNotFoundBehaviours.RouteToOperation: 상위 작업 핸들러 <operation_name>를 사용합니다.
    var request = new sn_cti_core.CTIOperationRequest('origin');
    var behavior = request.getSubStepNotFoundBehaviour();

    CTIOperationRequest - setAuthToken(문자열 ID)

    현재 CTIOperationRequest 개체에 대한 인증 토큰을 설정합니다.

    이 토큰은 처리기 auth_required 의 플래그가 true로 설정된 경우 요청된 작업 처리기를 실행하기 전에 프레임워크에서 현재 ServiceNow 음성 사용자를 인증하는 데 사용됩니다ServiceNow 음성. auth_required 플래그는 운영 핸들러 [sn_cti_operation_handler] 테이블의 필드입니다. 인증 토큰의 수명은 호출 세션의 수명 동안이어야 하지만 CTI 공급자에 의해 결정됩니다.

    사용자 고유의 인증 작업 처리기를 만들어 구현에 필요한 인증/권한 부여 처리를 정의할 수 있습니다. 인증 토큰이 생성되는 방법에 관계없이 메시지 번역기는 CTI 페이로드에 토큰을 다시 전달해야 합니다. 또한 CTI 공급자는 이 인증 토큰을 로컬에 저장하고 인증이 필요한 각 작업 요청에 전달해야 합니다.

    인스턴스가 제공한 인증 작업 핸들러를 사용하는 경우 핸들러는 사용자가 입력한 4자리 PIN을 기반으로 인증 토큰 만들기를 시작합니다. 그런 다음 CTIOperationResponse 개체의 sessionAttributes 개체에 인증 토큰을 설정합니다. 연결된 메시지 변환기는 sessionAttributes 객체를 CTI 관련 페이로드로 변환한 다음 CTI 공급자에게 보냅니다.

    주:
    인증 토큰이 전달되지 않으면 플래그가 설정된 작업 처리기를 auth_required 실행하기 위한 모든 요청이 실패합니다. 인증을 사용하지 않는 경우 인증 토큰을 유지 관리할 필요가 없습니다.
    ServiceNow 기본 시스템은 Amazon Connect Connect에 연결할 수 있는 작업 핸들러 및 메시지 변환기를 제공합니다. Amazon Connect 내에서 고객 응대 흐름을 구축할 때 Amazon 서비스와 인스턴스 간에는 두 가지 통합 지점이 ServiceNow 있습니다.
    • AWS(Amazon Web Services) Lambda 프록시(AWS Lambda 함수 호출)
    • AWS Lex 봇(고객 입력 가져오기)
    작업 처리기 [sn_cti_operation_handler] 및 제공자 메시지 변환기 [sn_cti_provider_msg_transormer] 테이블에서 이러한 통합 지점에 사용 가능한 작업 핸들러 및 메시지 변환기를 찾을 수 있습니다.
    표 28. 매개변수
    이름 유형 설명
    id 문자열 관련된 ServiceNow 음성 사용자의 인증 토큰입니다.
    표 29. 반환
    유형 설명
    void

    전달된 인증 토큰을 저장하는 메시지 변환기 스크립트의 예입니다.

    {	
      try {
        var jsonPayload = httpRequest.body.data;
        if (jsonPayload) {
    	var event = jsonPayload.event;
    	if (event) {
    	  var details = event.Details;
    	  if (details) {					
    	    operationRequest.setOperationName(details.Parameters['sn_operation']);
    	    var contactData = details.ContactData;
    	    if(contactData) {
    		// Call id should be surfaced in openframe call log so it can be tied to transcription later
    		operationRequest.setParameter('contact.call_id', contactData.ContactId);
    		for(var ck in contactData.CustomerEndpoint) {
    		  operationRequest.setParameter('contact.' + ck, contactData.CustomerEndpoint[ck]);
    	       }
    	       operationRequest.setParameter('contact.id', contactData.ContactId);
    	       operationRequest.setParameter('contact.phone', contactData.CustomerEndpoint.Address);
    	    }
    	    var parameters = details.Parameters;
    	    if (parameters) {
    		for (var pk in parameters) {
    		  switch(pk) {
    		    case 'interactionId':
    			operationRequest.setInteractionSysId(parameters[pk]);
    			break;
    		    case 'authToken':
    			operationRequest.setAuthToken(parameters[pk]);
    			break;
    		    case 'language':
    			operationRequest.setLanguage(parameters[pk]);
    			break;
    		    case 'statusCode':
    		    case 'message':
    			break;
    								
    		    default:
    			operationRequest.setParameter(pk, parameters[pk]);
    		 }						
                }
              }					
            }
          }
        }
      } catch(e) {
    		ctx.setError(e);
      }
    })(httpRequest, operationRequest, ctx);

    CTIOperationRequest - setInteractionSysId(문자열 ID)

    현재 CTIOperationRequest 객체의 작업 요청과 연결된 상호 작용 기록의 sys_id 설정합니다.

    접촉 창구별 상호작용 기록 내에서 접촉 창구 상호작용 정보를 유지하려면 전체 ServiceNow 음성 통화 세션 동안 상호작용 기록 sys_id 유지관리해야 합니다.

    일반적으로 작업 핸들러는 새 연락처 호출이 시작될 때 상호작용 기록을 만듭니다. 그런 다음 CTIOperationRequest - setSessionAttribute(String key, Object value) 메서드를 사용하여 연결된 CTIOperationResponse 개체의 상호 작용 레코드 sys_id 및 테이블 이름을 세션 속성으로 설정합니다. 그런 다음 연결된 메서드 변환기는 이 정보를 CTI(컴퓨터 전화 통합 시스템) 제공자 페이로드로 변환하여 CTI 제공자에게 다시 보냅니다.

    CTI 제공자는 접촉 창구 세션의 상호작용 기록 sys_id 로컬에 저장해야 합니다. CTI 제공자가 이 연락처 세션에 대해 상호작용 ServiceNow 음성 할 때마다 페이로드의 해당 상호작용 기록 sys_id 다시 전달해야 합니다. 그런 다음 수신 메시지 변환기는 페이로드를 구문 분석하고 CTIOperationRequest - setInteractionSysId() 메서드를 사용하여 연결된 CTIOperationtRequest 객체의 상호작용 기록 sys_id 설정합니다.

    CTIOperationRequest - getInteractionRecord() 메서드는 이 sys_id 사용하여 접촉 세션에 대한 올바른 상호 작용 기록을 가져옵니다. 상호작용 기록은 상호작용 [interaction] 테이블에 있습니다. 상호작용 기록에 대한 자세한 내용은 다음을 참조하십시오.

    표 30. 매개변수
    이름 유형 설명
    sys_id 문자열 요청과 연결할 상호작용 기록의 sys_id입니다.
    표 31. 반환
    유형 설명
    void

    수신 페이로드(매개변수로 전달됨)에서 sys_id 상호작용 기록을 추출하여 연결된 CTIOperationRequest 객체에 설정하는 메시지 변환기 스크립트의 예입니다.

    {	
      try {
        var jsonPayload = httpRequest.body.data;
        if (jsonPayload) {
    	var event = jsonPayload.event;
    	if (event) {
    	  var details = event.Details;
    	  if (details) {					
    	    operationRequest.setOperationName(details.Parameters['sn_operation']);
    	    var contactData = details.ContactData;
    	    if(contactData) {
    		// Call id should be surfaced in openframe call log so it can be tied to transcription later
    		operationRequest.setParameter('contact.call_id', contactData.ContactId);
    		for(var ck in contactData.CustomerEndpoint) {
    		  operationRequest.setParameter('contact.' + ck, contactData.CustomerEndpoint[ck]);
    	       }
    	       operationRequest.setParameter('contact.id', contactData.ContactId);
    	       operationRequest.setParameter('contact.phone', contactData.CustomerEndpoint.Address);
    	    }
    	    var parameters = details.Parameters;
    	    if (parameters) {
    		for (var pk in parameters) {
    		  switch(pk) {
                     // Associate the existing customer interaction record with the request
    		    case 'interactionId':
    			operationRequest.setInteractionSysId(parameters[pk]);
    			break;
    		    case 'authToken':
    			operationRequest.setAuthToken(parameters[pk]);
    			break;
    		    case 'language':
    			operationRequest.setLanguage(parameters[pk]);
    			break;
    		    case 'statusCode':
    		    case 'message':
    			break;
    								
    		    default:
    			operationRequest.setParameter(pk, parameters[pk]);
    		 }						
                }
              }					
            }
          }
        }
      } catch(e) {
    		ctx.setError(e);
      }
    })(httpRequest, operationRequest, ctx);

    CTIOperationRequest - setLanguage(문자열 languageCode)

    CTIOperationRequest 개체에서 연결된 작업을 처리할 때 사용할 ISO 639.1 언어 코드를 설정합니다.

    고객 기본 설정 언어를 사용하면 플랫폼에서 제공하는 국제화 및 현지화 기능을 사용하여 관련 호출자와의 메시지 및 기타 커뮤니케이션을 사용자 지정할 수 있습니다. 일반적으로 메시지 변환기는 CTIOperationRequest 개체의 언어를 설정합니다.

    표 32. 매개변수
    이름 유형 설명
    '언어 코드' 문자열 관련 작업을 처리할 때 사용할 ISO 639.1 언어 코드입니다.
    표 33. 반환
    유형 설명
    void
    {	
      try {
        var jsonPayload = httpRequest.body.data;
        if (jsonPayload) {
    	var event = jsonPayload.event;
    	if (event) {
    	  var details = event.Details;
    	  if (details) {					
    	    operationRequest.setOperationName(details.Parameters['sn_operation']);
    	    var contactData = details.ContactData;
    	    if(contactData) {
    		// Call id should be surfaced in openframe call log so it can be tied to transcription later
    		operationRequest.setParameter('contact.call_id', contactData.ContactId);
    		for(var ck in contactData.CustomerEndpoint) {
    		  operationRequest.setParameter('contact.' + ck, contactData.CustomerEndpoint[ck]);
    	       }
    	       operationRequest.setParameter('contact.id', contactData.ContactId);
    	       operationRequest.setParameter('contact.phone', contactData.CustomerEndpoint.Address);
    	    }
    	    var parameters = details.Parameters;
    	    if (parameters) {
    		for (var pk in parameters) {
    		  switch(pk) {
    		    case 'interactionId':
    			operationRequest.setInteractionSysId(parameters[pk]);
    			break;
    		    case 'authToken':
    			operationRequest.setAuthToken(parameters[pk]);
    			break;
    		    case 'language':
    			operationRequest.setLanguage(parameters[pk]);
    			break;
    		    case 'statusCode':
    		    case 'message':
    			break;
    								
    		    default:
    			operationRequest.setParameter(pk, parameters[pk]);
    		 }						
                }
              }					
            }
          }
        }
      } catch(e) {
    		ctx.setError(e);
      }
    })(httpRequest, operationRequest, ctx);

    CTIOperationRequest - setMajorVersion(번호: majorVersion)

    연결된 CTIOperationRequest 개체에서 요청을 수행하는 CTI(컴퓨터 전화 통신 통합기) 공급자 소프트웨어의 주 버전을 설정합니다.

    인스턴스에 연결된 ServiceNow CTI 제공자가 여러 버전의 소프트웨어를 실행하는 경우 소프트웨어 버전에 따라 다른 처리 동작이 필요할 수 있으므로 이 방법을 사용합니다. 처리 동작이 소프트웨어 버전 간에 약간만 다른 경우 단일 작업 처리기만 사용하는 것이 합리적일 수 있습니다. 그런 다음 요청을 수행하는 소프트웨어의 버전을 확인하고 작업 처리기 내에서 요청/데이터를 처리하여 처리 차이를 처리할 수 있습니다. 필요한 처리가 버전 간에 크게 다른 경우 여러 작업 처리기를 사용하는 것이 더 효과적일 수 있습니다.

    일반적으로 메시지 변환기는 이 메서드를 호출하여 CTIOperationRequest 개체의 소프트웨어 버전을 설정한 다음 작업 처리기가 CTIOperationRequest - getMajorVersion() 메서드를 사용하여 설정된 값을 사용합니다. CTIOperationRequest - getMinorVersion()CTIOperationRequest - setMinorVersion(Number minorVersion) 메서드를 사용하여 제공자 소프트웨어의 부 버전 값을 가져오거나 설정할 수도 있습니다.

    표 34. 매개변수
    이름 유형 설명
    주 버전 번호 작업 요청을 하는 CTI 제공자 소프트웨어의 주 버전입니다.

    이 값이 이전에 설정되지 않은 경우 1을 반환합니다.

    표 35. 반환
    유형 설명
    void
    var request = new sn_cti_core.CTIOperationRequest('origin');
    request.setMajorVersion(2);

    CTIOperationRequest - setMinorVersion(번호 minorVersion)

    연결된 CTIOperationRequest 개체에서 요청을 수행하는 CTI(컴퓨터 전화 통신 통합기) 공급자 소프트웨어의 부 버전을 설정합니다.

    인스턴스에 연결된 ServiceNow CTI 제공자가 여러 버전의 소프트웨어를 실행하는 경우 소프트웨어 버전에 따라 다른 처리 동작이 필요할 수 있으므로 이 방법을 사용합니다. 처리 동작이 소프트웨어 버전 간에 약간만 다른 경우 단일 작업 처리기만 사용하는 것이 합리적일 수 있습니다. 그런 다음 요청을 수행하는 소프트웨어의 버전을 확인하고 작업 처리기 내에서 요청/데이터를 처리하여 처리 차이를 처리할 수 있습니다. 필요한 처리가 버전 간에 크게 다른 경우 여러 작업 처리기를 사용하는 것이 더 효과적일 수 있습니다.

    일반적으로 메시지 변환기는 이 메서드를 호출하여 CTIOperationRequest 개체의 소프트웨어 버전을 설정하고 작업 처리기는 CTIOperationRequest - getMinorVersion() 메서드를 사용하여 설정된 값을 사용합니다. CTIOperationRequest - getMajorVersion()CTIOperationRequest - setMajorVersion(Number, majorVersion) 메서드를 사용하여 공급자 소프트웨어의 주 버전 값을 가져오거나 설정할 수도 있습니다.

    표 36. 매개변수
    이름 유형 설명
    부 버전 번호 작업을 요청하는 CTI 제공자 소프트웨어의 부 버전입니다.

    이 값이 이전에 설정되지 않은 경우 0을 반환합니다.

    표 37. 반환
    유형 설명
    void
    var request = new sn_cti_core.CTIOperationRequest('origin');
    ...
    request.setMinorVersion(3);

    CTIOperationRequest - setOperationName(문자열 이름)

    CTI(컴퓨터 전화 통합 시스템) 공급자가 현재 CTIOperationRequest 개체에서 실행하려고 시도하는 작업의 이름을 설정합니다.

    작업 이름은 요청을 처리하는 데 사용되는 작업 처리기를 결정합니다. 연관된 메시지 변환기에서 이 메소드를 호출하십시오.

    주:
    Amazon Connect Lex 봇 구현의 경우 서로 다른 Amazon 의도가 동일한 의도 이름을 가질 수 없으므로 의도 이름에 5자 접미사가 추가됩니다. 프레임워크에서 ServiceNow 음성 의도 이름은 작업 핸들러 이름과 같습니다. 작업 핸들러는 이 접미사(myOperation_SUFFX)를 포함하는 작업 핸들러 이름을 사용하여 의도에 특정하거나, HR 요청 및 지원 센터 요청(myOperation)을 처리하기 위해 동일한 핸들러를 사용하는 것과 같이 여러 CTI 제공자 또는 다른 사용 사례에서 사용되는 제네릭일 수 있습니다.
    표 38. 매개변수
    이름 유형 설명
    이름 문자열 CTI 제공자가 현재 실행하려고 시도 중인 작업의 이름입니다.

    이 이름은 요청을 처리하는 데 사용할 작업 처리기의 이름과 같아야 합니다. 그렇지 않으면 오류가 발생합니다. 운영 핸들러 [sn_cti_operation_handler] 테이블에서 사용 가능한 운영 핸들러를 찾을 수 있습니다.

    표 39. 반환
    유형 설명
    void
    {	
      try {
        var jsonPayload = httpRequest.body.data;
        if (jsonPayload) {
    	var event = jsonPayload.event;
    	if (event) {
    	  var details = event.Details;
    	  if (details) {	
               // Set the operation handler to use to process the request				
    	    operationRequest.setOperationName(details.Parameters['sn_operation']);
    	    var contactData = details.ContactData;
    	    if(contactData) {
    		// Call id should be surfaced in openframe call log so it can be tied to transcription later
    		operationRequest.setParameter('contact.call_id', contactData.ContactId);
    		for(var ck in contactData.CustomerEndpoint) {
    		  operationRequest.setParameter('contact.' + ck, contactData.CustomerEndpoint[ck]);
    	       }
    	       operationRequest.setParameter('contact.id', contactData.ContactId);
    	       operationRequest.setParameter('contact.phone', contactData.CustomerEndpoint.Address);
    	    }
    	    var parameters = details.Parameters;
    	    if (parameters) {
    		for (var pk in parameters) {
    		  switch(pk) {
    		    case 'interactionId':
    			operationRequest.setInteractionSysId(parameters[pk]);
    			break;
    		    case 'authToken':
    			operationRequest.setAuthToken(parameters[pk]);
    			break;
    		    case 'language':
    			operationRequest.setLanguage(parameters[pk]);
    			break;
    		    case 'statusCode':
    		    case 'message':
    			break;
    								
    		    default:
    			operationRequest.setParameter(pk, parameters[pk]);
    		 }						
                }
              }					
            }
          }
        }
      } catch(e) {
    		ctx.setError(e);
      }
    })(httpRequest, operationRequest, ctx);

    CTIOperationRequest - setOperationSubStepName(문자열 이름)

    현재 CTIOperationRequest 객체에서 작업 하위 단계 이름을 설정합니다.

    하위 단계를 사용하여 작업을 처리하기 전에 초기화 및 확인과 같은 작업을 수행합니다. 모든 CTI 공급자가 사용하는 일반 작업 처리기와 달리 하위 단계는 CTI 공급자에 따라 다르며 CTI 공급자와 관련된 용어 및 명명 규칙을 사용합니다.

    프레임워크는 ServiceNow 음성 다음 단계를 수행하여 필요한 작업 핸들러 및 연관된 하위 단계 오퍼레이션 핸들러를 찾습니다.
    주:
    Amazon Connect Lex 봇 구현의 경우 서로 다른 Amazon 의도가 동일한 의도 이름을 가질 수 없으므로 의도 이름에 5자 접미사가 추가됩니다. 프레임워크에서 ServiceNow 음성 의도 이름은 작업 핸들러 이름과 같습니다. 작업 핸들러는 이 접미사(myOperation_SUFFX)를 포함하는 작업 핸들러 이름을 사용하여 의도에 특정하거나, HR 요청 및 지원 센터 요청(myOperation)을 처리하기 위해 동일한 핸들러를 사용하는 것과 같이 여러 CTI 제공자 또는 다른 사용 사례에서 사용되는 제네릭일 수 있습니다.
    1. 요청과 연결된 작업 핸들러를 찾으려고 시도합니다.
      • 먼저 myOperation_SUFFX라는 작업 처리기를 확인합니다.
      • 찾을 수 없는 경우 작업 처리기 myOperation을 검사합니다. 찾을 수 없는 경우 오류가 발생합니다.
    2. 처리기가 발견되면 작업 처리기에서 플래그를 auth_required 확인합니다. 설정된 경우 유효한 인증 토큰( getAuthToken() 메서드를 통해 획득)이 요청에 있는지 확인합니다. 존재하고 유효한 경우 처리를 계속하고, 그렇지 않으면 오류가 발생합니다.
    3. 전달된 하위 단계에 대한 운영 핸들러를 조회합니다. 이 예제에서는 subStepName=SubStep이라고 가정해 보겠습니다.
      • 먼저 myOperation_SUFFX라는 작업 처리기를 확인합니다 . 하위 단계. 발견되면 처리기를 실행합니다.
      • 찾을 수 없는 경우 myOperation.SubStep 처리기를 확인합니다. 발견되면 처리기를 실행합니다.
      • 찾을 수 없는 경우 요청 개체에 subStepNotFoundBehavior 가 설정되어 있는지 확인합니다.
      • 설정하면 동작을 실행하고, 그렇지 않으면 오류가 발생합니다.
    4. 기본 작업 핸들러(myOpersation_SUFFX 또는 myOperation)를 실행합니다.

    CTIOperationRequest - setSubStepNotFoundBehaviour(Object behaviour) 메서드를 호출하여 하위 단계의 기본 동작을 설정할 수 있습니다.

    표 40. 매개변수
    이름 유형 설명
    이름 문자열 CTI 제공자가 실행하려는 하위 단계의 이름입니다.
    표 41. 반환
    유형 설명
    void
    (function( /*HTTPRequest*/ httpRequest, /*CTIOperationRequest*/ operationRequest, /*Context*/ ctx) {
      try {
        var jsonPayload = httpRequest.body.data;
        if (jsonPayload) {
          var event = jsonPayload.event;
          if (event) {
            var intent = event.currentIntent;
    	 var inputTranscript = event.inputTranscript;
    	 if(inputTranscript) {
    	   operationRequest.setParameter('$utterance', inputTranscript);
    	 }
            if (intent) {
              operationRequest.setOperationName(intent.name);
    	   // Add this because intent name gets changed through the pipeline
    	   operationRequest.setParameter('$original_intent', intent.name);
              var sessionAttributes = event.sessionAttributes;
              if (sessionAttributes) {
                for (var sk in sessionAttributes) {
                  switch (sk) {
                    case 'interactionId':
                      operationRequest.setInteractionSysId(sessionAttributes[sk]);
                      break;
                    case 'authToken':
                      operationRequest.setAuthToken(sessionAttributes[sk]);
                      break;
    		  case 'language':
    		    operationRequest.setLanguage(sessionAttributes[sk]);
    		    break;
                    case 'statusCode':
                    case 'message':
                      break;
                    default:
                      operationRequest.setSessionAttribute(sk, sessionAttributes[sk]);
                  }
                }
              }
              var slots = intent.slots;
    	   // Always copy in slots they are the parameters for the operation
              if (slots) {
                for (var pk in slots) {
                  operationRequest.setParameter(pk, slots[pk]);
                }
              }
              var invocationSource = event.invocationSource;
    	   operationRequest.setParameter('$$invocationSource', invocationSource);
              // Specific handling for dialog hooks with a way to override for Amazon specific provider
              if (invocationSource === 'DialogCodeHook') {
    	     // Set substep to trigger forwarding to another handler IF it s present
    	     operationRequest.setOperationSubStepName(invocationSource);
    	     // Allow pass through behavior
    	     var behaviourToUse = sn_cti_core.CTIOperationRequest.OperationNotFoundBehaviours.PassThrough;
    	     operationRequest.setSubStepNotFoundBehaviour(behaviourToUse);
    	     // Reserved - copy slots in so we can just use delegate as default if the call isn't handled
    	     operationRequest.setParameter('$$slots', slots);
              }
            }
          }
        }
      } catch (e) {
          ctx.setError(e);
      }
      return operationRequest;
    })(httpRequest, operationRequest, ctx);

    CTIOperationRequest - setParameter(문자열 키, 객체 값)

    현재 CTIOperationRequest 개체의 매개 변수 개체에 지정된 키-값 쌍을 설정합니다.

    get/set 매개 변수 메서드를 사용하면 메시지 변환기와 작업 처리기 간에 거의 모든 문자열 또는 숫자 값을 전달할 수 있습니다. 파라미터 객체에는 현재 작업 요청과 직접 상관 관계가 있는 0개 이상의 키/값 데이터 쌍이 포함될 수 있습니다. 작업 핸들러는 이러한 값을 사용할 때 필요한 키/값 쌍을 결정합니다. 일반적으로 메시지 변환기는 이 메서드를 호출하여 CTIOperationRequest 개체에서 이러한 매개 변수를 설정하고 작업 처리기는 CTIOperationRequest - getParameter(String key) 또는 CTIOperationRequest - getParameters() 메서드를 사용하여 이러한 매개 변수를 사용합니다.

    주:
    JSON.parse(JSON.stringify(object)) 작업에서 살아남을 수 있는 객체만 저장해야 합니다. 이 기준을 충족하지 않는 객체는 전체 작업 처리 체인을 통해 올바르게 전파되지 않을 수 있습니다.
    예:
    var x = {
      "string": 'abc',
      "int": 123,
      "float": 1.234,
      "number": new Number(3),
      "boolean": true,
      "date": new Date(2006, 0, 2, 15, 4, 5),
      "object": {
        "string": 'abc',
        "int": 123,
        "float": 1.234,
        "number": new Number(3),
        "boolean": true,
        "date": new Date(2006, 0, 2, 15, 4, 5)
      },
      "function": function(abc) {
    
      }
    }
    var stringify = JSON.stringify(x);
    gs.info(stringify);
    var hydrate = JSON.parse(stringify);
    var stringify2 = JSON.stringify(hydrate);
    gs.info(stringify2);
    
    생성:
    {"string":"abc","int":123,"float":1.234,"number":3,"boolean":true,"date":"2006-01-02T23:04:05.000Z","object":{"string":"abc","int":123,"float":1.234,"number":3,"boolean":true,"date":"2006-01-02T23:04:05.000Z"}}
    {"string":"abc","int":123,"float":1.234,"number":3,"boolean":true,"date":"2006-01-02T23:04:05.000Z","object":{"string":"abc","int":123,"float":1.234,"number":3,"boolean":true,"date":"2006-01-02T23:04:05.000Z"}}
    
    표 42. 매개변수
    이름 유형 설명
    문자열 연결된 값을 저장할 키의 이름입니다.
    객체 저장할 값입니다.
    유효한 데이터 유형:
    • 문자열
    • int
    • 뜨다
    • 번호
    • 부울
    • 날짜
    • 객체
    표 43. 반환
    유형 설명
    void
    {	
      try {
        var jsonPayload = httpRequest.body.data;
        if (jsonPayload) {
    	var event = jsonPayload.event;
    	if (event) {
    	  var details = event.Details;
    	  if (details) {					
    	    operationRequest.setOperationName(details.Parameters['sn_operation']);
    	    var contactData = details.ContactData;
    	    if(contactData) {
    		// Call id should be surfaced in openframe call log so it can be tied to transcription later
    		operationRequest.setParameter('contact.call_id', contactData.ContactId);
    		for(var ck in contactData.CustomerEndpoint) {
    		  operationRequest.setParameter('contact.' + ck, contactData.CustomerEndpoint[ck]);
    	       }
    	       operationRequest.setParameter('contact.id', contactData.ContactId);
    	       operationRequest.setParameter('contact.phone', contactData.CustomerEndpoint.Address);
    	    }
    	    var parameters = details.Parameters;
    	    if (parameters) {
    		for (var pk in parameters) {
    		  switch(pk) {
    		    case 'interactionId':
    			operationRequest.setInteractionSysId(parameters[pk]);
    			break;
    		    case 'authToken':
    			operationRequest.setAuthToken(parameters[pk]);
    			break;
    		    case 'language':
    			operationRequest.setLanguage(parameters[pk]);
    			break;
    		    case 'statusCode':
    		    case 'message':
    			break;
    								
    		    default:
    			operationRequest.setParameter(pk, parameters[pk]);
    		 }						
                }
              }					
            }
          }
        }
      } catch(e) {
    		ctx.setError(e);
      }
    })(httpRequest, operationRequest, ctx);

    CTIOperationRequest - setSessionAttribute(문자열 키, 객체 값)

    현재 CTIOperationRequest 개체에서 지정된 세션 특성 키-값 쌍을 설정합니다.

    get/set session 특성 메서드를 사용하면 메시지 변환기와 작업 처리기 간에 거의 모든 문자열 또는 숫자 값을 전달할 수 있습니다. sessionAttribute 개체에는 컴퓨터 전화 통합 공급자 정의 세션 기간 동안 유효한 0개 이상의 키/값 데이터 쌍이 포함될 수 있습니다. 세션 속성은 연락처 흐름 내에서도 액세스할 수 있습니다. 작업 핸들러는 이러한 값을 사용할 때 필요한 세션 속성 키/값 쌍을 결정합니다. 일반적으로 메시지 변환기는 이 메서드를 호출하여 CTIOperationRequest 개체에서 이러한 특성을 설정하고 작업 처리기는 CTIOperationRequest - getSessionAttribute(문자열 키) 또는 CTIOperationRequest - getSessionAttribute() 메서드를 사용하여 속성을 가져옵니다.

    주:
    JSON.parse(JSON.stringify(object)) 작업에서 살아남을 수 있는 객체만 저장해야 합니다. 이 기준을 충족하지 않는 객체는 전체 작업 처리 체인을 통해 올바르게 전파되지 않을 수 있습니다.
    예:
    var x = {
      "string": 'abc',
      "int": 123,
      "float": 1.234,
      "number": new Number(3),
      "boolean": true,
      "date": new Date(2006, 0, 2, 15, 4, 5),
      "object": {
        "string": 'abc',
        "int": 123,
        "float": 1.234,
        "number": new Number(3),
        "boolean": true,
        "date": new Date(2006, 0, 2, 15, 4, 5)
      },
      "function": function(abc) {
    
      }
    }
    var stringify = JSON.stringify(x);
    gs.info(stringify);
    var hydrate = JSON.parse(stringify);
    var stringify2 = JSON.stringify(hydrate);
    gs.info(stringify2);
    
    생성:
    {"string":"abc","int":123,"float":1.234,"number":3,"boolean":true,"date":"2006-01-02T23:04:05.000Z","object":{"string":"abc","int":123,"float":1.234,"number":3,"boolean":true,"date":"2006-01-02T23:04:05.000Z"}}
    {"string":"abc","int":123,"float":1.234,"number":3,"boolean":true,"date":"2006-01-02T23:04:05.000Z","object":{"string":"abc","int":123,"float":1.234,"number":3,"boolean":true,"date":"2006-01-02T23:04:05.000Z"}}
    
    표 44. 매개변수
    이름 유형 설명
    문자열 연결된 값을 저장할 키의 이름입니다.
    객체 저장할 값입니다.
    유효한 데이터 유형:
    • 문자열
    • int
    • 뜨다
    • 번호
    • 부울
    • 날짜
    • 객체
    표 45. 반환
    유형 설명
    void
    var request = new sn_cti_core.CTIOperationRequest('origin');
    request.setSessionAttribute('contact.phone', '+15552222345');
    request.setSessionAttribute('contact.okToCall', true);
    request.setSessionAttribute('contact.address', {
        street: '1234 Main St'
        city: 'API City',
        zip: 91335
    });

    CTIOperationRequest - setSubStepNotFoundBehaviour(객체 동작)

    현재 하위 단계의 작업 핸들러를 찾을 수 없는 경우 수행할 동작을 설정합니다.

    이 메소드는 입력 메시지 변환기에 의해 호출되어야 합니다.

    표 46. 매개변수
    이름 유형 설명
    행동 OperationNotFound동작 하위 단계에 대한 처리 동작이 지정되지 않은 경우 사용할 동작입니다. 이는 CTIOperationRequest.OperationNotFoundBehaviours 객체에 정의된 동작이어야 합니다.
    가능한 값:
    • ThrowError: 오류가 발생합니다.
    • PassThrough: 요청에 대해 추가 처리를 수행하지 않고 반환만 수행합니다.
    • RouteToOperation: 상위 작업 핸들러 <operation_name>를 사용합니다.
    표 47. 반환
    유형 설명
    void
    (function( /*HTTPRequest*/ httpRequest, /*CTIOperationRequest*/ operationRequest, /*Context*/ ctx) {
      try {
        var jsonPayload = httpRequest.body.data;
        if (jsonPayload) {
          var event = jsonPayload.event;
          if (event) {
            var intent = event.currentIntent;
    	 var inputTranscript = event.inputTranscript;
    	 if(inputTranscript) {
    	   operationRequest.setParameter('$utterance', inputTranscript);
    	 }
            if (intent) {
              operationRequest.setOperationName(intent.name);
    	   // Add this because intent name gets changed through the pipeline
    	   operationRequest.setParameter('$original_intent', intent.name);
              var sessionAttributes = event.sessionAttributes;
              if (sessionAttributes) {
                for (var sk in sessionAttributes) {
                  switch (sk) {
                    case 'interactionId':
                      operationRequest.setInteractionSysId(sessionAttributes[sk]);
                      break;
                    case 'authToken':
                      operationRequest.setAuthToken(sessionAttributes[sk]);
                      break;
    		  case 'language':
    		    operationRequest.setLanguage(sessionAttributes[sk]);
    		    break;
                    case 'statusCode':
                    case 'message':
                      break;
                    default:
                      operationRequest.setSessionAttribute(sk, sessionAttributes[sk]);
                  }
                }
              }
              var slots = intent.slots;
    	   // Always copy in slots they are the parameters for the operation
              if (slots) {
                for (var pk in slots) {
                  operationRequest.setParameter(pk, slots[pk]);
                }
              }
              var invocationSource = event.invocationSource;
    	   operationRequest.setParameter('$$invocationSource', invocationSource);
              // Specific handling for dialog hooks with a way to overide for Amazon specific provider
              if (invocationSource === 'DialogCodeHook') {
    	     // Set substep to trigger forwarding to another handler IF it s present
    	     operationRequest.setOperationSubStepName(invocationSource);
    	     // Allow pass through behavior
    	     var behaviourToUse = sn_cti_core.CTIOperationRequest.OperationNotFoundBehaviours.PassThrough;
    	     operationRequest.setSubStepNotFoundBehaviour(behaviourToUse);
    	     // Reserved - copy slots in so we can just use delegate as default if the call isn't handled
    	     operationRequest.setParameter('$$slots', slots);
              }
            }
          }
        }
      } catch (e) {
          ctx.setError(e);
      }
      return operationRequest;
    })(httpRequest, operationRequest, ctx);