Zum Hauptinhalt springen

Documentation Index

Fetch the complete documentation index at: https://docs.lovi.ai/llms.txt

Use this file to discover all available pages before exploring further.

Einführung

Dieser Abschnitt enthält die offizielle Dokumentation zur Nutzung der Lovi API mit WhatsApp über Postman. Er enthält detaillierte Anweisungen zum Einrichten und Testen von API-Anfragen für die WhatsApp-Integration, um eine reibungslose Kommunikation über die Plattform zu gewährleisten. Die Authentifizierung erfolgt über Tokens, die eine Basisauthentifizierung für die API-Dienste ermöglichen. Weitere Informationen zur Authentifizierung finden Sie auf der Seite Authentifizierung. Die Lovi API unterstützt WhatsApp-Benachrichtigungen mit Multimedia-Inhalten, dynamischen Platzhaltern, geplanter Zustellung und Integration von Konversationsabläufen.

Hauptfunktionen:

  • WhatsApp-Benachrichtigungen mit Multimedia-Unterstützung
  • Dynamische Inhaltspersonalisierung mit Platzhaltern
  • Geplante Nachrichtenzustellung mit Zeitzonen-Unterstützung
  • Integration von Konversationsabläufen
  • Zwei Datenstrukturformate (verschachtelt und flach)

📣 WhatsApp-Benachrichtigung senden

Um eine Benachrichtigung über die Lovi API zu senden, führen Sie eine POST-Anfrage an den Endpoint mit den erforderlichen Parametern und der Authentifizierung durch.
Methode: POST Format: JSON

Endpoint

POST https://cloud.lovi.ai/functions/v1/notify?access_key={YOUR_ACCESS_KEY}

Query-Parameter

ParameterErforderlichBeschreibung
access_keyJaIhr eindeutiger API-Zugriffsschlüssel.
unflattenNeinWenn auf true gesetzt, muss der Body flache Variablen enthalten (keine verschachtelten Objekte). Wenn auf false gesetzt oder weggelassen, kann der Body verschachtelte Objekte enthalten.
Beispiel-URLs:
POST https://cloud.lovi.ai/functions/v1/notify?access_key=your-api-key
POST https://cloud.lovi.ai/functions/v1/notify?access_key=your-api-key&unflatten=true
SchlüsselWertErforderlichBeschreibung
Content-Typeapplication/jsonJaGibt an, dass der Anfragebody im JSON-Format vorliegt.
Hinweis: Die Authentifizierung erfolgt über den Parameter access_key in der URL, nicht über Header.

📋 Anfrageparameter

Die API unterstützt zwei Datenstrukturformate, gesteuert durch den Parameter unflatten.

Erforderliche Parameter

ParameterTypBeschreibungBeispiel
contact ODER contactsObject ODER ArrayWählen Sie eines: Einzelner Kontakt (Objekt) ODER Mehrere Kontakte (Array, max. 100)Siehe unten
language_templateStringSprachcode für das Template"es_ES", "en_US"
name_templateStringName des genehmigten Templates"welcome_user"
recipient_idStringID oder Telefonnummer des Empfängers"34666033135"
notification_typeStringTyp für Analysen"marketing", "transactional", "utility"
campaign_nameStringKampagnenbezeichnung"Black Friday 2024"
Wichtig: Sie müssen entweder contact (für einen einzelnen Empfänger) ODER contacts (für mehrere Empfänger) verwenden, aber NICHT beides.

Optionale Parameter

ParameterTypBeschreibungVerwendungBeispiel
contact.nameStringName des Kontakts zur PersonalisierungFür personalisierte Nachrichten"Juan Pérez"
contact.emailStringE-Mail des KontaktsFür zusätzliche Kontaktdaten"juan@email.com"
name_eventStringEvent zum Auslösen von KonversationsabläufenWenn Sie einen bestimmten Konversationsablauf starten möchten"intent-general-push"
datetime_sendingDateTimeGeplante Zustellzeit (ISO 8601)Wenn Sie die Nachricht für später planen möchten"2024-12-25T10:30:00"
timezoneStringZeitzone für geplante ZustellungBei Verwendung von datetime_sending"Europe/Madrid"
components_push.*MixedTemplate-Komponenten (Text, Medien)Wenn das Template dynamische Inhalte erfordertSiehe Komponentenabschnitt

