This example shows you how to create a Smart Action "Create company in Hubspot" that generates a company in Hubspot based on information from your database.
Requirements
An admin backend running on forest-express-sequelize
This directory contains the companies.js file where the smart action is declared. A smart field has also been added to add a link to the company's Hubspot profile if the company's crmId field is not null.
/forest/hubspot-companies.js
const { collection } =require('forest-express-sequelize');collection('companies', { actions: [{ name:'Create company in Hubspot', type:'single', }], fields: [{// adding a field that will allow to be directed on click to the company's profile in hubspot field:'crm link', type:'String',get: (company) =>company.crmId ?'https://app.hubspot.com/contacts/6332498/company/'+company.dataValues.crmId :null }], segments: [],});
Directory: /routes
This directory contains the companies.js file where the smart action logic is implemented.
In this logic a Hubspot company instance is created through a /post create company call to the Hubspot API.
The Hubspot API key is defined in the .env file and requested through the expression process.env.HUBSPOT_API.
/routes/hubspot-companies.js
constexpress=require('express');const { PermissionMiddlewareCreator } =require('forest-express-sequelize');const { companies } =require('../models');constsuperagent=require('superagent');constrouter=express.Router();// function that returns a sequelize objectfunctiongetRecord(collection, recordId) {returncollection.findOne({ where: { id: recordId } });}// function that update a company record crmId with the hubspot companyIdfunctionsetCrmId(record, hubspotId) {record.crmId = hubspotId;returnrecord.save();}// function that creates a company in Hubspot through the hubspot APIfunctioncreateHubspotCompany(company) {return superagent.post(`https://api.hubapi.com/companies/v2/companies?hapikey=${process.env.HUBSPOT_API}`).send({properties: [ { name:'name', value:company.name, }, { name:'description', value:company.description, }, { name:'city', value:company.headquarters, }, { name:'industry', value:company.industry, }, ]}).then((response) =>JSON.parse(response.res.text));}router.post('/actions/create-company-in-Hubspot',async (req, res) => {constcompanyId=req.body.data.attributes.ids[0];constcompany=awaitgetRecord(companies, companyId);if (company.crmId) {returnres.status(400).send({ error:'A lead from Hubspot is already assigned to this company' }); }try {consthubspotCompany=awaitcreateHubspotCompany(company);awaitsetCrmId(company,hubspotCompany.companyId); } catch (err) {console.log('error => ', err);res.status(400).send({ error:'could not create lead' }); }returnres.send({ success:'Lead has been created in Hubspot!' });});