Benutzerdefinierte Workflow-Aktionen

Workflows von HubSpot werden verwendet, um Geschäftsprozesse zu automatisieren und Kunden von HubSpot ein effizienteres Arbeiten zu ermöglichen. Sie können benutzerdefinierte Workflow-Aktionen erstellen, um Ihren Kundenservice mit den Workflows von HubSpot zu integrieren.

Zuerst definieren Sie Ihre benutzerdefinierte Aktion, einschließlich der Eingaben, die vom Benutzer, der den Workflow erstellt, ausgefüllt werden müssen, und der URL, die bei Ausführen der benutzerdefinierten Aktion angefragt wird. Wenn dann Kunden Ihre Anwendung installieren, können sie Ihre benutzerdefinierte Aktion zu ihren Workflows hinzufügen. Wenn diese Workflows ausgeführt werden, werden HTTPS-Anfragen an die konfigurierte URL mit der von Ihnen eingerichteten Payload gesendet. In diesem Artikel erfahren Sie, wie Sie:

Bevor Sie loslegen, beachten Sie Folgendes:

https://api.hubspot.com/automation/v4/actions/ {AppdId}?hapikey={APII_Key}

Ihre benutzerdefinierte Aktion definieren

Um eine benutzerdefinierte Workflow-Aktion zu erstellen, müssen Sie die Aktion mithilfe der folgenden Felder definieren. Diese Definition gibt auch das Format für Anfragen von HubSpot sowie die Verarbeitung von Antworten Ihres Diensts an.

  • actionUrl: Die URL, an die eine HTTPS-Anfrage gesendet wird, wenn die Aktion ausgeführt wird. Der Anfragetext enthält Informationen darüber, für welchen Benutzer die Aktion ausgeführt wird und welche Werte in die Eingabefelder eingegeben wurden.
  • inputFields: Diese definieren den Satz gültiger Werte für die Eingaben der Aktion. Es kann entweder eine statische Liste oder eine Webhook-URL bereitgestellt werden. Wenn eine Webhook-URL angegeben wird, werden die Optionen von dieser URL abgerufen, wenn die Aktion von einem Kunden im Workflow-Tool bearbeitet wird. Diese sind für jedes Feld optional.
  • outputFields: Die Werte, die die Aktion ausgibt, die bei späteren Aktionen im Workflow verwendet werden können. Eine benutzerdefinierte Aktion kann null, eine oder mehrere Ausgaben haben.
  • executionRules: Eine Liste der Definitionen, die Sie angeben können, damit dem Besucher, der den Workflow erstellt, Fehler von Ihrem Dienst angezeigt werden.
  • labels: Bezeichnung, die dem Benutzer beschreibt, was die Felder der Aktion darstellen und was die Aktion macht. Englische Label sind erforderlich, aber Label können in einer der folgenden unterstützten Sprachen angegeben werden: Französisch (fr), Deutsch (de), Japanisch (ja), Spanisch (es), Brasilianisches Portugiesisch (pt-br) und Niederländisch (nl). Die Angaben zu jeder Sprache enthalten die folgenden Felder:
    • actionName: Der im Bereich „Aktion auswählen“ im Workflow-Editor angezeigte Name der Aktion.
    • actionDescription: Eine detaillierte Beschreibung für die Aktion, die beim Konfigurieren der benutzerdefinierten Aktion angezeigt wird.
    • actionCardContent: Eine zusammengefasste Beschreibung, die auf der Karte der Aktion angezeigt wird.
    • inputFieldLabels: Ein Objekt, das die Definitionen von inputFields den entsprechenden Label zuordnet, die der Benutzer beim Konfigurieren der Aktion sieht.
    • outputFieldLabels: Ein Objekt, das die Definitionen von outputFields den entsprechenden Label zuordnet, die im Workflows-Tool angezeigt werden.
    • inputFieldDescriptions: Ein Objekt, das die Definitionen von inputFields den Beschreibungen unterhalb der entsprechenden Label zuordnet.
    • executionRules: Ein Objekt, das die Definitionen von Ihren executionRules Fehlermeldungen zuordnet, die dem Benutzer angezeigt werden, wenn er eine benutzerdefinierte Aktion falsch konfiguriert. In diesem Artikel erfahren Sie, wie Sie benutzerdefinierte Nachrichten für die Ergebnisse der Ausführung von Aktionen im Workflow-Verlauf angeben.