👥 Einzelner vs. Mehrere Empfänger

Verwendung von contact - An eine Person senden

Verwenden Sie contact, wenn Sie eine Benachrichtigung an einen Empfänger senden möchten. Struktur:
{
  "contact": {
    "number": "34666033135",
    "name": "John",
    "email": "john@example.com"
  }
}
  • contact ist ein Objekt (keine Liste)
  • Erforderliches Feld: number
  • Optionale Felder: name, email und beliebige benutzerdefinierte Felder

Verwendung von contacts - An mehrere Personen senden (Massenversand)

Verwenden Sie contacts, wenn Sie dieselbe Benachrichtigung an mehrere Empfänger gleichzeitig senden möchten. Struktur:
{
  "contacts": [
    {
      "number": "34666033135",
      "name": "John"
    },
    {
      "number": "34777044246",
      "name": "Sarah"
    },
    {
      "number": "34888055357",
      "name": "Michael"
    }
  ]
}
  • contacts ist eine Liste/Array (kein einzelnes Objekt)
  • Maximum: 100 Kontakte pro Anfrage
  • Jeder Kontakt in der Liste muss eine number haben
  • Optionale Felder: name, email und beliebige benutzerdefinierte Felder
Wichtige Einschränkungen:
  • ⚠️ unflatten=true kann nicht mit contacts verwendet werden - Massenversand funktioniert nur mit verschachtelter Struktur
  • ⚠️ contact und contacts können nicht gleichzeitig verwendet werden - wählen Sie eines
  • ⚠️ Die contacts-Liste darf nicht leer sein - muss mindestens 1 Kontakt enthalten

🔄 Datenstrukturformate

Die API unterstützt zwei Formate basierend auf dem Parameter unflatten:

Verschachtelte Struktur (unflatten=false oder weggelassen)

Wenn unflatten=false oder nicht angegeben, verwenden Sie verschachtelte Objekte:
{
  "contact": {
    "number": "34666033135",
    "name": "Juan Pérez",
    "email": "juan@email.com"
  },
  "components_push": {
    "header_text_0": "Welcome Message",
    "body_text_0": "Hello {{name}}",
    "body_text_1": "Your order is ready!",
    "footer_text_0": "Support Team"
  },
  "language_template": "es_ES",
  "name_template": "order_ready",
  "recipient_id": "34666033135",
  "notification_type": "transactional",
  "campaign_name": "Order Notifications"
}

Flache Struktur (unflatten=true)

Wenn unflatten=true, müssen alle verschachtelten Objekte mit Punktnotation abgeflacht werden:
{
  "contact.number": "34666033135",
  "contact.name": "Juan Pérez",
  "contact.email": "juan@email.com",
  "components_push.header_text_0": "Welcome Message",
  "components_push.body_text_0": "Hello {{name}}",
  "components_push.body_text_1": "Your order is ready!",
  "components_push.footer_text_0": "Support Team",
  "language_template": "es_ES",
  "name_template": "order_ready",
  "recipient_id": "34666033135",
  "notification_type": "transactional",
  "campaign_name": "Order Notifications"
}

Wann welches Format verwenden

  • Verschachtelte Struktur (unflatten=false): Empfohlen für bessere Lesbarkeit und wenn Ihr System verschachtelte Objekte unterstützt
  • Flache Struktur (unflatten=true): Verwenden, wenn Ihr System keine verschachtelten Objekte unterstützt oder eine flache Datenstruktur erfordert

🎨 Komponenten & Multimedia

WICHTIG: Komponenten, die Sie dynamisch senden können, sind NUR diejenigen, die vom Template-Komponenten-Endpoint zurückgegeben werden. Die Struktur variiert je nachdem, ob das Template Variablen oder Medien hat.

