Reseñas y valoraciones

Quédate con las reseñas malas, no con las falsas

Reseñas de restaurantes, hoteles, tiendas y productos, revisadas antes de publicarse. ToxicFilter detecta la reseña escrita a cambio de un descuento, el negocio que se pone por las nubes, el insulto a un camarero con nombre y apellido y el teléfono pegado en una página pública, y deja la reseña de una estrella, enfadada pero honesta, exactamente donde está.

Lo que falla en plataformas como la tuya

Reseñas pagadas

"Cinco estrellas a cambio de un 20 % de descuento", un producto gratis por una reseña entusiasta, el reembolso en cuanto la reseña está publicada. A veces lo cuenta la propia reseña, y quien sale engañado es el lector que se fía de tus valoraciones.

El negocio que se reseña a sí mismo

"Nuestro restaurante", "reserva con nosotros", "usa el código PRIMAVERA10": una reseña que suena a anuncio suele serlo. Un solo posesivo es como habla un cliente de su habitación, así que lo que lo delata son varias de estas pistas juntas.

Insultos a quien trabaja allí

Una mala experiencia merece publicarse. Una reseña que llama imbécil a un camarero con nombre ya no habla del servicio, y la persona a la que señala tiene que leerla cada mañana al abrir.

Datos personales en una página pública

Hay clientes que pegan su teléfono para ofrecer fotos, y quien pega el de otra persona para ajustar cuentas. Rechazar la reseña entera te hace perder una opinión honesta; publicarla deja a alguien expuesto en una página que puede encontrar cualquiera.

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 reseña pagada con un descuento
  2. 02 El negocio reseñándose a sí mismo
  3. 03 Un insulto a un camarero
  4. 04 Un teléfono en una reseña
  5. 05 Una estrella, dura pero honesta

Una reseña pagada con un descuento POST /v1/text con surface: review

Pizza buenísima y un trato muy majo. Para ser sincera, me hicieron un descuento por dejar la reseña, pero habría puesto cinco estrellas igual.

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

La propia reseña dice que se escribió a cambio de un descuento, y la plantilla de reseñas la rechaza. Los elogios solos pasarían; es el incentivo lo que hace que la valoración no valga nada.

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": [
        "descuento por dejar la resena"
      ]
    }
  ],
  "model": {
    "read": false
  },
  "took_ms": 12
}

El negocio reseñándose a sí mismo POST /v1/text con surface: review

¡La mejor cena de la ciudad! Nuestro restaurante solo trabaja con pescado del día, reserva con nosotros este finde y usa el código RANA10 para el postre gratis.

review 8 ms
  • Reads as the business writing about itself.

Tres pistas de un negocio hablando de sí mismo: "nuestro restaurante", "reserva con nosotros", "usa el código". Queda retenida para una persona en vez de rechazada, porque a un cliente se le puede escapar una. Una sola pasa.

La respuesta, resumida
{
  "decision": "review",
  "flagged": [
    "spam"
  ],
  "scores": {
    "spam": 0.6
  },
  "signals": [
    {
      "category": "spam",
      "score": 0.6,
      "reason": "Reads as the business writing about itself.",
      "evidence": [
        "reserva con nosotros",
        "nuestro restaurante",
        "usa el codigo"
      ]
    }
  ],
  "model": {
    "read": false
  },
  "took_ms": 8
}

Un insulto a un camarero POST /v1/text con surface: review

Tomás, eres un inútil y un imbécil. Deberían echarte.

block 3 ms
  • Contains 2 insult(s), aimed at the reader.

El insulto va dirigido a una persona, así que es acoso y se rechaza. Decir que el servicio fue lento o que el camarero fue borde es una reseña, y pasa.

La respuesta, resumida
{
  "decision": "block",
  "flagged": [
    "harassment"
  ],
  "scores": {
    "harassment": 0.85
  },
  "signals": [
    {
      "category": "harassment",
      "score": 0.85,
      "reason": "Contains 2 insult(s), aimed at the reader.",
      "evidence": [
        "eres un inutil",
        "imbecil"
      ]
    }
  ],
  "model": {
    "read": false
  },
  "took_ms": 3
}

Un teléfono en una reseña POST /v1/text con redact: true

La habitación bien, pero el aire acondicionado no funcionaba. Si quieres fotos, escríbeme al +44 7700 900123.

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

Queda retenida en vez de rechazada, y la respuesta trae la misma reseña con el número oculto, así que la opinión se puede publicar igual.

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": "La habitación bien, pero el aire acondicionado no funcionaba. Si quieres fotos, escríbeme al [redacted].",
  "model": {
    "read": false
  },
  "took_ms": 7
}

