Skip to main content
Documentação
CENTRO DE APRENDIZAGEM

Domine a moderação de conteúdo com guias completos, tutoriais e documentação da API

Links rápidos

Análise de texto: sentimento, spam e idioma em uma única chamada

A análise de texto da Discuse avalia uma mensagem quanto a toxicidade, spam e idioma em uma única solicitação POST https://api.discuse.com/api/v2/check. Envie seu texto em content.text, autentique-se com o cabeçalho X-API-Key e leia os resultados de cada verificação em results.

O que o endpoint de texto verifica?

Uma chamada para /api/v2/check pode executar três verificações de texto ao mesmo tempo:

  • Sentimento: pontuação de toxicidade, palavrões, ameaça e insulto, além de um veredito negativo/tóxico.
  • Spam: spam promocional, golpes e texto gerado por bots, retornado como um label junto com uma pontuação de confiança.
  • Idioma: o código do idioma detectado, com aplicação opcional em relação a um idioma esperado.

Cada verificação é executada apenas quando habilitada, seja nas configurações do seu projeto ou por meio do objeto settings por solicitação.

Como chamo o 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 aceita até 10.000 caracteres. A chave de API pode ser enviada no cabeçalho X-API-Key ou como api_key no corpo da solicitação.

Resposta

{
  "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 espelha results.hits: é true quando qualquer verificação habilitada aciona sua flag hit. processing_time_ms só aparece quando a medição de tempo está habilitada nas configurações do seu projeto.

Análise de sentimento

A verificação de sentimento retorna tanto um veredito quanto pontuações por dimensão, de 0.0 a 1.0.

Campo Tipo Significado
is_negative bool A mensagem soa negativa
is_toxic bool A mensagem ultrapassa o limite de toxicidade
score number Pontuação geral de sentimento/severidade
toxicity number Confiança de toxicidade (0.0–1.0)
toxic number Confiança de toxicidade (alias legado de toxicity)
profanity number Confiança de linguagem explícita
threat number Confiança de ameaça de dano
insult number Confiança de ataque pessoal
hit bool Verdadeiro quando a mensagem viola os limites de sentimento
message string Explicação opcional

Como interpreto uma pontuação de sentimento?

Uma pontuação representa a confiança do modelo de que a dimensão se aplica:

  • 0.0 – 0.3: baixa, geralmente segura.
  • 0.3 – 0.6: moderada, pode justificar revisão.
  • 0.6 – 0.8: alta, provavelmente problemática.
  • 0.8 – 1.0: muito alta, quase certamente em violação.

Exemplo: conteúdo tóxico

Solicitação:

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

Resposta:

{
  "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
    }
  }
}

Detecção de spam

A verificação de spam classifica o texto e retorna um único label com uma pontuação de confiança. Ela identifica os padrões que escapam de listas de bloqueio por palavras-chave: spam promocional, golpes e phishing, e texto gerado por bots.

Exemplo: conteúdo de spam

Solicitação:

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

Resposta:

{
  "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 é o veredito bruto do modelo (o modelo classificou o texto como spam). hit é a decisão consciente do limite: é true apenas quando is_spam é true e confidence ultrapassa o limite de spam do seu projeto. Baseie a moderação em hit, não em is_spam. Consulte o guia Detecção de spam para mais detalhes.

Detecção de idioma

Defina check_language para detectar o código do idioma de content.text. O resultado fica em results.language.language (por exemplo, "en", "fr", "es").

Solicitação:

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

Resposta:

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

Para sinalizar conteúdo que não esteja no idioma esperado, defina expected_language. Quando o idioma detectado é diferente, language.hit é true e expected/detected são preenchidos:

{
  "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
    }
  }
}

Consulte Detecção de idioma para ver a lista completa de idiomas e os padrões de aplicação.

Quais verificações posso alternar?

O objeto opcional settings substitui os padrões do seu projeto para uma única solicitação. As opções relevantes para texto são:

Configuração Tipo Efeito
check_sentiment bool Executa análise de sentimento
check_spam bool Executa detecção de spam
check_language bool Executa detecção de idioma
check_badwords bool Executa a lista de bloqueio de badwords
expected_language string Código de idioma a aplicar (ex.: "en")
{
  "content": { "text": "Your message here" },
  "settings": {
    "check_sentiment": true,
    "check_spam": true,
    "check_language": true,
    "expected_language": "en"
  }
}

Limites de uso

Detecção de sentimento, spam e idioma consomem a cota de análise de sentimento por plano:

Plano Análises de sentimento/mês
Basic 1,000
Gold 5,000
Platinum 15,000
Ultimate 30,000

Respostas em cache não contam para a sua cota. O objeto usage em cada resposta informa api_requests_used, api_requests_limit e api_requests_remaining.

Boas práticas

Defina limites por plataforma

Aplique pontos de corte de sentimento diferentes para públicos diferentes:

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 }
};

Leve o contexto em conta

Conteúdo clínico, jornalístico e de ficção pode acionar pontuações de toxicidade e palavrões de forma legítima. Combine a pontuação automatizada com revisão humana para casos limítrofes:

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);
}

Exemplos de integração

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

Pronto para implementar análise de texto? Consulte o Guia de início rápido para uma configuração passo a passo.

Escrito por Equipe Discuse · Última atualização em June 2026

Artigos relacionados

Detecção de NSFW em imagens

Detecte e filtre automaticamente imagens inadequadas e conteúdo adulto

Detecção de spam

Filtragem de spam com tecnologia de AI para textos e mensagens

Verificação antivírus de arquivos

Proteja sua plataforma contra malware, vírus e arquivos maliciosos