Пример любого плагина с формой, отправляющей POST-запрос

Всем привет!

Мы работаем над тем, чтобы разблокировать разработку плагина, которую мы ведем здесь: Error "Unable to configure link to 'Auto Send Messages'. Ensure ad-blockers are disabled and try reloading the page."

Нам очень пригодился бы рабочий пример плагина, в который встроено действие типа отправки формы. Наш плагин состоит из двух основных компонентов:

  • элементы конфигурации;
  • форма, в которую пользователь вводит текст, а затем нажимает «Отправить» для обработки.

Поэтому, если кто-то знает о плагине с такими двумя функциями, будем очень благодарны за ссылку на него, чтобы мы могли изучить, как он работает.

Спасибо!

Можете рассказать подробнее о том, что вы делаете? Что именно вы изменяете в форме? Может ли это быть тематическим компонентом? Отправляетесь ли вы данные на существующую конечную точку или на новую, которую вы добавляете?

Смотрите: Discourse toolkit to render forms

Затем вы можете получить GitHub - discourse/all-the-plugins · GitHub и выполнить поиск по строке «<Form», но также можно посмотреть Code search results · GitHub, как описано в Discourse toolkit to render forms - #20 by david (хотя все эти примеры находятся в ядре, а не в плагинах).

Возможно, стоит посмотреть discourse-data-explorer/assets/javascripts/discourse/components/param-input-form.gjs at main · discourse/discourse-data-explorer · GitHub

FormKit — довольно новый инструмент.

Я ещё даже не обновил плагин Locations, чтобы использовать его.

(Но если вы только начинаете, то это определённо правильный выбор :+1:)

Это абсолютно верно. Я всё ещё рекомендую её тем, кто пишет новый код.

Я использовал его для чего-то нового, над чем сейчас работаю. (И вы можете увидеть, как я часто жалуюсь на это в теме, посвящённой ему!)

@pfaffman Мы хотим создать простую форму, которая запрашивает у пользователя четыре параметра:

  1. Отправитель
  2. Получатель
  3. Тема
  4. Тело сообщения

Пользователь заполнит эти поля, а затем нажмет кнопку, чтобы вызвать endpoint для отправки письма.

Конкретно форма будет включать четыре элемента, и после нажатия кнопки «Отправить» будет вызван endpoint для отправки сообщения.

Я не уверен, что это именно то, что вы ищете, но основная цель — позволить администратору ввести текст (тему и тело письма) и нажать кнопку, чтобы отправить его пользователю в Discourse.

В будущем мы хотели бы расширить функционал так, чтобы пользователь мог отправлять несколько сообщений от одного отправителя нескольким получателям. Мы хотим управлять такими параметрами, как общее количество сообщений и задержка между каждым из них, чтобы контролировать, сколько сообщений отправляется и с каким интервалом.

Может, отступите на шаг назад и опишите реальную проблему, которую вы пытаетесь решить.

Вы имеете в виду, что хотите отправить прямое письмо (так что сообщение не будет сохранено в Discourse), или что хотите отправить личное сообщение пользователю (что в большинстве случаев вызовет уведомление по электронной почте)?

Вы хотите изменить отправителя ЛС? Похоже, это единственное, чего не хватает в существующем интерфейсе личных сообщений, верно?

Спасибо за уточнение! Для контекста: мы работаем с большой базой пользователей и хотим вернуть тех, кто давно не взаимодействовал с нашим приложением. Цель — отправить личное сообщение (ЛС) большому количеству пользователей от конкретного отправителя, с контролем нескольких параметров:

  1. Отправитель: Администратор укажет имя пользователя отправителя непосредственно в форме.
  2. Тема и текст: Администратор сможет настроить как тему, так и тело ЛС.
  3. Контроль объема: Мы хотим регулировать количество сообщений, отправляемых за один раз, чтобы избежать спама.
  4. Время отправки: Ключевой момент — контроль скорости отправки сообщений, чтобы не перегружать наш почтовый домен и не попасть в спам-фильтры. Нам нужно будет иметь возможность выдерживать задержки между каждым сообщением (и соответствующим письмом), чтобы не спровоцировать срабатывание спам-фильтров.

Конечная цель — побудить пользователей открыть личное сообщение (которое также вызовет уведомление по электронной почте) и вернуться в наше приложение.

У нас уже есть простой Ruby-скрипт, который решает эту задачу и полностью рабочий. В данный момент мы запускаем его вручную, подключаясь к виртуальной машине через SSH, что довольно неудобно. Теперь мы хотим адаптировать этот скрипт в виде плагина, чтобы администратор мог легко запускать его через интерфейс, вводя настройки (отправитель, тема, текст, количество сообщений, задержка между ними и т. д.) прямо из панели администратора.

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

Это довольно много элементов.

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

Тогда вам не понадобится интерфейс или создание нового маршрута; вы сможете использовать существующие настройки. И вы сможете отслеживать произошедшее с помощью Data Explorer, поэтому вам не нужно разрабатывать интерфейс ни для того, ни для другого.

Но если вы хотите создать поля, которые пользователи заполняют в интерфейсе, вам стоит обратить внимание на компонент <Form>, о котором я уже упоминал.