Atribuir tópicos ou mensagens ao serem criados 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 curtidas

I need to create topics by API as staged users (sender does not need to have account in Discourse), so I have to do it by the /admin/email/handle_mail endpoint. But it does not return topic ID and seems to work in a batch.

What is the best way how to assign that topic?

The best for me would be if /admin/email/handle_mail endpoint could accept an assign field.

Why are you reversing the handle_email endpoint for creating topics?

You can’t use the standard create topic API with a staged user?

1 curtida

I do not see option to create staged user by API: Discourse API Docs

Also here is is recommanded to use handle_email endpoint: Creating a staged user with an API call

This we won’t do. It is only meant to handle incoming email.

This doesn’t work actually, you will get a 403 error.

Could you call this endpoint though to get the latest topic by the staged user?

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

And then assign it?

2 curtidas

Heureka!

It is possible to use "assign other regex“ and then mention in text of /admin/email/handle_mail.

1 curtida

Olá,

Estou usando o plugin Discourse Assign e consegui fazer funcionar, aqui está o código Python:

import requests

# Você pode obter isso por engenharia reversa da solicitação de atribuição e verificando os parâmetros e valores no console, como alguém mencionou antes :) 

base_url = 'SUA_URL'
endpoint = '/assign/assign'

payload = {
    'username': 'SEU_NOME_DE_USUÁRIO', # O nome de usuário da pessoa para quem você deseja atribuir o tópico
    'group_name': '',
    'target_id': NUMERO_DO_TOPICO,
    'target_type': 'Topic'
}

headers = {
    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
    'Referer': 'URL_DO_TOPICO', 
    'Accept': '*/*',
    'Api-Key': 'SUA_API_KEY',
    'Api-Username': 'SEU_NOME_DE_USUÁRIO'
}

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

if response.status_code == 200:
    print("Atribuição bem-sucedida!")
else:
    print(f"Falha na atribuição com código de status {response.status_code}: {response.text}")

Espero que ajude ^^

1 curtida