Skip to main content
Documentación
CENTRO DE APRENDIZAJE

Domina la moderación de contenido con guías completas, tutoriales y documentación de API

Enlaces rápidos

Análisis de texto: sentimiento, spam e idioma en una sola llamada

El análisis de texto de Discuse puntúa un mensaje por toxicidad, spam e idioma en una única solicitud POST https://api.discuse.com/api/v2/check. Envía tu texto en content.text, autentícate con el encabezado X-API-Key y consulta los resultados de cada comprobación en results.

¿Qué comprueba el endpoint de texto?

Una llamada a /api/v2/check puede ejecutar tres comprobaciones de texto a la vez:

  • Sentimiento: puntuación de toxicidad, lenguaje soez, amenazas e insultos, además de un veredicto negativo/tóxico.
  • Spam: spam promocional, estafas y texto generado por bots, devuelto como un label junto con una puntuación de confianza.
  • Idioma: el código de idioma detectado, con aplicación opcional frente a un idioma esperado.

Cada comprobación solo se ejecuta cuando está habilitada, ya sea en la configuración de tu proyecto o mediante el objeto settings de cada solicitud.

¿Cómo llamo al endpoint de texto?

curl -X POST https://api.discuse.com/api/v2/check \
  -H "Content-Type: application/json" \
  -H "X-API-Key: YOUR_API_KEY" \
  -d '{
    "content": {
      "text": "This is an example message to analyze"
    },
    "settings": {
      "check_sentiment": true,
      "check_spam": true,
      "check_language": true
    }
  }'

content.text acepta hasta 10.000 caracteres. La clave de API puede enviarse en el encabezado X-API-Key o como api_key en el cuerpo de la solicitud.

Respuesta

{
  "has_violations": false,
  "cached": false,
  "message": "Content appears safe",
  "results": {
    "hits": false,
    "sentiment": {
      "hit": false,
      "is_negative": false,
      "is_toxic": false,
      "score": 0.04,
      "toxicity": 0.02,
      "toxic": 0.02,
      "profanity": 0.01,
      "threat": 0.00,
      "insult": 0.03
    },
    "spamfinder": {
      "text": "This is an example message to analyze",
      "label": "ham",
      "confidence": 0.12,
      "is_spam": false,
      "hit": false
    },
    "language": {
      "language": "en",
      "confidence": 0.98,
      "hit": false
    }
  },
  "usage": {
    "api_requests_used": 41,
    "api_requests_limit": 5000,
    "api_requests_remaining": 4959
  }
}

has_violations refleja results.hits: es true cuando cualquier comprobación habilitada activa su indicador hit. processing_time_ms solo aparece cuando el registro de tiempos está habilitado en la configuración de tu proyecto.

Análisis de sentimiento

La comprobación de sentimiento devuelve tanto un veredicto como puntuaciones por dimensión de 0,0 a 1,0.

Campo Tipo Significado
is_negative bool El mensaje se interpreta como negativo
is_toxic bool El mensaje supera el umbral de toxicidad
score number Puntuación general de sentimiento/gravedad
toxicity number Confianza de toxicidad (0,0–1,0)
toxic number Confianza de toxicidad (alias heredado de toxicity)
profanity number Confianza de lenguaje explícito
threat number Confianza de amenaza de daño
insult number Confianza de ataque personal
hit bool Verdadero cuando el mensaje infringe los umbrales de sentimiento
message string Explicación opcional

¿Cómo interpreto una puntuación de sentimiento?

Una puntuación es la confianza del modelo en que esa dimensión se aplica:

  • 0,0 – 0,3: baja, generalmente segura.
  • 0,3 – 0,6: moderada, puede requerir revisión.
  • 0,6 – 0,8: alta, probablemente problemática.
  • 0,8 – 1,0: muy alta, casi con total seguridad infractora.

Ejemplo: contenido tóxico

Solicitud:

{
  "content": {
    "text": "You're the worst person I've ever met. I hate everything about you."
  },
  "settings": { "check_sentiment": true }
}

Respuesta:

{
  "has_violations": true,
  "results": {
    "hits": true,
    "sentiment": {
      "hit": true,
      "is_negative": true,
      "is_toxic": true,
      "score": 0.91,
      "toxicity": 0.89,
      "toxic": 0.89,
      "profanity": 0.15,
      "threat": 0.22,
      "insult": 0.95
    }
  }
}

Detección de spam

La comprobación de spam clasifica el texto y devuelve un único label con una puntuación de confianza. Detecta los patrones que esquivan las listas de bloqueo por palabras clave: spam promocional, estafas y phishing, y texto generado por bots.

Ejemplo: contenido de spam

Solicitud:

{
  "content": {
    "text": "CONGRATULATIONS! You've won $10,000! Click here to claim: www.fake-prize.com"
  },
  "settings": { "check_spam": true }
}

Respuesta:

