Supongo que creaste los temas a través de la API y estableciste el parámetro external_id.
No estoy seguro si esto ayuda, pero Discourse tiene una ruta t/external_id/:external_id. Parece que solo devuelve datos JSON:
Así que puedes obtener el JSON del tema en (por ejemplo)
/t/external_id/2023-4.json
Eso devolvería el contenido y el id del tema de Discourse. Sin embargo, no creo que esto resuelva tu problema.
Probando esto ahora, se devuelven datos JSON, pero Discourse realiza una redirección automática a la URL real del tema de Discourse cuando realizas la solicitud. Por ejemplo, una solicitud GET a http://localhost:4200/t/external_id/1.json me redirige a http://localhost:4200/t/testing-the-external-id-param/206.json
Quiero tener algo en el formato de publicaciones incrustadas. Discourse ya hace un gran trabajo con ese diseño y no quiero reinventar la rueda.
Al no permitir buscar por external_id, tendría que almacenar el id del tema del foro en mi base de datos y buscar de esa manera. Parece redundante cuando ya tenemos una variable única almacenada en external_id cuando creé el tema desde la API.
Posiblemente esto podría agregarse como una característica.
También podría ser posible hacer una solicitud en el cliente a (por ejemplo) http://localhost:4200/t/external_id/1.json
Luego, extrae la URL real del tema de la respuesta y, o bien analiza esa URL para extraer el id del tema, o haz una segunda solicitud a la URL del tema para obtener el id del tema.
Esto parece propenso a errores.
Si estás agregando el script de incrustación en el servidor en lugar de en el cliente, podrías simplemente hacer una solicitud GET a http://localhost:4200/t/external_id/1.json, realizar las acciones que necesites para obtener el id del tema de Discourse, y luego insertar el script en tu página web usando ese id.
Este es un buen comentario y me da algunas cosas en qué pensar. La solicitud de funciones es la más sencilla, ¡pero me gustan algunas de tus ideas en las que no había pensado!