Comercio electrónico

Que tus clientes hablen de tus productos, y que la ficha siga siendo tuya

Opiniones de producto, preguntas debajo de cada artículo y las fotos que suben los clientes, revisadas antes de publicarse. ToxicFilter detecta el enlace escondido a una copia más barata, la opinión escrita a cambio de un producto gratis y la tarjeta pegada en una pregunta pública, y deja la opinión de dos estrellas, sincera, justo donde está.

Lo que falla en plataformas como la tuya

Tu ficha de producto, el anuncio de otro

"Lo mismo a mitad de precio, te dejo el enlace." Una pregunta o una opinión es el espacio publicitario más barato que hay, y el que está debajo de tu producto más vendido es el que más vale. El enlace suele esconder adónde lleva.

Opiniones a cambio de un producto gratis

"Me lo regalaron a cambio de una reseña." A veces quien opina lo cuenta en la propia opinión, y una valoración hecha de esas deja de decirle nada al siguiente cliente.

Tarjetas y teléfonos en una pregunta pública

A un cliente le han cobrado dos veces y pega la tarjeta para demostrarlo; otro deja su teléfono para que alguien le llame. Los dos lo hacen con buena intención, y los dos dejan datos privados en una página que lee cualquiera.

Fotos que no has hecho tú

Las fotos de clientes son de lo más convincente que tiene una tienda, y también el único sitio donde se puede subir cualquier cosa con el nombre de tu producto al lado.

Qué decide con contenido como el tuyo

Juzgado ahora mismo por el mismo motor que usa la API, con la plantilla de este tipo de plataforma y sin intervención del modelo.

  1. 01 Una copia más barata en las preguntas
  2. 02 Una opinión a cambio de un producto gratis
  3. 03 Un número de pedido y un teléfono
  4. 04 Una tarjeta en una pregunta pública
  5. 05 Dos estrellas, duras pero sinceras

Una copia más barata en las preguntas POST /v1/text con surface: review

¿Cabe en un tarro de 10 cm? El mismo farolillo a mitad de precio aquí: https://bit.ly/farol50

block 11 ms
  • Uses a link shortener, which hides where the link goes.

El enlace pasa por un acortador, que esconde adónde lleva, y la plantilla de reseñas lo rechaza. Un enlace normal a otra tienda no se rechaza por ser un enlace: así es como la gente responde a una pregunta.

La respuesta, resumida
{
  "decision": "block",
  "flagged": [
    "spam"
  ],
  "scores": {
    "spam": 0.7
  },
  "signals": [
    {
      "category": "spam",
      "score": 0.7,
      "reason": "Uses a link shortener, which hides where the link goes.",
      "evidence": [
        "https://bit.ly/farol50"
      ]
    }
  ],
  "model": {
    "read": false
  },
  "took_ms": 11
}

Una opinión a cambio de un producto gratis POST /v1/text con surface: review

Me lo regalaron a cambio de una reseña. Da mucha luz, pesa poco y la batería aguanta toda la noche.

block 7 ms
  • Says the review was written in exchange for something.

La propia opinión dice que el producto se lo dieron a cambio de escribirla, así que la valoración no debería contar. Los elogios solos pasarían.

La respuesta, resumida
{
  "decision": "block",
  "flagged": [
    "spam"
  ],
  "scores": {
    "spam": 0.7
  },
  "signals": [
    {
      "category": "spam",
      "score": 0.7,
      "reason": "Says the review was written in exchange for something.",
      "evidence": [
        "a cambio de una resena",
        "me lo regalaron a cambio"
      ]
    }
  ],
  "model": {
    "read": false
  },
  "took_ms": 7
}

Un número de pedido y un teléfono POST /v1/text con redact: true

El pedido 4532015112830367 llegó con el cristal roto. ¿Me podéis llamar al +44 7700 900123?

review 6 ms
  • Contains what looks like a phone number.

El número de pedido de dieciséis cifras no cuadra con el dígito de control de una tarjeta, así que no se informa. El teléfono sí, y la pregunta queda retenida con el número oculto en vez de rechazada.

La respuesta, resumida
{
  "decision": "review",
  "flagged": [
    "personal_data"
  ],
  "scores": {
    "personal_data": 0.5
  },
  "signals": [
    {
      "category": "personal_data",
      "score": 0.5,
      "reason": "Contains what looks like a phone number.",
      "evidence": [
        "447•••••••23"
      ]
    }
  ],
  "redacted": "El pedido 4532015112830367 llegó con el cristal roto. ¿Me podéis llamar al [redacted]?",
  "model": {
    "read": false
  },
  "took_ms": 6
}