Una estrella, dura pero honesta POST /v1/text con surface: review

Comida fría, cuarenta minutos de espera y una mala contestación cuando nos quejamos. No volveremos. Una estrella.

allow 7 ms

Enfadada, negativa y justo para lo que sirve una web de reseñas. No hay nada pagado, nada dirigido a una persona 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 reseña pagada con un descuento POST /v1/text con surface: review

Pizza buenísima y un trato muy majo. Para ser sincera, me hicieron un descuento por dejar la reseña, pero habría puesto cinco estrellas igual.

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

La propia reseña dice que se escribió a cambio de un descuento, y la plantilla de reseñas la rechaza. Los elogios solos pasarían; es el incentivo lo que hace que la valoración no valga nada.

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": [
        "descuento por dejar la resena"
      ]
    }
  ],
  "model": {
    "read": false
  },
  "took_ms": 12
}

El negocio reseñándose a sí mismo POST /v1/text con surface: review

¡La mejor cena de la ciudad! Nuestro restaurante solo trabaja con pescado del día, reserva con nosotros este finde y usa el código RANA10 para el postre gratis.

review 8 ms
  • Reads as the business writing about itself.

Tres pistas de un negocio hablando de sí mismo: "nuestro restaurante", "reserva con nosotros", "usa el código". Queda retenida para una persona en vez de rechazada, porque a un cliente se le puede escapar una. Una sola pasa.

La respuesta, resumida
{
  "decision": "review",
  "flagged": [
    "spam"
  ],
  "scores": {
    "spam": 0.6
  },
  "signals": [
    {
      "category": "spam",
      "score": 0.6,
      "reason": "Reads as the business writing about itself.",
      "evidence": [
        "reserva con nosotros",
        "nuestro restaurante",
        "usa el codigo"
      ]
    }
  ],
  "model": {
    "read": false
  },
  "took_ms": 8
}

Un insulto a un camarero POST /v1/text con surface: review

Tomás, eres un inútil y un imbécil. Deberían echarte.

block 3 ms
  • Contains 2 insult(s), aimed at the reader.

El insulto va dirigido a una persona, así que es acoso y se rechaza. Decir que el servicio fue lento o que el camarero fue borde es una reseña, y pasa.

La respuesta, resumida
{
  "decision": "block",
  "flagged": [
    "harassment"
  ],
  "scores": {
    "harassment": 0.85
  },
  "signals": [
    {
      "category": "harassment",
      "score": 0.85,
      "reason": "Contains 2 insult(s), aimed at the reader.",
      "evidence": [
        "eres un inutil",
        "imbecil"
      ]
    }
  ],
  "model": {
    "read": false
  },
  "took_ms": 3
}

Un teléfono en una reseña POST /v1/text con redact: true

La habitación bien, pero el aire acondicionado no funcionaba. Si quieres fotos, escríbeme al +44 7700 900123.

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

Queda retenida en vez de rechazada, y la respuesta trae la misma reseña con el número oculto, así que la opinión se puede publicar igual.

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": "La habitación bien, pero el aire acondicionado no funcionaba. Si quieres fotos, escríbeme al [redacted].",
  "model": {
    "read": false
  },
  "took_ms": 7
}

Una estrella, dura pero honesta POST /v1/text con surface: review

Comida fría, cuarenta minutos de espera y una mala contestación cuando nos quejamos. No volveremos. Una estrella.

allow 7 ms

Enfadada, negativa y justo para lo que sirve una web de reseñas. No hay nada pagado, nada dirigido a una persona 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
  • Acoso retiene desde 0,45 · rechaza desde 0,80

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="Pizza buenísima y un trato muy majo. Para ser sincera, me hicieron un descuento por dejar la reseña, pero habría puesto cinco estrellas igual." \
  -d surface=review
La referencia completa →

Un mes de ejemplo, en cifras

Elementos revisados
80.000
Leídos por el modelo
6.000
Imágenes
3.000
Créditos, aproximadamente
152.000

Entra en el plan Max. Ver los planes →

Guía para moderar reseñas

Qué revisar, qué reseñas retener y cómo fijar las reglas, para restaurantes, hoteles, tiendas y productos.

Cómo moderar reseñas antes de publicarlas

