Создание staged-пользователей через API?

Я обдумываю идею создания сервиса-моста на основе вебхуков и API для связи определённых категорий на двух разных форумах Discourse. Грубый план выглядит так:

  1. Вебхуки на каждом сервере для событий «Тема» и «Пост»[1]
  2. Слушатель, который принимает эти события и воспроизводит их на противоположном сервере через API
    • Ну, и конечно, что-то для предотвращения циклов[2]
    • Проверка, существует ли пользователь с тем же адресом электронной почты на противоположном сервере[3]
    • Если такого пользователя нет, создать промежуточного (staged) пользователя
    • Изменить настройки уведомлений промежуточного пользователя, чтобы он не получал письма[4]
    • Создать или обновить пост от имени соответствующего реального или промежуточного пользователя
  3. Вероятно, запланированная задача для проверки тем, чтобы убедиться, что ничего не упущено, и, возможно, для пересортировки, чтобы обе стороны были синхронизированы

Из статьи Понимание статусов, ролей и прав пользователей, я думаю, что промежуточные пользователи (staged users) сделают именно то, что нам нужно: если кто-то всё же создаст учётную запись с этим адресом электронной почты позже, он сможет «забрать» её и взаимодействовать со всеми своими постами так, как будто он был здесь всё это время.

Но есть ли способ создать промежуточного пользователя через API? Я не вижу этого в документации: Discourse API Docs.


  1. и, возможно, также для событий «Нравится» и «Решено», но не в первом варианте ↩︎

  2. Я точно об этом подумал до того, как составил этот список ↩︎

  3. используя адреса электронной почты в качестве ключа, поскольку системы учётных записей могут не иметь одинаковых имён пользователей ↩︎

  4. Я видел где-то здесь пост о том, что это возможно… ↩︎

Не уверен, что это то, что вам нужно?

Ну, отчасти. Как пишет автор темы (OP) в ответ на это…

… и там ответ заключается в том, чтобы по сути вставить электронное письмо и позволить коду обработки почты разобраться с этим. Но это не сработает в данном случае, потому что мне нужно вмешаться и отключить уведомления по электронной почте для пользователя до создания сообщения.

Случайно у нас включена настройка SSO, переопределяющая имя пользователя, для одной стороны предлагаемого моста, поэтому я думаю, что создание чего-то вроде «othersite-user» могло бы стать обходным путём… но это не обязательно сработает без этой настройки SSO.

Если передача staged: true в вызов создания административного пользователя не работает, я предполагаю, что мы готовы рассмотреть PR для включения этой возможности.

(Это, на мой взгляд, довольно нишевая функция вне вашего случая использования?)

Возможно, вы могли бы использовать маршрут handle_mail для отправки поддельного письма от имени пользователя? (О, как предлагает @blake здесь)

Это создаст подготовленного пользователя, если это необходимо, и тему одновременно.

При таком подходе будет казаться, что пользователи создали темы и ответы через электронную почту. Временные пользователи могут создавать сообщения только по электронной почте. Если вы попытаетесь создать сообщение, не связанное с электронной почтой, для временного пользователя через API, вы получите ошибку недопустимого доступа.

Что-то в подходе с временными пользователями кажется мне не совсем правильным. Возможно, стоит опросить ваших пользователей, чтобы узнать, есть ли у них какие-либо опасения. Если бы вы могли получить разрешение от пользователей, вы могли бы просто создать активных, не временных пользователей на зеркальном сайте, а затем опубликовать их темы и комментарии через API.

Передача staged: true создает временного пользователя. Я предполагаю, что пользователь, созданный таким образом, сможет публиковать сообщения по электронной почте. Мой локальный сайт разработки не настроен на отправку писем в Discourse, поэтому я не могу проверить это в данный момент.

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

Было бы очень удобно иметь возможность создавать сообщение, которое создаёт временного пользователя, не прибегая к другим системам для обработки формы и отправки письма.

Я предполагаю, что для этого мне понадобится создать плагин, но это мой план.

Это одна из последних вещей, которые мне нужно разобраться, чтобы отказаться от WordPress.

Поэтому, возможно, в плагине я создам пост так, как если бы это было электронное письмо. Это может быть не слишком сложно реализовать в плагине. И это, скорее всего, сделает такую возможность доступной через API.

Думаю, вы можете использовать Мастер (:mage: Плагин «Настройка мастера»](Custom Wizard Plugin 🧙)), чтобы решить эту задачу без особых хлопот. Теперь можно создавать анонимных мастеров. Если нужно, с радостью помогу!

Да, это работает: Creating a staged user with an API call - #8 by blake.

О! Конечно. Так работает почтовый получатель. Мне, кажется, нужен эндпоинт, который будет принимать произвольные поля из любой формы, помещать их в тему и доставлять мне. Это избавит меня от необходимости публиковать API-ключ (ограниченный только доставкой писем; не так уж страшно, если JavaScript обработает форму и затем доставит данные на существующий эндпоинт).