Finding associations and then adding associated records to a workflow

SOLVE
sam-g
Contributor

Hey Guys,

 

I have a fair amount of experience with Python, but not a ton with JavaScript so I'm kind of muddling my way through this for the time being.

 

I'm trying to enroll a custom object record in a workflow, get the associated contacts, and then enroll those associated contacts into a contact based workflow.

 

So far I've been successful in enrolling the record, and finding the associated contacts.

 

Where I'm getting stuck is creating an array of the contact ids so that I can loop through them and add them all to the workflow.

 

Here is my code as of now (I'm not trying to address the workflow enrollment for the contacts yet):

 

 

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

    exports.main = (event, callback) => {
        callback(processEvent(event));
    };

    function processEvent(event) {
        const hubspotClient = new hubspot.Client({ apiKey: process.env.HAPIKEY });

        let engage_id = event['id'];
        // console.log(engage_id);

        hubspotClient.crm.objects.basicApi
            .getById(event.object.objectType, event.object.objectId, ["offer_label", "skupos_loyalty_status"])
            .then(results => {
                let engage_enroll = results.body;
                console.log(engage_enroll)

                hubspotClient.crm.objects.associationsApi
                    .getAll(
                        event.object.objectType,
                        event.object.objectId,
                        ["contacts"]
                    )
                    .then(results => {
                        let associations = results.body.results;
                        let obj_array = JSON.stringify(associations);
                        let contact_ids = obj_array.map(a => a.id);
                        console.log(obj_array);
                    }
                    )
            }
            )
    }

 

 

I get an error with the mapping, which I think is due to the promise (which is a new concept to me) not being completed yet?

 

I'm hoping to produce something like this, an array of contact ids:

 

 

["2361901", "2436301"]

 

 

The obj_array outputs the following:

 

 

[{"id":"2361901","type":"engage_enrollment_to_contact"},{"id":"2436301","type":"engage_enrollment_to_contact"}]

 

 

Which looks correct to me. Any advice on where I'm going wrong here?

1 Accepted solution

Accepted Solutions
sam-g
Solution
Contributor

If anyone needs to do this in the future here is the final code I used and tested:

 

 

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

exports.main = (event, callback) => {
    callback(processEvent(event));
};

function processEvent(event) {
    const hubspotClient = new hubspot.Client({ apiKey: process.env.HAPIKEY });

    let engage_id = event['id'];
    // console.log(engage_id);

    hubspotClient.crm.objects.basicApi
        .getById(event.object.objectType, event.object.objectId, ["offer_label", "skupos_loyalty_status"])
        .then(results => {
            let engage_enroll = results.body;
            console.log(engage_enroll)

            hubspotClient.crm.objects.associationsApi
                .getAll(
                    event.object.objectType,
                    event.object.objectId,
                    ["contacts"]
                )
                .then(results => {
                    let associations = results.body.results;
                    let contact_ids = associations.map(a => a.id);
                    console.log(associations, contact_ids);

                    contact_ids.forEach(function (entry) {
                        hubspotClient.apiRequest({
                            method: 'POST',
                            path: `/automation/v2/workflows/22041022/enrollments/contacts/${entry}?hapikey=${process.env.HAPIKEY}`
                        });
                    });
                }
                )
        }
        )
}

 

View solution in original post

4 Replies 4
sam-g
Contributor

Well, me not knowing JavaScript was definitely the culprit here, I just ended up removing the stringify prior to the map function and it works now:

 

 

let associations = results.body.results;
let contact_ids = associations.map(a => a.id);

 

 

Which outputs this for contact_ids:

 

 

[ '2361901', '2436301' ]

 

 

Which I swore I tried prior to posting this, but you know how it goes with that sometimes 😐

0 Upvotes
sam-g
Solution
Contributor

If anyone needs to do this in the future here is the final code I used and tested:

 

 

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

exports.main = (event, callback) => {
    callback(processEvent(event));
};

function processEvent(event) {
    const hubspotClient = new hubspot.Client({ apiKey: process.env.HAPIKEY });

    let engage_id = event['id'];
    // console.log(engage_id);

    hubspotClient.crm.objects.basicApi
        .getById(event.object.objectType, event.object.objectId, ["offer_label", "skupos_loyalty_status"])
        .then(results => {
            let engage_enroll = results.body;
            console.log(engage_enroll)

            hubspotClient.crm.objects.associationsApi
                .getAll(
                    event.object.objectType,
                    event.object.objectId,
                    ["contacts"]
                )
                .then(results => {
                    let associations = results.body.results;
                    let contact_ids = associations.map(a => a.id);
                    console.log(associations, contact_ids);

                    contact_ids.forEach(function (entry) {
                        hubspotClient.apiRequest({
                            method: 'POST',
                            path: `/automation/v2/workflows/22041022/enrollments/contacts/${entry}?hapikey=${process.env.HAPIKEY}`
                        });
                    });
                }
                )
        }
        )
}

 

View solution in original post

SaleProcessNerd
Participant

My friend, thank you. This is awesome, Ive been wondering how to get an array list from a single objectId and the xxx.map and xxx.forEach looks to be the key here, so thank you for posting this.

10 points to sam-gindor

SCelen
Participant

Exactly what I needed. Thank you so much!

0 Upvotes