LEAN-CODERS Logo

Blog

LEAN-CODERS

Hubspot Workflow Custom Code zur Erstellung von Tasks mit dynamischem Fälligkeitsdatum

Hubspot gewinnt als schlanke, cloudbasierte CRM und Marketing-Automation-Plattform immer mehr an Beliebtheit, und neue Features werden am laufenden Band entwickelt. Wenn es dann out-of-the-box nicht ausreicht, greift man zu Custom Code. In diesem Artikel stellen wir euch eine einfache Custom-Code-Lösung vor, mit der man Tasks mit einem Fälligkeitsdatum erstellen kann, welches auf anderen Datums-Einträgen (zum Beispiel das Start-Datum eines eines Deals) basiert.

Dies ist leider in der Standardoberfläche nicht möglich, man kann lediglich die "Days from task creation" einstellen:

Hubspot Task Due Date Standard

Die Problemstellung

Unser Tochterunternehmen, Lean Hive, bietet Personal- und Freelancer:innenvermittlung. Eine gute Betreuung der Bewerber:innen und Kund:innen ist dabei das A und O im Vermittlungsprozess. Wir bilden jede Personalvemittlung in Hubspot als Deal ab. Dabei hat jeder Deal ein Start Date, welches mit dem Datum des Arbeitsbeginns für die vermittelte Person befüllt wird.

Um einen reibungslosen Projektstart und eine gute Nachbetreuung zu gewährleisten, nehmen die Business Development Consultants von Lean Hive in definierten Zeitabständen zusätzlich Kontakt auf:

  • 1 Monat sowie 3 Tage vor Projektstart erfolgt noch ein Call mit dem/der Kandidat:in, um noch etwaige Fragen abzuklären und auf einen guten Projektstart vorzubereiten

  • Am Tag des Projektstarts erfolgt ein weiterer Call, auch mit der Betreuung kundenseitig

  • 8 Tage nach Projektstart erfolgt ein Call um zu checken, wie gut der Projektstart am Laufen ist

  • 1 Monat nach Projektstart wird der/die Kandidat:in zu einem Lunch eingeladen, wo ein Erfahrungsaustausch und eine Feedbackrunde stattfindet

Sobald ein Deal in die Closed Won Stage wechselt, sollen die entsprechenden Tasks für die angeführten Calls/Meetings erstellt werden.

Die Lösung

Was über die GUI nicht möglich ist, ist über Custom Code sehr einfach machbar. Zunächst müssen wir unseren Hubspot API Key als Secret erstellen und für den Workflow-Schritt auswählen:

Dann müssen wir noch 2 Properties definieren. Diese werden vom Workflow in den Custom Code weitergereicht:

  • Die hubspot_owner_id, also die Id des Deal-Owners, verwenden wir als Task-Owner. Somit wird der Task auch dem Deal-Owner zugewiesen.

  • Das start_date verwenden wir als Referenzpunkt für unsere Datumsberechnungen

Nun können wir den Code schreiben. Zuerst schreiben wir eine Funktion namens createTask, die einen Task in Hubspot erstellt:

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

const createTask = async (hubspotClient, taskBodyObject) => {    
    const url = `/engagements/v1/engagements`;
    hubspotClient.apiRequest({
        path: url,
        method: 'POST',
        body: taskBodyObject,
        json: true
    });
};

Danach schreiben wir eine weitere Hilfsfunktion, welche die Datums-Berechnungen durchführen kann. Sie erwartet einen Timestamp (in Hubspot werden Datumseinträge als Timestamp gespeichert) und addiert eine Anzahl an Tagen zu diesem Timestamp. Um Tage abzuziehen, also ein Datum zu erstellen, das vor dem übergebenen Timestamp liegt, übergibt man in days einfach eine negative Zahl.

// Adds "days" days to the timestamp "ts" and returns the new timestamp
const addDaysToTimeStamp = (ts, days) => {
    let ret = new Date(ts);
    ret.setDate(ret.getDate() + days);
    return ret.getTime();
}

Dann schreiben wir noch eine letzte Hilfsfunktion, welche den Body für den zu erstellenden Task liefert:

const buildDealTaskObject = (taskOwner, timestamp, dealId, subject) => {
    return {
        engagement: {
            active: true,
            type: 'TASK',
            ownerId: taskOwner,
            timestamp: timestamp
        },
        associations: {
            dealIds: [dealId],
        },
        metadata: {
            body: subject,
            subject: subject,
            status: "NOT_STARTED",
            forObjectType: "DEAL"
        }
    };
}

In der Main-Methode können wir nun neue Tasks ganz simpel wie folgt erstellen:

exports.main = async (event, callback) => {
    const hubspotClient = new hubspot.Client({
        apiKey: process.env.HAPIKEY
    });

    const taskOwner = parseInt(event.inputFields['hubspot_owner_id']);
    const projectStart = parseInt(event.inputFields['start_date']);
    const dealId = event.object.objectId;
    
    const tasksToCreate = [
        buildDealTaskObject(taskOwner, projectStart, dealId, "Task bei Projektstart"),
        buildDealTaskObject(taskOwner, addDaysToTimeStamp(projectStart, -5), dealId, "Task 5 Tage vor Projektstart"),
        buildDealTaskObject(taskOwner, addDaysToTimeStamp(projectStart, 5), dealId, "Task 5 Tage nach Projektstart"),
    ];

    tasksToCreate.forEach(task => createTask(hubspotClient, task));
}

Conclusio

Custom Code-Lösungen sollten die letzte Wahl sein. Wenn etwas konfigurativ lösbar ist, sollte es in der Regel auch konfigurativ gelöst werden. Tatsächlich könnte man dieses Problem auch konfigurativ lösen. Dazu bräuchte man PRO TASK 2 weitere Workflows und 1 dynamische Liste. Dies ist unserer Meinung nach zu unübersichtlich bzw. schwer wartbar. Wenn sich Parameter ändern, muss potenziell in 3 konfigurierte Objekte eingegriffen werden. Daher bevorzugen wir in diesem Ausnahmefall die Custom-Code-Lösung.

Hier nochmal der ganze Code auf Github.

Hubspot-Automatisierung, Entwicklung & Consulting

Wir bieten Unterstützung rund ums Thema Hubspot im Unternehmen - von Schulungen über Workshops bis hin zu Consulting und Projektbegleitung. Bei Interesse, melde dich einfach über Social Media, oder auf [email protected]

Zurück zur Übersicht

Get inTouch

Diese Seite wird durch reCAPTCHA geschützt. Es gelten Googles Datenschutzbestimmungen und Nutzungsbedingungen.
Adresse:
Hainburger Straße 33, 1030 Wien