Skip to main content

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

Query-Parameter

Beispiel-URLs:
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

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


👥 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 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 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:

Flache Struktur (unflatten=true)

Wenn unflatten=true, müssen alle verschachtelten Objekte mit Punktnotation abgeflacht werden:

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:
  2. Die API gibt nur die Komponenten zurück, die Sie bereitstellen müssen:
  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. 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. 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. 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)

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

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


🧩 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:
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”
Sie können auch Kontaktfelder direkt verwenden:

❌ Ungültige Beispiele

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

⏰ Planung & Konversationsabläufe

Sofortige Zustellung (Standard)

Wenn datetime_sending nicht angegeben ist, wird die Nachricht sofort gesendet:

Geplante Zustellung

Verwenden Sie datetime_sending und timezone, um Nachrichten zu planen: Verschachtelte Struktur:
Flache Struktur:

Integration von Konversationsabläufen

Verwenden Sie name_event, um bestimmte Konversationsabläufe auszulösen:

📋 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:
Antwort:

Beispiel 1B: Mehrere Empfänger (Massenversand)

Senden an MEHRERE Personen mit contacts Template: “Hallo {"{1}"}, vielen Dank für Ihr Interesse an {"{2}"}!” Anfrage:
Antwort:
Wenn einige Kontakte fehlschlagen:

Beispiel 2: Template mit Bild-Header

Template-Komponenten: ["header_image"] URL:
Verschachtelte Struktur:
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:
Flache Struktur:

Beispiel 4: Auslösung eines Konversationsablaufs

Verschachtelte Struktur:

📊 Antwortcodes

Erfolgreiche Antwort (200 OK)

Sofortiger Versand:
Geplanter Versand:

Fehlerantworten

400 Bad Request - Ungültige Parameter

401 Unauthorized - Ungültiger Zugriffsschlüssel

404 Not Found - Template nicht gefunden

422 Unprocessable Entity - Geschäftslogikfehler

429 Too Many Requests - Anfragelimit


🔧 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
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
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
Lösung: Für einen einzelnen Empfänger verwenden Sie contact als Objekt:

Fehler: Contacts ist keine Liste

Problem: contacts als Objekt {...} statt als Liste [...] gesendet
Lösung: Für mehrere Empfänger verwenden Sie contacts als Liste:

Fehler: Leere Kontaktliste

Problem: contacts als leere Liste [] gesendet
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
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
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)
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"]
Ergebnis: “Hallo John, Ihr Premium Package ist bereit!”

Beispiel 3: Template mit Bild-Header

Von der API zurückgegebene Komponenten: ["header_image"]
Hinweis: Body, Footer und Buttons sind im Template statisch.

Beispiel 4: Template mit Video-Header

Von der API zurückgegebene Komponenten: ["header_video"]

Beispiel 5: Template mit PDF-Dokument

Von der API zurückgegebene Komponenten: ["header_document"]

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"]
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"]
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