Zum Hauptinhalt springen
Die telli V2 API ist eine neue RESTful API zur Verwaltung von Kontakten und Kontakteigenschaften. Sie existiert parallel zur V1 API — beide bleiben vollständig funktionsfähig. Diese Anleitung zeigt dir die Unterschiede und wie du deine Integration migrierst.

Voraussetzungen

  • Ein telli Konto mit API-Zugang
  • Ein API-Schlüssel aus deinem telli-Dashboard (Einstellungen > Entwickler)

Was sich geändert hat

Die V2 API bringt mehrere Verbesserungen gegenüber V1:
  • Typisierte Kontakteigenschaften — Strukturierte, validierte Eigenschaften ersetzen untypisierte dynamische Variablen (siehe Kontakteigenschaften für Hintergrundinformationen)
  • Cursor-basierte Paginierung — Effiziente Paginierung beim Auflisten von Kontakten
  • Strukturierte Fehler — Einheitliche Fehlerantworten mit HTTP-Statuscodes und Fehlercodes

Authentifizierung

Die Authentifizierung bleibt unverändert. Verwende denselben API-Schlüssel mit demselben Authorization-Header:
Die Basis-URL bleibt gleich — V2-Endpunkte sind unter dem /v2/-Präfix verfügbar.

Endpunkt-Zuordnung


Feld-Zuordnung

Request- und Response-Felder wurden von snake_case zu camelCase geändert:

Antwortformat

V2-Antworten enthalten ein type-Feld und geben angereicherte Kontakteigenschaftsdaten zurück.
Wichtige Unterschiede in der Antwort:
  • contact_id ist jetzt id
  • contact_details (flaches Key-Value-Objekt) ist jetzt properties (Array aus typisierten, angereicherten Objekten)
  • Jede Eigenschaft in der Antwort enthält ihren dataType, label und options (bei Select-Typen)
  • Das type-Feld identifiziert den Ressourcentyp ("Contact")
  • Anruf-bezogene Felder (status, call_attempts, next_call_at, in_call_since, reached_at) sind nicht Teil der V2-Kontaktantwort

Dynamische Variablen zu Kontakteigenschaften migrieren

Dies ist die bedeutendste Änderung zwischen V1 und V2. In V1 konntest du beliebige Key-Value-Daten über dynamic_variables oder contact_details an Kontakte anhängen, ohne vorherige Einrichtung. In V2 definierst du zuerst ein Eigenschaftsschema und verwendest dann den generierten Eigenschaftsschlüssel beim Setzen von Werten. Einen vollständigen Überblick darüber, was Kontakteigenschaften sind und wie du sie in der telli-Oberfläche verwaltest, findest du unter Kontakteigenschaften.

So funktioniert es

  1. Eigenschaft definieren — Erstelle eine Eigenschaftsdefinition mit einem Datentyp, Label und optionalen Einschränkungen über die API (oder über die telli-Oberfläche)
  2. Eigenschaftsschlüssel erhalten — Jede Eigenschaft erhält einen automatisch generierten Schlüssel (z.B. aB3xK9mP2nQ4)
  3. Schlüssel bei Kontakten verwenden — Beim Erstellen oder Aktualisieren von Kontakten übergibst du Eigenschaften als [{key, value}]-Paare mit den generierten Schlüsseln

Beispiel: Vorher und Nachher

Angenommen, du hast diese dynamischen Variablen in V1 bei Kontakten gespeichert:
Um auf V2 zu migrieren, definiere zunächst jede als typisierte Eigenschaft:
Verwende dann die zurückgegebenen Schlüssel beim Erstellen oder Aktualisieren von Kontakten:

Verfügbare Eigenschaftstypen

Systemeigenschaften

Einige Kontaktfelder werden in V2 als Systemeigenschaften dargestellt. Diese sind immer vorhanden und können nicht über die Properties-API geändert oder gelöscht werden: Systemeigenschaften werden direkt als Top-Level-Felder am Kontakt gesetzt (z.B. firstName, email), nicht über das properties-Array.

Migration Schritt für Schritt

Kontakt erstellen

