Я предполагаю, что вы создали темы через API и установили параметр external_id.
Не уверен, поможет ли это, но в Discourse есть маршрут t/external_id/:external_id. Похоже, он возвращает только данные в формате JSON:
Так что вы можете получить JSON-данные темы, например, по адресу:
/t/external_id/2023-4.json
Это вернёт содержимое и id темы в Discourse. Однако, думаю, это не решит вашу проблему.
Прямо сейчас тестирую: данные в формате JSON возвращаются, но Discourse автоматически перенаправляет на фактический URL темы в Discourse при выполнении запроса. Например, GET-запрос к http://localhost:4200/t/external_id/1.json перенаправляет меня на http://localhost:4200/t/testing-the-external-id-param/206.json
Я хочу получить что-то в формате встроенных постов. Discourse уже отлично справляется с такой разметкой, и я не хочу изобретать велосипед.
Если не разрешить поиск по external_id, мне придётся хранить ID темы форума в своей базе данных и искать по нему. Это кажется избыточным, поскольку при создании темы через API мы уже сохраняем уникальный идентификатор в поле external_id.
Также возможно, что можно сделать запрос на стороне клиента (например): http://localhost:4200/t/external_id/1.json
Затем извлечь фактический URL темы из ответа и либо разобрать этот URL, чтобы извлечь id темы, либо сделать второй запрос к URL темы, чтобы получить id темы.
Это, вероятно, будет подвержено ошибкам.
Если вы добавляете скрипт встраивания на сервере, а не на клиенте, вы можете просто сделать GET-запрос к http://localhost:4200/t/external_id/1.json, выполнить любые необходимые действия для получения id темы Discourse, а затем вставить скрипт на вашу веб-страницу, используя этот id.
Это отличная обратная связь, она даёт мне повод для размышлений. Запрос на добавление функции самый простой, но мне нравятся некоторые ваши идеи, о которых я даже не думал!