Attribuer des sujets ou des messages lors de leur création via l'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 « J'aime »

Je dois créer des sujets via l’API en tant qu’utilisateurs temporaires (l’expéditeur n’a pas besoin de compte sur Discourse), je dois donc passer par le point de terminaison /admin/email/handle_mail. Cependant, celui-ci ne renvoie pas l’ID du sujet et semble fonctionner par lots.

Quelle est la meilleure méthode pour assigner ce sujet ?

L’idéal pour moi serait que le point de terminaison /admin/email/handle_mail accepte un champ assign.

Pourquoi inversez-vous le point de terminaison handle_email pour créer des sujets ?

Vous ne pouvez pas utiliser l’API standard de création de sujet avec un utilisateur en phase de test ?

1 « J'aime »

Je ne vois pas l’option pour créer un utilisateur en attente via l’API : Discourse API Docs

De plus, il est recommandé d’utiliser le point de terminaison handle_email : Creating a staged user with an API call - #2 by blake

Nous ne ferons pas cela. Il est conçu uniquement pour gérer les e-mails entrants.

Cela ne fonctionne pas en réalité ; vous recevrez une erreur 403.

Pourriez-vous appeler ce point de terminaison pour obtenir le dernier sujet créé par l’utilisateur en attente ?

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

Et ensuite l’assigner ?

2 « J'aime »

Eureka !

Il est possible d’utiliser « assigner un autre regex » puis de le mentionner dans le texte de /admin/email/handle_mail.

1 « J'aime »

Salut,

J’utilise le plugin Discourse Assign et j’ai réussi à le faire fonctionner, voici le code Python :

import requests

# Vous pouvez l'obtenir en faisant de l'ingénierie inverse de la requête d'assignation et en vérifiant les paramètres et les valeurs dans la console comme quelqu'un l'a mentionné auparavant :) 

base_url = 'VOTRE_URL'
endpoint = '/assign/assign'

 payload = {
    'username': 'NOM_UTILISATEUR', # Le nom d'utilisateur de la personne à qui vous voulez assigner le sujet
    'group_name': '',
    'target_id': NUMERO_DU_SUJET,
    'target_type': 'Topic'
}

headers = {
    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
    'Referer': 'URL_DU_SUJET', 
    'Accept': '*/*',
    'Api-Key': 'VOTRE_CLE_API',
    'Api-Username': 'VOTRE_NOM_UTILISATEUR'
}

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

if response.status_code == 200:
    print("Assignation réussie !")
else:
    print(f"L'assignation a échoué avec le code d'état {response.status_code}: {response.text}")

J’espère que cela vous aidera ^^

1 « J'aime »