Llama a la API cuando alguien envía una reseña, con surface: review, y actúa según una de tres respuestas: publicarla, retenerla para que la vea una persona o rechazarla. Casi todas las reseñas son alguien contando que la habitación estaba limpia o que la pasta llegó fría, y eso lo resuelven las comprobaciones gratuitas en torno a un milisegundo, así que moderar no añade ninguna espera que se note. Lo que llega como review espera en una cola, en tu panel o por la API, y un webhook firmado avisa a tu web cuando alguien lo aprueba.

Cómo detectar reseñas falsas

Una reseña falsa casi nunca es grosera, así que una puntuación de toxicidad no la encuentra. ToxicFilter busca lo que la delata. Una reseña que dice que se escribió a cambio de algo ("a cambio de una reseña", "descuento por dejar la reseña") puntúa 0,70 en spam, y la plantilla de reseñas la rechaza. Una reseña que suena al negocio hablando de sí mismo ("nuestro restaurante", "reserva con nosotros", "usa el código") necesita dos de esas pistas, porque un posesivo suelto es como describe un cliente su habitación; dos puntúan 0,60 y quedan retenidas para una persona. Las dos comprobaciones solo se hacen en la superficie de reseñas, donde esas palabras significan lo que parecen.

Reseñas duplicadas y campañas de reseñas

Una campaña es la misma reseña publicada muchas veces, normalmente reescrita en cuanto las copias idénticas empiezan a caer. Eso no se ve en una reseña suelta, así que ToxicFilter lo cuenta de una llamada a otra, por cuenta y por proyecto: el mismo texto repetido y los textos que son casi iguales después de cambiar una palabra o un enlace. Una campaña en una de tus webs no dice nada de otra, y nunca se cuenta nada entre clientes distintos.

Una reseña negativa no es un abuso

Una web de reseñas que borra las malas no vale nada, y los lectores se dan cuenta enseguida. Aquí nada mide lo negativa que es una reseña. Una palabrota de pasada ("la comida era una mierda") se informa como tono y nunca se rechaza. Lo que se actúa es un insulto dirigido a una persona, como una reseña que le dice a un camarero por su nombre que es un imbécil, que es acoso y se rechaza (dicho de él y no a él, se retiene para que lo mire una persona), o una amenaza, que es violencia. Quejarse de que el camarero fue borde es una reseña, y se publica.

Teléfonos y correos en reseñas públicas

Un cliente que escribe su teléfono para compartir fotos no ha hecho nada malo, y rechazar la reseña te hace perder una opinión honesta. La plantilla de reseñas retiene los datos personales para una persona, y con redact la respuesta trae el mismo texto con el teléfono, el correo, el IBAN o la tarjeta ocultos. Las tarjetas y los IBAN se comprueban por su dígito de control, así que un localizador de reserva no se confunde con una tarjeta.

Cómo elegir los umbrales de tu web de reseñas

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 reseñas, solo uno decide, y el panel te enseña en qué no coinciden antes de que cambies.

Preguntas frecuentes

¿Cómo se detectan las reseñas falsas?

En la superficie de reseñas, ToxicFilter busca dos formas: una reseña que dice que se escribió a cambio de algo (un descuento, un producto gratis, un reembolso), y una reseña que suena al propio negocio hablando de sí mismo, que necesita al menos dos pistas porque un posesivo suelto es como escribe un cliente. Las copias de la misma reseña publicadas una y otra vez, aunque estén reescritas, se cuentan en tu cuenta de una llamada a otra.

¿Va a quitar las reseñas negativas?

No. Una reseña negativa no es un daño, y aquí nada mide lo descontento que está alguien. Una estrella con una palabrota de pasada se publica; lo que se actúa es un incentivo, un negocio alabándose, un insulto dirigido a una persona o un dato personal.

¿Por qué tengo que mandar surface: review?

Porque las mismas palabras significan otra cosa en otro sitio. "Me hicieron un descuento por dejar la reseña" es una confesión dentro de una reseña y una anécdota en el comentario de un foro, así que las comprobaciones de reseñas falsas solo se hacen cuando la llamada dice que el texto es una reseña.

¿Qué pasa con una reseña que lleva un teléfono o un correo?

Queda retenida para revisión en vez de rechazada, y con redact la respuesta trae el mismo texto con el número o la dirección ocultos, así que el resto de la reseña se puede publicar.

¿Funciona con reseñas en español y en otros idiomas?

Las frases de reseñas falsas están escritas en inglés, español, portugués, francés, italiano, alemán, catalán y neerlandés. El modelo lee muchos más idiomas, y tus propias listas de palabras funcionan en cualquiera.

¿Tengo que explicarle a quien escribió la reseña por qué la he retirado?

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 reseña bloqueada y recoger el recurso de quien la escribió.

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.