CTIOperationRequest - 범위가 지정됨, 전역

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

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

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

    ServiceNow 기본 시스템은 Amazon Connect Connect에 연결할 수 있는 작업 핸들러 및 메시지 변환기를 제공합니다. Amazon Connect 내에서 연락처 흐름을 구축할 때 Amazon 서비스와 인스턴스 간에는 두 가지 통합 지점이 있습니다 ServiceNow .
    • Amazon Web Services(AWS) 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 스크립트 포함 ServiceNow 음성 에 액세스하려면 먼저 (sn_cti_core) 플러그인을 활성화해야 합니다. 활성화 ServiceNow 음성에 대한 자세한 내용은 ServiceNow Voice 애플리케이션 설치를 참조하십시오.

    ServiceNow 음성대한 자세한 내용은 ServiceNow Voice를 참조하십시오.

    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자리 핀을 기반으로 인증 토큰 만들기를 시작합니다. 그런 다음 CTIOperationResponse 개체의 sessionAttributes 개체에서 인증 토큰을 설정합니다. 연결된 메시지 변환기는 sessionAttributes 객체를 CTI 특정 페이로드로 변환한 다음 CTI 제공자에게 보냅니다.

    주:
    인증 토큰이 전달되지 않으면 플래그가 auth_required 설정된 작업 처리기를 실행하려는 모든 요청이 실패합니다. 인증을 사용하지 않는 경우 인증 토큰을 유지 관리할 필요가 없습니다.
    ServiceNow 기본 시스템은 Amazon Connect Connect에 연결할 수 있는 작업 핸들러 및 메시지 변환기를 제공합니다. Amazon Connect 내에서 연락처 흐름을 구축할 때 Amazon 서비스와 인스턴스 간에는 두 가지 통합 지점이 있습니다 ServiceNow .
    • Amazon Web Services(AWS) 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) 소프트웨어의 주 버전을 반환합니다.

    소프트웨어 버전에 따라 다른 처리 동작이 필요할 수 있으므로 인스턴스에 연결된 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(컴퓨터 전화 통합 시스템) 소프트웨어의 부 버전을 반환합니다.

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

    일반적으로 메시지 변환기는 CTIOperationRequest - setMinorVersion(Number, minorVersion) 메서드를 호출하여 CTIOperationRequest CTIOperationRequest - setMinorVersion(Number, minorVersion) 개체의 소프트웨어 버전을 설정하고 작업 처리기는 이 메서드를 사용하여 설정된 값을 사용합니다. CTIOperationRequest - getMajorVersion() CTIOperationRequest - getMajorVersion()CTIOperationRequest - setMajorVersion(Number, majorVersion) CTIOperationRequest - setMajorVersion(Number, 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)를 포함하는 작업 처리기 이름을 갖는 등 의도에 따라 다르거나, 여러 CTI 제공자 또는 다른 사용 사례(예: 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)를 포함하는 작업 처리기 이름을 갖는 등 의도에 따라 다르거나, 여러 CTI 제공자 또는 다른 사용 사례(예: 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 behaviour) 메서드를 호출하여 고유한 변환기를 만드는 경우 이 동작을 재정의할 수 있습니다.

    표 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 세션 특성 메서드를 사용하면 메시지 변환기와 작업 처리기 간에 거의 모든 문자열 또는 숫자 값을 전달할 수 있습니다. 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 세션 특성 메서드를 사용하면 메시지 변환기와 작업 처리기 간에 거의 모든 문자열 또는 숫자 값을 전달할 수 있습니다. 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. 반환
    유형 설명
    OperationNotFoundBehaviours 작업/하위 단계 조합에 대해 작업 핸들러를 찾을 수 없을 때 수행할 동작/처리(<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자리 핀을 기반으로 인증 토큰 만들기를 시작합니다. 그런 다음 CTIOperationResponse 개체의 sessionAttributes 개체에서 인증 토큰을 설정합니다. 연결된 메시지 변환기는 sessionAttributes 객체를 CTI 특정 페이로드로 변환한 다음 CTI 제공자에게 보냅니다.

    주:
    인증 토큰이 전달되지 않으면 플래그가 auth_required 설정된 작업 처리기를 실행하려는 모든 요청이 실패합니다. 인증을 사용하지 않는 경우 인증 토큰을 유지 관리할 필요가 없습니다.
    ServiceNow 기본 시스템은 Amazon Connect Connect에 연결할 수 있는 작업 핸들러 및 메시지 변환기를 제공합니다. Amazon Connect 내에서 연락처 흐름을 구축할 때 Amazon 서비스와 인스턴스 간에는 두 가지 통합 지점이 있습니다 ServiceNow .
    • Amazon Web Services(AWS) 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 사용하여 접촉 창구 세션에 대한 올바른 상호 작용 기록을 얻습니다.

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

    테이블: 상호작용 [interaction]

    표 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(Number, majorVersion)

    연결된 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(Number, minorVersion)

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

    소프트웨어 버전에 따라 다른 처리 동작이 필요할 수 있으므로 인스턴스에 연결된 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)를 포함하는 작업 처리기 이름을 갖는 등 의도에 따라 다르거나, 여러 CTI 제공자 또는 다른 사용 사례(예: 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)를 포함하는 작업 처리기 이름을 갖는 등 의도에 따라 다르거나, 여러 CTI 제공자 또는 다른 사용 사례(예: 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 키) 또는 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 세션 특성 메서드를 사용하면 메시지 변환기와 작업 처리기 간에 거의 모든 문자열 또는 숫자 값을 전달할 수 있습니다. sessionAttribute 개체는 컴퓨터 전화 통신 통합 공급자 정의 세션 동안 유효한 0개 이상의 키/값 데이터 쌍을 포함할 수 있습니다. 연락처 플로우 내에서 세션 속성에 액세스할 수도 있습니다. 작업 핸들러는 이러한 값을 사용할 때 필요한 세션 속성 키/값 쌍을 결정합니다. 일반적으로 메시지 변환기는 이 메서드를 호출하여 CTIOperationRequest 개체에서 이러한 특성을 설정하고 작업 처리기는 CTIOperationRequest - getSessionAttribute(String 키) 또는 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. 매개변수
    이름 유형 설명
    행동 OperationNotFoundBehaviours 하위 단계에 대해 처리 동작이 지정되지 않은 경우 사용할 동작입니다. 이는 CTIOperationRequest.OperationNotFoundBehaviours 개체에 정의된 동작이어야 합니다.
    가능한 값:
    • ThrowError: 오류를 throw합니다.
    • 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);