Я столкнулся с аналогичной проблемой, но выбрал другой путь. Вместо прямого обращения к конечным точкам API календаря мой импортер формирует BBCode-тег [event] и публикует его в Discourse, позволяя плагину обработать его так, будто событие было создано вручную сотрудником. Таким образом я избегаю зависимости от временных параметров запроса, таких как include_expired, и получаю более стабильный контракт — обычные посты и BBCode вряд ли изменятся без предупреждения.
[event start="2025-09-29 09:00" end="2025-10-29 10:00" location="Office B1"]
Встреча для обсуждения RESTful API Discourse
[/event]
Минус этого подхода — дополнительные усилия с моей стороны: мне пришлось написать форматировщик, который преобразует данные ICS в корректно экранированные теги [event], обрабатывает события на весь день и события с указанием времени и так далее. Однако на практике этот метод оказался гораздо более устойчивым к обновлениям. Он не отменяет необходимости получать уведомления о устаревании со стороны провайдера (я всё ещё хотел бы, чтобы API быстро сообщали об ошибках или хотя бы предупреждали об удалении опций), но значительно снизил риск молчаливого сбоя моих скриптов.