Una tarjeta en una pregunta pública POST /v1/text con surface: review

Me cobrasteis dos veces en la tarjeta 4111 1111 1111 1111 por el pedido 88213. ¿Me devolvéis uno?

block 7 ms
  • Contains 1 payment card number(s). This one is not a guess: the digits check out.

Estas cifras cuadran con el dígito de control de una tarjeta, así que es una tarjeta y no una suposición, y no llega a la página pública. El número de pedido que va al lado no se informa.

La respuesta, resumida
{
  "decision": "block",
  "flagged": [
    "personal_data"
  ],
  "scores": {
    "personal_data": 0.95
  },
  "signals": [
    {
      "category": "personal_data",
      "score": 0.95,
      "reason": "Contains 1 payment card number(s). This one is not a guess: the digits check out.",
      "evidence": [
        "••••••••••••1111"
      ]
    }
  ],
  "model": {
    "read": false
  },
  "took_ms": 7
}

Dos estrellas, duras pero sinceras POST /v1/text con surface: review

Da más luz de la que esperaba, pero el asa se partió a la semana y la tapa de la batería es de chiste. Dos estrellas, no repetiría.

allow 7 ms

Negativa, concreta y útil para quien compre después. No hay nada pagado, ningún enlace escondido ni nada privado, así que se publica tal cual.

La respuesta, resumida
{
  "decision": "allow",
  "flagged": [],
  "signals": [],
  "model": {
    "read": false
  },
  "took_ms": 7
}

Qué decide con contenido como el tuyo

Juzgado ahora mismo por el mismo motor que usa la API, con la plantilla de este tipo de plataforma y sin intervención del modelo.

Una copia más barata en las preguntas POST /v1/text con surface: review

¿Cabe en un tarro de 10 cm? El mismo farolillo a mitad de precio aquí: https://bit.ly/farol50

block 11 ms
  • Uses a link shortener, which hides where the link goes.

El enlace pasa por un acortador, que esconde adónde lleva, y la plantilla de reseñas lo rechaza. Un enlace normal a otra tienda no se rechaza por ser un enlace: así es como la gente responde a una pregunta.

La respuesta, resumida
{
  "decision": "block",
  "flagged": [
    "spam"
  ],
  "scores": {
    "spam": 0.7
  },
  "signals": [
    {
      "category": "spam",
      "score": 0.7,
      "reason": "Uses a link shortener, which hides where the link goes.",
      "evidence": [
        "https://bit.ly/farol50"
      ]
    }
  ],
  "model": {
    "read": false
  },
  "took_ms": 11
}

Una opinión a cambio de un producto gratis POST /v1/text con surface: review

Me lo regalaron a cambio de una reseña. Da mucha luz, pesa poco y la batería aguanta toda la noche.

block 7 ms
  • Says the review was written in exchange for something.

La propia opinión dice que el producto se lo dieron a cambio de escribirla, así que la valoración no debería contar. Los elogios solos pasarían.

La respuesta, resumida
{
  "decision": "block",
  "flagged": [
    "spam"
  ],
  "scores": {
    "spam": 0.7
  },
  "signals": [
    {
      "category": "spam",
      "score": 0.7,
      "reason": "Says the review was written in exchange for something.",
      "evidence": [
        "a cambio de una resena",
        "me lo regalaron a cambio"
      ]
    }
  ],
  "model": {
    "read": false
  },
  "took_ms": 7
}

Un número de pedido y un teléfono POST /v1/text con redact: true

El pedido 4532015112830367 llegó con el cristal roto. ¿Me podéis llamar al +44 7700 900123?

review 6 ms
  • Contains what looks like a phone number.

El número de pedido de dieciséis cifras no cuadra con el dígito de control de una tarjeta, así que no se informa. El teléfono sí, y la pregunta queda retenida con el número oculto en vez de rechazada.

La respuesta, resumida
{
  "decision": "review",
  "flagged": [
    "personal_data"
  ],
  "scores": {
    "personal_data": 0.5
  },
  "signals": [
    {
      "category": "personal_data",
      "score": 0.5,
      "reason": "Contains what looks like a phone number.",
      "evidence": [
        "447•••••••23"
      ]
    }
  ],
  "redacted": "El pedido 4532015112830367 llegó con el cristal roto. ¿Me podéis llamar al [redacted]?",
  "model": {
    "read": false
  },
  "took_ms": 6
}