Regeln für Komponentennamen

  • Header-Medien: header_image, header_video, header_document (KEINE Suffixnummer)
  • Body-Variablen: body_text_0, body_text_1, body_text_2, etc. (mit Indexnummer für jeden {"{1}"}, {"{2}"}, {"{3}"} Platzhalter)
  • Footer und Buttons: Sind STATISCH in der Template-Definition und KÖNNEN NICHT dynamisch gesendet werden

So erfahren Sie, welche Komponenten zu senden sind

  1. Rufen Sie zuerst den Template-Komponenten-Endpoint auf:
    GET /notify/template/components?access_key={key}&template={template_id}
    
  2. Die API gibt nur die Komponenten zurück, die Sie bereitstellen müssen:
    {
      "status": "OK",
      "components": ["header_image", "body_text_0", "body_text_1"]
    }
    
  3. Senden Sie NUR diese Komponenten in Ihrer Benachrichtigungsanfrage

Komponententypen nach Position

Header-Komponenten (nur Medien)

WICHTIG: Nur EINE Header-Komponente pro Template. Header-Text ist STATISCH im Template.
TypKomponentennameBeschreibungBeispielwertSpezifikationen
imageheader_imageHeader-Bild-URL"https://example.com/image.jpg"JPG, PNG, GIF - Max. 5MB
videoheader_videoHeader-Video-URL"https://example.com/video.mp4"MP4, AVI, MOV - Max. 16MB, 30s
documentheader_documentHeader-Dokument-URL"https://example.com/doc.pdf"PDF, DOC, XLS, PPT - Max. 100MB
Hinweis: header_text ist KEINE dynamische Komponente. Header-Text wird im Template definiert und kann nicht geändert werden.

Body-Komponenten (nur Variablen)

Body-Text mit Platzhaltern erfordert Variablen in der Reihenfolge: {"{1}"}, {"{2}"}, {"{3}"}, etc.
KomponentennameBeschreibungEntspricht Template-Platzhalter
body_text_0Erste Variable im Body{"{1}"}
body_text_1Zweite Variable im Body{"{2}"}
body_text_2Dritte Variable im Body{"{3}"}
body_text_NN-te Variable im Body{"{N}"}
Beispiel-Template: “Hallo {"{1}"}, Ihr Kurs {"{2}"} ist bereit”
  • body_text_0: Wert für {"{1}"} (z.B. “Maria”)
  • body_text_1: Wert für {"{2}"} (z.B. “JavaScript”)
⚠️ Footer ist STATISCH - wird im Template definiert und kann nicht pro Nachricht geändert werden.

Button-Komponenten

WICHTIG: Die meisten Buttons sind STATISCH im Template. URL-Buttons mit Variablen KÖNNEN jedoch dynamisch sein.
KomponentennameBeschreibungWann sie erscheint
buttons_url_0URL für ersten URL-Button mit Variable {"{1}"}Wenn das Template einen URL-Button mit {"{1}"} Platzhalter hat
buttons_url_1URL für zweiten URL-Button mit Variable {"{2}"}Wenn das Template mehrere URL-Buttons mit Variablen hat
Beispiel-Template-Button: "url": "https://example.com/{"{1}"}"
  • Das Template definiert das URL-Muster mit Platzhalter
  • Sie geben den Wert für {"{1}"} über buttons_url_0 an
Hinweis: Schnellantwort-Buttons sind immer statisch und können nicht pro Nachricht geändert werden.

Komponentenbeispiele

Beispiel 1: Template mit Bild-Header (Verschachtelte Struktur)

{
  "components_push": {
    "header_image": "https://cdn.example.com/promo.jpg"
  }
}

Beispiel 2: Template mit Body-Variablen (Verschachtelte Struktur)

{
  "components_push": {
    "body_text_0": "María",
    "body_text_1": "JavaScript Advanced Course"
  }
}

Beispiel 3: Template mit Bild und Variablen (Flache Struktur)

{
  "components_push.header_image": "https://cdn.example.com/promo.jpg",
  "components_push.body_text_0": "María",
  "components_push.body_text_1": "JavaScript Advanced Course"
}

🧩 Template-Variablen (Body-Text)

