Copiar propiedades en HubSpot de una empresa principal a sus empresas secundarias de forma automática
Una de las ventajas de HubSpot es que nos ofrece muchas herramientas para ahorrar tiempo y ser más eficientes, pero no siempre encontramos la manera de hacerlo. Seguro te has preguntado: ¿Existe alguna manera de copiar propiedades de una empresa principal, a sus empresas secundarias asociadas? La respuesta es sí, ¡sí se puede! Podemos lograr nuestro objetivo con workflows y con acciones de código gracias a Operations Hub Pro.
Workflows
Los workflows de HubSpot son una de las herramientas más potentes que te permite automatizar procesos y optimizar acciones repetitivas de tus equipos. Un workflow se compone de un disparador (trigger) y de acciones como, por ejemplo, enviar un correo o actualizar una propiedad de una empresa cuando cumpla con cierta condición.
Una de las acciones que permiten los workflows es copiar una propiedad de un objeto a otro, pero actualmente no es posible copiar propiedades entre objetos asociados del mismo tipo, como es el caso de empresas en donde podemos tener una empresa principal y muchas empresas secundarias asociadas. Sin embargo, el Operations Hub de Hubspot nos habilita una acción muy interesante y es la acción de código personalizado.
Acción de código personalizado: cómo lo hacemos
¿Qué nos permite hacer? ¡infinidad de cosas! Esta acción nos permite implementar cualquier lógica que necesitemos a través de código Javascript y Python (en fase beta) y acceder al API de HubSpot para extraer, borrar y actualizar data de nuestro CRM y/o de sistemas externos. En este pequeño tutorial, te enseñamos como podemos usar esta acción para copiar valores de propiedades de una empresa principal a sus empresas secundarias de forma automática.
Paso 1: Creación del workflow
En el menú de navegación principal hacemos clic en Workflows -> Crear Workflow -> Desde cero. Procedemos a crear un workflow Basado en empresas.
Paso 2: Añadir triggers al workflow
Una vez creado nuestro Workflow, empezamos agregando los desencadenantes.
Añadimos las propiedades a escuchar para enrolar a las empresas cada vez que dicha propiedad sea actualizada. En este caso añadiremos el desencadenante "Cuando Ciudad es conocido".
Además, necesitamos que se enrolen únicamente las empresas principales y que estas tengan empresas secundarias asociadas. Para ello añadimos los desencadenantes "El valor empresa principal es desconocido" y "Número de empresas secundarias es mayor que 0".
Paso 3: Añadir acción al workflow
Seleccionamos la acción de </>Código personalizado.
Paso 4: Configurar acción de código personalizado
Dejamos el lenguaje de Node.js por defecto y colocamos nuestro Secreto. Para obtener el secreto es necesario crear primero una aplicación privada con los alcances deseados y copiamos el API Token. Agregamos el secreto en los ajustes de la acción, pegamos el API Token y seleccionamos el secreto recíen creado.
Añadimos las propiedades a ser utilizadas en el código, en este caso añadiremos "Ciudad":
Paso 5: Implementar código personalizado
Copiamos y pegamos el siguiente código:
/**
* Copy parent companies properties to their childs companies.
* Example property used: city
* The trigger of the workflow should be when "City is known" (with reenrollment) and "Parent company is unknown" and "Number of secondary companies is greater than 0"
* With this conditions, only parent companies will enroll on the workflow.
*/
const hubspot = require('@hubspot/api-client');
exports.main = async (event, callback) => {
// Define Hubspot client
const hubspotClient = new hubspot.Client({
accessToken: process.env.Secreto // Change "Secreto" with your Secret name
});
// Init variables
const city = event.inputFields['city'];
const properties = { "city": city }
const SimplePublicObjectInput = { properties };
let output = "Updated companies: ";
// Start main logic
try {
// Get company childs
const ApiResponse = await hubspotClient.crm.companies.associationsApi.getAll(event.object.objectId, "company");
// For each child...
ApiResponse.body.results.forEach( async(item) => {
try {
output += item.id + ", ";
const apiResponse = await hubspotClient.crm.companies.basicApi.update(item.id, SimplePublicObjectInput); // Use CRM Company API: https://developers.hubspot.com/docs/api/crm/companies
// Logs
console.log("Company ID: " + apiResponse.body.id + ", City updated: " + apiResponse.body.properties.city);
} catch (e) {
e.message === "HTTP Request Failed" ?
console.error(JSON.stringify(e.response, null, 2)) :
console.error(e)
}
})
} catch (err) {
console.log("Error looking for child companies")
console.error(err);
throw err;
}
callback({
outputFields: {
company_childs: output // You need to also define output in the action output variables settings
}
});
}
Paso 6: Añadir salida de datos
Para poder visualizar que todo funciona correctamente debemos añadir la variable de salida, en este caso añadimos la variable company_childs de tipo Cadena.
Paso 7: Probar la acción
Listo! Ahora podemos probar nuestra acción, para ello utilizamos el módulo de prueba integrado en la acción seleccionando una empresa principal que tenga empresas secundarias asociadas. Ten en cuenta que esta prueba hace cambios permanentes, por lo que te recomendamos crear algunas empresas ficticias y asociarlas todas a una empresa principal para realizar la prueba.
Como puedes observar, nuestro código ha funcionado correctamente y todas las empresas asociadas a Company 1 (A) han sido actualizadas con la ciudad de Company 1 (A):
Ahora solo nos queda guardar la acción y activar nuestro workflow. No olvides activar el reenrollment en los desencadenantes para que las empresas puedan enrolarse siempre que sea necesario.
Si necesitas ayuda con la implementación o quieres ir más alla, no dudes en contactarnos. En SOLID contamos con la experticia técnica necesaria para impulsar tu empresa.