Please be sure of your agent type and version and pick the right documentation accordingly.
This is the documentation of the forest-express-sequelize and forest-express-mongoose Node.js agents that will soon reach end-of-support.
forest-express-sequelize v9 and forest-express-mongoose v9 are replaced by v1.
Please check your agent type and version and read on or switch to the right documentation.
This is still the latest Ruby on Rails documentation of the forest_liana agent, you’re at the right place, please read on.
This is the documentation of the django-forestadmin Django agent that will soon reach end-of-support.
If you’re using a Django agent, notice that django-forestadmin v1 is replaced by v1.
If you’re using a Flask agent, go to the v1 documentation.
Please check your agent type and version and read on or switch to the right documentation.
This is the documentation of the forestadmin/laravel-forestadmin Laravel agent that will soon reach end-of-support.
If you’re using a Laravel agent, notice that forestadmin/laravel-forestadmin v1 is replaced by v3.
If you’re using a Symfony agent, go to the v1 documentation.
Please check your agent type and version and read on or switch to the right documentation.
Create a Hubspot company
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
a Hubspot account
How it works
Directory: /models
This directory contains the companies.js file where the collection is declared.
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
const express = require('express');
const { PermissionMiddlewareCreator } = require('forest-express-sequelize');
const { companies } = require('../models');
const superagent = require('superagent');
const router = express.Router();
// function that returns a sequelize object
function getRecord(collection, recordId) {
return collection.findOne({ where: { id: recordId } });
}
// function that update a company record crmId with the hubspot companyId
function setCrmId(record, hubspotId) {
record.crmId = hubspotId;
return record.save();
}
// function that creates a company in Hubspot through the hubspot API
function createHubspotCompany(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) => {
const companyId = req.body.data.attributes.ids[0];
const company = await getRecord(companies, companyId);
if (company.crmId) {
return res
.status(400)
.send({
error: 'A lead from Hubspot is already assigned to this company',
});
}
try {
const hubspotCompany = await createHubspotCompany(company);
await setCrmId(company, hubspotCompany.companyId);
} catch (err) {
console.log('error => ', err);
res.status(400).send({ error: 'could not create lead' });
}
return res.send({ success: 'Lead has been created in Hubspot!' });
});