INHALTSVERZEICHNIS

Überblick

Mit dieser Funktion erhalten Kunden die Möglichkeit, benutzerdefinierte Webhooks einzurichten, die bei Änderungen des Kampagnenstatus ausgelöst werden um Kampagnen- und Empfängerinformationen an das CRM des Kunden zurückzumelden.


Wenn sich der Status einer Kampagne ändert, z. B. von Draft zu Booked (Kampagne wurde gebucht) oder Print zu Live (Übergabe an die Post) führt das System API-Call an einen konfigurierten Endpunkt aus, der mit einer bestimmten Payload (= zu übertragende Daten) aufgerufen wird.

Ein Web-Hook wird definiert durch:

  • Auslösender Statusübergang
  • Art des Web-Hooks (definiert die für die Übertragung verfügbaren Daten)
  • Ziel (Endpunkt) der API-Calls
  • Zu übertragende Daten (Payload Template)


Statusübergänge

Die am häufigsten verwendeten Übergänge sind:

  • Kampagne wurde gebucht
  • Kampagne wurde erfolgreich überprüft und der Druckvorgang gestartet
  • Kampagne wurde an die Post übergeben


Web-Hook-Arten

Es stehen 4 verschiedene Arten von Web-Hooks zur Verfügung, die den Zugriff auf verschiedene Daten ermöglichen, die als Payload verwendet werden können.


Campaign

Der Campaign-Web-Hook wird einmal pro Statusänderung der Kampagne ausgelöst und liefert die folgenden Daten:


name
state
type
accountName
accountConnectionType
countryName
countryCode
createdDate
createdWeek
createdMonth
bookingDate
bookingWeek
bookingMonth
postalHandoverDate
postalHandoverWeek
postalHandoverMonth
variationsCount
productsCount
hasEnvelope
volume
customerAddressVolume
controlAddressVolume
volumePerVariation
customerAddressVolumePerVariation
controlAddressVolumePerVariation
pricing.print
pricing.postage
pricing.premiumValidation
pricing.total
pricing.vatRate
pricing.vat
pricing.gross

Zusätzliche Daten zu konfigurierten Produkten innerhalb der Kampagne sind auf Anfrage verfügbar.


Variation

Der Variation-Web-Hook wird einmal für jede in der Kampagne definierte Variation pro Statusänderung der Kampagne ausgelöst und liefert dieselben Daten wie für den Typ "Campaign" mit Ausnahme von


variationsCount

Zusätzlich verfügbare Daten:


variationId

Alle Volumen- und Preiswerte verstehen sich pro Variation.


Recipients

Der Recipients-Web-Hook wird  einmal pro Statusänderung der Kampagne ausgelöst und liefert dieselben Daten wie für den Typ Campaign (unter dem Präfix "Campaign") sowie die folgenden Daten (Array von Objekten in "recipients")  pro Empfänger:


  variationIndex
  vouchers.code
  vouchers.itemIndex
  vouchers.voucherIndex
  externalId
  lineNumber
  addressSource.origin
  addressSource.sourceRef
  changes
  warns.field
  warns.message
  errs.field
  errs.message
  address.companyName1
  address.companyName2
  address.companyName3
  address.title
  address.otherTitles
  address.jobTitle
  address.gender
  address.firstName
  address.lastName
  address.fullName
  address.careOf
  address.street
  address.houseNumber
  address.address1
  address.address2
  address.address3
  address.zipCode
  address.city
  address.country
  address.individualisations

Die Empfänger werden hier in Batches prozessiert und somit ggf. mehrere API-Calls ausgeführt. Dazu muss eine Batchgröße (wie viele Empfänger in einem API-Call gesendet werden) definiert werden. Für jeden ausgelösten API-Call enthält die Variable "recipients" nur die Anzahl der Empfänger, wie durch die Batchgröße definiert. Für einen solchen Web-Hook werden also "Anzahl Empfänger / Batchgröße" API-Calls ausgeführt.


ExcludedCustomerAddress

