Добавление события в календарь с помощью REST API

Здравствуйте,

Я уже несколько часов ищу информацию о том, как использовать REST API для добавления события календаря к теме, но, к сожалению, так и не нашёл ответа.

Я создал календарь категории и могу отображать события темы, созданные вручную, но не смог автоматизировать создание события темы при добавлении темы через REST API.

Я нашёл endpoint “discourse-post-events/events.json”, но при попытке использовать этот API получаю ошибку “Not Found”. Предполагаю, что это связано с необходимостью наличия идентификаторов событий, а я не знаю, как их создавать.

Спасибо за вашу помощь, советы и комментарии.

Как насчёт того, чтобы просто создать тему или пост для события через API и добавить теги [event][/event] в пост как значение его параметра raw?

Секрет, кажется, в том, что между открывающим и закрывающим тегами event должен быть символ новой строки (\n).

В примере ниже я использую "Content-Type: multipart/form-data", потому что с ним проще работать из командной строки, чем с JSON. Также переменная $api_key установлена в значение действительного API-ключа:

curl -X POST "http://localhost:4200/posts.json" \
-H "Api-Key: $api_key" \
-H "Api-Username: scossar" \
-H "Content-Type: multipart/form-data" \
-F title="Можно ли создать событие через API?" \
-F category=6 \
-F raw='[event start="2024-05-10 20:00" status="public" timezone="America/Vancouver" end="2024-05-10 21:30" allowedGroups="trust_level_0"]\n[/event]'
    const url = DISCOURSE_BASE_URL + '/posts.json';
    const message = {
        method: 'POST',
        headers: {
            'Api-Key': DISCOURSE_API_KEY,
            'Api-Username': DISCOURSE_API_USERNAME,
            'Content-Type': 'application/json'
        },
        body: JSON.stringify({
            "title": title, 
            "raw": content,
            "category": categoryId
        })
    };
    const response1 = await fetch(url, message);

Я получаю ошибку «Unprocessable Entity», когда в поле raw передаю следующее:

[event start="2024-05-16 19:00" status="public" name="585" timezone="Europe/Paris" allowedGroups="trust_level_0" end="2024-05-16 21:00"]
[/event]

Если я убираю объявление события и вставляю альтернативное описание, мой форум обновляется. Но как только я добавляю объявление события, возникает ошибка «Unprocessable Entity».

Не понимаю, что я делаю не так.

Вам нужно экранировать двойные кавычки, встречающиеся внутри строки. Например:

"raw": "[event start=\"2024-05-16 19:00\"...

Также убедитесь, что между тегами события включен символ новой строки (\n).

Я загрузил свои данные и попытался создать пост через интерфейс. Система сообщила, что название события должно содержать минимум 5 символов.

После этого я попробовал ваш запрос curl @simon, и он выдал интересную информацию: я не могу создать пост, потому что у меня нет прав на создание событий…

Поэтому я предоставил ему права администратора.

Теперь всё работает. Всё функционирует.

Спасибо за вашу помощь!