Markdown, BBCode и эмодзи не отображаются в сообщении API

Я использую API Discourse для обновления поста через PUT; обновления применяются, но парсятся только принятые HTML-теги. Markdown, BBCode и эмодзи отображаются некорректно. Я отправляю PUT-запрос с типом содержимого application/json, так как это действительно JSON-нагрузка, и это единственный тип содержимого, который, похоже, принимается для PUT-запроса, несмотря на то, что в документации указано, что есть три варианта.

У кого-нибудь есть идея, почему движок рендеринга не обрабатывает содержимое при обновлениях через API?

Я бы посмотрел логи и также проверил, что оказалось в поле с необработанным Markdown.

В логах я не вижу ошибок, и необработанный payload в точности соответствует тому, что я указываю в запросе cURL с методом PUT. Когда я открываю JSON-представление темы, я вижу следующее:

	`<p><img src="https://global.discourse-cdn.com/standard10/uploads/wysterialane/original/1X/284fb6069edededf16b0830d468eaf03bc261616.webp" alt="mother of god shades GIF" data-base62-sha1="5KBSuBIpIj3xlACzeZINBKw7wEu" width="262" height="200" class="animated"></p><br>Почему это не работает? :face_with_symbols_over_mouth: <br>`

Гифка внутри — это то, что я добавил в первое сообщение (OP), и движок рендеринга преобразовал её в HTML, и всё работает как надо. Но когда я добавляю через API фрагмент <br>Почему это не работает? :face_with_symbols_over_mouth: <br>, в базу данных записывается только необработанный текст, а движок рендеринга ничего с ним не делает. Это ожидаемое поведение? Похоже, что моим сервисам придётся формировать полный HTML-payload и передавать его, что, честно говоря, не очень хорошо.

Также стоит отметить, что у меня есть отдельный сервис, который публикует сообщения в поток живого чата через входящий веб-хук, и эмодзи корректно отображаются в панели чата. Это, похоже, специфично для API постов.

Эмодзи и HTML

Я думаю, что проблема, с которой вы сталкиваетесь при использовании коротких кодов эмодзи, обернутых в теги HTML, является ожидаемым поведением. Это можно воспроизвести в сообщении, созданном в редакторе постов Discourse. Например, :face_with_symbols_over_mouth: будет отображаться как :face_with_symbols_over_mouth: в пределах этого абзаца.

Если я использую теги p для создания абзаца вместо того, чтобы полагаться на движок Markdown, короткий код не будет отображаться. Например:

<p>Это предложение содержит короткий код эмодзи :face_with_symbols_over_mouth:</p>

Это предложение содержит короткий код эмодзи :face_with_symbols_over_mouth:

Markdown

Проблема с отправкой Markdown через API, похоже, решаема, но, возможно, будет сложно работать с ней. Используя curl из терминала, что-то вроде этого должно сработать:

m="### это заголовок
                                                                                                                                                           
Это очень короткий абзац с некоторым _акцентом_ на слове.

Это другой абзац с эмодзи :slight_smile:

- это
- список
- без
- порядка

Далее следует еще один абзац.

1) и
2) список
3) с
4) порядком"

curl -X POST "http://localhost:4200/posts.json" -H "Api-Key: $api_key" -H "Api-Username: simon" -F "title=Markdown test one" -F "category=6" -F "skip_validations=true" -F "raw=$m"

Параметр skip_validations в приведенном выше запросе просто предотвращает ошибки типа «тело слишком короткое» или «дублирующийся заголовок» при тестировании. Он обходит множество настроек сайта (минимальная длина поста, минимальная энтропия тела, минимальная длина заголовка темы и т. д.).

Я не уверен насчет проблемы с BBCode. Работают ли теги BBCode, которые вы пытаетесь отобразить, когда добавляете их в редактор постов вашего сайта Discourse?