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:
Header
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 Parameterunflatten.
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:
contactist ein Objekt (keine Liste)- Erforderliches Feld:
number - Optionale Felder:
name,emailund 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:
contactsist eine Liste/Array (kein einzelnes Objekt)- Maximum: 100 Kontakte pro Anfrage
- Jeder Kontakt in der Liste muss eine
numberhaben - Optionale Felder:
name,emailund beliebige benutzerdefinierte Felder
- ⚠️
unflatten=truekann nicht mitcontactsverwendet werden - Massenversand funktioniert nur mit verschachtelter Struktur - ⚠️
contactundcontactskö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 Parameterunflatten:
Verschachtelte Struktur (unflatten=false oder weggelassen)
Wennunflatten=false oder nicht angegeben, verwenden Sie verschachtelte Objekte:
Flache Struktur (unflatten=true)
Wennunflatten=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
-
Rufen Sie zuerst den Template-Komponenten-Endpoint auf:
-
Die API gibt nur die Komponenten zurück, die Sie bereitstellen müssen:
- 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-Komponenten
⚠️ 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}"}überbuttons_url_0an
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}"}entsprichtbody_text_0{"{2}"}entsprichtbody_text_1
Variablenzuweisung
Sie geben die Werte für diese nummerierten Platzhalter imcomponents_push-Objekt an:
Wichtige Regeln
- Positionsreihenfolge wichtig:
body_text_0={"{1}"},body_text_1={"{2}"}, etc. - Direkte Werte: Geben Sie den tatsächlichen Wert an, nicht die
{"{variable}"}-Syntax - Alle Variablen erforderlich: Müssen Werte für alle
{"{N}"}-Platzhalter im Template angeben - Kein Mischen: Kann Variablen nicht mit statischem Text in components_push kombinieren
✅ Gültige Beispiele
Template: “Hallo{"{1}"}, Ihre Bestellung {"{2}"} ist bereit”
❌ Ungültige Beispiele
Variablenauflösung
Das System löst{"{variable}"}-Referenzen in components_push auf, indem es sucht:
- Zuerst im
contact-Objekt - Dann in Parametern auf Root-Ebene
⏰ Planung & Konversationsabläufe
Sofortige Zustellung (Standard)
Wenndatetime_sending nicht angegeben ist, wird die Nachricht sofort gesendet:
Geplante Zustellung
Verwenden Siedatetime_sending und timezone, um Nachrichten zu planen:
Verschachtelte Struktur:
Integration von Konversationsabläufen
Verwenden Siename_event, um bestimmte Konversationsabläufe auszulösen:
📋 Vollständige Beispiele
Beispiel 1: Einzelner Empfänger mit Body-Variablen
Senden an EINE Person mitcontact
Template: “Hallo {"{1}"}, vielen Dank für Ihr Interesse an {"{2}"}!”
Anfrage:
Beispiel 1B: Mehrere Empfänger (Massenversand)
Senden an MEHRERE Personen mitcontacts
Template: “Hallo {"{1}"}, vielen Dank für Ihr Interesse an {"{2}"}!”
Anfrage:
Beispiel 2: Template mit Bild-Header
Template-Komponenten:["header_image"]
URL:
Beispiel 3: Template mit PDF-Dokument
Template-Komponenten:["header_document"]
URL:
Beispiel 4: Auslösung eines Konversationsablaufs
Verschachtelte Struktur:📊 Antwortcodes
Erfolgreiche Antwort (200 OK)
Sofortiger 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 wedercontact noch contacts
contact (für eine Person) ODER contacts (für mehrere Personen) angeben
Fehler: Gleichzeitige Verwendung von Contact und Contacts
Problem: Anfrage enthält sowohlcontact als auch contacts gleichzeitig
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
contact als Objekt:
Fehler: Contacts ist keine Liste
Problem:contacts als Objekt {...} statt als Liste [...] gesendet
contacts als Liste:
Fehler: Leere Kontaktliste
Problem:contacts als leere Liste [] gesendet
Fehler: Zu viele Kontakte
Problem: Mehr als 100 Kontakte in dercontacts-Liste gesendet
Fehler: Unflatten mit Contacts
Problem:unflatten=true mit contacts (Massenversand) verwendet
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 demunflatten-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-EndpointsUngü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 wieheader_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 werdenPlanungsfehler
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)
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"]
Beispiel 3: Template mit Bild-Header
Von der API zurückgegebene Komponenten:["header_image"]
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"]
- 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"]
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.
Kampagnenstatus abfragen
Nach dem Erstellen den Fortschritt perGET abfragen, per ID oder per Name. Derselbe Endpoint gilt für WhatsApp und Voice (POST /notify/voice). Es gibt kein notification_id. Status braucht keine Extra-Permission; jeder gültige Key der Firma.
Create braucht whatsapp_notifications am Key. Status braucht keine Extra-Permission. Max. 100 Kontakte. Kein HTTP-Rate-Limit, keine Pagination. Bei contacts ist message "Processing completed" plus Zähler.
Host: https://cloud.lovi.ai/functions/v1/…. app.lovi.ai/functions ist nicht diese API.
failed_limit kommen zusätzlich failed_list und failed_offset. Nächste Seite: failed_offset um failed_limit erhöhen; leere Liste = Ende.
{ "success": false, "message": "…" }. 400 fehlende Parameter oder campaign_id keine UUID. 404 ungültiger Key (nicht 401) oder fremde/unbekannte Kampagne. 500 intern.
📚 Verwandte Dokumentation
- Authentifizierung - Wie Sie Zugriffstokens und API-Schlüssel erhalten
- Sprachbenachrichtigungen - Automatisierte Sprachanrufe senden
- Template-Verwaltung - WhatsApp-Templates erstellen und verwalten
- Planung - Erweiterte Planung und Zeitzonenverwaltung
- Fehlerbehandlung - Vollständige Fehlercodes und Behandlungsstrategien
- Bewährte Praktiken - Sicherheits- und Leistungsrichtlinien