KRITISCH: Variablen in WhatsApp-Templates verwenden positionelle Platzhalter wie {"{1}"}, {"{2}"}, {"{3}"}, NICHT benannte Variablen wie {"{name}"}.

Wie Template-Variablen funktionieren

WhatsApp-Templates definieren Variablen als nummerierte Platzhalter im Template-Body-Text:
  • Template-Text: “Hallo {"{1}"}, Ihr Kurs {"{2}"} ist bereit”
  • {"{1}"} entspricht body_text_0
  • {"{2}"} entspricht body_text_1

Variablenzuweisung

Sie geben die Werte für diese nummerierten Platzhalter im components_push-Objekt an:
{
  "components_push": {
    "body_text_0": "María",
    "body_text_1": "JavaScript Advanced Course"
  }
}
Ergebnis: “Hallo María, Ihr Kurs JavaScript Advanced Course ist bereit”

Wichtige Regeln

  1. Positionsreihenfolge wichtig: body_text_0 = {"{1}"}, body_text_1 = {"{2}"}, etc.
  2. Direkte Werte: Geben Sie den tatsächlichen Wert an, nicht die {"{variable}"}-Syntax
  3. Alle Variablen erforderlich: Müssen Werte für alle {"{N}"}-Platzhalter im Template angeben
  4. Kein Mischen: Kann Variablen nicht mit statischem Text in components_push kombinieren

✅ Gültige Beispiele

Template: “Hallo {"{1}"}, Ihre Bestellung {"{2}"} ist bereit”
{
  "contact": {
    "name": "María",
    "order_id": "ORD-12345"
  },
  "components_push": {
    "body_text_0": "María",
    "body_text_1": "ORD-12345"
  }
}
Sie können auch Kontaktfelder direkt verwenden:
{
  "contact": {
    "name": "María",
    "order_id": "ORD-12345"
  },
  "components_push": {
    "body_text_0": "{{name}}",
    "body_text_1": "{{order_id}}"
  }
}

❌ Ungültige Beispiele

{
  "components_push": {
    "body_text_0": "Hello María", // ❌ Fügen Sie keinen Template-Text hinzu, nur den Wert
    "body_text_1": "{1}" // ❌ Verwenden Sie nicht {1}, geben Sie den tatsächlichen Wert an
  }
}

Variablenauflösung

Das System löst {"{variable}"}-Referenzen in components_push auf, indem es sucht:
  1. Zuerst im contact-Objekt
  2. Dann in Parametern auf Root-Ebene
{
  "contact": {
    "name": "María",
    "email": "maria@example.com"
  },
  "order_id": "ORD-12345",
  "components_push": {
    "body_text_0": "{{name}}", // Aufgelöst aus contact.name → "María"
    "body_text_1": "{{order_id}}" // Aufgelöst aus Root order_id → "ORD-12345"
  }
}

⏰ Planung & Konversationsabläufe

Sofortige Zustellung (Standard)

Wenn datetime_sending nicht angegeben ist, wird die Nachricht sofort gesendet:
{
  "contact": { "number": "34666033135" },
  "language_template": "es_ES",
  "name_template": "welcome_user",
  "recipient_id": "34666033135",
  "notification_type": "marketing",
  "campaign_name": "Welcome Campaign"
}

Geplante Zustellung

Verwenden Sie datetime_sending und timezone, um Nachrichten zu planen: Verschachtelte Struktur:
{
  "contact": { "number": "34666033135" },
  "language_template": "es_ES",
  "name_template": "welcome_user",
  "recipient_id": "34666033135",
  "notification_type": "marketing",
  "campaign_name": "Welcome Campaign",
  "datetime_sending": "2024-12-25T10:30:00",
  "timezone": "Europe/Madrid"
}
Flache Struktur:
{
  "contact.number": "34666033135",
  "language_template": "es_ES",
  "name_template": "welcome_user",
  "recipient_id": "34666033135",
  "notification_type": "marketing",
  "campaign_name": "Welcome Campaign",
  "datetime_sending": "2024-12-25T10:30:00",
  "timezone": "Europe/Madrid"
}

