CTIOperationRequest - com escopo, global

  • Versão de lançamento: Yokohama
  • Atualizado 30 de jan. de 2025
  • 38 min. de leitura
  • A inclusão de script CTIOperationRequest fornece métodos para definir e obter dados no objeto CTIOperationRequest atual.

    Você usa objetos CTIOperationRequest para passar informações entre um transformador de mensagem e um manipulador de operação na estrutura ServiceNow Serviços de voz.

    Normalmente, um transformador de mensagem é responsável por analisar uma carga útil específica do CTI de entrada e definir os dados da carga útil em um objeto CTIOperationRequest associado. Um manipulador de operação é responsável por obter as informações do objeto CTIOperationRequest e usar os dados para processar a operação solicitada.

    O sistema base ServiceNow fornece manipuladores de operação de trabalho e transformadores de mensagem que permitem a conexão com o Amazon Connect. Ao criar fluxos de contato no Amazon Connect, há dois pontos de integração entre os serviços da Amazon e uma instância ServiceNow :
    • Proxy do Lambda da Amazon Web Services (AWS) (invocar função do AWS Lambda)
    • Bot do AWS Lex (obter entrada do cliente)
    Você pode encontrar os manipuladores de operação e transformadores de mensagem disponíveis para esses pontos de integração nas tabelas Manipuladores de operação [sn_cti_operation_handler] e Transformador de mensagem do provedor [sn_cti_provider_msg_transormer].

    Uma carga útil é passada para uma instância ServiceNow de uma origem externa, como de um provedor de integração de telefonia e computação (CTI) que está fazendo uma solicitação de operação. Quando uma solicitação é recebida, um transformador de mensagem analisa a carga e usa os métodos de conjunto CTIOperationRequest para definir valores de carga, como o nome do manipulador de operação, em um objeto CTIOperationRequest específico de contato.

    Por exemplo, o script do transformador de mensagem a seguir analisa a carga passada em JSON e define os valores exigidos pelo manipulador de operação associado no objeto 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);

    Depois que o transformador de mensagem termina de analisar a carga passada, a estrutura ServiceNow Serviços de voz instancia o manipulador de operação especificado. O manipulador operacional usa os métodos get de inclusão de script CTIOperationResponse para obter as informações necessárias do objeto CTIOperationRequest associado para processar a operação solicitada.

    Por exemplo, o script do manipulador de operação a seguir armazena valores que foram definidos no objeto CTIOperationRequest no registro de interação associado à chamada.

    (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);

    Para obter informações adicionais sobre como criar manipuladores de operação, consulte Configuração de um fluxo de contato para uma interação automatizada com solicitante.

    Esta inclusão de script é executada no namespace sn_cti_core. Antes que você possa acessar a inclusão de script CTIOperationRequest, o plug-in ServiceNow Serviços de voz (sn_cti_core) deve ser ativado. Para obter informações sobre como ativar ServiceNow Serviços de vozo , consulte Instalar aplicações do ServiceNow Voice.

    Para obter informações adicionais sobre o ServiceNow Serviços de voz, consulte ServiceNow Voice.

    CTIOperationRequest - CTIOperationRequest(cadeia de caracteres de origem)

    Instancia um objeto CTIOperationRequest.

    Tabela 1. Parâmetros
    Nome Tipo Descrição
    origem Cadeia de caracteres Opcional. Origem da solicitação. Normalmente, o nome do provedor do integrador de telefonia e computação.

    Padrão: nulo

    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()

    Retorna o token de autenticação definido no objeto CTIOperationRequest associado.

    Este token é usado pela estrutura ServiceNow Serviços de voz para autenticar o usuário ServiceNow Serviços de voz atual antes de executar o manipulador de operação solicitada se o sinalizador auth_required do manipulador estiver definido como verdadeiro. O sinalizador auth_required é um campo na tabela Manipulador de operações [sn_cti_operation_handler]. A vida útil de um token de autenticação deve ser a vida útil da sessão de chamada, mas é determinada pelo provedor de CTI.

    Você pode definir qualquer manipulação de autenticação/autorização necessária para sua implementação criando seu próprio manipulador de operação de autenticação. Independentemente de como o token de autenticação é gerado, o tradutor de mensagens deve passar o token de volta na carga de CTI. Além disso, o provedor de CTI deve armazenar este token de autenticação localmente e passá-lo em cada solicitação de operação que requer autenticação.

    Se estiver usando o manipulador de operação de autenticação fornecido pela instância, o manipulador iniciará a criação do token de autenticação com base em um PIN de quatro dígitos inserido pelo usuário. Em seguida, ele define o token de autenticação no objeto "sessionAttributes" do objeto CTIOperationResponse. O transformador de mensagem associado converte o objeto "sessionAttributes" na carga específica do CTI e a envia para o provedor de CTI.

    Nota:
    Se o token de autenticação não for aprovado, todas as solicitações para executar manipuladores de operação com o sinalizador auth_required definido falharão. Se você não usar autenticação, não precisará manter tokens de autenticação.
    O sistema base ServiceNow fornece manipuladores de operação de trabalho e transformadores de mensagem que permitem a conexão com o Amazon Connect. Ao criar fluxos de contato no Amazon Connect, há dois pontos de integração entre os serviços da Amazon e uma instância ServiceNow :
    • Proxy do Lambda da Amazon Web Services (AWS) (invocar função do AWS Lambda)
    • Bot do AWS Lex (obter entrada do cliente)
    Você pode encontrar os manipuladores de operação e transformadores de mensagem disponíveis para esses pontos de integração nas tabelas Manipuladores de operação [sn_cti_operation_handler] e Transformador de mensagem do provedor [sn_cti_provider_msg_transormer].
    Tabela 2. Parâmetros
    Nome Tipo Descrição
    Nenhum
    Tabela 3. Retorna
    Tipo Descrição
    Cadeia de caracteres O token de autenticação associado ao usuário ServiceNow Serviços de voz atual.
    (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()

    Retorna a interação GlideRecord associada à solicitação de operação.

    Uma interação representa uma solicitação de assistência do cliente feita por meio de um bate-papo, chamada telefônica ou pessoalmente. As interações podem ser roteadas para filas de atribuição ou atribuídas diretamente aos agentes. Os registros de interação são armazenados na tabela Interação [interação] e podem conter qualquer tipo de dados que descreva as interações da conta de serviço com um cliente para uma sessão específica.

    Os registros de interação são associados a um objeto CTIOperationRequest por meio do método CTIOperationRequest - setInteractionSysId(String Id). Este método é normalmente chamado pelo transformador de mensagem e deve ser chamado antes de chamar o método getInteractionRecord().

    Tabela 4. Parâmetros
    Nome Tipo Descrição
    Nenhum
    Tabela 5. Retorna
    Tipo Descrição
    GlideRecord Objeto GlideRecord de interação associado ao objeto CTIOperationRequest atual. Se o registro de interação sys_id não tiver sido definido no objeto CTIOperationRequest, retornará nulo.
    (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()

    Retorna o sys_id do registro de interação associado ao objeto CTIOperationRequest atual.

    O método CTIOperationRequest - setInteractionSysId(String Id) deve ter sido chamado antes de chamar este método.

    Tabela 6. Parâmetros
    Nome Tipo Descrição
    Nenhum
    Tabela 7. Retorna
    Tipo Descrição
    Cadeia de caracteres O sys_id do registro de interação definido no objeto CTIOperationRequest atual.

    Se o sys_id não tiver sido definido no objeto CTIOperationRequest associado, o método retornará nulo.

    (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()

    Retorna o código de idioma ISO 639.1 que foi definido no objeto CTIOperationRequest atual.

    O uso do idioma preferencial do cliente permite que você use os recursos de internacionalização e localização fornecidos pela plataforma para personalizar mensagens e outras comunicações com o solicitante associado.

    Normalmente, um manipulador de operação chama o método getLanguage() e o transformador de mensagem define o idioma no objeto CTIOperationRequest chamando o método CTIOperationRequest - setLanguage(String idiomaCode).

    Tabela 8. Parâmetros
    Nome Tipo Descrição
    Nenhum
    Tabela 9. Retorna
    Tipo Descrição
    Cadeia de caracteres O código de idioma ISO 639.1 definido no objeto CTIOperationRequest atual. Se o código de idioma não estiver definido, retornará en.

    O exemplo a seguir mostra um manipulador de operação chamando getLanguage() para obter o idioma preferencial do solicitante.

    (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()

    Retorna a versão principal do software do integrador de telefonia e computação (CTI) definido no objeto CTIOperationRequest atual.

    Use este método se os provedores de CTI conectados à sua instância ServiceNow estiverem executando várias versões do software, pois diferentes versões de software podem exigir comportamentos de processamento diferentes. Se o comportamento de processamento for apenas um pouco diferente entre as versões do software, pode fazer sentido ter apenas um único manipulador de operação. Você pode lidar com as diferenças de processamento apenas verificando a versão do software que faz a solicitação e processar a solicitação/dados no manipulador de operação. Se o processamento necessário for significativamente diferente entre as versões, pode ser mais eficaz usar vários manipuladores de operação.

    Normalmente, o transformador de mensagem define a versão do software no objeto CTIOperationRequest chamando o método CTIOperationRequest - setMajorVersion(Number majorVersion) e um manipulador de operação consome o valor definido usando esse método. Você também pode obter/definir o valor da versão secundária do software de um provedor usando os métodos CTIOperationRequest - getMinorVersion() e CTIOperationRequest - setMinorVersion(Number minorVersion).

    Tabela 10. Parâmetros
    Nome Tipo Descrição
    Nenhum
    Tabela 11. Retorna
    Tipo Descrição
    Número Número da versão principal do software CTI.

    Se a versão principal nunca foi definida, retorna 1.

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

    CTIOperationRequest - getMinorVersion()

    Retorna a versão secundária do software do integrador de telefonia e computação (CTI) associado a um objeto CTIOperationRequest.

    Use este método se os provedores de CTI conectados à sua instância ServiceNow estiverem executando várias versões do software, pois diferentes versões de software podem exigir comportamentos de processamento diferentes. Se o comportamento de processamento for apenas um pouco diferente entre as versões do software, pode fazer sentido ter apenas um único manipulador de operação. Você pode lidar com as diferenças de processamento apenas verificando a versão do software que faz a solicitação e processar a solicitação/dados no manipulador de operação. Se o processamento necessário for significativamente diferente entre as versões, pode ser mais eficaz usar vários manipuladores de operação.

    Normalmente, o transformador de mensagem define a versão do software no objeto CTIOperationRequest chamando o método CTIOperationRequest - setMinorVersion(Number minorVersion) CTIOperationRequest - setMinorVersion(Number minorVersion) e um manipulador de operação consome o valor definido usando esse método. Você também pode obter/definir o valor da versão principal do software de um provedor usando os métodos CTIOperationRequest - getMajorVersion() CTIOperationRequest – getMajorVersion() e CTIOperationRequest - setMajorVersion(Number majorVersion) CTIOperationRequest - setMajorVersion(Number majorVersion).

    Tabela 12. Parâmetros
    Nome Tipo Descrição
    Nenhum
    Tabela 13. Retorna
    Tipo Descrição
    Número Número da versão secundária do software CTI.

    Se a versão secundária nunca foi definida, retorna 0.

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

    CTIOperationRequest – getOperationName()

    Retorna o nome da operação que o provedor de integração de telefonia e computação (CTI) está solicitando para executar.

    O nome da operação determina o manipulador de operação que é usado para processar uma solicitação. Normalmente, o transformador de mensagem define o nome da operação no objeto CTIOperationRequest usando o método CTIOperationRequest - setOperationName(String name).

    Nota:
    O método getOperationName() não instancia o manipulador de operação associado. Isso é feito pela estrutura ServiceNow Serviços de voz. Este método simplesmente retorna o nome do manipulador de operação associado.
    Nota:
    Para implementações de bot do Amazon Connect Lex, os nomes de intenção são anexados com um sufixo de cinco letras, pois diferentes intenções da Amazon não podem ter o mesmo nome de intenção. Na estrutura ServiceNow Serviços de voz, o nome da intenção é igual ao nome do manipulador de operação. Um manipulador de operação pode ser específico para uma intenção, tendo um nome de manipulador de operação que inclui este sufixo (myOperation_SUFFX), ou pode ser genérico e usado por vários provedores de CTI ou diferentes casos de uso, como usar o mesmo manipulador para processar um RH solicitação e uma solicitação de help desk (myOperation).
    Tabela 14. Parâmetros
    Nome Tipo Descrição
    Nenhum
    Tabela 15. Retorna
    Tipo Descrição
    Cadeia de caracteres O nome da operação que o provedor de CTI está solicitando para executar. Se o nome da operação não estiver definido, retornará nulo.
    var request = new sn_cti_core.CTIOperationRequest('origin');
    var name = request.getOperationName();
    

    CTIOperationRequest – getOperationSubStepName()

    Retorna o nome do manipulador de operação de subetapa definido no objeto CTIOperationRequest atual.

    Use subetapas para executar ações como inicialização e validação antes de processar uma operação. Ao contrário dos manipuladores de operação que devem ser genéricos e usados por todos os provedores de CTI, as subetapas são específicas do provedor de CTI e usam terminologia e convenções de nomenclatura específicas para o provedor de CTI.

    A estrutura ServiceNow Serviços de voz executa as etapas a seguir para localizar o manipulador de operação necessário e todos os manipuladores de operação de subetapa associados.
    Nota:
    Para implementações de bot do Amazon Connect Lex, os nomes de intenção são anexados com um sufixo de cinco letras, pois diferentes intenções da Amazon não podem ter o mesmo nome de intenção. Na estrutura ServiceNow Serviços de voz, o nome da intenção é igual ao nome do manipulador de operação. Um manipulador de operação pode ser específico para uma intenção, tendo um nome de manipulador de operação que inclui este sufixo (myOperation_SUFFX), ou pode ser genérico e usado por vários provedores de CTI ou diferentes casos de uso, como usar o mesmo manipulador para processar um RH solicitação e uma solicitação de help desk (myOperation).
    1. Tenta localizar o manipulador de operação associado à solicitação.
      • Primeiro, verifica se há um manipulador de operação chamado myOperation_SUFFX.
      • Se não for encontrado, verificará o manipulador de operação myOperation. Se não for encontrado, haverá erros.
    2. Se o manipulador for encontrado, verificará o sinalizador auth_required no manipulador de operação. Se definido, ele verificará se um token de autenticação válido (obtido por meio do método getAuthToken() ) está presente na solicitação. Se presente e válido, continue o processamento, caso contrário, ocorrerá um erro.
    3. Pesquisa o manipulador de operação para a subetapa aprovada. Para este exemplo, vamos supor subStepName=SubStep.
      • Primeiro, verifica se há um manipulador de operação chamado myOperation_SUFFX.SubStep. Se encontrado, executa o manipulador.
      • Se não for encontrado, verificará o manipulador myOperation.SubStep. Se encontrado, executa o manipulador.
      • Se não for encontrado, verificará se um subStepNotFoundBehavior foi definido no objeto request.
      • Se definido, executa o comportamento, caso contrário, há erros.
    4. Executa o manipulador de operação primária (myOpersation_SUFFX ou myOperation.)

    Normalmente, o transformador de mensagem define o nome da subetapa no objeto CTIOperationRequest usando o método CTIOperationRequest - setOperationSubStepName(String name). Você pode substituir esse comportamento se estiver criando seu próprio transformador chamando o método CTIOperationRequest - setSubStepNotFoundBehaviour(Object Behaviour).

    Tabela 16. Parâmetros
    Nome Tipo Descrição
    Nenhum
    Tabela 17. Retorna
    Tipo Descrição
    Cadeia de caracteres O nome do manipulador de operação de subetapa definido no objeto CTIOperationRequest. Se não existir, retornará nulo.
    var request = new sn_cti_core.CTIOperationRequest('origin');
    var name = request.getOperationSubStepName();

    CTIOperationRequest - getParameter(cadeia de caracteres chave)

    Retorna o valor de uma chave especificada definida anteriormente no objeto CTIOperationRequest atual.

    O uso dos métodos de parâmetro get/set permite a passagem de praticamente qualquer cadeia de caracteres ou valor numérico entre um transformador de mensagem e um manipulador de operação. O objeto de parâmetro pode conter zero ou mais pares de chave/valor de dados que se correlacionam diretamente à solicitação de operação atual. O manipulador de operação determina quais pares de chave/valor são necessários conforme ele consome esses valores. Normalmente, o transformador de mensagem define esses parâmetros no objeto CTIOperationRequest chamando o método CTIOperationRequest - setParameter(String key, Object value) e o manipulador de operação os consome usando esse método.

    Tabela 18. Parâmetros
    Nome Tipo Descrição
    chave Cadeia de caracteres O nome do valor de chave a ser retornado.
    Tabela 19. Retornos
    Tipo Descrição
    Cadeia de caracteres ou número Valor da chave especificada. Se essa chave não existir, retornará nulo.
    (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()

    Retorna os pares de chave-valor para todos os parâmetros que foram definidos anteriormente no objeto CTIOperationRequest atual.

    O uso dos métodos de parâmetro get/set permite a passagem de praticamente qualquer cadeia de caracteres ou valor numérico entre um transformador de mensagem e um manipulador de operação. O objeto de parâmetro pode conter zero ou mais pares de chave/valor de dados que se correlacionam diretamente à solicitação de operação atual. O manipulador de operação determina quais pares de chave/valor são necessários conforme ele consome esses valores. Normalmente, o transformador de mensagem define esses parâmetros no objeto CTIOperationRequest chamando o método CTIOperationRequest - setParameter(String key, Object value) e o manipulador de operação os consome usando esse método.

    Tabela 20. Parâmetros
    Nome Tipo Descrição
    Nenhum
    Tabela 21. Retorna
    Tipo Descrição
    Objeto Um mapa de pares de chave-valor que foram definidos anteriormente no objeto CTIOperationRequest. Esses pares de chave-valor são de forma livre e definidos pelas necessidades do manipulador de operação. Os valores retornados são cadeias de caracteres ou números.
    var request = new sn_cti_core.CTIOperationRequest('origin');
    var parms = request.getParameters();
    for(var key in parms) {
        gs.info(key + '=' + parms[key]);
    }

    CTIOperationRequest - getSessionAttribute(cadeia de caracteres chave)

    Retorna o valor de uma chave de atributo de sessão especificada definida no objeto CTIOperationRequest atual.

    O uso dos métodos de atributo de sessão get/set permite a passagem de praticamente qualquer cadeia de caracteres ou valor numérico entre um transformador de mensagem e um manipulador de operação. O objeto sessionAttribute pode conter zero ou mais pares de chave/valor de dados que são válidos durante uma sessão definida pelo provedor de integração de telefonia e computação, como o número de telefone do contato. Os atributos de sessão também podem ser acessados em um fluxo de contato. O manipulador de operação determina quais pares de chave/valor de atributo de sessão são necessários, pois ele consome esses valores. Normalmente, o transformador de mensagem define esses atributos no objeto CTIOperationRequest chamando o método CTIOperationRequest - setSessionAttribute(String key, Object value). Os atributos de sessão são diferentes dos parâmetros, pois persistem durante a vida útil da sessão (como a chamada inteira) e devem ser passados de volta pelo provedor de CTI com cada solicitação de operação nessa sessão de chamada.

    Tabela 22. Parâmetros
    Nome Tipo Descrição
    chave Cadeia de caracteres O nome do valor de chave a ser retornado.
    Tabela 23. Retornos
    Tipo Descrição
    Cadeia de caracteres ou número Valor da chave especificada. Se essa chave não existir, retornará nulo.
    var request = new sn_cti_core.CTIOperationRequest('origin');
    var phoneAttribute = request.getSessionAttribute('contact.phone');

    CTIOperationRequest – getSessionAttributes()

    Retorna um mapa de par de chave-valor de todos os atributos de sessão definidos no objeto CTIOperationRequest atual.

    O uso dos métodos de atributo de sessão get/set permite a passagem de praticamente qualquer cadeia de caracteres ou valor numérico entre um transformador de mensagem e um manipulador de operação. O objeto sessionAttribute pode conter zero ou mais pares de chave/valor de dados que são válidos durante uma sessão definida pelo provedor de integração de telefonia e computação, como o número de telefone do contato. Os atributos de sessão também podem ser acessados em um fluxo de contato. O manipulador de operação determina quais pares de chave/valor de atributo de sessão são necessários, pois ele consome esses valores. Normalmente, o transformador de mensagem define esses atributos no objeto CTIOperationRequest chamando o método CTIOperationRequest - setSessionAttribute(String key, Object value). Os atributos de sessão são diferentes dos parâmetros, pois persistem durante a vida útil da sessão (como a chamada inteira) e devem ser passados de volta pelo provedor de CTI com cada solicitação de operação nessa sessão de chamada.

    Tabela 24. Parâmetros
    Nome Tipo Descrição
    Nenhum
    Tabela 25. Retorna
    Tipo Descrição
    Objeto Um mapa de pares de chave-valor de atributo de sessão que foram definidos no objeto CTIOperationResponse associado. Este mapa é de forma livre e definido pelas necessidades do manipulador de operação.
    var request = new sn_cti_core.CTIOperationRequest('origin');
    var parms = request.getSessionAttributes();
    for(var key in parms) {
        gs.info(key + '=' + parms[key]);
    }

    CTIOperationRequest - getSubStepNotFoundBehaviour

    Retorna o comportamento de manipulação de um subsep quando o manipulador de operação de uma subetapa não é encontrado.

    Use subetapas para executar ações como inicialização e validação antes de processar uma operação. Ao contrário dos manipuladores de operação que devem ser genéricos e usados por todos os provedores de CTI, as subetapas são específicas do provedor de CTI e usam terminologia e convenções de nomenclatura específicas para o provedor de CTI.

    Se o manipulador de operação de subetapa solicitado não puder ser encontrado pela estrutura ServiceNow Serviços de voz, ele tentará usar o "comportamento de etapa não encontrada". Esse comportamento normalmente é definido pelo transformador de mensagem quando uma operação é solicitada inicialmente.

    Tabela 26. Parâmetros
    Nome Tipo Descrição
    Nenhum
    Tabela 27. Retorna
    Tipo Descrição
    OperationNotFoundBehaviours O comportamento/manipulação a ser executado quando um manipulador de operação não pode ser encontrado para a combinação de operação/subetapa (<operation_name>.SubStep>). Se não estiver definido, retornará nulo.
    Valores possíveis:
    • OperationNotFoundBehaviours.ThrowError: gerar um erro.
    • OperationNotFoundBehaviours.PassThrough: não executa nenhum processamento adicional na solicitação, apenas retorna.
    • OperationNotFoundBehaviours.RouteToOperation: use o manipulador de operação primária <operation_name>.
    var request = new sn_cti_core.CTIOperationRequest('origin');
    var behavior = request.getSubStepNotFoundBehaviour();

    CTIOperationRequest - setAuthToken(cadeia de caracteres id)

    Define um token de autenticação no objeto CTIOperationRequest atual.

    Este token é usado pela estrutura ServiceNow Serviços de voz para autenticar o usuário ServiceNow Serviços de voz atual antes de executar o manipulador de operação solicitada se o sinalizador auth_required do manipulador estiver definido como verdadeiro. O sinalizador auth_required é um campo na tabela Manipulador de operações [sn_cti_operation_handler]. A vida útil de um token de autenticação deve ser a vida útil da sessão de chamada, mas é determinada pelo provedor de CTI.

    Você pode definir qualquer manipulação de autenticação/autorização necessária para sua implementação criando seu próprio manipulador de operação de autenticação. Independentemente de como o token de autenticação é gerado, o tradutor de mensagens deve passar o token de volta na carga de CTI. Além disso, o provedor de CTI deve armazenar este token de autenticação localmente e passá-lo em cada solicitação de operação que requer autenticação.

    Se estiver usando o manipulador de operação de autenticação fornecido pela instância, o manipulador iniciará a criação do token de autenticação com base em um PIN de quatro dígitos inserido pelo usuário. Em seguida, ele define o token de autenticação no objeto "sessionAttributes" do objeto CTIOperationResponse. O transformador de mensagem associado converte o objeto "sessionAttributes" na carga específica do CTI e a envia para o provedor de CTI.

    Nota:
    Se o token de autenticação não for aprovado, todas as solicitações para executar manipuladores de operação com o sinalizador auth_required definido falharão. Se você não usar autenticação, não precisará manter tokens de autenticação.
    O sistema base ServiceNow fornece manipuladores de operação de trabalho e transformadores de mensagem que permitem a conexão com o Amazon Connect. Ao criar fluxos de contato no Amazon Connect, há dois pontos de integração entre os serviços da Amazon e uma instância ServiceNow :
    • Proxy do Lambda da Amazon Web Services (AWS) (invocar função do AWS Lambda)
    • Bot do AWS Lex (obter entrada do cliente)
    Você pode encontrar os manipuladores de operação e transformadores de mensagem disponíveis para esses pontos de integração nas tabelas Manipuladores de operação [sn_cti_operation_handler] e Transformador de mensagem do provedor [sn_cti_provider_msg_transormer].
    Tabela 28. Parâmetros
    Nome Tipo Descrição
    id Cadeia de caracteres O token de autenticação para o usuário ServiceNow Serviços de voz associado.
    Tabela 29. Retornos
    Tipo Descrição
    vazio

    Exemplo de script do transformador de mensagem que salva o token de autenticação aprovado.

    {	
      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 da cadeia de caracteres)

    Define o sys_id do registro de interação associado à solicitação de operação no objeto CTIOperationRequest atual.

    Se você quiser manter as informações de interação de contato em um registro de interação específico de contato, o registro de interação sys_id deverá ser mantido para toda a sessão de chamada ServiceNow Serviços de voz.

    Normalmente, um manipulador de operação cria um registro de interação quando uma nova chamada de contato é iniciada. Em seguida, ele define o registro de interação sys_id e o nome da tabela no objeto CTIOperationResponse associado como atributos de sessão usando o método CTIOperationRequest - setSessionAttribute(String key, Object value). O transformador de método associado converte essas informações na carga do provedor de integração de telefonia e computação (CTI) e as envia de volta para o provedor de CTI.

    O provedor de CTI deve armazenar localmente o registro de interação sys_id da sessão de contato. Cada vez que o provedor de CTI interage com o ServiceNow Serviços de voz para esta sessão de contato, ele deve passar de volta o sys_id do registro de interação correspondente em sua carga útil. O transformador de mensagem de recebimento analisa a carga útil e usa o método CTIOperationRequest - setInteractionSysId() para definir o sys_id do registro de interação no objeto CTIOperationtRequest associado.

    O método CTIOperationRequest - getInteractionRecord() usa este sys_id para obter o registro de interação correto para a sessão de contato.

    Tabela 30. Parâmetros
    Nome Tipo Descrição
    sys_id Cadeia de caracteres Sys_id do registro de interação a ser associado à solicitação.

    Tabela: interação [interação]

    Tabela 31. Retornos
    Tipo Descrição
    vazio

    Exemplo de um script de transformador de mensagem que extrai o registro de interação sys_id da carga de entrada (passado como um parâmetro) e o define no objeto CTIOperationRequest associado.

    {	
      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(cadeia de caracteres "languageCode")

    Define o código de idioma ISO 639.1 a ser usado ao processar a operação associada em um objeto CTIOperationRequest.

    O uso do idioma preferencial do cliente permite que você use os recursos de internacionalização e localização fornecidos pela plataforma para personalizar mensagens e outras comunicações com o solicitante associado. Normalmente, o transformador de mensagem define o idioma no objeto CTIOperationRequest.

    Tabela 32. Parâmetros
    Nome Tipo Descrição
    idiomaCódigo Cadeia de caracteres O código de idioma ISO 639.1 a ser usado ao processar a operação associada.
    Tabela 33. Retornos
    Tipo Descrição
    vazio
    {	
      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)

    Define a versão principal do software do provedor do integrador de telefonia e computação (CTI) que faz a solicitação no objeto CTIOperationRequest associado.

    Use este método se os provedores de CTI conectados à sua instância ServiceNow estiverem executando várias versões do software, pois diferentes versões de software podem exigir comportamentos de processamento diferentes. Se o comportamento de processamento for apenas um pouco diferente entre as versões do software, pode fazer sentido ter apenas um único manipulador de operação. Você pode lidar com as diferenças de processamento apenas verificando a versão do software que faz a solicitação e processar a solicitação/dados no manipulador de operação. Se o processamento necessário for significativamente diferente entre as versões, pode ser mais eficaz usar vários manipuladores de operação.

    Normalmente, o transformador de mensagem define a versão do software no objeto CTIOperationRequest chamando este método e um manipulador de operação consome o valor definido usando o método CTIOperationRequest - getMajorVersion(). Você também pode obter/definir o valor da versão secundária do software de um provedor usando os métodos CTIOperationRequest - getMinorVersion() e CTIOperationRequest - setMinorVersion(Number minorVersion).

    Tabela 34. Parâmetros
    Nome Tipo Descrição
    majorVersion Número Versão principal do software do provedor de CTI que faz a solicitação de operação.

    Se este valor não tiver sido definido anteriormente, retorna 1.

    Tabela 35. Retornos
    Tipo Descrição
    vazio
    var request = new sn_cti_core.CTIOperationRequest('origin');
    request.setMajorVersion(2);

    CTIOperationRequest - setMinorVersion(Number minorVersion)

    Define a versão secundária do software do provedor do integrador de telefonia e computação (CTI) que faz a solicitação no objeto CTIOperationRequest associado.

    Use este método se os provedores de CTI conectados à sua instância ServiceNow estiverem executando várias versões do software, pois diferentes versões de software podem exigir comportamentos de processamento diferentes. Se o comportamento de processamento for apenas um pouco diferente entre as versões do software, pode fazer sentido ter apenas um único manipulador de operação. Você pode lidar com as diferenças de processamento apenas verificando a versão do software que faz a solicitação e processar a solicitação/dados no manipulador de operação. Se o processamento necessário for significativamente diferente entre as versões, pode ser mais eficaz usar vários manipuladores de operação.

    Normalmente, o transformador de mensagem define a versão do software no objeto CTIOperationRequest chamando este método e um manipulador de operação consome o valor definido usando o método CTIOperationRequest - getMinorVersion(). Você também pode obter/definir o valor da versão principal do software de um provedor usando os métodos CTIOperationRequest - getMajorVersion() e CTIOperationRequest - setMajorVersion(Number majorVersion).

    Tabela 36. Parâmetros
    Nome Tipo Descrição
    minorVersion Número Versão secundária do software do provedor de CTI que faz a solicitação de operação.

    Se este valor não foi definido anteriormente, retorna 0.

    Tabela 37. Retornos
    Tipo Descrição
    vazio
    var request = new sn_cti_core.CTIOperationRequest('origin');
    ...
    request.setMinorVersion(3);

    CTIOperationRequest - setOperationName(cadeia de caracteres name)

    Define o nome da operação que o provedor de integração de telefonia e computação (CTI) está tentando executar no objeto CTIOperationRequest atual.

    O nome da operação determina o manipulador de operação que é usado para processar a solicitação. Chame este método do transformador de mensagem associado.

    Nota:
    Para implementações de bot do Amazon Connect Lex, os nomes de intenção são anexados com um sufixo de cinco letras, pois diferentes intenções da Amazon não podem ter o mesmo nome de intenção. Na estrutura ServiceNow Serviços de voz, o nome da intenção é igual ao nome do manipulador de operação. Um manipulador de operação pode ser específico para uma intenção, tendo um nome de manipulador de operação que inclui este sufixo (myOperation_SUFFX), ou pode ser genérico e usado por vários provedores de CTI ou diferentes casos de uso, como usar o mesmo manipulador para processar um RH solicitação e uma solicitação de help desk (myOperation).
    Tabela 38. Parâmetros
    Nome Tipo Descrição
    nome Cadeia de caracteres O nome da operação que o provedor de CTI está tentando executar no momento.

    Este nome deve ser igual ao nome do manipulador de operação a ser usado para processar a solicitação. Caso contrário, será gerado um erro. Você pode localizar os manipuladores de operação disponíveis na tabela Manipulador de operação [sn_cti_operation_handler].

    Tabela 39. Retornos
    Tipo Descrição
    vazio
    {	
      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(cadeia de caracteres name)

    Define o nome da subetapa da operação no objeto CTIOperationRequest atual.

    Use subetapas para executar ações como inicialização e validação antes de processar uma operação. Ao contrário dos manipuladores de operação que devem ser genéricos e usados por todos os provedores de CTI, as subetapas são específicas do provedor de CTI e usam terminologia e convenções de nomenclatura específicas para o provedor de CTI.

    A estrutura ServiceNow Serviços de voz executa as etapas a seguir para localizar o manipulador de operação necessário e todos os manipuladores de operação de subetapa associados.
    Nota:
    Para implementações de bot do Amazon Connect Lex, os nomes de intenção são anexados com um sufixo de cinco letras, pois diferentes intenções da Amazon não podem ter o mesmo nome de intenção. Na estrutura ServiceNow Serviços de voz, o nome da intenção é igual ao nome do manipulador de operação. Um manipulador de operação pode ser específico para uma intenção, tendo um nome de manipulador de operação que inclui este sufixo (myOperation_SUFFX), ou pode ser genérico e usado por vários provedores de CTI ou diferentes casos de uso, como usar o mesmo manipulador para processar um RH solicitação e uma solicitação de help desk (myOperation).
    1. Tenta localizar o manipulador de operação associado à solicitação.
      • Primeiro, verifica se há um manipulador de operação chamado myOperation_SUFFX.
      • Se não for encontrado, verificará o manipulador de operação myOperation. Se não for encontrado, haverá erros.
    2. Se o manipulador for encontrado, verificará o sinalizador auth_required no manipulador de operação. Se definido, ele verificará se um token de autenticação válido (obtido por meio do método getAuthToken() ) está presente na solicitação. Se presente e válido, continue o processamento, caso contrário, ocorrerá um erro.
    3. Pesquisa o manipulador de operação para a subetapa aprovada. Para este exemplo, vamos supor subStepName=SubStep.
      • Primeiro, verifica se há um manipulador de operação chamado myOperation_SUFFX.SubStep. Se encontrado, executa o manipulador.
      • Se não for encontrado, verificará o manipulador myOperation.SubStep. Se encontrado, executa o manipulador.
      • Se não for encontrado, verificará se um subStepNotFoundBehavior foi definido no objeto request.
      • Se definido, executa o comportamento, caso contrário, há erros.
    4. Executa o manipulador de operação primária (myOpersation_SUFFX ou myOperation.)

    Você pode definir o comportamento padrão de uma subetapa chamando o método CTIOperationRequest - setSubStepNotFoundBehaviour(Object Behaviour).

    Tabela 40. Parâmetros
    Nome Tipo Descrição
    nome Cadeia de caracteres O nome da subetapa que o provedor de CTI está tentando executar.
    Tabela 41. Retornos
    Tipo Descrição
    vazio
    (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 (chave de cadeia de caracteres, valor de objeto)

    Define o par de chave-valor especificado no objeto de parâmetro do objeto CTIOperationRequest atual.

    O uso dos métodos de parâmetro get/set permite a passagem de praticamente qualquer cadeia de caracteres ou valor numérico entre um transformador de mensagem e um manipulador de operação. O objeto de parâmetro pode conter zero ou mais pares de chave/valor de dados que se correlacionam diretamente à solicitação de operação atual. O manipulador de operação determina quais pares de chave/valor são necessários conforme ele consome esses valores. Normalmente, o transformador de mensagem define esses parâmetros no objeto CTIOperationRequest chamando este método e o manipulador de operação os consome usando o método CTIOperationRequest - getParameter(String key) ou CTIOperationRequest - getParameters().

    Nota:
    Você só deve armazenar objetos que possam suportar uma operação JSON.parse(JSON.stringify(object)). Os objetos que não atendem a esses critérios podem não ser propagados corretamente por toda a cadeia de processamento da operação.
    Por exemplo:
    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);
    
    Produz:
    {"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"}}
    
    Tabela 42. Parâmetros
    Nome Tipo Descrição
    chave Cadeia de caracteres Nome da chave sob a qual o valor associado será armazenado.
    valor Objeto Valor a ser armazenado.
    Tipos de dados válidos:
    • Cadeia de caracteres
    • Número inteiro
    • float
    • número
    • booliano
    • data
    • objeto
    Tabela 43. Retornos
    Tipo Descrição
    vazio
    {	
      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 (chave de cadeia de caracteres, valor de objeto)

    Define o par de chave-valor do atributo de sessão especificado no objeto CTIOperationRequest atual.

    O uso dos métodos de atributo de sessão get/set permite a passagem de praticamente qualquer cadeia de caracteres ou valor numérico entre um transformador de mensagem e um manipulador de operação. O objeto sessionAttribute pode conter zero ou mais pares de chave/valor de dados que são válidos durante uma sessão definida pelo provedor de integração de telefonia e computação. Os atributos de sessão também podem ser acessados em um fluxo de contato. O manipulador de operação determina quais pares de chave/valor de atributo de sessão são necessários, pois ele consome esses valores. Normalmente, o transformador de mensagem define esses atributos no objeto CTIOperationRequest chamando este método e o manipulador de operação obtém os atributos usando o método CTIOperationRequest - getSessionAttribute(String key) ou CTIOperationRequest - getSessionAttribute().

    Nota:
    Você só deve armazenar objetos que possam suportar uma operação JSON.parse(JSON.stringify(object)). Os objetos que não atendem a esses critérios podem não ser propagados corretamente por toda a cadeia de processamento da operação.
    Por exemplo:
    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);
    
    Produz:
    {"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"}}
    
    Tabela 44. Parâmetros
    Nome Tipo Descrição
    chave Cadeia de caracteres Nome da chave sob a qual o valor associado será armazenado.
    valor Objeto Valor a ser armazenado.
    Tipos de dados válidos:
    • Cadeia de caracteres
    • Número inteiro
    • float
    • número
    • booliano
    • data
    • objeto
    Tabela 45. Retornos
    Tipo Descrição
    vazio
    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 (comportamento do objeto)

    Define o comportamento a ser executado se o manipulador de operação da subetapa atual não for encontrado.

    Este método deve ser chamado pelo transformador de mensagem de entrada.

    Tabela 46. Parâmetros
    Nome Tipo Descrição
    comportamento OperationNotFoundBehaviours Comportamento a ser usado se um comportamento de manipulação não for especificado para a subetapa. Este deve ser um comportamento definido no objeto CTIOperationRequest.OperationNotFoundBehaviours.
    Valores possíveis:
    • ThrowError: lança um erro.
    • PassThrough: não executa nenhum processamento adicional na solicitação, apenas retorna.
    • RouteToOperation: use o manipulador de operação primário <operation_name>.
    Tabela 47. Retornos
    Tipo Descrição
    vazio
    (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);