Opt-out y listas de supresión
Una lista de supresión es el conjunto de direcciones a las que nunca debe volver a enviar mensajes: personas que respondieron STOP, se dieron de baja, generaron rebotes o presentaron reclamaciones. Respetarla es un requisito legal en todos los canales regulados, y Orbit la trata como una puerta de envío estricta: una dirección suprimida se descarta antes del envío, independientemente de la campaña, la importación de contactos o la llamada a la API. Esta página explica cómo funciona la supresión, cómo importar masivamente una lista de supresión existente — por ejemplo, al migrar desde otra plataforma — mediante una única carga de CSV, y cómo exportar el registro para una auditoría. Todos los endpoints siguientes están enraizados enhttps://api.orbit.devotel.io/api/v1/compliance.
Cómo se produce la supresión
Una dirección llega a la lista de supresión de varias formas:- Un contacto responde con una palabra clave STOP en SMS/WhatsApp.
- Un contacto se da de baja a través del Centro de preferencias.
- Usted registra una baja a través de la
API de consentimiento (
opt_in: false). - Usted importa masivamente una lista (esta página).
all, sms, voice, whatsapp, email, push,
telegram, messenger, rcs.
El ámbito elegido depende del punto de entrada:
- La importación masiva de CSV infiere el ámbito a partir del tipo
de dirección de cada fila: las direcciones de teléfono y de WhatsApp
tienen por defecto el ámbito
all— una señal de STOP en un número de teléfono suprime todos los canales alcanzables en ese número — mientras que las direcciones de correo electrónico se limitan al ámbitoemail. Una columnachannelsobrescribe esto por fila (consulte Importación masiva de CSV). - La API de consentimiento y el Centro de preferencias siempre
suprimen con el ámbito
all, independientemente de si el identificador registrado es un número de teléfono o una dirección de correo electrónico. Una baja a través de cualquiera de estos puntos de entrada elimina al contacto de todos los canales.
Sea cual sea la forma en que se suprima un número de teléfono, las
puertas de voz y del marcador lo respetan: un número que se da de
baja en cualquier canal deja de recibir tanto llamadas como mensajes.
El mecanismo difiere según el punto de entrada. Una importación
masiva de CSV además refleja las filas de teléfono en la lista DNC
y marca los contactos coincidentes. Una baja por palabra clave
STOP, por el Centro de preferencias o por la API de
consentimiento se registra en su lugar con el ámbito
all, que las
puertas de voz y del marcador leen directamente de la lista de
supresión: la llamada sigue bloqueada, pero no se escribe una fila
separada en la lista DNC ni una marca en el contacto.Importación masiva de CSV
POST /compliance/suppression-list/import acepta una carga
multipart/form-data de un archivo CSV. Requiere una clave de
administrador o de propietario y está limitada a 5 solicitudes por
minuto.
Campos del formulario
Formato del CSV
La primera fila es el encabezado. Los nombres de columna son insensibles a mayúsculas e independientes de la posición, y se aceptan alias comunes:
Cada fila debe contener al menos una de las columnas phone / email
/ wa_id. Una misma fila puede llevar varios tipos de dirección: cada
una genera su propia entrada de supresión. Ejemplo:
channel, sobrescribe el ámbito por defecto de esa
fila y debe ser uno de los valores de ámbito enumerados arriba.
Resultados por fila
La respuesta informa de resultados por fila. Las filas aceptadas se escriben; las demás se clasifican, nunca se descartan silenciosamente.Los dos contadores de duplicados se informan por separado y a
propósito:
intra_file_duplicates son repeticiones dentro del
archivo que acaba de subir, mientras que duplicates ya estaban en
su lista de antes. Ninguno es un error y ninguno se traga
silenciosamente: ambos se cuentan para que su reconciliación cuadre.Motivos de validación
Cada entrada deerrors[] lleva un reason descriptivo y la línea de
origen raw_line para que pueda corregir y volver a subir:
Límites
Para volúmenes superiores a 100.000 filas, divida el archivo e importe
por lotes: la detección de duplicados hace que reimportar rangos que se
solapen sea seguro.
Cuando falla una importación
Diagnostique los fallos en dos niveles: rechazos a nivel HTTP (no se escribe nada) y clasificaciones a nivel de fila (el archivo se acepta, pero filas concretas no). Rechazos a nivel HTTP:
Las clasificaciones a nivel de fila (las entradas de
errors[] que
acompañan a una importación correcta) corresponden a causas como
sigue:
Solo se devuelven las primeras 100 entradas de
errors[] con detalle
completo: el contador invalid siempre refleja el total real. El
asistente del panel (más abajo) empaqueta las filas detectadas como un
skipped.csv descargable para que pueda corregir y reimportar solo los
fallos.
Importar desde el panel
El mismo endpoint está envuelto por un asistente guiado en Settings → Compliance → Opt-out lists → Import suppression list: el mismo contrato de CSV, sin necesidad de terminal.- Elegir archivo CSV: elija un
.csvde menos de 25 MB. Use Download sample CSV en el diálogo para obtener un archivo inicial preformateado. - Establecer valores por defecto (opcional): un
Default country(ISO alpha-2) para normalizar números en formato nacional y unReasonde texto libre estampado en cada fila aceptada. - Previsualizar: ejecuta la importación como una ejecución de prueba en el servidor: no se escribe nada y el diálogo muestra el desglose de aceptadas / ya en la lista / repetidas en el archivo / inválidas antes de que confirme.
- Confirmar importación: realiza la escritura que confirma. Si
alguna fila fue inválida, descargue
skipped.csvpara corregirlas y reimportarlas.
Exportar la lista de supresión
GET /compliance/suppression-list/export descarga el registro de
supresión: la contraparte simétrica de la
importación de arriba. Úselo para
demostrar a un regulador o auditor qué direcciones estaban suprimidas
en un momento dado, incluidos los números importados masivamente sin
contacto coincidente.
Cada fila lleva
suppression_id, channel, address, el status
derivado (active o revoked), reason, source, contact_id
(vacío para direcciones importadas masivamente sin contacto), notes y
las marcas de tiempo suppressed_at / revoked_at / created_at.
El acceso está restringido a las claves de propietario y de
administrador, y cada exportación se escribe en el registro de
auditoría. Cuando el registro supera las 50.000 filas, la respuesta CSV
lleva un encabezado X-Export-Truncated: true (el equivalente JSON
establece truncated: true): filtre por canal o exporte ventanas de
fechas consecutivas para capturar el resto.
Verificar que una supresión surtió efecto
Confíe pero verifique: tras una importación (o cualquier evento de baja), confirme que la puerta de envío realmente bloquea la dirección antes de entregar la lista a una campaña.-
Envíe un mensaje de prueba a la dirección suprimida. Un envío
directo por API a un destinatario suprimido falla de forma síncrona
con HTTP 422 y el código de error
RECIPIENT_OPTED_OUT. En modo sandbox no se toca ningún operador y no se deduce saldo; cualquier destinatario que termine en8además se resuelve al recibo de entrega simuladoblocked, que es la visión del operador de la misma barrera.Un envío de campaña a la misma dirección se comporta de forma diferente por diseño: el destinatario se omite silenciosamente (status: "skipped",reason: "opted_out") para que el lote siga avanzando: consulte el informe por destinatario de la campaña en lugar de esperar un error. -
Confirme que la entrada está en el registro. Exporte con
la consulta anterior
(
status=activees el valor por defecto) y compruebe que la dirección aparece con el ámbitochannelesperado. La exportación es la fuente de verdad que lee cada puerta de envío: si la fila estáactiveahí, la barrera está levantada.
Eliminar una supresión (nueva suscripción)
Para recuperar una dirección, registre una nueva suscripción a través de la API de consentimiento (opt_in: true). Eso revoca la entrada de supresión coincidente y
retira la barrera del STOP. Nunca vuelva a enviar mensajes a un
contacto previamente suprimido sin un evento de consentimiento fresco y
documentado.
Confirmar que la barrera está bajada. Exporte con status=revoked
y localice la dirección: la fila sigue ahí para auditoría con
status: revoked y una marca de tiempo revoked_at: el historial de
supresión nunca se elimina, solo se revoca. A continuación, envíe un
pequeño mensaje de prueba a la dirección como en Verificar que una
supresión surtió efecto:
un envío correcto (sin RECIPIENT_OPTED_OUT) confirma que la puerta ya
no salta sobre el historial revocado. Hasta que ambas comprobaciones
pasen, trate la dirección como todavía cercada.
Referencias relacionadas
- Gestión del consentimiento: registre y consulte el consentimiento por canal.
- Puertas de envío: horas de silencio, DNC, RND, RMD, parada de emergencia y el centro de preferencias.
- DSAR: cómo las solicitudes
delete/opt_outllegan a la supresión. - Referencia de API → Opt-outs: esquemas de los endpoints de baja y supresión.