Skip to main content

Opt-out & Unterdrückungslisten

Eine Unterdrückungsliste ist die Menge der Adressen, die Sie nie wieder anschreiben dürfen — Personen, die mit STOP geantwortet, sich abgemeldet, einen Bounce erzeugt oder sich beschwert haben. Sie zu beachten ist auf jedem regulierten Kanal eine gesetzliche Pflicht, und Orbit behandelt sie als hartes Send-Gate: Eine unterdrückte Adresse wird vor dem Versand verworfen, unabhängig von Kampagne, Kontaktimport oder API-Aufruf. Diese Seite behandelt, wie Unterdrückung funktioniert, wie Sie eine bestehende Unterdrückungsliste massenimportieren — zum Beispiel bei einer Migration von einer anderen Plattform — über einen einzigen CSV-Upload, und wie Sie das Register für ein Audit wieder exportieren. Alle Endpunkte unten sind unter https://api.orbit.devotel.io/api/v1/compliance verwurzelt.

Wie Unterdrückung entsteht

Eine Adresse landet auf mehreren Wegen auf der Unterdrückungsliste:
  • Ein Kontakt antwortet mit einem STOP-Keyword auf SMS/WhatsApp.
  • Ein Kontakt meldet sich über das Preference Center ab.
  • Sie erfassen ein Opt-out über die Consent API (opt_in: false).
  • Sie importieren eine Liste per Massenimport (diese Seite).
Jeder Eintrag hat einen Kanal-Geltungsbereich. Der vollständige Satz ist: all, sms, voice, whatsapp, email, push, telegram, messenger, rcs. Wie der Geltungsbereich gewählt wird, hängt vom Einstiegspunkt ab:
  • CSV-Massenimport leitet den Geltungsbereich aus dem Adresstyp jeder Zeile ab: Telefon- und WhatsApp-Adressen erhalten standardmäßig den Geltungsbereich all — ein STOP-Signal auf einer Telefonnummer unterdrückt jeden auf dieser Nummer erreichbaren Kanal — während E-Mail-Adressen auf email beschränkt werden. Eine channel-Spalte überschreibt dies pro Zeile (siehe CSV-Massenimport).
  • Die Consent API und das Preference Center unterdrücken stets den Geltungsbereich all, unabhängig davon, ob die erfasste Kennung eine Telefonnummer oder eine E-Mail-Adresse ist. Ein Opt-out über einen dieser Einstiegspunkte entfernt den Kontakt aus jedem Kanal.
Wie auch immer eine Telefonnummer unterdrückt wurde: Die Voice- und Dialer-Gates beachten sie — eine Nummer, die auf irgendeinem Kanal ein Opt-out erteilt, erhält weder Anrufe noch Nachrichten. Der Mechanismus unterscheidet sich je nach Einstiegspunkt. Ein CSV-Massenimport spiegelt Telefonzeilen zusätzlich auf die DNC-Liste und markiert die passenden Kontakte. Ein STOP-Keyword-, Preference-Center- oder Consent-API-Opt-out wird stattdessen mit dem Geltungsbereich all erfasst, den die Voice- und Dialer-Gates direkt aus der Unterdrückungsliste lesen — der Anruf wird weiterhin blockiert, aber es wird keine separate DNC-Listenzeile oder Kontaktmarkierung geschrieben.

CSV-Massenimport

POST /compliance/suppression-list/import nimmt einen multipart/form-data-Upload einer CSV-Datei entgegen. Er erfordert einen Admin- oder Owner-Key und ist auf 5 Anfragen/Minute ratenbegrenzt.

Formularfelder

CSV-Format