Integration von Konversationsabläufen

Verwenden Sie name_event, um bestimmte Konversationsabläufe auszulösen:
{
  "contact": { "number": "34666033135" },
  "language_template": "es_ES",
  "name_template": "course_info",
  "recipient_id": "34666033135",
  "notification_type": "marketing",
  "campaign_name": "Course Enrollment",
  "name_event": "info-course-nursing"
}

📋 Vollständige Beispiele

Beispiel 1: Einzelner Empfänger mit Body-Variablen

Senden an EINE Person mit contact Template: “Hallo {"{1}"}, vielen Dank für Ihr Interesse an {"{2}"}!” Anfrage:
{
  "contact": {
    "number": "34666033135",
    "customer_name": "Sarah"
  },
  "components_push": {
    "body_text_0": "{{customer_name}}",
    "body_text_1": "our Premium Membership"
  },
  "language_template": "en",
  "name_template": "interest_confirmation",
  "recipient_id": "34666033135",
  "notification_type": "marketing",
  "campaign_name": "Membership Campaign 2024"
}
Antwort:
{
  "success": true,
  "message": "Registration successful",
  "notification_id": "uuid-notification-123"
}

Beispiel 1B: Mehrere Empfänger (Massenversand)

Senden an MEHRERE Personen mit contacts Template: “Hallo {"{1}"}, vielen Dank für Ihr Interesse an {"{2}"}!” Anfrage:
{
  "contacts": [
    {
      "number": "34666033135",
      "customer_name": "Sarah"
    },
    {
      "number": "34777044246",
      "customer_name": "John"
    },
    {
      "number": "34888055357",
      "customer_name": "Michael"
    }
  ],
  "components_push": {
    "body_text_0": "{{customer_name}}",
    "body_text_1": "our Premium Membership"
  },
  "language_template": "en",
  "name_template": "interest_confirmation",
  "recipient_id": "bulk_campaign",
  "notification_type": "marketing",
  "campaign_name": "Membership Campaign 2024"
}
Antwort:
{
  "success": true,
  "message": "Processing completed",
  "total": 3,
  "processed": 3,
  "failed": 0,
  "errors": []
}
Wenn einige Kontakte fehlschlagen:
{
  "success": true,
  "message": "Processing completed",
  "total": 3,
  "processed": 2,
  "failed": 1,
  "errors": [
    {
      "contact": { "number": "34888055357", "customer_name": "Michael" },
      "reason": "Invalid phone number format"
    }
  ]
}

Beispiel 2: Template mit Bild-Header

Template-Komponenten: ["header_image"] URL:
POST https://cloud.lovi.ai/functions/v1/notify?access_key=your-api-key
Verschachtelte Struktur:
{
  "contact": {
    "number": "34666033135",
    "customer_name": "Robert",
    "email": "robert@example.com"
  },
  "components_push": {
    "header_image": "https://cdn.example.com/seasonal-promotion.jpg"
  },
  "language_template": "en",
  "name_template": "seasonal_offer",
  "recipient_id": "34666033135",
  "notification_type": "marketing",
  "campaign_name": "Holiday Sale 2024",
  "datetime_sending": "2024-12-24T09:00:00",
  "timezone": "Europe/Madrid"
}
Hinweis: Body, Footer und Buttons sind im Template statisch und können nicht geändert werden.

Beispiel 3: Template mit PDF-Dokument

Template-Komponenten: ["header_document"] URL:
POST https://cloud.lovi.ai/functions/v1/notify?access_key=your-api-key&unflatten=true
Flache Struktur:
{
  "contact.number": "34666033135",
  "contact.customer_name": "Jennifer",
  "contact.email": "jennifer@example.com",
  "components_push.header_document": "https://files.example.com/statement-2024.pdf",
  "language_template": "en",
  "name_template": "document_delivery",
  "recipient_id": "34666033135",
  "notification_type": "transactional",
  "campaign_name": "Monthly Statements"
}

Beispiel 4: Auslösung eines Konversationsablaufs