ExcludedCustomerAddress-Webhooks werden für alle Kundenadressen ausgelöst, die aufgrund von Validierungsfehlern oder weil sie mit einer "excluded"-Warnung gekennzeichnet sind, nicht in die Kampagne aufgenommen wurden. Wie Empfänger werden sie in mehreren Batches pro Statusänderung der Kampagne ausgelöst und liefern dieselben Daten wie für den Typ Campaign (unter dem Präfix "Campaign") sowie die folgenden Daten (Array von Objekten in "excludedCustomerAddress") pro ausgeschlossener Kundenadresse:


  address.addressNameCounter
  address.jobTitle
  address.title
  address.otherTitles
  address.gender
  address.firstName
  address.lastName
  address.fullName
  address.companyName1
  address.companyName2
  address.companyName3
  address.individualisations
  address.street
  address.houseNumber
  address.careOf 
  address.zipCode 
  address.city 
  address.country
  address.address1
  address.address2
  address.address3
  individualVouchers.code
  individualVouchers.columnName
  variationIndex
  externalId
  lineNumber
  addressSource.origin
  addressSource.sourceRef
  changes
  warns.field
  warns.message
  errs.field
  errs.message


Eine Batchgröße (wie viele ausgeschlossene Kundenadressen in einer Anfrage gesendet werden) muss definiert werden. Für jede ausgelöste Webhook-Anforderung enthält die Variable "Recipients" nur die Anzahl der ausgeschlossenen Kundenadressen, wie durch die Batchgröße definiert.


Unterstützte Ziel-Arten

SalesForce Marketing Cloud

Der Web-Hook löst einen Aufruf an die SFMC-API zum "Upserting" von Daten in eine Data Extension aus. Die Authentifizierung in der SFMC-API wird von optilyz gesteuert.

Folgende Informationen sind erforderlich:

  • CustomerKey der zu aktualisierenden Data Extension
  • ein oder mehrere Data Extension Feldernamen und das entsprechende optilyz-Feld (siehe Liste der bereitgestellten Daten oben), die zum Identifizieren (lookup) der bestimmten zu aktualisierenden Zeile verwendet werden sollen (wird eine solche Zeile nicht gefunden, wird sie erstellt)
  • ein oder mehrere Data Extension Feldernamen und das entsprechende optilyz-Feld (siehe Liste der bereitgestellten Daten oben), die zum tatsächlichen Aktualisieren von Daten verwendet werden sollen

Beispiel:

Data Extension CustomerKey: 

"988050E5-C613-4A91-841E-31B339C4297F"

Lookup Felder:

data extension field name

optilyz field name

static value

subscriberKey

recipients.externalId

campaign

“reactivation”


Update Felder:

data extension field name

optilyz field name

static value

cost

campaign.pricing.total / campaign.volume

shopId

recipients.address.individualisation1

foo

“bar”


Emarsys

Der Web-Hook löst eine Aufruf an die Emarsys-API aus. Die Authentifizierung in der Emarsys-API wird von optilyz automatisch gesteuert, es sind dazu keine spezifischen Header erforderlich. Alle verfügbaren Aufrufe gemäß der Emarsys API-Dokumentation können ausgeführt werden:

https://dev.emarsys.com/v2/emarsys-developer-hub 

Folgende Informationen sind erforderlich:

  • method - https request-Methode:
    • GET
    • POST
    • PUT
  • endpoint - der Emarsys API-Endpunkt (z. B. "/contact")
  • body template - der body der request (Daten aus dataSource dürfen verwendet werden) - nur für die Methoden POST und PUT

Zusätzliche optionale Informationen:

  • headers template - Die benutzerdefinierten Header, die der API-Call benötigt (Daten aus dataSource dürfen verwendet werden)
  • query-params template - Die benutzerdefinierten Query-Parameter, die der API-Call benötigt (Daten aus dataSource dürfen verwendet werden)


AWS API Gateway

Der Web-Hook löst einen API-Call (REST) an einen AWS API Gateway-Endpunkt mit benutzerdefinierten JSON-Nutzdaten aus.


Folgende Informationen sind erforderlich:

  • method - https request-Methode:
    • GET
    • POST
    • PUT
  • region - die AWS-Region, in der der AWS API Gateway-Endpoint liegt
  • endpoint - die AWS API Gateway-Endpoint URL
  • accessKey - die AWS accessKey
  • secretKey - die AWS secretKey
  • body template - der body des Request (Daten aus dataSource dürfen verwendet werden) - nur für die Methoden POST und PUT