V1 gibt { "contact_id": "..." } zurück. V2 gibt 201 mit dem vollständigen Kontaktobjekt einschließlich angereicherter Eigenschaften zurück.

Kontakt per ID abrufen

Kontakt per externer ID abrufen

Kontakte auflisten

Dieser Endpunkt ist neu in V2 — es gibt kein V1-Äquivalent. Er gibt eine paginierte Liste von Kontakten mit Cursor-basierter Paginierung zurück.
Antwort:
Um die nächste Seite abzurufen, übergib den endCursor-Wert als cursor-Query-Parameter:

Kontakt aktualisieren

In V1 übergibst du die contact_id im Request-Body. In V2 ist die Kontakt-ID Teil des URL-Pfads.
Wichtiger Unterschied beim Update-Verhalten:
  • V1 ersetzt das gesamte dynamic_variables-Objekt. Wenn du nur {"interest_level": "medium"} sendest, gehen alle anderen dynamischen Variablen verloren.
  • V2 führt Eigenschaften zusammen. Nur die Schlüssel, die du angibst, werden aktualisiert — alle anderen bestehenden Eigenschaften bleiben erhalten. Um eine Eigenschaft zu löschen, setze ihren Wert auf null.

Kontakt löschen

V1 gibt { "message": "Contact deleted successfully", "contact_id": "..." } zurück. V2 gibt 204 No Content mit einem leeren Antwort-Body zurück.

Kontakteigenschaften-API

V2 führt eine eigene API zur Verwaltung von Eigenschaftsdefinitionen ein. Du musst Eigenschaftsdefinitionen nur einmal pro Konto erstellen — sie gelten dann für alle Kontakte. Informationen zur Verwaltung von Eigenschaften über die telli-Oberfläche findest du unter Kontakteigenschaften.

Alle Eigenschaftsdefinitionen auflisten

Gibt sowohl Systemeigenschaften als auch deine benutzerdefinierten Eigenschaften zurück:

Einzelne Eigenschaftsdefinition abrufen

Eigenschaftsdefinition erstellen

Eigenschaftsdefinition aktualisieren

Du kannst das Label, die Beschreibung und neue Optionen (bei Select-Typen) aktualisieren. Der Datentyp kann nicht geändert und bestehende Optionen können nicht entfernt werden.

Wichtige Unterschiede im Überblick

  1. Eigenschaften erfordern eine vorherige Definition — Du musst eine Eigenschaftsdefinition erstellen, bevor du sie bei Kontakten verwenden kannst. Unbekannte Eigenschaftsschlüssel werden mit einem 422-Validierungsfehler abgelehnt.
  2. Eigenschaftsschlüssel werden systemseitig generiert — Schlüssel wie aB3xK9mP2nQ4 werden von telli beim Erstellen einer Eigenschaft zugewiesen. Verwende den Endpunkt zum Auflisten von Eigenschaften, um die Schlüssel deiner Eigenschaften nachzuschlagen.
  3. Updates führen Eigenschaften zusammen — In V2 wirkt sich das Aktualisieren der Eigenschaften eines Kontakts nur auf die angegebenen Schlüssel aus. Bestehende Eigenschaften bleiben erhalten. Setze einen Wert auf null, um eine bestimmte Eigenschaft zu löschen. In V1 wurde beim Senden von dynamic_variables das gesamte Objekt ersetzt.
  4. Werte werden validiert — V2 validiert Eigenschaftswerte gegen ihren Datentyp und ihre Einschränkungen (z.B. lehnt eine date-Eigenschaft "not-a-date" ab, eine select-Eigenschaft lehnt Werte ab, die nicht in der Optionsliste enthalten sind). V1 akzeptierte jeden Wert.
  5. Batch-Endpunkte sind in V2 noch nicht verfügbar — Wenn du auf Batch-Operationen (add-contacts-batch, update-contacts-batch, get-contacts-batch) angewiesen bist, verwende vorerst weiterhin die V1-Endpunkte.
  6. V2 gibt angereicherte Eigenschaften zurück — GET-Antworten enthalten den dataType, das label und die options für jeden Eigenschaftswert, sodass du keinen separaten Lookup benötigst, um Eigenschaftsdaten zu interpretieren.