Verschachtelte Struktur:
{
  "contact": {
    "number": "34666033135",
    "first_name": "Laura",
    "last_name": "Martínez",
    "course_interest": "Web Development"
  },
  "language_template": "en_US",
  "name_template": "course_inquiry",
  "recipient_id": "34666033135",
  "notification_type": "marketing",
  "campaign_name": "Course Enrollment Q1",
  "name_event": "course-web-development-info",
  "datetime_sending": "2024-12-26T10:00:00",
  "timezone": "Europe/Madrid"
}

📊 Antwortcodes

Erfolgreiche Antwort (200 OK)

Sofortiger Versand:
{
  "success": true,
  "message": "Notification queued successfully",
  "notification_id": "uuid-notification-123"
}
Geplanter Versand:
{
  "success": true,
  "message": "Notification scheduled successfully",
  "notification_id": "uuid-notification-456",
  "scheduled_time": "2024-12-25T10:30:00Z"
}

Fehlerantworten

400 Bad Request - Ungültige Parameter

{
  "error": "validation_failed",
  "message": "Required field missing",
  "details": {
    "field": "contact.number",
    "reason": "This field is required"
  }
}

401 Unauthorized - Ungültiger Zugriffsschlüssel

{
  "error": "unauthorized",
  "message": "Invalid or expired access key"
}

404 Not Found - Template nicht gefunden

{
  "error": "template_not_found",
  "message": "Template 'welcome_user' not found or not approved"
}

422 Unprocessable Entity - Geschäftslogikfehler

{
  "error": "template_not_approved",
  "message": "Template is not in approved status",
  "details": {
    "template_name": "pending_template",
    "current_status": "pending"
  }
}

429 Too Many Requests - Anfragelimit

{
  "error": "rate_limit_exceeded",
  "message": "Too many requests. Try again in 60 seconds",
  "retry_after": 60
}

🔧 Bewährte Praktiken

Datenstruktur

  • Bevorzugen Sie die verschachtelte Struktur (unflatten=false) für bessere Lesbarkeit
  • Verwenden Sie die flache Struktur (unflatten=true) nur wenn Ihr System es erfordert
  • Validieren Sie die Struktur vor dem Senden von Anfragen

Medienrichtlinien

  • Verwenden Sie HTTPS-URLs für alle Mediendateien
  • Optimieren Sie Dateigrößen für schnellere Zustellung
  • Verwenden Sie öffentliche URLs ohne Authentifizierungsanforderungen
  • Testen Sie Medien-URLs vor dem Versand, um die Erreichbarkeit sicherzustellen

Planung

  • Geben Sie die Zeitzone an bei Verwendung von datetime_sending
  • Validieren Sie zukünftige Daten vor der Planung
  • Berücksichtigen Sie Geschäftszeiten für besseres Engagement
  • Testen Sie die Planung in der Entwicklungsumgebung

Platzhalter

  • Verwenden Sie aussagekräftige Variablennamen, die zu Ihren Daten passen
  • Testen Sie die Variablenersetzung vor der Produktion
  • Halten Sie eine Variable pro Feld ein, um Fehler zu vermeiden
  • Stellen Sie Fallback-Werte in Ihrer Anwendungslogik bereit

Leistung

  • Bündeln Sie mehrere Benachrichtigungen wenn möglich
  • Cachen Sie Template-Informationen, um API-Aufrufe zu reduzieren
  • Überwachen Sie Anfragelimits und implementieren Sie Backoff-Strategien
  • Verwenden Sie Connection-Pooling für bessere Leistung

🚨 Häufige Fehler & Lösungen

Kontakt-/Kontakte-Validierungsfehler

Fehler: Fehlende Kontaktinformationen

Problem: Anfrage enthält weder contact noch contacts
{
  "error": "validation_failed",
  "message": "Missing required field: 'contact' or 'contacts'"
}
Lösung: Sie müssen entweder contact (für eine Person) ODER contacts (für mehrere Personen) angeben

Fehler: Gleichzeitige Verwendung von Contact und Contacts