Zusätzliche optionale Informationen:

  • headers template - Die benutzerdefinierten Header, die der API-Call benötigt (Daten aus dataSource dürfen verwendet werden)
  • query-params template - Die benutzerdefinierten Query-Parameter, die der API-Call benötigt (Daten aus dataSource dürfen verwendet werden)


REST

Der Web-Hook löst einen HTTPS-API-Call (REST) mit benutzerdefinierten JSON-Nutzdaten aus. Die Authentifizierung muss über Header und / oder Query-Parameter erfolgen.


Folgende Informationen sind erforderlich:

  • method - https request-Methode:
    • GET
    • POST
    • PUT
  • url - Request-Endpoint-URL, nur HTTPS
  • body template - der body des Request (Daten aus dataSource dürfen verwendet werden) - nur für die Methoden POST und PUT

Zusätzliche optionale Informationen:

  • headers template - Die benutzerdefinierten Header, die der API-Call benötigt (Daten aus dataSource dürfen verwendet werden)
  • query-params template - Die benutzerdefinierten Query-Parameter, die der API-Call benötigt (Daten aus dataSource dürfen verwendet werden)


Template Beispiele

Body Template

{
"campaign": {
"name": "{{campaign.name}}",
"accountName": "{{campaign.accountName}}",
"countryName": "{{campaign.countryName}}",
"countryCode": "{{campaign.countryCode}}",
"createdDate": "{{campaign.createdDate}}",
"bookingDate": "{{campaign.bookingDate}}",
"postalHandoverDate": "{{campaign.postalHandoverDate}}",
"variationsCount": "{{campaign.variationsCount}}",
"productsCount": "{{campaign.productsCount}}",
"hasEnvelope": "{{campaign.hasEnvelope}}",
"volume": "{{campaign.volume}}",
"pricing_print": "{{campaign.pricing.print}}",
"pricing_postage": "{{campaign.pricing.postage}}",
"pricing_premiumValidation": "{{campaign.pricing.premiumValidation}}",
"pricing_total": "{{campaign.pricing.total}}",
"pricing_vat": "{{campaign.pricing.vat}}",
"pricing_gross": "{{campaign.pricing.gross}}",
"vatRate": "{{campaign.pricing.vatRate}}"
},
"recipients": [
{{#each recipients}}
{
"CUSTOMER_ID": "{{address.individualisations.[0]}}",
"SHOP_ID" : "{{address.individualisations.[1]}}",
"USERID" : "{{address.individualisations.[2]}}",
"variationIndex": "{{variationIndex}}",
"lineNumber": "{{lineNumber}}",
"sourceRef": "{{addressSource.sourceRef}}",
"warns": [
{{#each warns}}
{
"field": "{{field}}",
"message": "{{message}}"
}
{{#unless @last}},{{/unless}}
{{/each}}
]
}
{{#unless @last}},{{/unless}}
{{/each}}
],
"excludedCustomerAddresses": [
{{#each excludedCustomerAddresses}}
{
"CUSTOMER_ID": "{{address.individualisations.[0]}}",
"SHOP_ID" : "{{address.individualisations.[1]}}",
"USERID" : "{{address.individualisations.[2]}}",
"variationIndex": "{{variationIndex}}",
"lineNumber": "{{lineNumber}}",
"sourceRef": "{{addressSource.sourceRef}}",
"warns": [
{{#each warns}}
{
"field": "{{field}}",
"message": "{{message}}"
}
{{#unless @last}},{{/unless}}
{{/each}}
],
"errs": [
{{#each errs}}
{
"field": "{{field}}",
"message": "{{message}}"
}
{{#unless @last}},{{/unless}}
{{/each}}
]
}
{{#unless @last}},{{/unless}}
{{/each}}
]
  }

Headers Template

{ "Authorization": "Basic abc123" }

Query-params Template

{ "countryName": "{{countryName}}", "bookingMonth": "{{bookingMonth}}" }