Una tarjeta en una pregunta pública POST /v1/text con surface: review

Me cobrasteis dos veces en la tarjeta 4111 1111 1111 1111 por el pedido 88213. ¿Me devolvéis uno?

block 7 ms
  • Contains 1 payment card number(s). This one is not a guess: the digits check out.

Estas cifras cuadran con el dígito de control de una tarjeta, así que es una tarjeta y no una suposición, y no llega a la página pública. El número de pedido que va al lado no se informa.

La respuesta, resumida
{
  "decision": "block",
  "flagged": [
    "personal_data"
  ],
  "scores": {
    "personal_data": 0.95
  },
  "signals": [
    {
      "category": "personal_data",
      "score": 0.95,
      "reason": "Contains 1 payment card number(s). This one is not a guess: the digits check out.",
      "evidence": [
        "••••••••••••1111"
      ]
    }
  ],
  "model": {
    "read": false
  },
  "took_ms": 7
}

Dos estrellas, duras pero sinceras POST /v1/text con surface: review

Da más luz de la que esperaba, pero el asa se partió a la semana y la tapa de la batería es de chiste. Dos estrellas, no repetiría.

allow 7 ms

Negativa, concreta y útil para quien compre después. No hay nada pagado, ningún enlace escondido ni nada privado, así que se publica tal cual.

La respuesta, resumida
{
  "decision": "allow",
  "flagged": [],
  "signals": [],
  "model": {
    "read": false
  },
  "took_ms": 7
}

Qué busca

Cada cosa con su propia puntuación y sus propios umbrales, y el motivo explicado en una frase cada vez que actúa.

La plantilla con la que empiezas

Elígela al crear una política y estas reglas se escriben por ti, listas para editar. Todo lo que no menciona sigue nuestros valores por defecto.

  • Spam retiene desde 0,35 · rechaza desde 0,65
  • Elusión del filtro retiene desde 0,35 · rechaza desde 0,70
  • Texto sin sentido retiene desde 0,45 · nunca rechaza
  • Datos personales retiene desde 0,30 · rechaza desde 0,80
  • Contenido sexual retiene desde 0,45 · rechaza desde 0,75
  • Violencia retiene desde 0,40 · rechaza desde 0,75

Lo fija la plantilla

Una llamada antes de publicar

Envía el texto indicando dónde va a aparecer y actúa según la decisión.

La petición

curl https://toxicfilter.com/api/v1/text \
  -H "Authorization: Bearer $TOXICFILTER_KEY" \
  -d content="¿Cabe en un tarro de 10 cm? El mismo farolillo a mitad de precio aquí: https://bit.ly/farol50" \
  -d surface=review
La referencia completa →

Un mes de ejemplo, en cifras

Elementos revisados
10.000
Leídos por el modelo
800
Imágenes
600
Créditos, aproximadamente
21.600

Entra en el plan Plus. Ver los planes →

Guía para moderar una tienda online

Qué revisar en una ficha de producto, cuándo hacerlo y cómo fijar las reglas, para opiniones, preguntas y fotos de clientes.

Cómo moderar las opiniones y preguntas de tus productos

Llama a la API cuando alguien envía una opinión o una pregunta, con surface: review, y actúa según una de tres respuestas: publicarla, retenerla para que la vea una persona o rechazarla. Casi todo lo que aparece debajo de un producto es alguien preguntando por la talla o contando que llegó a tiempo, y eso lo resuelven las comprobaciones gratuitas en torno a un milisegundo, así que el cliente no espera nada. El modelo solo lee lo que esas comprobaciones dejan en duda. Lo que llega como review espera en una cola, en tu panel o por la API, y un webhook firmado avisa a tu tienda cuando alguien lo aprueba.

Enlaces de la competencia en las preguntas de producto

Las preguntas de una ficha las lee gente a punto de comprar, y por eso mismo atraen enlaces a una copia más barata. ToxicFilter no rechaza un enlace por ser un enlace, porque un enlace dentro de una frase es como los clientes se responden entre sí. Lo que informa como spam es la forma de la promoción: un enlace por un acortador que esconde adónde lleva, un mensaje que empieza por un enlace, varios enlaces sostenidos por cuatro palabras. La plantilla de reseñas los rechaza. Si no quieres ningún enlace externo, pon los dominios en tu propia lista de palabras.

Opiniones a cambio de un producto gratis

