Есть ли способ назначить через API? Я не вижу этого в документации, но был бы рад сюрпризу ![]()
Редактирование: похоже, мне придётся попробовать реверс-инжиниринг этого!
Есть ли способ назначить через API? Я не вижу этого в документации, но был бы рад сюрпризу ![]()
Редактирование: похоже, мне придётся попробовать реверс-инжиниринг этого!
Прежде всего, наша цель — обеспечить стабильность API. Это многолетняя задача, но мы определённо стремимся к этому результату.
В качестве разумного приёма на 2025 год вы можете положиться на ИИ-агентов, чтобы разобраться в подобных вопросах:
Вот пример того, как можно использовать нашего помощника GitHub для ответа на этот вопрос!
Вы уже разобрались? Если да, поделитесь, пожалуйста, своими находками здесь.
Привет!
Ещё нет! Этот проект был отложен в пользу более срочного, но я вернусь к нему на следующей неделе ![]()
@tobiaseigen у меня это работает с Node.js
var https = require('https');
// Конфигурация
var CONFIG = {
apiUrl: 'ВАШ_ДОМЕН_DISCOURSE',
apiKey: 'ВАШ_API_КЛЮЧ',
apiUsername: 'ВАШ_ПОЛЬЗОВАТЕЛЬ_API',
assignToUsername: 'ИМЯ_ПОЛЬЗОВАТЕЛЯ_ДЛЯ_НАЗНАЧЕНИЯ' // Имя пользователя, которому назначать темы
};
// ID тем для назначения
var topicIds = [634]; // замените на ID нужной темы
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('Статус:', res.statusCode);
console.log('Полный ответ:', data);
try {
var response = JSON.parse(data);
if (res.statusCode === 200) {
console.log('Тема ' + topicId + ' успешно назначена');
} else {
console.log('Ошибка для темы ' + topicId + ':', response.errors || response.error_type || response);
}
} catch (e) {
console.log('Ошибка парсинга:', e.message);
}
if (callback) callback();
});
});
req.on('error', function(e) {
console.error('Ошибка запроса для темы ' + topicId + ':', e);
if (callback) callback();
});
req.write(postData);
req.end();
}
// Выполнение последовательно
var index = 0;
function next() {
if (index < topicIds.length) {
assignTopic(topicIds[index], function() {
index++;
setTimeout(next, 500);
});
}
}
console.log('Назначение тем:', topicIds.join(', '));
console.log('Назначить пользователю:', CONFIG.assignToUsername);
console.log('');
next();
Discourse Assign предоставляет следующие API-эндпоинты:
/assign/assign.json)Обязательные параметры:
target_id — ID темы или сообщенияtarget_type — либо "Topic", либо "Post"Плюс один из следующих:
username — имя пользователя, которому назначается задачаgroup_name — имя группы, которой назначается задачаНеобязательные параметры:
note — заметка о назначенииstatus — статус назначенияshould_notify — отправлять уведомления (по умолчанию: true)/assign/unassign.json)Обязательные параметры:
target_id — ID темы или сообщенияtarget_type — либо "Topic", либо "Post"# Назначить тему 123 пользователю "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"}'
# Назначить вместо этого группе
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"}'
Примечания
target_type: "Post" с ID сообщения@opcourdis пример на Node.js выше выглядит правильно! ![]()
Спасибо за информацию, приятно видеть, что мы можем включить все эти параметры