{
  "has_violations": true,
  "results": {
    "hits": true,
    "spamfinder": {
      "text": "CONGRATULATIONS! You've won $10,000! Click here to claim: www.fake-prize.com",
      "label": "spam",
      "confidence": 0.97,
      "is_spam": true,
      "hit": true
    }
  }
}

is_spam es el veredicto bruto del modelo (el modelo etiquetó el texto como spam). hit es la decisión que tiene en cuenta el umbral: solo es true cuando is_spam es true y confidence supera el umbral de spam de tu proyecto. Basa la moderación en hit, no en is_spam. Consulta la guía de detección de spam para más detalles.

Detección de idioma

Establece check_language para detectar el código de idioma de content.text. El resultado está en results.language.language (por ejemplo, "en", "fr", "es").

Solicitud:

{
  "content": { "text": "Bonjour, comment allez-vous aujourd'hui?" },
  "settings": { "check_language": true }
}

Respuesta:

{
  "results": {
    "language": {
      "language": "fr",
      "confidence": 0.99,
      "hit": false
    }
  }
}

Para marcar contenido que no esté en el idioma esperado, establece expected_language. Cuando el idioma detectado difiere, language.hit es true y se rellenan expected/detected:

{
  "content": { "text": "Hola, cómo estás?" },
  "settings": { "check_language": true, "expected_language": "en" }
}
{
  "results": {
    "language": {
      "language": "es",
      "detected": "es",
      "expected": "en",
      "confidence": 0.95,
      "hit": true
    }
  }
}

Consulta detección de idioma para ver la lista completa de idiomas y los patrones de aplicación.

¿Qué comprobaciones puedo activar o desactivar?

El objeto opcional settings sobrescribe los valores predeterminados de tu proyecto para una sola solicitud. Los ajustes relevantes para texto son:

Ajuste Tipo Efecto
check_sentiment bool Ejecutar análisis de sentimiento
check_spam bool Ejecutar detección de spam
check_language bool Ejecutar detección de idioma
check_badwords bool Ejecutar la lista de bloqueo de palabras prohibidas
expected_language string Código de idioma que se debe aplicar (p. ej., "en")
{
  "content": { "text": "Your message here" },
  "settings": {
    "check_sentiment": true,
    "check_spam": true,
    "check_language": true,
    "expected_language": "en"
  }
}

Límites de uso

La detección de sentimiento, spam e idioma consume la cuota de análisis de sentimiento de cada plan:

Plan Análisis de sentimiento/mes
Basic 1.000
Gold 5.000
Platinum 15.000
Ultimate 30.000

Las respuestas en caché no cuentan contra tu cuota. El objeto usage de cada respuesta informa de api_requests_used, api_requests_limit y api_requests_remaining.

Buenas prácticas

Establece umbrales por plataforma

Aplica distintos límites de sentimiento para diferentes audiencias:

const THRESHOLDS = {
  kids:    { toxicity: 0.3, profanity: 0.2, threat: 0.2, insult: 0.3 },
  general: { toxicity: 0.5, profanity: 0.5, threat: 0.4, insult: 0.5 },
  adult:   { toxicity: 0.7, profanity: 0.8, threat: 0.5, insult: 0.7 }
};

Ten en cuenta el contexto

El contenido clínico, periodístico y de ficción puede activar legítimamente puntuaciones de toxicidad y lenguaje soez. Combina la puntuación automatizada con la revisión humana en los casos límite:

const sentiment = result.results.sentiment;
if (sentiment.toxicity > 0.9) {
  await removeContent(contentId);       // high confidence: auto-remove
} else if (sentiment.toxicity > 0.5) {
  await queueForReview(contentId);      // borderline: human review
} else {
  await approveContent(contentId);
}

Ejemplos de integración

JavaScript

async function analyzeText(text) {
  const response = await fetch('https://api.discuse.com/api/v2/check', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'X-API-Key': process.env.DISCUSE_API_KEY
    },
    body: JSON.stringify({
      content: { text },
      settings: { check_sentiment: true, check_spam: true, check_language: true }
    })
  });

  return response.json();
}

const result = await analyzeText('Hello, how are you?');
console.log(result.has_violations); // false

Python

import os
import requests

def analyze_text(text):
    response = requests.post(
        'https://api.discuse.com/api/v2/check',
        headers={
            'Content-Type': 'application/json',
            'X-API-Key': os.environ['DISCUSE_API_KEY']
        },
        json={
            'content': {'text': text},
            'settings': {
                'check_sentiment': True,
                'check_spam': True,
                'check_language': True
            }
        }
    )
    return response.json()

result = analyze_text('Hello, how are you?')
print(result['has_violations'])  # False

¿Listo para implementar el análisis de texto? Consulta la guía de inicio rápido para ver la configuración paso a paso.

Escrito por Equipo de Discuse · Última actualización June 2026

Artículos relacionados

Detección de NSFW en imágenes

Detecta y filtra automáticamente imágenes inapropiadas y contenido para adultos

Detección de spam

Filtrado de spam con AI para texto y mensajes

Escaneo antivirus de archivos

Protege tu plataforma contra malware, virus y archivos maliciosos