En la superficie de reseñas, una opinión que dice que se escribió a cambio de algo ("me lo regalaron a cambio", "a cambio de una reseña") puntúa 0,70 en spam, y la plantilla de reseñas la rechaza. Una opinión que suena a la propia tienda hablando de sí misma ("nuestra tienda", "usa el código") necesita dos de esas pistas y queda retenida para una persona. Las copias de la misma opinión publicadas una y otra vez, aunque estén reescritas, se cuentan de una llamada a otra, por cuenta y por proyecto.

Números de pedido, tarjetas y teléfonos

Los clientes pegan lo que creen que ayudará: el número de pedido, el teléfono para que les llamen y, a veces, la tarjeta en la que les cobraron dos veces. La plantilla de reseñas retiene los datos personales para una persona y rechaza una tarjeta. Las tarjetas se validan por su dígito de control y por un prefijo de emisor real, así que una referencia de pedido de dieciséis cifras no se toma por una. Con redact, la respuesta trae el mismo texto con el teléfono, el correo, el IBAN o la tarjeta ocultos, y una pregunta útil se puede publicar igual.

Revisar las fotos que suben los clientes

Manda cada imagen con POST /v1/image, por URL o con el propio archivo, antes de que llegue a tu almacenamiento. El modelo lee cada imagen, y por eso una foto cuesta más que una comprobación de texto. Las palabras que se ven en la foto pasan por las mismas comprobaciones gratuitas que una opinión, así que también aparece un teléfono o un enlace escrito en un cartón. Una imagen que ya se rechazó aquí se reconoce por su huella sin pagarle al modelo una segunda vez.

Cómo elegir los umbrales de tu tienda

Empieza por la plantilla de reseñas, que retiene y rechaza antes que los umbrales por defecto el spam, el texto camuflado y los datos personales, y que retiene el texto sin sentido para una persona sin rechazarlo nunca. Después, prueba cualquier cambio como una segunda política que funciona en paralelo con la que está activa: se calculan los dos veredictos sobre tus propias opiniones y preguntas, solo uno decide, y el panel te enseña en qué no coinciden antes de que cambies.

Preguntas frecuentes

¿Cómo evito que la competencia deje enlaces en las preguntas de mis productos?

Manda cada pregunta y cada opinión antes de publicarla. Un enlace a través de un acortador, un mensaje que empieza por un enlace y varios enlaces en cuatro palabras se informan como spam, y la plantilla de reseñas los rechaza. Un enlace normal dentro de una frase es como se responden los clientes entre sí, así que no se rechaza por ser un enlace; si no quieres ninguno, añade los dominios a tu propia lista de palabras.

¿Va a quitar las opiniones negativas de mis productos?

No. Aquí nada mide lo descontento que está un cliente. Una opinión de dos estrellas que cuenta que se rompió el asa se publica; lo que se actúa es una opinión escrita a cambio de algo, un enlace escondido, un dato privado o un insulto dirigido a una persona.

¿Se confundirá un número de pedido con una tarjeta?

No. Las tarjetas se validan por su dígito de control y por un prefijo de emisor real, y los IBAN por sus propios dígitos de control, así que una referencia de pedido de dieciséis cifras no se informa como tarjeta. Una tarjeta de verdad sí, y con redact la respuesta trae el texto con ella oculta.

¿Puede revisar las fotos que suben los clientes?

Sí, con POST /v1/image, por URL o con el propio archivo. El modelo lee cada imagen, así que cada una cuesta más que una comprobación de texto, y las palabras que se ven en ella pasan por las mismas comprobaciones que una opinión. Una imagen que ya rechazaste se reconoce otra vez sin pagarle al modelo por mirarla.

¿Cuánto cuesta para una tienda?

Una comprobación cuesta un crédito, y cuando la lee el modelo se suman los tokens que ha usado, unos ocho en total por una opinión y diez por una imagen. Casi todas las opiniones y preguntas las resuelven las comprobaciones gratuitas, así que la factura depende de cuántas fotos recibes y de cuánto texto queda en duda.

¿Tengo que explicarle a un cliente por qué he retirado su opinión?

En la UE, sí: el artículo 17 del Reglamento de Servicios Digitales exige una declaración de motivos por cada retirada o restricción, sea cual sea el tamaño de la plataforma. ToxicFilter puede redactarla con cada opinión o pregunta bloqueada.

Pruébalo con tu tráfico real

2.000 créditos al mes en el plan gratuito, sin tarjeta. Suficiente para pasarle una semana de tu propio contenido y ver qué opina de él.