Submit Hubspot form from custom code action

Hey,

I’m trying to submit Forms via Workflows.

This is my code:
(I use correct portal ID, bearer token, form ID, and email)

const hubspot = require('@hubspot/api-client');

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

const http = require('http');
const https = require('https');
var timeIsNow = Math.floor(new Date().getTime());

var formId = "someFormId";

var utmSource = "testSource";
var utmMedium = "testMedium";
var utmCampaign = "testCampaign";
var conversionType = "Newsletter";
var email = "myemail@mail.de";

var rawData = {
"submittedAt": timeIsNow,
"fields": [
{
"name": "email",
"value": email
},
{
"name": "xen_utmsourcelatest",
"value": utmSource
}
],
"context": {
"pageName": "Import"
}}

const sendData = JSON.stringify(rawData);

function sendToHubspot(formData, done) {

const options = {
hostname: 'api.hsforms.com',
port: 80,
path: '/submissions/v3/integration/secure/submit/portalID/' + formId,
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer myBearerToken'
}
};

var req = http.request(options, function(res) {
var responseString = '';
res.on('data', function(data) {
responseString += data;
});
res.on('end', function() {
console.log(responseString);
// checks for data in the return value
if(responseString.indexOf('Anything') > -1) {
return done();
}

});
});
req.write(sendData);
req.end();

}
module.exports.sendToHubspot = sendToHubspot;

This is my error:

2022-12-06T11:54:04.142Z ERROR Invoke Error {"errorType":"TypeError","errorMessage":"customerPayload.main is not a function","stack":["TypeError: customerPayload.main is not a function"," at Runtime.exports.hubspot_handler [as handler] (/var/task/hubspotHandler.js:6:21)"," at Runtime.handleOnceNonStreaming (file:///var/runtime/index.mjs:1089:29)"]}

Has anyone done this and can help me here?

Thanks!

Paul

Hi @PNispel

Thank you for reaching out.

I want to tag some of our experts here - @Teun @Anton @alyssamwilie do you know what’s happening here?

Thank you!

Best

Tiphaine

So figured this out:
Custom code supports axios, however you have to put everything in a main function and export the module for it to work:

var axios = require("axios"); 

function main(){

 var timeIsNow = Math.floor(new Date().getTime());

 var formId = "someformid";

 var utmSource = "testSource";
 var utmMedium = "testMedium";
 var utmCampaign = "testCampaign"; 
 var conversionType = "Newsletter";
 var email = "paul@mail.com";

axios({
	"method": "POST",
	"url": "https://api.hsforms.com/submissions/v3/integration/secure/submit/portalId/formId",
	"headers": {
		"Content-Type": "application/json",
		"Authorization": "Bearer YourToken"
	},
	"data": {
		"submittedAt": timeIsNow,
		"context": {
			"pageName": "Import"
		},
		"fields": [
			{
				"name": "email",
				"value": email
			},
			{
				"name": "gdpr",
				"value": "true"
			}
		]
	}
})

 }

 module.exports.main = main;