CTIOperationResponse - com escopo, global

  • Versão de lançamento: Washingtondc
  • Atualizado 1 de fev. de 2024
  • 23 min. de leitura
  • A API CTIOperationResponse fornece métodos para definir e obter dados sobre o objeto CTIOperationResponse atual.

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

    Normalmente, um manipulador de operação é responsável por definir valores no objeto CTIOperationResponse conforme ele processa a solicitação associada. Um transformador de mensagem é responsável por obter os valores do objeto CTIOperationRequest e criar a carga específica de CTI que é enviada de volta para o provedor do integrador de telefonia de computador (CTI).

    O sistema base ServiceNow fornece manipuladores de operação 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 Amazon Web Services (AWS) Lambda (invocar a função do AWS Lambda)
    • Bot do AWS Lex (obter entrada do cliente)
    Você pode encontrar os manipuladores de operação e os 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].

    O script do manipulador de operação a seguir mostra como usar vários métodos CTIOperationResponse para definir valores no objeto CTIOperationResponse.

    (function(/*CTIOperationRequest*/ request, /*CTIOperationResponse*/ response) {
    
      try {
        var state = request.getParameter('$state');
        if(!state) {
          state = 'new';
        }
        var phone = request.getParameter('contact.phone');
        var username = request.getParameter('contact.username');
        var someDataPresent = phone || username;
        if(!someDataPresent) {
          throw 'phone or username must be supplied';
        }
        if('new' === state) {
          var userGr = null;
          if(phone || username) {
            userGr = new GlideRecordSecure('sys_user');
            var qc = null;
            if(phone) {
              qc = userGr.addQuery('phone', phone);
              qc.addOrCondition('mobile_phone', phone);
              qc.addOrCondition("home_phone", phone);
            }
            if(username) {
              if(qc) {
                qc.addOrCondition('user_name', username);
              } else {
                qc = userGr.addQuery('user_name', username);
              }
            }
            // If there was criteria then run the query
            if(qc) {
              userGr.query();
            } else {
              userGr = null;
            }
          }
    			
          var foundUser = userGr && userGr.next();
    
          var phonelogGr = new GlideRecord('sn_openframe_phone_log');
          phonelogGr.initialize();
          phonelogGr.setValue('call_id', request.getParameter('contact.id'));
          phonelogGr.setValue('phone_number', phone);
          if(foundUser) {
            phonelogGr.setValue('contact', userGr.getUniqueValue());
          }
          phonelogGr.insert();
    			
          var interactionGr = new GlideRecordSecure('interaction');
          interactionGr.initialize();
          interactionGr.setValue('type', 'phone');
          interactionGr.setValue('short_description', 'User Contact via Phone: ' + phone);
          interactionGr.setValue('channel_metadata_table', 'sn_openframe_phone_log');
          interactionGr.setValue('channel_metadata_document',phonelogGr.getUniqueValue());
    			
          if(foundUser) {
            interactionGr.setValue('opened_for', userGr.getUniqueValue());
            response.setSessionAttribute('snc_user_first_name', userGr.getValue('first_name'));
            response.setSessionAttribute('snc_user_last_name', userGr.getValue('last_name'));
            response.setSessionAttribute('snc_user_sys_id', userGr.getUniqueValue());
          } else {
            response.setSessionAttribute('snc_user_sys_id', "USER_NOT_FOUND");
          }
          interactionGr.setValue('state', 'new');
    
          var interactionId = interactionGr.insert();
    
          response.setStatusCode(200);
          response.setMessage('success');
          response.setSessionAttribute('interactionTable', 'interaction');
          response.setSessionAttribute('interactionId', interactionId);
    
        }
      } catch(e) {
        ctx.setError(e);
      }
    
    })(request, response);

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

    O script do transformador de mensagem a seguir obtém os valores definidos no objeto CTIOperationResponse e os armazena na carga específica de CTI que é enviada de volta ao provedor de CTI.

    (function (/*CTIOperationResponse*/operationResponse, /*HTTPResponse*/ httpResponse) {
    	// AWS Connect Lambda expects name value pairs only
    	var out = {};
    	for(var k in operationResponse.getSessionAttributes()) {
    		out[k] = operationResponse.getSessionAttributes()[k];
    	}
    	out.statusCode = operationResponse.getStatusCode();
    	out.message = operationResponse.getMessage();
    	httpResponse.setBody(out);
    })(operationResponse, httpResponse);

    Esta API é executada no namespace sn_cti_core. Antes de acessar a API CTIOperationRequest, o plug-in ServiceNow Voz Core (sn_cti_core) deve ser instalado. Para obter informações sobre esta instalação, consulte Instalar aplicações ServiceNow Voice.

    Para obter informações adicionais sobre o ServiceNow Voz, consulte ServiceNow Voice.

    CTIOperationResponse - CTIOperationResponse(cadeia de caracteres de origem)

    Instancia um objeto CTIOperationResponse.

    Tabela 1. Parâmetros
    Nome Tipo Descrição
    Nenhum
    var response = new sn_cti_core.CTIOperationResponse();
    response.setMinorVersion(3);

    CTIOperationResponse – getAuthToken()

    Retorna o token de autenticação que foi definido no objeto CTIOperationResponse.

    Este token é usado pela estrutura ServiceNow Voz para autenticar o usuário ServiceNow Voz atual antes de executar o manipulador de operação solicitado se o sinalizador auth_required do manipulador estiver definido como verdadeiro. O sinalizador auth_required é um campo na tabela Operation Handler [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 útil 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 traduz o objeto "sessionAttributes" na carga específica de 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 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 Amazon Web Services (AWS) Lambda (invocar a função do AWS Lambda)
    • Bot do AWS Lex (obter entrada do cliente)
    Você pode encontrar os manipuladores de operação e os 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 definido anteriormente no objeto CTIOperationRequest. Se não estiver definido, retornará nulo.
    var response = new sn_cti_core.CTIOperationResponse();
    var token = response.getAuthToken();

    CTIOperationResponse - getError()

    Retorna o objeto de erro associado ao objeto CTIOperationResponse atual.

    Você pode usar essas informações para formular a carga retornada ao provedor de integração de telefonia e computador (CTI).

    Tabela 4. Parâmetros
    Nome Tipo Descrição
    Nenhum
    Tabela 5. Retorna
    Tipo Descrição
    Objeto Informações de erro de operação. O formato deste objeto é determinado pelo provedor de CTI. Se não houver um erro, retornará nulo.
    (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 we 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);

    CTIOperationResponse - getInteractionSysId()

    Retorna o sys_id do registro de interação associado à sessão de chamada que foi definida no objeto CTIOperationResponse.

    O método CTIOperationResponse - 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 CTIOperationResponse. Os registros de interação estão localizados na tabela Interação [interação].

    Se o registro de interação sys_id não estiver definido, o método retornará nulo.

    var request = new sn_cti_core.CTIOperationResponse();
    var interactionId = request.getInteractionSysId();
    

    CTIOperationResponse - getMajorVersion()

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

    Use este método se os provedores de CTI conectados à sua instância ServiceNow estiverem executando várias versões do software, pois versões diferentes de software podem exigir cargas diferentes. Se a carga útil for apenas um pouco diferente entre as versões do software, pode fazer sentido ter apenas um único transformador de mensagem. Você pode lidar com as diferenças de carga apenas verificando a versão do software que faz a solicitação no transformador de mensagem. Se a carga útil necessária for significativamente diferente entre as versões, pode ser mais eficaz usar vários transformadores de mensagem.

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

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

    var request = new sn_cti_core.CTIOperationResponse();
    var majorVersion = response.getMajorVersion();

    CTIOperationResponse - getMessage()

    Retorna a cadeia de caracteres de mensagem definida no objeto CTIOperationResponse atual.

    Normalmente, esta é uma mensagem que é falada de volta para o usuário quando uma operação é concluída. Você pode definir este valor usando o método CTIOperationResponse - setMessage(String message).

    Tabela 10. Parâmetros
    Nome Tipo Descrição
    Nenhum
    Tabela 11. Retorna
    Tipo Descrição
    Cadeia de caracteres Texto da mensagem. Se não houver nenhuma mensagem, retornará nulo.
    (function (/*CTIOperationResponse*/operationResponse, /*HTTPResponse*/ httpResponse) {
      // AWS Connect Lambda expects name value pairs only
      var out = {};
      for(var k in operationResponse.getSessionAttributes()) {
        out[k] = operationResponse.getSessionAttributes()[k];
      }
      out.statusCode = operationResponse.getStatusCode();
      out.message = operationResponse.getMessage();
      httpResponse.setBody(out);
    })(operationResponse, httpResponse);

    CTIOperationResponse - getMinorVersion()

    Retorna a versão secundária do software do integrador de telefonia e computador (CTI) definido no objeto CTIOperationResponse atual.

    Use este método se os provedores de CTI conectados à sua instância ServiceNow estiverem executando várias versões do software, pois versões diferentes de software podem exigir cargas diferentes. Se a carga útil for apenas um pouco diferente entre as versões do software, pode fazer sentido ter apenas um único transformador de mensagem. Você pode lidar com as diferenças de carga apenas verificando a versão do software que faz a solicitação no transformador de mensagem. Se a carga útil necessária for significativamente diferente entre as versões, pode ser mais eficaz usar vários transformadores de mensagem.

    Tabela 12. Parâmetros
    Nome Tipo Descrição
    Nenhum
    Tabela 13. Retorna
    Tipo Descrição
    Número Número da versão secundária da carga útil associada a esta interação.

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

    var request = new sn_cti_core.CTIOperationResponse();
    var minorVersion = request.getMinorVersion();

    CTIOperationResponse - getParameter(cadeia de caracteres chave)

    Retorna o valor de uma chave especificada definida anteriormente no objeto CTIOperationResponse 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 manipulador de operação e um transformador de mensagem. O objeto de parâmetro pode conter zero ou mais pares de chave/valor de dados que se correlacionam diretamente à resposta da operação atual. O manipulador de operação determina quais pares de chave/valor são necessários conforme ele produz esses valores. Use o método CTIOperationResponse - setParameter(cadeia de caracteres chave, valor do objeto) para definir parâmetros no objeto CTIOperationResponse atual.

    Tabela 14. Parâmetros
    Nome Tipo Descrição
    chave Cadeia de caracteres O nome do valor da chave a ser retornado.
    Tabela 15. Retorna
    Tipo Descrição
    Cadeia de caracteres O valor da chave passada. Se essa chave não existir, retornará nulo.
    var request = new sn_cti_core.CTIOperationResponse();
    var parm = request.getParameter('contact.phone');

    CTIOperationResponse - getParameters()

    Retorna os pares de chave-valor para todos os parâmetros que foram definidos anteriormente no objeto CTIOperationResponse 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 manipulador de operação e um transformador de mensagem. O objeto de parâmetro pode conter zero ou mais pares de chave/valor de dados que se correlacionam diretamente à resposta da operação atual. O manipulador de operação determina quais pares de chave/valor são necessários conforme ele produz esses valores. Use o método CTIOperationResponse - setParameter(cadeia de caracteres chave, valor do objeto) para definir parâmetros no objeto CTIOperationResponse atual.

    Tabela 16. Parâmetros
    Nome Tipo Descrição
    Nenhum
    Tabela 17. Retorna
    Tipo Descrição
    Objeto Um mapa de pares de chave-valor que foram definidos anteriormente no objeto CTIOperationResponse. 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.
    (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);

    CTIOperationResponse - getSessionAttribute(cadeia de caracteres chave)

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

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

    Tabela 18. Parâmetros
    Nome Tipo Descrição
    chave Cadeia de caracteres O nome do valor da chave a ser retornado.
    Tabela 19. Retorna
    Tipo Descrição
    Cadeia de caracteres Valor da chave passada. Se essa chave não existir, retornará nulo.
    var response = new sn_cti_core.CTIOperationResponse();
    var phoneAttribute = response.getSessionAttribute('contact.phone');

    CTIOperationResponse - getSessionAttributes()

    Retorna os pares de chave-valor para todos os atributos de sessão que foram definidos anteriormente no objeto CTIOperationResponse atual.

    O uso dos métodos de atributo de sessão get/set permite a passagem de praticamente qualquer cadeia de caracteres ou valor de número entre um manipulador de operação e um transformador de mensagem. Os atributos de sessão também podem ser acessados em um fluxo de contato. O objeto sessionAttribute pode conter zero ou mais pares de chave/valor de dados, como o número de telefone do contato, que são válidos para a duração de uma sessão definida pelo provedor de integração de telefonia computadorizada. O manipulador de operação determina quais pares de chave/valor de atributo de sessão são necessários, pois ele utiliza esses valores durante o processamento. Normalmente, o manipulador de operação define esses atributos no objeto CTIOperationResponse chamando o método CTIOperationResponse - setSessionAttribute(String key, Object value) e o transformador de mensagem consome os atributos usando este 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 CTIOperationResponse. 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.
    (function (/*CTIOperationResponse*/operationResponse, /*HTTPResponse*/ httpResponse) {
      // AWS Connect Lambda expects name value pairs only
      var out = {};
      for(var k in operationResponse.getSessionAttributes()) {
        out[k] = operationResponse.getSessionAttributes()[k];
      }
      out.statusCode = operationResponse.getStatusCode();
      out.message = operationResponse.getMessage();
      httpResponse.setBody(out);
    })(operationResponse, httpResponse);

    CTIOperationResponse - getStatusCode()

    Retorna o código de status definido no objeto CTIOperationResponse atual.

    Esses códigos de status devem corresponder aos códigos de status HTTP padrão, como 200 para sucesso, 401 para autorização necessária. Normalmente, os códigos de status resultantes são determinados pelo manipulador de operação e são definidos no objeto CTIOperationResponse usando o método CTIOperationResponse - setStatusCode(String statusCode). O transformador de mensagem usa esse método para incluir o código de status na carga retornada ao provedor do integrador de telefonia de computador.

    Tabela 22. Parâmetros
    Nome Tipo Descrição
    Nenhum
    Tabela 23. Retorna
    Tipo Descrição
    Número Código de status da operação atual. Se um código de status não tiver sido definido, retornará -1.
    (function (/*CTIOperationResponse*/operationResponse, /*HTTPResponse*/ httpResponse) {
      // AWS Connect Lambda expects name value pairs only
      var out = {};
      for(var k in operationResponse.getSessionAttributes()) {
        out[k] = operationResponse.getSessionAttributes()[k];
      }
      out.statusCode = operationResponse.getStatusCode();
      out.message = operationResponse.getMessage();
      httpResponse.setBody(out);
    })(operationResponse, httpResponse);

    CTIOperationResponse - setAuthToken(cadeia de caracteres token)

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

    Este token é usado pela estrutura ServiceNow Voz para autenticar o usuário ServiceNow Voz atual antes de executar o manipulador de operação solicitado se o sinalizador auth_required do manipulador estiver definido como verdadeiro. O sinalizador auth_required é um campo na tabela Operation Handler [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 útil 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 traduz o objeto "sessionAttributes" na carga específica de 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 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 Amazon Web Services (AWS) Lambda (invocar a função do AWS Lambda)
    • Bot do AWS Lex (obter entrada do cliente)
    Você pode encontrar os manipuladores de operação e os 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 24. Parâmetros
    Nome Tipo Descrição
    Nenhum
    Tabela 25. Retorna
    Tipo Descrição
    Cadeia de caracteres O token de autenticação a ser usado para autenticar operações que têm o sinalizador auth_required definido.
    var response = new sn_cti_core.CTIOperationResponse();
    var authenticate = <Your authentication code here>; // Authenticate the user
    if (authenticated) {
    	var claims = {
    		"interactionId":interactionGr.sys_id.toString()
    	};
    	var jwt = new sn_cti_core.AuthHelpers().generateJWT(claims);
    	response.setAuthToken(jwt);
    }

    CTIOperationResponse - setError(Object error)

    Define o objeto de erro no objeto CTIOperationResponse atual.

    Você pode usar o objeto de erro no componente para formular a carga a ser enviada ao provedor do integrador de telefonia e computador (CTI).

    Tabela 26. Parâmetros
    Nome Tipo Descrição
    Erro Objeto Informações sobre o erro detectado ao processar a operação solicitada. O formato deste objeto é determinado pelo provedor de CTI.
    Tabela 27. Retorna
    Tipo Descrição
    vazio
    var response = new sn_cti_core.CTIOperationResponse();
    response.setError(new Error("You did not supply a field"));

    CTIOperationResponse - setInteractionSysId(cadeia de caracteres Id)

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

    Tabela 28. Parâmetros
    Nome Tipo Descrição
    sys_id Cadeia de caracteres O sys_id a ser definido para a interação atual.
    Tabela 29. Retorna
    Tipo Descrição
    vazio
    var response = new sn_cti_core.CTIOperationResponse();
    response.setInteractionSysId('98529cc55380001048e5ddeeff7b120b');
    

    CTIOperationResponse - 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 CTIOperationResponse associado.

    Use este método se os provedores de CTI conectados à sua instância ServiceNow estiverem executando várias versões do software, pois versões diferentes de software podem exigir cargas diferentes. Se a carga útil for apenas um pouco diferente entre as versões do software, pode fazer sentido ter apenas um único transformador de mensagem. Você pode lidar com as diferenças de carga apenas verificando a versão do software que faz a solicitação no transformador de mensagem. Se a carga útil necessária for significativamente diferente entre as versões, pode ser mais eficaz usar vários transformadores de mensagem.

    Tabela 30. 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, retornará 1.

    Tabela 31. Retorna
    Tipo Descrição
    vazio
    var request = new sn_cti_core.CTIOperationResponse();
    request.setMajorVersion(2);

    CTIOperationResponse - setMessage(cadeia de caracteres "mensagem")

    Define uma mensagem de texto no objeto CTIOperationResponse atual.

    Normalmente, esta é uma mensagem que é falada de volta para o usuário quando uma operação é concluída e é definida pelo manipulador de operação associado. O transformador de mensagem usa o método CTIOperationResponse - getMessage() para obter a mensagem e passá-la de volta para o provedor de integração de telefonia e computador.

    Tabela 32. Parâmetros
    Nome Tipo Descrição
    message Cadeia de caracteres Texto da mensagem
    Tabela 33. Retorna
    Tipo Descrição
    vazio
    (function(/*CTIOperationRequest*/ request, /*CTIOperationResponse*/ response, /*Context*/ ctx) {	
      var notes = '', lang = request.getLanguage();
      try { 
    		
        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);

    CTIOperationResponse - 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 CTIOperationResponse associado.

    Use este método se os provedores de CTI conectados à sua instância ServiceNow estiverem executando várias versões do software, pois versões diferentes de software podem exigir cargas diferentes. Se a carga útil for apenas um pouco diferente entre as versões do software, pode fazer sentido ter apenas um único transformador de mensagem. Você pode lidar com as diferenças de carga apenas verificando a versão do software que faz a solicitação no transformador de mensagem. Se a carga útil necessária for significativamente diferente entre as versões, pode ser mais eficaz usar vários transformadores de mensagem.

    Tabela 34. 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 tiver sido definido anteriormente, retornará 0.

    Tabela 35. Retorna
    Tipo Descrição
    vazio
    var response = new sn_cti_core.CTIOperationResponse();
    response.setMinorVersion(3);

    CTIOperationResponse - setParameter(cadeia de caracteres chave, valor do objeto)

    Define o par de chave-valor especificado no objeto CTIOperationResponse associado.

    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 manipulador de operação e um transformador de mensagem. 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 manipulador de operação define esses parâmetros no objeto CTIOperationResponse chamando este método e o transformador de mensagem os consome usando o método CTIOperationResponse - getParmeter(String key) ou CTIOperationResponse - getSParameters().

    Nota:
    Você deve armazenar somente objetos que podem durar uma operação JSON.parse(JSON.stringify(object)). Objetos que não atendem a esses critérios podem não se propagar 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 36. Parâmetros
    Nome Tipo Descrição
    chave Cadeia de caracteres Nome da chave sob a qual armazenar o valor associado.
    valor Objeto Valor a ser armazenado para a chave.
    Tipos de dados válidos:
    • Cadeia de caracteres
    • int
    • variável
    • número
    • booliano
    • data
    • objeto
    Tabela 37. Retorna
    Tipo Descrição
    vazio
    var response = new sn_cti_core.CTIOperationResponse();
    response.setParameter('contact.phone', '+15552222345');
    response.setParameter('contact.okToCall', true);
    response.setParameter('contact.address', {
        street: '1234 Main St'
        city: 'API City',
        zip: 91335
    });

    CTIOperationResponse - setSessionAttribute(cadeia de caracteres chave, valor do objeto)

    Define o par de chave-valor do atributo de sessão especificado no objeto CTIOperationResponse associado.

    O uso dos métodos de atributo de sessão get/set permite a passagem de praticamente qualquer cadeia de caracteres ou valor de número entre um manipulador de operação e um transformador de mensagem. O objeto sessionAttribute pode conter zero ou mais pares de chave/valor de dados que são válidos para a duração de uma sessão definida pelo provedor de integração de telefonia computadorizada. 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 conforme ele consome esses valores. Normalmente, o manipulador de operação define esses atributos no objeto CTIOperationResponse chamando este método e o transformador de mensagem obtém os atributos usando o método CTIOperationResponse - getSessionAttribute(String key) ou CTIOperationResponse - getSessionAttribute().

    Nota:
    Você deve armazenar somente objetos que podem durar uma operação JSON.parse(JSON.stringify(object)). Objetos que não atendem a esses critérios podem não se propagar 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 38. Parâmetros
    Nome Tipo Descrição
    chave Cadeia de caracteres Nome da chave de atributo da sessão na qual o valor associado será definido.
    valor Objeto Valor a ser definido.
    Tipos de dados válidos:
    • Cadeia de caracteres
    • int
    • variável
    • número
    • booliano
    • data
    • objeto
    Tabela 39. Retorna
    Tipo Descrição
    vazio
    var response = new sn_cti_core.CTIOperationResponse();
    response.setSessionAttribute('contact.phone', '+15552222345');
    response.setSessionAttribute('contact.okToCall', true);
    response.setSessionAttribute('contact.address', {
        street: '1234 Main St'
        city: 'API City',
        zip: 91335
    });

    CTIOperationResponse - setStatusCode(Number statusCode)

    Define o código de status da solicitação de operação atual no objeto CTIOperationResponse.

    Você pode usar qualquer valor inteiro para definir o status, mas é recomendável emular os códigos de status HTTP, como 200 = Ok/Êxito, 400 = Solicitação incorreta, 401 = Não autorizado.

    Tabela 40. Parâmetros
    Nome Tipo Descrição
    statusCode Número Inteiro que identifica exclusivamente o status da operação solicitada.
    Tabela 41. Retorna
    Tipo Descrição
    vazio
    (function(/*CTIOperationRequest*/ request, /*CTIOperationResponse*/ response, /*Context*/ ctx) {	
      var notes = '', lang = request.getLanguage();
      try { 
    		
        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);