Die erste Zeile ist eine Kopfzeile. Spaltennamen sind Groß-/Kleinschreibung-unabhängig und positionsunabhängig, und gängige Aliasse werden akzeptiert: Jede Zeile muss mindestens eines von Telefon / E-Mail / wa_id enthalten. Eine einzelne Zeile kann mehrere Adresstypen tragen — jeder erzeugt seinen eigenen Unterdrückungseintrag. Beispiel:
Ist eine channel-Spalte vorhanden, überschreibt sie den Standardgeltungsbereich für diese Zeile und muss einem der oben genannten Geltungsbereichswerte entsprechen.

Ergebnisse pro Zeile

Die Antwort meldet Ergebnisse pro Zeile. Akzeptierte Zeilen werden geschrieben; andere werden klassifiziert, nie still verworfen.
Die beiden Duplikat-Zähler werden bewusst getrennt gemeldet: intra_file_duplicates sind Wiederholungen innerhalb der soeben hochgeladenen Datei, während duplicates bereits von früher auf Ihrer Liste standen. Keines ist ein Fehler, und keines wird still verschluckt — beide werden gezählt, damit Ihre Abstimmung aufgeht.

Validierungsgründe

Jeder errors[]-Eintrag trägt einen verständlichen reason und die Quell-raw_line, damit Sie korrigieren und erneut hochladen können:

Grenzen

Für Volumen über 100.000 Zeilen teilen Sie die Datei auf und importieren in Batches — die Duplikaterkennung macht das erneute Importieren überlappender Bereiche sicher.

Wenn ein Import fehlschlägt

Diagnostizieren Sie Fehler auf zwei Ebenen: Ablehnungen auf HTTP-Ebene (nichts wird geschrieben) und Klassifizierungen auf Zeilenebene (die Datei wird akzeptiert, bestimmte Zeilen jedoch nicht). Ablehnungen auf HTTP-Ebene: Klassifizierungen auf Zeilenebene (die errors[]-Einträge, die einen erfolgreichen Import begleiten) lassen sich wie folgt auf Ursachen zurückführen: Nur die ersten 100 errors[]-Einträge werden mit vollem Detail zurückgegeben — der invalid-Zähler spiegelt stets die wahre Summe. Der Dashboard-Assistent (unten) bündelt die aufgeführten Zeilen als herunterladbare skipped.csv, damit Sie genau die Fehler korrigieren und erneut importieren können.

Import aus dem Dashboard

Derselbe Endpunkt wird von einem geführten Assistenten unter Settings → Compliance → Opt-out lists → Import suppression list umhüllt — derselbe CSV-Vertrag, kein Terminal erforderlich.
  1. CSV-Datei wählen — wählen Sie eine .csv unter 25 MB. Nutzen Sie Download sample CSV im Dialog für eine vorformatierte Startdatei.
  2. Defaults setzen (optional) — ein Default country (ISO alpha-2) zur Normalisierung nationaler Formate und ein Freitext-Reason, der auf jede akzeptierte Zeile gestempelt wird.
  3. Vorschau — führt den Import als serverseitigen Dry-Run aus: Nichts wird geschrieben, und der Dialog zeigt die Aufschlüsselung akzeptiert / bereits gelistet / Wiederholungen-in-der-Datei / ungültig, bevor Sie committen.
  4. Import bestätigen — führt den committenden Schreibzugriff aus. Waren Zeilen ungültig, laden Sie skipped.csv herunter, um sie zu korrigieren und erneut zu importieren.
Der Assistent erzwingt außerdem die Dateityp- und 25-MB-Prüfungen clientseitig, sodass ein falsch exportierter Typ ausfällt, bevor er die API überhaupt erreicht.

Die Unterdrückungsliste exportieren

