CTIOperationResponse - Com escopo, global

  • Versão de lançamento: Zurich
  • Atualizado 31 de jul. de 2025
  • 23 min. de leitura
  • . CTIOperationResponse A inclusão de script fornece métodos para definir e obter dados no objeto CTIOperationResponse atual.

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

    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 do CTI que é enviada de volta ao provedor do integrador de telefonia de computador (CTI).

    . ServiceNow O sistema de base 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 um ServiceNow instância:
    • Proxy Lambda da Amazon Web Services (AWS) (invocar função do AWS Lambda)
    • AWS Lex Bot (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].

    O script do manipulador de operação a seguir mostra como usar vários CTIOperationResponse Métodos 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 Configure um fluxo de contato para uma interação automatizada do chamador .

    O script do transformador de mensagem a seguir obtém os valores definidos no objeto CTIOperationResponse e os armazena na carga específica do 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 inclusão de script é executada no sn_cti_core namespace. Antes de acessar CTIOperationRequest inclusão de script, o. ServiceNow Serviços de voz O plug-in Core (sn_cti_core) deve ser instalado. Para obter informações sobre esta instalação, consulte Instale as aplicações de voz da ServiceNow .

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

    CTIOperationResponse - CTIOperationResponse (origem da cadeia de caracteres)

    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 pelo ServiceNow Serviços de voz estrutura para autenticar o atual ServiceNow Serviços de voz usuário antes de executar o manipulador de operação solicitada, se for o manipulador auth_requiredo sinalizador está definido como verdadeiro. . auth_requiredO sinalizador é um campo na tabela Manipulador de operações [sn_cti_operation_handler]. A vida útil de um token de autenticação deve durar 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 mensagem deve passar o token de volta na carga de CTI. Além disso, o provedor de CTI deve armazenar esse 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 do CTI e o 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 auth_requiredo conjunto de sinalizadores falhará. Se você não usar autenticação, não precisará manter tokens de autenticação.
    . ServiceNow O sistema de base 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 um ServiceNow instância:
    • Proxy Lambda da Amazon Web Services (AWS) (invocar função do AWS Lambda)
    • AWS Lex Bot (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 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 por 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 um erro não existir, 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.

    . CTIOperationResponse - setInteractionSysId(ID de cadeia de caracteres) o método 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 Sys_id do registro de interação definido no objeto CTIOperationResponse.

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

    Tabela: Interação [interaction]

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

    CTIOperationResponse - getMajorVersion()

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

    Use este método se os provedores de CTI estiverem conectados ao seu ServiceNow as instâncias estão executando várias versões de seu software, pois diferentes versões de software podem exigir cargas úteis diferentes. Se a carga for apenas ligeiramente diferente entre as versões de software, pode fazer sentido ter apenas um único transformador de mensagem. Você pode lidar com as diferenças de carga verificando a versão do software que faz a solicitação no transformador de mensagem. Se a carga 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 da mensagem definida no objeto CTIOperationResponse atual.

    Normalmente, esta é uma mensagem que é retornada ao usuário quando uma operação é concluída. Você pode definir este valor usando CTIOperationResponse - setMessage(mensagem de cadeia de caracteres) método.

    Tabela 10. Parâmetros
    Nome Tipo Descrição
    Nenhum
    Tabela 11. Retorna
    Tipo Descrição
    Cadeia de caracteres Texto da mensagem. Se nenhuma mensagem existir, 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 de computador (CTI) definido no objeto CTIOperationResponse atual.

    Use este método se os provedores de CTI estiverem conectados ao seu ServiceNow as instâncias estão executando várias versões de seu software, pois diferentes versões de software podem exigir cargas úteis diferentes. Se a carga for apenas ligeiramente diferente entre as versões de software, pode fazer sentido ter apenas um único transformador de mensagem. Você pode lidar com as diferenças de carga verificando a versão do software que faz a solicitação no transformador de mensagem. Se a carga 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 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(chave de cadeia de caracteres)

    Retorna o valor de uma chave especificada anteriormente definida 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 com a resposta da operação atual. O manipulador de operação determina quais pares de chave/valor são necessários à medida que produz esses valores. Use CTIOperationResponse - setParameter(chave de cadeia de caracteres, valor do objeto) Método 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. Retornos
    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 com a resposta da operação atual. O manipulador de operação determina quais pares de chave/valor são necessários à medida que produz esses valores. Use CTIOperationResponse - setParameter(chave de cadeia de caracteres, valor do objeto) Método 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(chave de cadeia de caracteres)

    Retorna o valor de um conjunto de chaves de atributo de sessão especificado no objeto CTIOperationResponse atual.

    Usar os métodos de atributo de sessão 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. 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 pela duração de uma sessão definida pelo provedor de integração de telefonia de computador. 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ções define esses atributos no objeto CTIOperationResponse chamando CTIOperationResponse - setSessionAttribute(Chave de cadeia de caracteres, valor do objeto) e o transformador de mensagem consomem 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. Retornos
    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.

    Usar os métodos de atributo de sessão 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. 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 pela duração de uma sessão definida pelo provedor de integração de telefonia de computador. 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ções define esses atributos no objeto CTIOperationResponse chamando CTIOperationResponse - setSessionAttribute(Chave de cadeia de caracteres, valor do objeto) e o transformador de mensagem consomem 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 CTIOperationResponse - setStatusCode(cadeia de caracteres statusCode) método. Em seguida, o transformador de mensagem usa este 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(token de cadeia de caracteres)

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

    Este token é usado pelo ServiceNow Serviços de voz estrutura para autenticar o atual ServiceNow Serviços de voz usuário antes de executar o manipulador de operação solicitada, se for o manipulador auth_requiredo sinalizador está definido como verdadeiro. . auth_requiredO sinalizador é um campo na tabela Manipulador de operações [sn_cti_operation_handler]. A vida útil de um token de autenticação deve durar 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 mensagem deve passar o token de volta na carga de CTI. Além disso, o provedor de CTI deve armazenar esse 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 do CTI e o 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 auth_requiredo conjunto de sinalizadores falhará. Se você não usar autenticação, não precisará manter tokens de autenticação.
    . ServiceNow O sistema de base 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 um ServiceNow instância:
    • Proxy Lambda da Amazon Web Services (AWS) (invocar função do AWS Lambda)
    • AWS Lex Bot (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 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 auth_requiredconjunto de sinalizadores.
    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 (erro de objeto)

    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 de 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. Retornos
    Tipo Descrição
    vazio
    var response = new sn_cti_core.CTIOperationResponse();
    response.setError(new Error("You did not supply a field"));

    CTIOperationResponse - setInteractionSysId(ID de cadeia de caracteres)

    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. Retornos
    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 de computador (CTI) que faz a solicitação no objeto CTIOperationResponse associado.

    Use este método se os provedores de CTI estiverem conectados ao seu ServiceNow as instâncias estão executando várias versões de seu software, pois diferentes versões de software podem exigir cargas úteis diferentes. Se a carga for apenas ligeiramente diferente entre as versões de software, pode fazer sentido ter apenas um único transformador de mensagem. Você pode lidar com as diferenças de carga verificando a versão do software que faz a solicitação no transformador de mensagem. Se a carga 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. Retornos
    Tipo Descrição
    vazio
    var request = new sn_cti_core.CTIOperationResponse();
    request.setMajorVersion(2);

    CTIOperationResponse - setMessage(mensagem de cadeia de caracteres)

    Define uma mensagem de texto no objeto CTIOperationResponse atual.

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

    Tabela 32. Parâmetros
    Nome Tipo Descrição
    message Cadeia de caracteres Texto da mensagem
    Tabela 33. Retornos
    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 de computador (CTI) que faz a solicitação no objeto CTIOperationResponse associado.

    Use este método se os provedores de CTI estiverem conectados ao seu ServiceNow as instâncias estão executando várias versões de seu software, pois diferentes versões de software podem exigir cargas úteis diferentes. Se a carga for apenas ligeiramente diferente entre as versões de software, pode fazer sentido ter apenas um único transformador de mensagem. Você pode lidar com as diferenças de carga verificando a versão do software que faz a solicitação no transformador de mensagem. Se a carga 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. Retornos
    Tipo Descrição
    vazio
    var response = new sn_cti_core.CTIOperationResponse();
    response.setMinorVersion(3);

    CTIOperationResponse - setParameter(chave de cadeia de caracteres, 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 com a solicitação de operação atual. O manipulador de operação determina quais pares de chave/valor são necessários, pois 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 CTIOperationResponse - getParmeter(chave de cadeia de caracteres) ou CTIOperationResponse - getSParameters() método.

    Nota:
    Você só deve armazenar objetos que possam sobreviver a. JSON.parse(json.stringify(objeto)) operação. 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
    • Número inteiro
    • float
    • número
    • booliano
    • data
    • objeto
    Tabela 37. Retornos
    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(Chave de cadeia de caracteres, valor do objeto)

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

    Usar os métodos de atributo de sessão 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 sessionAttribute pode conter zero ou mais pares de chave/valor de dados válidos pela duração de uma sessão definida pelo provedor de integração de telefonia de computador. 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 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 CTIOperationResponse - getSessionAttribute(chave de cadeia de caracteres) ou CTIOperationResponse - getSessionAttribute() método.

    Nota:
    Você só deve armazenar objetos que possam sobreviver a. JSON.parse(json.stringify(objeto)) operação. 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 definir o valor associado.
    valor Objeto Valor a ser definido.
    Tipos de dados válidos:
    • cadeia de caracteres
    • Número inteiro
    • float
    • número
    • booliano
    • data
    • objeto
    Tabela 39. Retornos
    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.

    Qualquer valor inteiro pode ser usado para definir o status, mas é recomendável emular os códigos de status HTTP, como 200 OK/Success, 400 Solicitação incorreta e 401 Não autorizado.

    Tabela 40. Parâmetros
    Nome Tipo Descrição
    statusCode Número Número inteiro que identifica exclusivamente o status da operação solicitada.
    Tabela 41. Retornos
    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);