커스텀 자동화 - Automation 플러그인 성공적 통합을 위한 수정 흐름

안녕하세요,

쿼리가 해결/해결됨으로 표시되면 해당 토픽의 생성자에게 개인 메시지(PM)를 보내는(또는 사전에 정의된 메시지와 함께 스레드에 새 답글을 생성하는 — 두 경우 모두 투표로 진행할 예정) 사용자 정의 자동화를 만들고자 합니다.

현재 자동화 플러그인에서 사용할 수 있는 ‘send pms’ 스크립트는 해결/해결됨으로 표시된 답글을 작성한 사람에게 PM을 보내기 때문에, 제 사용 사례에서 의도한 대로 토픽 생성자에게 보내려면 사용자 정의 자동화가 필요합니다.

아래는 답글이 해결로 표시되면 해당 토픽에 새 답글을 게시하기 위해 제가 작성한 스크립트입니다. (아래 예시에서는 답글로 투표를 보내지 않고, 관리자가 반환될 내용을 선택할 수 있거나 기본값을 그대로 사용할 수 있도록 했습니다.)

# frozen_string_literal: true

DiscourseAutomation::Scriptable.add(DiscourseAutomation::Scripts::REPLY_ON_SOLUTION) do
    field :reply_text, component: :text
    # field :answering_user, component: :user
    field :once, component: :boolean
  
    version 1
  
    triggerables %i[:first_accepted_solution] if defined?(DiscourseSolved)
  
    placeholder :sender_username
    placeholder :word
  
    script do |context, fields, automation|
      topic = context["topic"]
      # user = context["user"]
      reply_text = fields.dig("reply_text", "value")
  
      # Post a reply in the topic where a solution was marked
      PostCreator.create!(
        Discourse.system_user,
        topic_id: topic.id,
        raw: reply_text || "A solution has been marked for this topic!",
      )
    end
  end

하지만 PostCreator.create!인지, PostCreator.reply인지, 아니면 다른 무언가를 사용해야 하는지 확실하지 않습니다. 여기서 한 가지 질문이 생겼습니다:

  • 사용자 정의 자동화 스크립트 작성 시 사용할 키워드에 대한 문서가 어딘가에 존재합니까?

위 자동화를 기반으로 답글을 해결로 표시하여 트리거하면, 1초 후에 화면에 500 internal server error 메시지가 포함된 팝업이 표시됩니다.

  • 제가 놓치고 있는 것이 있습니까? 제 배포는 개발 테스트 목적으로 로컬 머신에서 devcontainers를 사용하여 수행했습니다.
  • 사용자 정의 스크립트를 생성한 후에 해야 할 필수 조치가 무엇입니까? 이 단계에서 무언가를 놓치고 있는 건지, 아니면 스크립트 자체에 문제가 있는 건지 궁금합니다.
  • 스크립트가 완료된 후 진행해야 할 단계에 대한 문서가 어딘가에 있습니까? 예를 들어, 모든 것이 원활하게 작동하려면 어떤 파일들을 수정해야 하는지요. (자동화 목록에 올바른 이름과 설명이 표시되려면 client.en.yml을 변경해야 한다는 것을 어렵게 깨달았습니다.)

send pms 내장 스크립트를 기반으로, 답글을 생성하는 대신 PM을 보내도록 스크립트를 수정하는 시도를 계획하고 있지만, 다음 사항에 대해 확실하지 않습니다:

  • 해결로 표시된 답글의 작성자가 아닌 토픽을 생성한 사람을 태그하는 방법은 어떻게 됩니까?

미리 조언과 도움을 주시면 감사하겠습니다.

이 가이드를 따랐나요?

NateDhaliwal 님, 안녕하세요.

답변 주셔서 감사합니다.

네, 해당 가이드를 따랐습니다… 이후 가이드에 몇 가지 제안을 코멘트로 남기겠습니다.

참고로 커스텀 자동화를 성공적으로 작동시켰습니다.

500 내부 서버 오류의 원인은 제가 잘못된 "컨텍스트"를 태그했기 때문이었습니다. 로그를 확인하고 올바른 컨텍스트를 태그하면서 문제를 발견했습니다.

올바른 컨텍스트의 내용이 변수에 추가되자 500 내부 서버 오류가 해결되었습니다.

코드 내의 추가 로직도 수정했습니다.

수정: 로컬에 배포된 인스턴스에서 커스텀 자동화를 작동시키기 위해 다음 파일들도 수정해야 했습니다:

커스텀 자동화 스크립트 생성

업데이트: server.en.yml

yml 파일의 scriptables 섹션에 커스텀 자동화 이름, 제목, 설명을 추가합니다.

업데이트: client.en.yml

scriptables에 커스텀 자동화 이름을 추가합니다. ‘field’ 키워드를 추가하고, field 키워드 안에 'field_name’을 'label’과 'description’과 함께 추가합니다.

업데이트: scripts.rb

스크립트 목록에 커스텀 자동화 이름을 추가합니다. 예: FILE_NAME = “file_name”

업데이트: plugin.rb

‘after_initialize do’ 블록 안에 커스텀 자동화 스크립트의 경로를 추가합니다. 예: ‘lib/discourse_automation/scripts/file_name’