Problem: Anfrage enthält sowohl contact als auch contacts gleichzeitig
{
  "error": "validation_failed",
  "message": "Cannot use both 'contact' and 'contacts' simultaneously"
}
Lösung: Wählen Sie nur eines - verwenden Sie contact für einzelne Empfänger oder contacts für mehrere Empfänger

Fehler: Contact ist eine Liste statt eines Objekts

Problem: contact als Liste [...] statt als Objekt {...} gesendet
{
  "error": "validation_failed",
  "message": "'contact' must be an object, not an array"
}
Lösung: Für einen einzelnen Empfänger verwenden Sie contact als Objekt:
{
  "contact": {
    "number": "34666033135",
    "name": "John"
  }
}

Fehler: Contacts ist keine Liste

Problem: contacts als Objekt {...} statt als Liste [...] gesendet
{
  "error": "validation_failed",
  "message": "'contacts' must be an array, not an object"
}
Lösung: Für mehrere Empfänger verwenden Sie contacts als Liste:
{
  "contacts": [
    { "number": "34666033135", "name": "John" },
    { "number": "34777044246", "name": "Sarah" }
  ]
}

Fehler: Leere Kontaktliste

Problem: contacts als leere Liste [] gesendet
{
  "error": "validation_failed",
  "message": "'contacts' array cannot be empty"
}
Lösung: Fügen Sie mindestens einen Kontakt in die Liste ein

Fehler: Zu viele Kontakte

Problem: Mehr als 100 Kontakte in der contacts-Liste gesendet
{
  "error": "validation_failed",
  "message": "Maximum 100 contacts allowed per request. Received: 150"
}
Lösung: Teilen Sie Ihre Kontakte in mehrere Anfragen mit maximal 100 Kontakten auf

Fehler: Unflatten mit Contacts

Problem: unflatten=true mit contacts (Massenversand) verwendet
{
  "error": "validation_failed",
  "message": "Parameter 'unflatten' is incompatible with 'contacts' array"
}
Lösung: Massenversand mit contacts funktioniert nur mit verschachtelter Struktur. Entfernen Sie unflatten=true oder verwenden Sie unflatten=false

Strukturkonflikt

Problem: Vermischung von verschachtelten und flachen Strukturen Lösung: Wählen Sie ein Format konsistent basierend auf dem unflatten-Parameter

Template nicht gefunden

Problem: Verwendung eines nicht existierenden oder nicht genehmigten Templates Lösung: Überprüfen Sie den Template-Namen und den Genehmigungsstatus mithilfe der Template-Management-Endpoints

Ungültiges Telefonnummernformat

Problem: ’+’ oder Leerzeichen in der Telefonnummer enthalten Lösung: Verwenden Sie das saubere internationale Format ohne Symbole (z.B. 34666033135)

Fehler bei Komponentennamen

Problem: Verwendung falscher Komponentennamen wie header_image_0 statt header_image Lösung: Überprüfen Sie immer zuerst die Template-Komponenten mit dem /notify/template/components Endpoint

Fehler bei Variablenpositionen

Problem: Falsche Zuordnung zwischen Template-Platzhaltern und body_text-Komponenten Lösung: Denken Sie daran: {"{1}"} = body_text_0, {"{2}"} = body_text_1, etc.

Änderung statischer Komponenten

Problem: Versuch, Footer, Buttons oder Header-Text dynamisch zu senden Lösung: Diese Komponenten sind im Template statisch. Senden Sie nur Komponenten, die vom Template-Komponenten-Endpoint zurückgegeben werden

Planungsfehler

Problem: Vergangene Daten oder ungültige Zeitzone Lösung: Verwenden Sie zukünftige Daten im ISO 8601-Format mit gültigen IANA-Zeitzonencodes

🔬 Template-Beispiele

Diese Beispiele zeigen verschiedene Arten von Template-Strukturen.

Beispiel 1: Einfaches Nur-Text-Template

Von der API zurückgegebene Komponenten: [] (leer - keine dynamischen Komponenten)
{
  "contact": {
    "number": "34666033135"
  },
  "language_template": "en",
  "name_template": "welcome_message",
  "recipient_id": "34666033135",
  "notification_type": "marketing",
  "campaign_name": "Welcome Campaign"
}
Hinweis: Kein components_push erforderlich, da das Template keine dynamischen Komponenten hat.