GET /compliance/suppression-list/export lädt das Unterdrückungsregister herunter — das symmetrische Gegenstück zum Import oben. Nutzen Sie es, um einem Regulator oder Auditor zu belegen, welche Adressen zu einem gegebenen Zeitpunkt unterdrückt waren, einschließlich massenimportierter Nummern ohne passenden Kontakt.
Abfrageparameter: Jede Zeile trägt suppression_id, channel, address, den abgeleiteten status (active oder revoked), reason, source, contact_id (leer bei massenimportierten Adressen ohne Kontakt), notes und die Zeitstempel suppressed_at / revoked_at / created_at. Der Zugriff ist auf Owner- und Admin-Keys beschränkt, und jeder Exportlauf wird ins Audit-Log geschrieben. Überschreitet das Register 50.000 Zeilen, trägt die CSV-Antwort einen X-Export-Truncated: true-Header (das JSON-Äquivalent setzt truncated: true) — verengen Sie nach Kanal oder exportieren Sie aufeinanderfolgende Datumsfenster, um den Rest zu erfassen.

Verifizieren, dass eine Unterdrückung gewirkt hat

Vertrauen ist gut, Kontrolle ist besser: Nach einem Import (oder jedem Opt-out-Ereignis) bestätigen Sie, dass das Send-Gate die Adresse tatsächlich einzäunt, bevor Sie die Liste einer Kampagne übergeben.
  1. Eine Testnachricht an die unterdrückte Adresse senden. Ein direkter API-Versand an einen unterdrückten Empfänger schlägt synchron mit HTTP 422 und dem Fehlercode RECIPIENT_OPTED_OUT fehl. Im Sandbox-Modus wird kein Carrier berührt und kein Guthaben abgebucht; jeder Empfänger, der auf 8 endet, löst außerdem in die simulierte blocked-Zustellquittung auf — die carrierseitige Sicht derselben Einzäunung.
    Ein Kampagnenversand an dieselbe Adresse verhält sich bewusst anders: Der Empfänger wird still übersprungen (status: "skipped", reason: "opted_out"), damit der Batch weiterläuft — prüfen Sie den Empfängerbericht der Kampagne, statt einen Fehler zu erwarten.
  2. Bestätigen, dass der Eintrag auf dem Register steht. Exportieren Sie mit der Abfrage oben (status=active ist der Standard) und prüfen Sie, dass die Adresse mit dem erwarteten channel-Geltungsbereich erscheint. Der Export ist die Wahrheitsquelle, die jedes Send-Gate liest — ist die Zeile dort active, steht die Einzäunung.
Die beiden Prüfungen beantworten verschiedene Fragen: Schritt 1 beweist Durchsetzung (das Gate feuert), Schritt 2 beweist Geltungsbereich (der Eintrag existiert mit dem von Ihnen beabsichtigten Kanal).

Eine Unterdrückung entfernen (Re-Opt-in)

Um eine Adresse zurückzuholen, erfassen Sie ein frisches Opt-in über die Consent API (opt_in: true). Das widerruft den passenden Unterdrückungseintrag und räumt die STOP-Einzäunung weg. Schreiben Sie einen zuvor unterdrückten Kontakt niemals ohne ein dokumentiertes, frisches Einwilligungsereignis wieder an. Bestätigen, dass die Einzäunung weg ist. Exportieren Sie mit status=revoked und finden Sie die Adresse: Die Zeile ist für Audits weiter vorhanden mit status: revoked und einem revoked_at-Zeitstempel — Unterdrückungshistorie wird nie gelöscht, nur widerrufen. Senden Sie dann eine kleine Testnachricht an die Adresse wie unter Verifizieren, dass eine Unterdrückung gewirkt hat: Eine erfolgreiche Einreichung (kein RECIPIENT_OPTED_OUT) bestätigt, dass das Gate auf widerrufener Historie nicht mehr feuert. Bis beide Prüfungen bestehen, behandeln Sie die Adresse als weiter eingeäunt.

Weiterführende Referenzen

  • Consent Management — Einwilligung je Kanal erfassen und abfragen.
  • Send Gates — Ruhezeiten, DNC, RND, RMD, Notfall-Stopp und das Preference-Center.
  • DSAR — wie delete- / opt_out-Anfragen zur Unterdrückung gelangen.
  • API Reference → Opt-outs — Endpunktschemata für Opt-out und Unterdrückung.