Im Folgenden finden Sie ein Beispiel für eine grundlegende Definition einer Aktion:

// { "actionUrl": "https://example.com/hubspot", "inputFields": [ { "typeDefinition": { "name": "widgetName", "type": "string", "fieldType": "text" }, "supportedValueTypes": ["STATIC_VALUE"], "isRequired": true }, { "typeDefinition": { "name": "widgetOwner", "type": "enumeration", "referencedObjectType": "OWNER" }, "supportedValueTypes": ["STATIC_VALUE"] } ], "labels": { "en": { "actionName": "Create Widget", "actionDescription": "This action will create a new widget in our system. So cool!", "actionCardContent": "Create widget {{widgetName}}", "inputFieldLabels": { "widgetName": "Widget Name", "widgetOwner": "Widget Owner" }, "inputFieldDescriptions": { "widgetName": "Enter the full widget name. I support <a href=\"https://hubspot.com\">links</a> too." }, "executionRules": { "alreadyExists": "The widget with name {{ widgetName }} already exists" } } }, "executionRules": [ { "labelName": "alreadyExists", "conditions": { "errorCode": "ALREADY_EXISTS" } } ], "objectTypes": ["CONTACT", "DEAL"] }

Die Anfragequelle validieren

Anfragen für Ihre benutzerdefinierte Aktion verwenden die v2-Version der X-HubSpot-Signatur. Erfahren Sie mehr über die Validierung von Anfragen von HubSpot.

Standard-Payloads

Es gibt zwei Arten von Aufrufen für benutzerdefinierte Workflow-Aktionen:

  • Abrufe von Feldoptionen: Füllen Sie eine Liste gültige Optionen aus, wenn ein Benutzer ein Feld konfiguriert.
  • Anfragen zur Ausführung einer Aktion: Werden vorgenommen, wenn eine Aktion von einem Workflow ausgeführt wird, der Ihre benutzerdefinierte Aktion enthält. 

Abrufe von Feldoptionen

Anfragen zum Abrufen von Optionen werden vorgenommen, wenn ein Benutzer die Konfiguration Ihrer benutzerdefinierten Aktion in seinem Workflow konfiguriert.

Anfrageformat:

{ "origin": { // The customer's portal ID "portalId": 1, // Your custom action definition ID "actionDefinitionId": 2, // Your custom action definition version "actionDefinitionVersion": 3 }, // The values for the fields that have already been filled out by the workflow user "inputFields": { "widgetName": { "type": "OBJECT_PROPERTY", "propertyName": "widget_name" }, "widgetColor": { "type": "STATIC_VALUE", "value": "blue" } }, "fetchOptions": { // The search query provided by the user. This should be used to filter the returned // options. This will only be included if the previous option fetch returned // `searchable: true` and the user has entered a search query. "q": "option label", // The pagination cursor. This will be the same pagination cursor that was returned by // the previous option fetch; it can be used to keep track of which options have already // been fetched. "after": "1234=" } }

Erwartetes Antwortformat:

// { "options": [ { "label": "Big Widget", "description": "Big Widget", "value": "10" }, { "label": "Small Widget", "description": "Small Widget", "value": "1" } ], // Optional. The pagination cursor. If this is provided, the Workflows app will render // a button to load more results at the bottom of the list of options when a user is // selecting an option, and when the next page is loaded this value will be included in // the request payload under `fetchOptions.after`. "after": "1234=", // Optional. Default is false. If this is true, the Workflows app will render a search // field to allow a user to filter the available options by a search query, and when // a search query is entered by the user, options will be re-fetched with that search // term in the request payload under `fetchOptions.q`. "searchable": true }

Um die Anzahl der Optionen, die von einem Optionsabruf zurückgegeben werden, zu beschränken, können Sie einen Paginierungscursor festlegen, der Workflows mitteilt, dass mehr Optionen geladen werden können. Wenn Sie möchten, dass die Liste der Optionen durchsucht werden kann, können Sie "searchable": true zurückgeben, damit die Ergebnisse durch eine Suchanfrage herausgefiltert werden können.

Anfragen zur Ausführung einer Aktion

Ausführungsanfragen werden erstellt, wenn ein Workflow Ihre benutzerdefinierte Aktion gegen ein aufgenommenes Objekt ausgeführt.

Anfrageformat: 

// { "origin": { // The customer's portal ID "portalId": 1, // Your custom action definition ID "actionDefinitionId": 2, // Your custom action definition version "actionDefinitionVersionId": 3 }, "object": { // The type of CRM object that is enrolled in the workflow "objectType": "CONTACT", // The ID of the CRM object that is enrolled in the workflow "objectId": 4, // The values of the properties of the CRM object that were specified // on the objectRequestOptions of the definition "properties": { "firstname": "Test" } }, // The field values specified by the workflow user "inputFields": { "widgetName": "My test widget", "widgetColor": "blue", "widgetSize": "10" }, // A unique ID for this execution. This can be used for idempotency to // deduplicate potential duplicate deliveries from workflows, and it // should also be used as the callbackId if your custom action will be // blocking execution. "callbackId": "ap-123-456-7-8" }

Die Payload mit Funktionen anpassen

Sie können die Anfragen anpassen, die für Ihre benutzerdefinierte Aktion vorgenommen werden, indem Sie serverlose Funktionen für Ihre benutzerdefinierte Aktion konfigurieren.

Abrufe von Feldoptionen anpassen

Es gibt zwei Hooks, um den Lebenszyklus eines Abrufs von Feldoptionen anzupassen:

  • PRE_FETCH_OPTIONS: Dies ermöglicht Ihnen, die von HubSpot gesendete Anfrage zu konfigurieren.
  • POST_FETCH_OPTIONS: Hiermit können Sie die Antwort von Ihrem Dienst in ein Format umwandeln, das von Workflows verstanden wird.

PRE_FETCH_OPTIONS

Format des Funktionseingabearguments:

{ "origin": { // The customer's portal ID "portalId": 1, // Your custom action definition ID "actionDefinitionId": 2, // Your custom action definition version "actionDefinitionVersion": 3 }, // Your configured external data field webhook URL "webhookUrl": "https://myapi.com/hubspot/widget-sizes", // The values for the fields that have already been filled out by the workflow user "inputFields": { "widgetName": { "type": "OBJECT_PROPERTY", "propertyName": "widget_name" }, "widgetColor": { "type": "STATIC_VALUE", "value": "blue" } } }

Erwartetes Funktionsausgabeformat:

{ // The webhook URL for HubSpot to call "webhookUrl": "https://myapi.com/hubspot/widget-sizes", // Optional. The request body. "body": "{\"widgetName\": \"My new widget\"}", // Optional. A map of custom request headers to add. "httpHeaders": { "My-Custom-Header": "header value" }, // Optional. The Content-Type of the request. Default is application/json. "contentType": "application/json", // Optional. The Accept type of the request. Default is application/json. "accept": "application/json", // Optional. The HTTP method with which to make the request. // Valid values are GET, POST, PUT, PATCH, and DELETE. // Default is POST. "httpMethod": "POST" }

POST_FETCH_OPTIONS

Format des Funktionseingabearguments:

// { // The requested field key "fieldKey": "widgetSize", // The webhook response body from your service "responseBody": "{\"widgetSizes\": [10, 1]}" }

Erwartetes Funktionsausgabeformat:

// { "options": [ { "label": "Big Widget", "description": "Big Widget", "value": "10" }, { "label": "Small Widget", "description": "Small Widget", "value": "1" } ] }

Ausführungsanfragen anpassen

Es gibt einen Hook in den Aktionsausführungszyklus, eine PRE_ACTION_EXECUTION-Funktion. Mit dieser Funktion können Sie die von HubSpot gesendete Anfrage konfigurieren.

Format des Funktionseingabearguments:

// { "origin": { // The customer's portal ID "portalId": 1, // Your custom action definition ID "actionDefinitionId": 2, // Your custom action definition version "actionDefinitionVersionId": 3 }, "object": { // The type of CRM object that the custom action is executing against "objectType": "CONTACT", // The ID of the HubSpot CRM object that the custom action is executing against "objectId": 4, // The values of the properties of the CRM object that were specified // on the objectRequestOptions of the definition "properties": { "firstname": "Test" }, }, // The field values specified by the workflow user "inputFields": { "widgetName": "My test widget", "widgetColor": "blue", "widgetSize": "10" }, // A unique ID for this execution. This can be used for idempotency to // deduplicate potential duplicate deliveries from workflows, and it // should also be used as the callbackId if your custom action will be // blocking execution. "callbackId": "ap-123-456-7-8", // The configured action URL from your definition "webhookUrl": "https://myapi.com/hubspot" }

Erwartetes Funktionsausgabeformat:

// { // The webhook URL for HubSpot to call "webhookUrl": "https://myapi.com/hubspot", // Optional. The request body. "body": "{\"widgetName\": \"My new widget\", \"widgetColor\": \"blue\"}", // Optional. A map of custom request headers to add. "httpHeaders": { "My-Custom-Header": "header value" }, // Optional. The Content-Type of the request. Default is application/json. "contentType": "application/json", // Optional. The Accept type of the request. Default is application/json. "accept": "application/json", // Optional. The HTTP method with which to make the request. // Valid values are GET, POST, PUT, PATCH, and DELETE. // Default is POST. "httpMethod": "POST" }

Ihre benutzerdefinierte Aktion veröffentlichen

Standardmäßig wird Ihre benutzerdefinierte Aktion in einem unveröffentlichten Zustand erstellt und ist nur in dem Entwicklerportal sichtbar, das mit Ihrer HubSpot-Anwendung verknüpft ist. Um Ihre benutzerdefinierte Aktion für Kunden sichtbar zu machen, aktualisieren Sie das published-Tag in Ihrer Aktionsdefinition in true.

Ihre benutzerdefinierte Aktion testen

Sie können Ihre benutzerdefinierte Aktion testen, indem Sie einen Workflow im Workflow-Tool erstellen und Ihre benutzerdefinierte Aktion hinzufügen.

Ihre benutzerdefinierte Aktion ausführen

Den Erfolg einer Aktion erkennen Sie am Statuscode, der von Ihrem Dienst zurückgegeben wird:

  • 2xx-Statuscodes: Diese geben an, dass die Aktion erfolgreich abgeschlossen wurde.
  • 4xx-Statuscodes: Diese geben an, dass die Aktion fehlgeschlagen ist.
    • Die Ausnahme hier sind 429-Statuscodes vom Typ „Rate beschränkt“. Diese werden als erneute Versuche behandelt, und die „Erneut versuchen nach“-Kopfzeile wird befolgt.
  • 5xx-Statuscodes: Diese geben an, dass es ein vorübergehendes Problem mit Ihrem Dienst gab und Ihre Aktion später erneut versucht wird.

Ausführung einer benutzerdefinierten Aktion blockieren

Benutzerdefinierte Aktionen können die Ausführung eines Workflows blockieren. Anstatt nach dem Empfang einer Antwort vom Typ „abgeschlossen“ (2xx- oder 4xx-Statuscode) von Ihrem Dienst die nächste Aktion im Workflow nach Ihrer benutzerdefinierten Aktion auszuführen, hört der Workflow so lange mit dem Ausführen („blockieren“) dieser Aufnahme auf, bis Sie den Workflow zum Fortfahren anweisen.

Um eine benutzerdefinierte Aktion asynchron zu blockieren, muss Ihre Aktionsausführungsantwort folgendes Format haben:

// { "outputFields": { // Required. Must be BLOCK for your custom action to block execution. "hs_execution_state": "BLOCK", // Optional. If not provided, a default expiration of 1 week is used. // Must be specified in ISO 8601 Duration format. // See https://en.wikipedia.org/wiki/ISO_8601#Durations "hs_expiration_duration": "P1WT1H" } }

Sie können optional einen Wert für das Feld hs_default_expiration festlegen, nach dem Ihre benutzerdefinierte Aktion als abgelaufen gilt. Die Ausführung des Workflows wird dann wieder aufgenommen, und die Aktion im Anschluss an Ihre benutzerdefinierte Aktion wird ausgeführt, auch wenn Sie den Workflow nicht zum Fortfahren angewiesen haben.

Eine blockierte Ausführung abschließen

Um die blockierte Ausführung einer benutzerdefinierten Aktion abzuschließen, verwenden Sie den folgenden Endpunkt: /callbacks/{appId}/{callbackId}/complete

Das Anfragetextformat ist:

// { "outputFields": { // Required. The final execution state. Valid values are SUCCESS // (to indicate that your custom action completed successfully) or // FAIL_CONTINUE (to indicate that there was a problem with your // custom action execution) "hs_execution_state": "SUCCESS" } }

Benutzerdefinierte Ausführungsnachrichten hinzufügen

Geben Sie Regeln für Ihre Aktion an, mit denen festgelegt wird, welche Nachricht auf der Verlaufsseite des Workflows angezeigt wird, wenn die Aktion ausgeführt wird. Die Regeln werden mit den Ausgangswerten von Ihrer Aktion abgeglichen.  Diese Ausgangswerte sollten im Antworttext des Webhooks im folgenden Format angegeben werden:

// { "outputFields": { "errorCode": "ALREADY_EXISTS", "widgetName": "Test widget" } }

Die executionRules werden in der angegebenen Reihenfolge getestet. Wenn mehrere Treffer vorhanden sind, wird dem Benutzer nur die Nachricht von der ersten Regel, die übereinstimmt, angezeigt.

Die Regel stimmt überein, wenn die Ausführungsausgabe einem bestimmten Wert in der Regel entspricht. Überlegen Sie beispielsweise diesen Satz an executionRules:

// [ { // This matches the key of a label on the action's `labels.LANGUAGE.executionRules` map "labelName": "alreadyExists", "conditions": { "errorCode": "ALREADY_EXISTS" } }, { "labelName": "widgetWrongSize", "conditions": { "errorCode": "WIDGET_SIZE", "sizeError": ["TOO_SMALL", "TOO_BIG"] } }, { "labelName": "widgetInvalidSize", "conditions": { "errorCode": "WIDGET_SIZE" } } ]

Die folgenden Treffer würden auftreten:

  • {"errorCode": "ALREADY_EXISTS", "widgetName": "TestWidget"}: Dies würde mit der ersten Regel übereinstimmen, da errorCode gleich ALREADY_EXISTS ist. In diesem Fall wird, auch wenn eine widgetName-Ausgabe vorliegt, diese nicht in der Regel verwendet, sodass jeder Wert zulässig ist.
  • {"errorCode": WIDGET_SIZE", "sizeError": "TO_clear"}: Dies würde mit der zweiten Regel übereinstimmen, da TOO_SMALL einer der übereinstimmenden Fehler vom Typ sizeError ist und errorCode WIDGET_SIZE ist.
  • {"errorCode": WIDGET_SIZE", "sizeError": "NO__TA"}: Dies würde mit der dritten Regel übereinstimmen, da auch wenn der errorCode WIDGET_SIZE ist, der sizeError keinem der von der zweiten Regel angegebenen Werte entspricht (TOO_SMALL oder TOO_BIG).

Mit diesem Übereinstimmungsmechanismus können Sie Fallback-Fehler festlegen, damit Sie spezifische Fehler für wichtige Fehlerereignisse haben können, aber auf etwas generischere Fehlermeldungen für weniger häufige Fehler zurückgreifen können.

Example 1

A basic example with the following input fields, created for contact and deal workflows:

  • a static input field
  • a dropdown field with options
  • a field whose value is a HubSpot owner
  • a field whose value is pulled from a property (that the user creating the workflow selects) on the enrolled object.
// { "actionUrl": "https://example.com/hubspot", "inputFields": [ { "typeDefinition": { "name": "widgetName", "type": "string", "fieldType": "text" }, "supportedValueTypes": ["STATIC_VALUE"], "isRequired": true }, { "typeDefinition": { "name": "widgetColor", "type": "enumeration", "fieldType": "select", "options": [ { "value": "red", "label": "Red" }, { "value": "blue", "label": "Blue" }, { "value": "green", "label": "Green" } ] }, "supportedValueTypes": ["STATIC_VALUE"] }, { "typeDefinition": { "name": "widgetOwner", "type": "enumeration", "referencedObjectType": "OWNER" }, "supportedValueTypes": ["STATIC_VALUE"] }, { "typeDefinition": { "name": "widgetQuantity", "type": "number" }, "supportedValueTypes": ["OBJECT_PROPERTY"] } ], "labels": { "en": { "actionName": "Create Widget - Example 1", "actionDescription": "This action will create a new widget in our system. So cool!", "actionCardContent": "Create widget {{widgetName}}", "inputFieldLabels": { "widgetName": "Widget Name", "widgetColor": "Widget Color", "widgetOwner": "Widget Owner", "widgetQuantity": "Widget Quantity" }, "inputFieldDescriptions": { "widgetName": "Enter the full widget name. I support <a href=\"https://hubspot.com\">links</a> too.", "widgetColor": "This is the color that will be used to paint the widget." } } }, "objectTypes": ["CONTACT", "DEAL"] }

Beispiel 2

Die folgende benutzerdefinierte Aktion verwendet eine serverlose Funktion, um die an die konfigurierte actionUrl gesendete Payload umzuwandeln. Da keine objectTypes angegeben sind, ist diese Aktion in allen Workflow-Typen verfügbar.

// { "actionUrl": "https://api.example.com/v1/widgets", "inputFields": [ { "typeDefinition": { "name": "widgetName", "type": "string", "fieldType": "text" }, "supportedValueTypes": ["STATIC_VALUE"], "isRequired": true } ], "labels": { "en": { "actionName": "Create Widget - Example 2", "actionCardContent": "Create widget {{widgetName}}", "inputFieldLabels": { "widgetName": "Widget Name" } } }, "functions": [ { "functionType": "PRE_ACTION_EXECUTION", "functionSource": "exports.main = function(event, callback) { return callback(transformRequest(event)); }\nfunction transformRequest(request) { return { webhookUrl: request.webhookUrl, body: JSON.stringify(request.fields), contentType: 'application/x-www-form-urlencoded', accept: 'application/json', httpMethod: 'POST' }; }" } ] }

Beispiel 3

Die folgende benutzerdefinierte Aktion verfügt über Feldabhängigkeiten und -optionen, die von einer API abgerufen werden. Da die Widget-Größe von der Widget-Farbe abhängig ist, kann der Benutzer so lange keinen Wert für die Widget-Größe eingeben, bis eine Widget-Farbe ausgewählt wurde.

Die Widget-Kosten hängen ebenfalls von der Widget-Farbe ab, sie werden jedoch durch den Wert bedingt, den der Benutzer für die Widget-Farbe auswählt. Der Benutzer kann keinen Wert für die Widget-Kosten eingeben, es sei denn, „Rot“ ist als Widget-Farbe ausgewählt.

// { "actionUrl": "https://example.com/hubspot", "inputFields": [ { "typeDefinition": { "name": "widgetName", "type": "string", "fieldType": "text" }, "supportedValueTypes": ["STATIC_VALUE"], "isRequired": true }, { "typeDefinition": { "name": "widgetColor", "type": "enumeration", "fieldType": "select", "options": [ { "value": "red", "description": "red", "label": "Red" }, { "value": "blue", "description": "blue", "label": "Blue" }, { "value": "green", "description": "green", "label": "Green" } ] }, "supportedValueTypes": ["STATIC_VALUE"], }, { "typeDefinition": { "name": "widgetSize", "type": "enumeration", "fieldType": "select", "optionsUrl": "https://api.example.com/v1/widget-sizes" }, "supportedValueTypes": ["STATIC_VALUE"] }, { "typeDefinition": { "name": "widgetCost", "type": "number", "fieldType": "number" }, "supportedValueTypes": ["OBJECT_PROPERTY"] } ], "inputFieldDependencies": [ { "dependencyType": "SINGLE_FIELD", "controllingFieldName": "widgetColor", "dependentFieldNames": ["widgetSize"] }, { "dependencyType": "CONDITIONAL_SINGLE_FIELD", "controllingFieldName": "widgetColor", "controllingFieldValue": "red", "dependentFieldNames": ["widgetCost"] } ], "labels": { "en": { "actionName": "Create Widget - Example 3", "actionCardContent": "Create widget {{widgetName}}", "inputFieldLabels": { "widgetName": "Widget Name", "widgetColor": "Widget Color", "widgetSize": "Widget Size", "widgetCost": "Widget Cost" } } }, "objectTypes": ["CONTACT", "DEAL"], "functions": [ { "functionType": "PRE_FETCH_OPTIONS", "id": "widgetSize", "functionSource": "exports.main = function(event, callback) { return callback(transformRequest(event)); }\nfunction transformRequest(request) { return { webhookUrl: request.webhookUrl + '?color=' + request.fields.widgetColor.value, body: JSON.stringify(request.fields), httpMethod: 'GET' }; }" } ] }

Beispiel 4

Das folgende Beispiel ist eine blockierende benutzerdefinierte Aktion. Die Callbacks-API kann verwendet werden, um HubSpot mitzuteilen, dass die Aktion abgeschlossen ist und das aufgenommene Objekt zur nächsten Aktion im Workflow zu verschieben.

Sie müssen nicht angeben, dass die Aktion zum Zeitpunkt der Erstellung der Aktion blockiert. Dies wird durch die Antwort von Ihrer konfigurierten actionUrl bestimmt.

// { "actionUrl": "https://example.com/hubspot", "inputFields": [ { "typeDefinition": { "name": "moonPhase", "type": "enumeration", "fieldType": "select", "options": [ { "value": "full_moon", "description": "Full Moon", "label": "Full" }, { "value": "half_moon", "description": "Half Moon", "label": "Half" }, { "value": "quarter_moon", "description": "Quarter Moon", "label": "Quarter" }, { "value": "new_moon", "description": "New Moon", "label": "New" } ] }, "supportedValueTypes": ["STATIC_VALUE"] } ], "objectRequestOptions": { "properties": ["email"] }, "labels": { "en": { "actionName": "Wait For Moon Phase", "actionCardContent": "Wait until a {{moonPhase}} moon", "inputFieldLabels": { "widgetName": "Moon Phase" } }, "fr": { "actionName": "Attendez la phase lunaire", "actionCardContent": "Attendez la lune {{moonPhase}}", "inputFieldLabels": { "widgetName": "Phase de lune" } } }, "objectTypes": ["CONTACT"] }

War dieser Artikel hilfreich? *
Dieses Formular dient dazu, Feedback zu unserer Entwicklerdokumentation zu sammeln. Wenn Sie uns Ihre Meinung zu HubSpot-Produkten mitteilen möchten, teilen Sie diese bitte im Ideenforum der Community.