Beispiel 2: Template mit Body-Variablen

Template-Body: “Hallo {"{1}"}, Ihr {"{2}"} ist bereit!” Von der API zurückgegebene Komponenten: ["body_text_0", "body_text_1"]
{
  "contact": {
    "number": "34666033135",
    "customer_name": "John",
    "product_name": "Premium Package"
  },
  "components_push": {
    "body_text_0": "{{customer_name}}",
    "body_text_1": "{{product_name}}"
  },
  "language_template": "en",
  "name_template": "order_ready",
  "recipient_id": "34666033135",
  "notification_type": "transactional",
  "campaign_name": "Order Notifications"
}
Ergebnis: “Hallo John, Ihr Premium Package ist bereit!”

Beispiel 3: Template mit Bild-Header

Von der API zurückgegebene Komponenten: ["header_image"]
{
  "contact": {
    "number": "34666033135"
  },
  "components_push": {
    "header_image": "https://example.com/promotional-banner.jpg"
  },
  "language_template": "en",
  "name_template": "promo_with_image",
  "recipient_id": "34666033135",
  "notification_type": "marketing",
  "campaign_name": "Holiday Sale"
}
Hinweis: Body, Footer und Buttons sind im Template statisch.

Beispiel 4: Template mit Video-Header

Von der API zurückgegebene Komponenten: ["header_video"]
{
  "contact": {
    "number": "34666033135"
  },
  "components_push": {
    "header_video": "https://example.com/product-demo.mp4"
  },
  "language_template": "en",
  "name_template": "video_announcement",
  "recipient_id": "34666033135",
  "notification_type": "marketing",
  "campaign_name": "Product Launch"
}

Beispiel 5: Template mit PDF-Dokument

Von der API zurückgegebene Komponenten: ["header_document"]
{
  "contact": {
    "number": "34666033135",
    "customer_name": "Jane Smith"
  },
  "components_push": {
    "header_document": "https://example.com/invoice-12345.pdf"
  },
  "language_template": "en",
  "name_template": "invoice_delivery",
  "recipient_id": "34666033135",
  "notification_type": "transactional",
  "campaign_name": "Monthly Invoices"
}

Beispiel 6: Template mit Header-Text und Body-Variable

Header: “Wichtiger Hinweis” (statischer Text im Template) Body: “Hallo {"{1}"}, willkommen auf unserer Plattform!” Von der API zurückgegebene Komponenten: ["body_text_0"]
{
  "contact": {
    "number": "34666033135",
    "first_name": "Michael"
  },
  "components_push": {
    "body_text_0": "{{first_name}}"
  },
  "language_template": "en",
  "name_template": "welcome_with_header",
  "recipient_id": "34666033135",
  "notification_type": "utility",
  "campaign_name": "User Onboarding"
}
Ergebnis:
  • Header: “Wichtiger Hinweis”
  • Body: “Hallo Michael, willkommen auf unserer Plattform!”

Beispiel 7: Template mit dynamischem URL-Button

Body: Statischer Text Buttons:
  • URL-Button mit Variable: "url": "https://example.com/{"{1}"}" (dynamisch)
  • Schnellantwort-Button: “Support kontaktieren” (statisch) Von der API zurückgegebene Komponenten: ["buttons_url_0"]
{
  "contact": {
    "number": "34666033135",
    "customer_id": "12345"
  },
  "components_push": {
    "buttons_url_0": "https://example.com/profile/{{customer_id}}"
  },
  "language_template": "en",
  "name_template": "account_notification",
  "recipient_id": "34666033135",
  "notification_type": "utility",
  "campaign_name": "Account Updates"
}
Ergebnis: Der URL-Button verlinkt zu https://example.com/profile/12345 Hinweis: Die Variable in buttons_url_0 kann Kontaktfelder mit der {"{variable}"}-Syntax referenzieren, und das System löst sie vor dem Versand auf.

📚 Verwandte Dokumentation