API経由でトピックを割り当てる方法

API経由で割り当てを行う方法はありますか?ドキュメントには見当たりませんが、驚かせていただけると嬉しいです :slight_smile:

編集:リバースエンジニアリングしてみることにしました!

「いいね!」 3

まず、私たちの目標は安定したAPIを持つことです。これは数年にわたる取り組みですが、確かに目指している方向です。

その間、2025年には合理的な対処法として、AIエージェントに頼ってこのような問題を解決してもらうことができます。

これは、GitHubのヘルパーに頼って質問に答えてもらう方法を示しています!

「いいね!」 4

これを解決できましたか?もしそうなら、ここで学んだことを共有していただけますか?

「いいね!」 1

こんにちは!
まだです!このプロジェクトはより緊急性の高いもののために後回しになりましたが、来週また取り掛かりますね :slight_smile:

「いいね!」 4

@tobiaseigen これは node js を使用して私には機能します

var https = require(‘https’);

// 設定
var CONFIG = {
apiUrl: ‘YOURDISCOURSEDOMAIN’,
apiKey: ‘YOURAPIKEY’,
apiUsername: ‘YOURAPIUSER’,
assignToUsername: ‘USERNAMETOASSIGNTO’  // トピックを割り当てるユーザー名
};

// 割り当てるトピック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('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 - トピックまたは投稿の ID
  • target_type - \"Topic\" または \"Post\" のいずれか

次のいずれか 1 つ:

  • username - 割り当てるユーザー名
  • group_name - 割り当てるグループ名

オプションパラメーター:

  • note - 割り当てメモ
  • status - 割り当てステータス
  • should_notify - 通知を送信する (デフォルト: true)

割り当て解除 (PUT /assign/unassign.json)

必須パラメーター:

  • target_id - トピックまたは投稿の 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" と投稿 ID を使用して、個々の投稿に割り当てることもできます

@opcourdis 上記の Node.js の例は正しいようです!:+1:

「いいね!」 2

共有いただきありがとうございます。これらすべてのパラメーターを含めることができるのを見て嬉しいです。