Assign topics or messages when created via API

I’d like to be able to create messages that are assigned to specific users. Is this something that is possible already and I am missing something, or that you would consider adding?

I am not seeing reference to the assign plugin in the API docs. Seems to me an e.g. assigned_to=usernname should be an option.

https://docs.discourse.org/#tag/Posts%2Fpaths%2F~1posts.json%2Fpost

The background to this is that I am using discourse as a ticket system, using @angus’s Tickets Plugin 🎟. The easiest way for me to allow members to create tickets is to create a gravity form in wordpress that creates the message in discourse. I know this can work and I have the rest of it lined up, just not the ability to assign tickets to specific users upon creation.

To assign a topic you issue an API request after creating the topic. For the request format, please read How to reverse engineer the Discourse API

4 лайка

Мне нужно создавать темы через API от имени пользователей в режиме ожидания (отправителю не обязательно иметь учётную запись в Discourse), поэтому я вынужден использовать endpoint /admin/email/handle_mail. Однако он не возвращает ID темы и, похоже, работает пакетно.

Какой лучший способ назначить эту тему?

Для меня было бы идеально, если бы endpoint /admin/email/handle_mail мог принимать поле assign.

Почему вы меняете на противоположный конечный адрес handle_email для создания тем?

Нельзя ли использовать стандартный API для создания тем с неактивированным пользователем?

1 лайк

Я не вижу опции для создания подготовленного пользователя через API: Discourse API Docs

Также здесь рекомендуется использовать endpoint handle_email: Creating a staged user with an API call - #2 by blake

Мы этого не сделаем. Она предназначена только для обработки входящей почты.

На самом деле это не работает, вы получите ошибку 403.

Однако вы можете вызвать эту конечную точку, чтобы получить последнюю тему, созданную временно зарегистрированным пользователем?

http://localhost:3000/topics/created-by/staged-username.json

А затем назначить её?

2 лайка

Эврика!

Можно использовать «назначить другой regex» и затем упомянуть это в тексте /admin/email/handle_mail.

1 лайк

Привет,

Я использую плагин Discourse Assign и смог это сделать. Вот код на Python:

import requests

# Вы можете получить эти данные, проведя реверс-инжиниринг запроса assign и проверив параметры и значения в консоли, как кто-то уже упоминал ранее :)

base_url = 'ВАШ_URL'
endpoint = '/assign/assign'

payload = {
    'username': 'ИМЯ_ПОЛЬЗОВАТЕЛЯ', # Имя пользователя, которому нужно назначить тему
    'group_name': '',
    'target_id': НОМЕР_ТЕМЫ,
    'target_type': 'Topic'
}

headers = {
    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
    'Referer': 'URL_ТЕМЫ',
    'Accept': '*/*',
    'Api-Key': 'ВАШ_API_КЛЮЧ',
    'Api-Username': 'ВАШ_ПОЛЬЗОВАТЕЛЬ'
}

response = requests.put(f"{base_url}{endpoint}", data=payload, headers=headers)

if response.status_code == 200:
    print("Назначение выполнено успешно!")
else:
    print(f"Назначение не удалось с кодом состояния {response.status_code}: {response.text}")

Надеюсь, это поможет ^^

1 лайк