Como atribuir um tópico via API

Existe uma maneira de atribuir via API? Não vejo isso na documentação, mas adoraria ser surpreendido :slight_smile:

Editar: parece que vou tentar fazer engenharia reversa disso!

3 curtidas

Primeiro de tudo, nosso objetivo é ter uma API estável; é um esforço de vários anos para chegar lá, mas certamente é um lugar que queremos alcançar.

Enquanto isso, uma abordagem razoável para 2025 é contar com agentes de IA para descobrir essas coisas:

Isso mostra como você pode contar com nosso assistente do GitHub para responder à pergunta!

4 curtidas

Você descobriu isso? Se sim, pode compartilhar o que aprendeu aqui?

1 curtida

Olá!
Ainda não! Este projeto foi adiado por algo mais urgente, mas voltarei a ele na próxima semana :slight_smile:

4 curtidas

@tobiaseigen isso funciona para mim usando node js

var https = require(‘https’);

// Configuração
var CONFIG = {
apiUrl: ‘YOURDISCOURSEDOMAIN’,
apiKey: ‘YOURAPIKEY’,
apiUsername: ‘YOURAPIUSER’,
assignToUsername: ‘USERNAMETOASSIGNTO’  // Nome de usuário para atribuir tópicos
};

// IDs de tópicos para atribuir
var topicIds = [634]; // mude com o id do tópico

function assignTopic(topicId, callback) {
var postData = JSON.stringify({
target_id: topicId,
target_type: ‘Topic’,
username: CONFIG.assignToUsername
});

var options = {
hostname: CONFIG.apiUrl,
port: 443,
path: ‘/assign/assign.json’,
method: ‘PUT’,
rejectUnauthorized: false,
headers: {
‘Api-Key’: CONFIG.apiKey,
‘Api-Username’: CONFIG.apiUsername,
‘Content-Type’: ‘application/json’,
‘Content-Length’: postData.length
}
};

var req = https.request(options, function(res) {
var data = ‘’;

res.on('data', function(chunk) {
  data += chunk;
});

res.on('end', function() {
  console.log('Status:', res.statusCode);
  console.log('Resposta bruta:', data);
  try {
    var response = JSON.parse(data);
    if (res.statusCode === 200) {
      console.log('Tópico ' + topicId + ' atribuído com sucesso');
    } else {
      console.log('Erro no tópico ' + topicId + ':', response.errors || response.error_type || response);
    }
  } catch (e) {
    console.log('Erro de análise:', e.message);
  }
  if (callback) callback();
});

});

req.on(‘error’, function(e) {
console.error('Erro de requisição para o tópico ' + topicId + ‘:’, e);
if (callback) callback();
});

req.write(postData);
req.end();
}

// Executar sequencialmente
var index = 0;
function next() {
if (index < topicIds.length) {
assignTopic(topicIds[index], function() {
index++;
setTimeout(next, 500);
});
}
}

console.log('Atribuindo tópicos:', topicIds.join(‘, ‘));
console.log('Atribuir a:', CONFIG.assignToUsername);
console.log(’’);
next();
1 curtida

O Discourse Assign expõe estes endpoints de API:

Atribuir (PUT /assign/assign.json)

Parâmetros obrigatórios:

  • target_id - O ID do tópico ou postagem
  • target_type - Pode ser \"Topic\" ou \"Post\"

Mais um dos seguintes:

  • username - Nome de usuário para atribuir
  • group_name - Nome do grupo para atribuir

Parâmetros opcionais:

  • note - Nota de atribuição
  • status - Status da atribuição
  • should_notify - Enviar notificações (padrão: true)

Desatribuir (PUT /assign/unassign.json)

Parâmetros obrigatórios:

  • target_id - O ID do tópico ou postagem
  • target_type - Pode ser \"Topic\" ou \"Post\"

Exemplos (curl)

# Atribuir o tópico 123 ao usuário "john"
curl -X PUT "https://your-discourse.com/assign/assign.json" \
  -H "Api-Key: YOUR_API_KEY" \
  -H "Api-Username: YOUR_USERNAME" \
  -H "Content-Type: application/json" \
  -d '{"target_id": 123, "target_type": "Topic", "username": "john"}'

# Atribuir a um grupo em vez disso
curl -X PUT "https://your-discourse.com/assign/assign.json" \
  -H "Api-Key: YOUR_API_KEY" \
  -H "Api-Username: YOUR_USERNAME" \
  -H "Content-Type: application/json" \
  -d '{"target_id": 123, "target_type": "Topic", "group_name": "support-team"}'

Notas

  • O usuário da API deve ter permissões de atribuição (estar em um grupo permitido para atribuição)
  • Você também pode atribuir postagens individuais usando target_type: "Post" com o ID da postagem

@opcourdis o exemplo do Node.js acima parece correto! :+1:

2 curtidas

Obrigado por compartilhar, é bom ver que podemos incluir todos esses parâmetros