POST 요청을 사용하는 폼이 포함된 플러그인 예시

안녕하세요, 여러분!

https://meta.discourse.org/t/error-unable-to-configure-link-to-auto-send-messages-ensure-ad-blockers-are-disabled-and-try-reloading-the-page/350938에서 진행 중인 플러그인 개발의 막힌 부분을 해소하기 위해 노력하고 있습니다.

형식 제출(form submission) 유형의 동작이 내장된 플러그인의 작동하는 예제가 있으면 정말로 도움이 될 것입니다. 저희 플러그인은 고수준에서 두 가지 요소를 갖추고 있습니다:

  • 설정 항목
  • 사용자가 텍스트를 입력한 후 처리를 위해 '제출’하는 양식

따라서 이러한 두 가지 유형의 기능이 있는 플러그인을 알고 계신 분이 있다면, 어떻게 작동하는지 검토할 수 있도록 링크를 알려주시면 정말로 감사하겠습니다.

감사합니다!

지금 하고 있는 일에 대해 더 자세히 설명해 줄 수 있나요? 폼을 어떻게 변경하려고 하나요? 이걸 테마 컴포넌트로 만들 수 있을까요? 제출하는 대상이 기존 엔드포인트인가요, 아니면 새로 추가하는 엔드포인트인가요?

Discourse toolkit to render forms 를 참고하세요.

그 다음 GitHub - discourse/all-the-plugins · GitHub 를 받아서 "<Form"으로 grep 검색을 할 수 있습니다. 또한 Discourse toolkit to render forms - #20 by david 에 설명된 대로 Code search results · GitHub 를 볼 수도 있습니다(다만 여기에는 코어 관련 내용만 있고, 플러그인은 없습니다).

아마 discourse-data-explorer/assets/javascripts/discourse/components/param-input-form.gjs at main · discourse/discourse-data-explorer · GitHub 를 참고해 보시는 것도 좋겠습니다.

FormKit은 아직 꽤 새로운 라이브러리입니다.

아직 Locations 플러그인을 FormKit을 사용하도록 업데이트하지도 않았습니다.

(하지만 처음부터 새로 시작한다면 FormKit을 사용하는 것이 확실히 올바른 선택입니다 :+1:)

정말 그렇습니다. 새로운 코드를 작성하는 사람들에게는 여전히 이 라이브러리를 추천합니다.

제가 새로 작업 중인 프로젝트에 사용했습니다. (해당 라이브러리에 관한 토픽에서 제가 많이 불평하는 것을 볼 수 있습니다!)

@pfaffman 사용자에게 다음 네 가지를 입력하도록 요청하는 간단한 폼을 만들고 싶습니다:

  1. 발신자
  2. 수신자
  3. 제목
  4. 본문

사용자는 이 필드를 입력한 후 버튼을 클릭하여 이메일을 전송하는 엔드포인트를 트리거합니다.

구체적으로, 폼에는 네 가지 요소가 포함되며, “전송” 버튼을 클릭하면 메시지를 전송하기 위해 엔드포인트가 호출됩니다.

이것이 정확히 원하시는 내용인지는 확신이 서지 않지만, 주요 목표는 관리자 사용자에게 텍스트(이메일 제목과 본문)를 입력하게 하고 버튼을 클릭하여 Discourse의 사용자에게 전송할 수 있도록 하는 것입니다.

향후에는 사용자가 한 발신자에서 여러 수신자로 다수의 메시지를 트리거할 수 있도록 확장하기를 원합니다. 메시지 총 개수와 각 메시지 사이의 지연 시간과 같은 매개변수를 조작하여 전송되는 메시지의 수와 간격을 제어하는 것입니다.

한 발짝 더 물러서서, 실제로 해결하려는 문제를 설명해 주시겠어요?

직접 이메일을 보내는 것(메시지가 Discourse에 존재하지 않도록)을 의미하시나요, 아니면 사용자에게 전달되는 PM을 보내는 것(대부분의 경우 이메일 알림이 생성됨)을 의미하시나요?

PM의 발신자를 변경하고 싶으신 건가요? 기존 PM 인터페이스에서 빠져 있는 것이 그것뿐인 것 같은데, 맞나요?

확인해 주셔서 감사합니다! 조금 더 맥락을 설명드리면, 우리는 대규모 사용자 기반을 보유하고 있으며, 오랫동안 앱을 사용하지 않은 사용자를 다시 끌어들이고자 합니다. 목표는 특정 발신자로부터 대량의 사용자에게 개인 메시지(PM)를 보내되, 여러 매개변수를 제어하는 것입니다:

  1. 발신자: 관리자 사용자가 양식에서 발신자의 사용자 이름을 직접 지정합니다.
  2. 제목 및 본문: 관리자는 PM의 제목과 본문을 모두 사용자 정의할 수 있습니다.
  3. 양 제어: 사용자에게 스팸이 되지 않도록 한 번에 전송되는 메시지 수를 제어하고 싶습니다.
  4. 타이밍: 가장 중요한 고려 사항은 이메일 도메인이 압도되지 않고 스팸으로 플래그되지 않도록 메시지 전송 속도를 제어하는 것입니다. 스팸 필터를 트리거하지 않도록 각 메시지(및 해당 이메일) 사이에 지연 시간을 정의하여 메시지를 간격 있게 보내야 합니다.

궁극적인 목표는 사용자에게 개인 메시지(이메일 알림도 생성됨)를 열어보게 하고, 앱으로 복귀하도록 독려하는 것입니다.

이미 이 작업을 수행할 수 있는 단순한 Ruby 스크립트가 있으며, 이는 완전히 작동하고 있습니다. 현재는 VM에 SSH로 접속하여 수동으로 트리거하고 있는데, 이는 다소 번거롭습니다. 이제 이 스크립트를 플러그인으로 적응시켜 관리자가 UI를 통해 쉽게 트리거하고, 설정(발신자, 제목, 본문, 메시지 수, 메시지 간 지연 시간 등)을 관리자 인터페이스에서 직접 입력할 수 있도록 하기를 원합니다.

관리자가 이러한 설정을 쉽게 입력하고, 프로세스를 트리거하며, 메시지 전송 진행 상황을 모니터링할 수 있는 플러그인 인터페이스를 통해 이를 달성하고 싶습니다.

부품이 꽤 많네요.

사용자를 그룹으로 묶어두고, 그 그룹의 모든 사용자에게 전송할 계획을 세우는 방식이 좋을 것 같습니다. 메시지가 전송되면 user_custom_field에 값을 설정하고, 기존 토픽을 메시지의 텍스트와 발신자로 활용하면 됩니다. 그리고 일정 주기로 작업이 실행되어 원하는 만큼의 메시지를 보내도록 하면 됩니다. 그룹과 커스텀 필드 값은 설정에 저장해 두는 것이 좋습니다.

이렇게 하면 인터페이스를 만들거나 새 라우트를 생성할 필요가 전혀 없으며, 기존 설정만 사용하면 됩니다. 또한 데이터 탐색기를 통해 어떤 일이 일어났는지 확인할 수 있으므로, 인터페이스를 개발할 필요도 없습니다.

다만 UX에서 사용자가 직접 입력하는 필드를 만들고 싶다면, 이미 언급했던 <Form>을 확인해 보세요.