Mesclagem de Objetos

Este código personalizado mescla objetos do CRM com base em uma propriedade chave, a fim de evitar duplicatas.

Tecnologias Utilizadas

  • Linguagem: JavaScript
  • Bibliotecas: HubSpot API Client e Axios


Objeto de filtro para pesquisa:

Este objeto é utilizado como parâmetro para a pesquisa de objetos com o mesmo valor para a propriedade chave.

    const PublicObjectSearchRequest = {

        filterGroups: [{

            "filters": [

                { "value": mergeCode, "propertyName": "codigo_de_mesclagem", "operator": "EQ" }

            ]

        }]

    };

 

Requisição de objetos a serem mesclados

Nesta etapa, é feita uma requisição ao hubspot para retornar objetos que correspondem ao filtro estabelecido na etapa anterior.

const apiResponse = await hubspotClient.crm.object.searchApi.doSearch(PublicObjectSearchRequest);

Mesclagem de Objetos

  1. Requisição de Objetos: O script faz uma requisição à API do HubSpot para identificar objetos que correspondem ao filtro estabelecido.

  2. Mesclagem de Duplicatas: Se mais de um objeto for identificado como duplicata, o script procede com a mesclagem desses objetos entre si.

   if (apiResponse.total > 1) {
            const duplicatesIds = apiResponse.results.map(el => parseInt(el.properties.hs_object_id)).filter(id => id != compId)
            console.log(duplicatesIds);

// Iteração através das duplicatas para realizar a mesclagem
            duplicatesIds.forEach(async duplicadoId => {
                try {
                    await merge(compId, duplicadoId);
                    console.log(`Mesclagem concluída para os objetos ${compId} e ${duplicadoId}`);
                } catch (error) {
                    console.error(`Erro durante a mesclagem dos objetos ${compId} e ${duplicadoId}:`, error);
                }
            });
        }
  • No início desse código, é declarada a constante "duplicatesIds", que recebe como valor os IDs dos objetos retornados pela requisição feita ao Hubspot.
  • Em seguida, para cada duplicata encontrada é chamada a função "merge" que a mescla com  o objeto que está passando pelo fluxo de trabalho.

Código completo:

//Iniciação do cliente hubspot
const hubspot = require('@hubspot/api-client');
const axios = require('axios');

const hubspotClient = new hubspot.Client({
    accessToken: process.env.MERGEFULL
});

exports.main = async (event, callback) => {
    const mergeCode = event.inputFields['codigo_de_mesclagem'];
    const compId = event.inputFields['hs_object_id'];

    const PublicObjectSearchRequest = {
        filterGroups: [{
            "filters": [
                { "value": mergeCode, "propertyName": "codigo_de_mesclagem", "operator": "EQ" }
            ]
        }]
    };

    try {
        // Requisição das empresas com base no filtro PublicObjectSearchRequest
        const apiResponse = await hubspotClient.crm.companies.searchApi.doSearch(PublicObjectSearchRequest);

        // Chamando a função para mesclar as empresas
        if (apiResponse.total > 1) {
            const duplicatesIds = apiResponse.results.map(el => parseInt(el.properties.hs_object_id)).filter(id => id != compId)
            console.log(duplicatesIds);

            duplicatesIds.forEach(async duplicadoId => {
                try {
                    await merge(compId, duplicadoId);
                    console.log(`Mesclagem concluída para os objetos ${compId} e ${duplicadoId}`);
                } catch (error) {
                    console.error(`Erro durante a mesclagem dos objetos ${compId} e ${duplicadoId}:`, error);
                }
            });
        }
    } catch (err) {
        console.error(err);
        throw err;
    }
}

async function merge(primaryObjectId, objectIdToMerge) {
    await axios.post(
        'https://api.hubapi.com/crm/v3/objects/companies/merge',
        {
            primaryObjectId,
            objectIdToMerge
        },
        {
            headers: {
                'Authorization': `Bearer ${process.env.MERGEFULL}`,
                'Content-type': 'application/json',
            },
        },
    );
}