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
| Parameter | Erforderlich | Beschreibung |
|---|---|---|
access_key | Ja | Ihr eindeutiger API-Zugriffsschlüssel. |
unflatten | Nein | Wenn auf true gesetzt, muss der Body flache Variablen enthalten (keine verschachtelten Objekte). Wenn auf false gesetzt oder weggelassen, kann der Body verschachtelte Objekte enthalten. |
Header
| Schlüssel | Wert | Erforderlich | Beschreibung |
|---|---|---|---|
| Content-Type | application/json | Ja | Gibt an, dass der Anfragebody im JSON-Format vorliegt. |
access_key in der URL, nicht über Header.
📋 Anfrageparameter
Die API unterstützt zwei Datenstrukturformate, gesteuert durch den Parameterunflatten.
Erforderliche Parameter
| Parameter | Typ | Beschreibung | Beispiel |
|---|---|---|---|
contact ODER contacts | Object ODER Array | Wählen Sie eines: Einzelner Kontakt (Objekt) ODER Mehrere Kontakte (Array, max. 100) | Siehe unten |
language_template | String | Sprachcode für das Template | "es_ES", "en_US" |
name_template | String | Name des genehmigten Templates | "welcome_user" |
recipient_id | String | ID oder Telefonnummer des Empfängers | "34666033135" |
notification_type | String | Typ für Analysen | "marketing", "transactional", "utility" |
campaign_name | String | Kampagnenbezeichnung | "Black Friday 2024" |
contact (für einen einzelnen Empfänger) ODER contacts (für mehrere Empfänger) verwenden, aber NICHT beides.
Optionale Parameter
| Parameter | Typ | Beschreibung | Verwendung | Beispiel |
|---|---|---|---|---|
contact.name | String | Name des Kontakts zur Personalisierung | Für personalisierte Nachrichten | "Juan Pérez" |
contact.email | String | E-Mail des Kontakts | Für zusätzliche Kontaktdaten | "juan@email.com" |
name_event | String | Event zum Auslösen von Konversationsabläufen | Wenn Sie einen bestimmten Konversationsablauf starten möchten | "intent-general-push" |
datetime_sending | DateTime | Geplante Zustellzeit (ISO 8601) | Wenn Sie die Nachricht für später planen möchten | "2024-12-25T10:30:00" |
timezone | String | Zeitzone für geplante Zustellung | Bei Verwendung von datetime_sending | "Europe/Madrid" |
components_push.* | Mixed | Template-Komponenten (Text, Medien) | Wenn das Template dynamische Inhalte erfordert | Siehe 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:
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.| Typ | Komponentenname | Beschreibung | Beispielwert | Spezifikationen |
|---|---|---|---|---|
image | header_image | Header-Bild-URL | "https://example.com/image.jpg" | JPG, PNG, GIF - Max. 5MB |
video | header_video | Header-Video-URL | "https://example.com/video.mp4" | MP4, AVI, MOV - Max. 16MB, 30s |
document | header_document | Header-Dokument-URL | "https://example.com/doc.pdf" | PDF, DOC, XLS, PPT - Max. 100MB |
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.
| Komponentenname | Beschreibung | Entspricht Template-Platzhalter |
|---|---|---|
body_text_0 | Erste Variable im Body | {"{1}"} |
body_text_1 | Zweite Variable im Body | {"{2}"} |
body_text_2 | Dritte Variable im Body | {"{3}"} |
body_text_N | N-te Variable im Body | {"{N}"} |
{"{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.| Komponentenname | Beschreibung | Wann sie erscheint |
|---|---|---|
buttons_url_0 | URL für ersten URL-Button mit Variable {"{1}"} | Wenn das Template einen URL-Button mit {"{1}"} Platzhalter hat |
buttons_url_1 | URL für zweiten URL-Button mit Variable {"{2}"} | Wenn das Template mehrere URL-Buttons mit Variablen hat |
"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.
📚 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
