كيف أقوم بتعيين موضوع عبر واجهة برمجة التطبيقات

هل هناك طريقة للتخصيص عبر واجهة برمجة التطبيقات (API)؟ لا أراها في المستندات، لكنني سأكون سعيدًا بالمفاجأة :slight_smile:

تعديل: يبدو أنني سأحاول هندسة عكسية لها!

3 إعجابات

أولاً وقبل كل شيء، هدفنا هو الحصول على واجهة برمجة تطبيقات مستقرة، وهي محاولة تستغرق عدة سنوات للوصول إليها، ولكنها بالتأكيد مكان نرغب في الوصول إليه.

في هذه الأثناء، يمكن استخدام خدعة معقولة لعام 2025 وهي الاعتماد على وكلاء الذكاء الاصطناعي لحل هذه الأمور:

يُظهر هذا كيف يمكنك الاعتماد على مساعدنا على GitHub للإجابة على هذا السؤال!

4 إعجابات

هل توصلت إلى حل لهذا؟ إذا كان الأمر كذلك، هل يمكنك مشاركة ما تعلمته هنا؟

إعجاب واحد (1)

أهلاً!
ليس بعد! تم تأجيل هذا المشروع لشيء أكثر إلحاحًا، ولكني سأعود إليه الأسبوع المقبل :slight_smile:

4 إعجابات

@tobiaseigen هذا يعمل معي باستخدام node js

var https = require(‘https’);

// Configuration
var CONFIG = {
apiUrl: ‘YOURDISCOURSEDOMAIN’,
apiKey: ‘YOURAPIKEY’,
apiUsername: ‘YOURAPIUSER’,
assignToUsername: ‘USERNAMETOASSIGNTO’  // اسم المستخدم لتعيين المواضيع إليه
};

// معرفات المواضيع المراد تعيينها
var topicIds = [634]; // قم بالتغيير باستخدام معرف الموضوع

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('Raw response:', data);
  try {
    var response = JSON.parse(data);
    if (res.statusCode === 200) {
      console.log('Topic ' + topicId + ' successfully assigned');
    } else {
      console.log('Topic ' + topicId + ' error:', response.errors || response.error_type || response);
    }
  } catch (e) {
    console.log('Parse error:', e.message);
  }
  if (callback) callback();
});

});

req.on(‘error’, function(e) {
console.error('Request error for topic ’ + 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(‘Assigning topics:’, topicIds.join(‘, ‘));
console.log(‘Assign to:’, CONFIG.assignToUsername);
console.log(’’);
next();
إعجاب واحد (1)

يعرض Discourse Assign نقاط النهاية لواجهة برمجة التطبيقات (API) التالية:

تعيين (PUT /assign/assign.json)

المعلمات المطلوبة:

  • target_id - مُعرِّف الموضوع أو المشاركة
  • target_type - إما \"Topic\" أو \"Post\"

بالإضافة إلى واحدة مما يلي:

  • username - اسم المستخدم الذي سيتم التعيين إليه
  • group_name - اسم المجموعة التي سيتم التعيين إليها

المعلمات الاختيارية:

  • note - ملاحظة التعيين
  • status - حالة التعيين
  • should_notify - إرسال الإشعارات (الافتراضي: true)

إلغاء التعيين (PUT /assign/unassign.json)

المعلمات المطلوبة:

  • target_id - مُعرِّف الموضوع أو المشاركة
  • target_type - إما \"Topic\" أو \"Post\"

أمثلة (curl)

# تعيين الموضوع 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"}'

ملاحظات

  • يجب أن يمتلك مستخدم واجهة برمجة التطبيقات (API) أذونات التعيين (أن يكون في مجموعة مسموح لها بالتعيين)
  • يمكنك أيضًا تعيين مشاركات فردية باستخدام target_type: "Post" مع مُعرِّف المشاركة

@opcourdis مثال Node.js أعلاه يبدو صحيحًا! :+1:

إعجابَين (2)

شكرًا للمشاركة، من الجيد أن نرى أنه يمكننا تضمين جميع تلك المعلمات