새로운 사용자 업데이트 자동화 사용

:bookmark: 이 가이드는 Discourse Automation 플러그인의 새로운 사용자 업데이트 트리거를 사용하여 사용자가 프로필을 업데이트할 때 게시물을 생성하는 방법을 설명합니다.

:person_raising_hand: 필요한 사용자 권한: 관리자

Discourse Automation 플러그인에는 게시물 생성(CREATE POSTS) 스크립트를 위한 트리거가 포함되어 있습니다. 이 트리거는 특정 조건이 충족될 때 사용자가 프로필을 업데이트하면 지정된 토픽에 게시물을 자동으로 생성할 수 있도록 합니다.

자동화 설정

  1. Discourse 인스턴스에서 example.discourse.com/admin/plugins/automation으로 이동합니다.
  2. "새 자동화"를 클릭합니다.
  3. 스크립트로 "게시물 생성"을 선택합니다.
  4. 트리거로 "사용자 업데이트 후"를 선택합니다.

구성 옵션

사용자 커스텀 필드 및 사용자 프로필 필드

프로필 업데이트 후 스크립트가 실행되기 전에 사용자가 채워야 하는 필드를 지정합니다. 커스텀 필드, 프로필 필드 또는 둘 다를 선택할 수 있습니다.

참고: “사용자 커스텀 필드” 또는 “사용자 프로필 필드” 중 하나는 반드시 지정되어야 합니다. 자동화는 사용자가 지정된 모든 필드를 채운 후에만 트리거됩니다.

사용자당 1회

이 옵션을 활성화하면 자동화가 사용자당 1회만 트리거되도록 제한됩니다. 특정 사용자에게 자동화가 한 번 실행된 후, 해당 사용자의 이후 프로필 업데이트에서는 다시 실행되지 않습니다.

신규 사용자만 해당

이 옵션을 활성화하면 자동화가 자동화가 활성화된 이후에 가입한 사용자에 대해서만 실행되도록 제한됩니다. 기존 사용자가 자동화를 트리거하지 않도록 하는 환영/자기소개 게시물 워크플로에 유용합니다.

생성자

게시물을 다음 중 하나로 생성하도록 선택할 수 있습니다:

  • 특정 사용자
  • 시스템 사용자(생성자가 지정되지 않은 경우 기본값)
  • 자동화를 트리거한 사용자(즉, 프로필을 업데이트한 사용자)

플레이스홀더 사용

게시물 내용에 플레이스홀더를 사용하여 사용자의 프로필 정보를 포함할 수 있습니다. 다음 내장 플레이스홀더가 사용할 수 있습니다:

  • %%USERNAME%% — 프로필을 업데이트한 사용자의 사용자 이름
  • %%NAME%% — 프로필을 업데이트한 사용자의 전체 이름
  • %%UPDATED_USER_USERNAME%% — %%USERNAME%%와 동일
  • %%UPDATED_USER_NAME%% — %%NAME%%와 동일
  • %%CREATOR_USERNAME%% — 게시물 생성자의 사용자 이름

추가로, 트리거 구성에서 지정한 사용자 프로필 필드 또는 사용자 커스텀 필드는 플레이스홀더로 사용할 수 있게 됩니다. 예를 들어, 사용자 프로필 필드 "location"이 지정되면 %%LOCATION%%이 사용할 수 있게 됩니다. 커스텀 필드 이름은 대문자로 변환되고 공백은 밑줄로 대체됩니다.

다음은 예시입니다:

Welcome to our community, @%%USERNAME%%!

We're excited to have you join us from %%LOCATION%%. 
Tell us more about your interest in %%CUSTOM_FIELD_1%%!

참고: 플레이스홀더는 대문자로 작성되어야 하며 %%로 감싸야 합니다. 트리거의 “사용자 커스텀 필드” 또는 "사용자 프로필 필드"에서 필수로 지정되지 않은 플레이스홀더는 사용자가 해당 정보를 입력하지 않은 경우 대체되지 않을 수 있습니다.

자동화 테스트

자신의 프로필을 사용하여 자동화를 테스트할 수 있습니다:

  1. 위에서 설명한 대로 자동화를 설정합니다.
  2. 트리거에서 지정한 필드를 채워 사용자 프로필을 업데이트합니다.
  3. 프로필 변경 사항을 저장합니다.
  4. 지정된 토픽을 확인하여 자동 생성된 게시물이 생성되었는지 확인합니다.

동작은 사용자가 프로필을 저장할 때 트리거되지만, 설정한 트리거 조건에 따라만 실행된다는 점을 기억하세요.

문제 해결

문제가 발생하면 다음을 확인하세요:

  1. 트리거에서 “사용자 커스텀 필드” 또는 “사용자 프로필 필드” 중 하나가 구성되었는지 확인합니다 — 둘 다 비워둘 수 없습니다.
  2. 구성의 필드 이름이 Discourse 인스턴스에서 정의된 커스텀 필드 또는 프로필 필드와 정확히 일치하는지 다시 확인합니다.
  3. 게시물 내용에서 플레이스홀더가 올바르게 정의되고 예상 형식(예: “location” 프로필 필드에 대한 %%LOCATION%%)과 일치하는지 확인합니다.
  4. "사용자당 1회"를 사용하는 경우, 자동화는 이미 트리거된 사용자를 추적합니다. 이미 자동화를 트리거한 사용자는 다시 트리거할 수 없습니다.
  5. "신규 사용자만 해당"을 사용하는 경우, 사용자 계정이 자동화가 활성화된 후에 생성되었는지 확인합니다.

추가 고려 사항

  • 성능: 프로필 업데이트가 빈번한 대규모 사용자 집단을 보유하고 있는 경우, 자동화가 성능에 영향을 주지 않도록 시스템 리소스를 모니터링하세요.
  • 사용자 권한: 자동화가 지정된 토픽에 게시물을 생성할 수 있는 충분한 권한을 가진 계정을 사용하는지 확인하세요.
  • 닫힘/아카이브된 토픽: 자동화는 닫히거나 아카이브된 토픽에 게시물을 생성하지 않습니다.
8개의 좋아요

초보라서 죄송하지만, 조금 더 맥락을 설명해 주실 수 있을까요? 대시보드에서 자동화 기능이 켜져 있습니다. 그런데 설치 방법은 어떻게 되나요? 어디서 찾을 수 있나요?

감사합니다

1개의 좋아요

자동화(Automation) 페이지는 /admin/plugins/discourse-automation에서 찾을 수 있습니다.

여기서 보조 메뉴의 일부여야 합니다: (휴대폰 스크린샷이라 양해 부탁드립니다 :slight_smile:)

그곳에서 새로운 자동화를 생성한 후, 이 새로운 트리거가 Create Post 스크립트를 위한 것일 것 같습니다.

생성 후 ‘after user update’ 트리거를 선택하면, OP의 스크린샷과 일치하도록 추가 옵션들이 모두 표시됩니다.

감사합니다 @JammyDodger

새 자동화를 만드는 곳이 어디에 숨겨져 있는지 캡처해 주셔서 정말 큰 도움이 되었습니다. 감사합니다.

대부분의 단계를 진행하다가 해석하기 어려운 오류가 발생했습니다:

1개의 좋아요

‘사용자 프로필 필드’ 옵션을 가리키는 것 같습니다. 이 옵션도 필수인 것 같습니다.

아마도 커스텀 필드 또는 프로필 필드 중 하나만 필수로 설정하는 것이 적절할 것 같습니다. :thinking:

이 부분은 @Juan_David_Martínez 님께 여쭤보시는 것이 좋겠습니다. :slight_smile:

5개의 좋아요

제가 이런 말을 할 줄 알았을 것이라곤 상상도 못하셨을 텐데… 또 다른 AI 답변을 들고 왔습니다, Seth :stuck_out_tongue: Anthropic이 새로운 Anthropic Opus 모델을 방금 출시했고, 저는 이 모델을 철저히 테스트해 보기로 했습니다. 그 답변은 정말 흥미로웠고, 제 생각에는 정확합니다:

Opus와 해당 문제에 대해 대화하기 AI

sam:

다음 커밋을 바탕으로:

commit 92814444966892eea7746209e949e6893a89b07c
REDACTED

저는 다음 질문에 답하려고 합니다:

대부분 진행은 했는데, 이 해석하기 어려운 에러가 떴습니다:
Field user profile must be filled

또한 Discourse 자동화에서 이 커밋과 관련된 다양한 엣지 케이스와 함정(gotchas)을 설명하면서 이 기능에 대한 요약을 부탁드립니다.

claude_3_opus_bot:

"Field user profile must be filled"라는 에러 메시지로부터, 자동화 트리거의 “user_profile” 필드가 필수이지만 올바르게 입력되거나 구성되지 않은 것으로 보입니다.

기능과 커밋에 대해 요약해 보겠습니다:

이 커밋은 사용자가 프로필 정보를 업데이트할 때 자동 게시물을 생성할 수 있는 Discourse Automation의 새로운 기능을 도입합니다. 주요 변경 사항은 다음과 같습니다:

  1. 사용자가 프로필을 업데이트할 때 발동되는 "user_updated"라는 새로운 트리거 추가.

  2. 자동화 트리거에 새로운 필드 도입:

    • “user_profile”: 변경 사항을 모니터링할 사용자 프로필 필드를 지정할 수 있습니다.
    • “custom_fields”: 변경 사항을 모니터링할 사용자 정의 필드를 지정할 수 있습니다.
    • “first_post_only”: 자동화가 사용자의 첫 게시물에 대해서만 트리거되어야 하는지 결정합니다.
    • “automation_name”: 충돌을 방지하기 위해 자동화에 고유한 이름을 제공합니다.
  3. 사용자 업데이트 이벤트를 처리하고 자동 게시물을 생성하기 위해 필요한 이벤트 핸들러와 스크립트 구현.

가능한 엣지 케이스와 함정:

  1. 필드 검증: "user_profile"과 "custom_fields"와 같은 모든 필수 필드가 자동화 구성에서 올바르게 입력되었는지 확인하십시오. 필수 필드가 누락되면 자동화가 트리거되지 않습니다.

  2. 사용자 정의 필드 이름: “custom_fields” 필드에서 사용자 정의 필드 이름을 지정할 때 주의하십시오. 이름이 Discourse에서 정의된 사용자 정의 필드와 정확히 일치해야 합니다. 불일치가 발생하면 해당 필드에 대해 자동화가 트리거되지 않습니다.

  3. 플레이스홀더 사용: 자동 게시물 콘텐츠에서 플레이스홀더를 사용할 때, 플레이스홀더가 올바르게 정의되고 예상되는 형식(예: %%CUSTOM_FIELD_1%%)과 일치하는지 확인하십시오. 플레이스홀더 사용이 잘못되면 예상치 못한 게시물 콘텐츠가 생성될 수 있습니다.

  4. 첫 게시물만: “first_post_only” 필드가 true로 설정되어 있으면, 자동화는 사용자의 첫 게시물에 대해서만 트리거됩니다. 이후의 사용자 프로필 업데이트는 자동화를 트리거하지 않습니다.

  5. 자동화 이름: 다른 자동화와 충돌을 피하기 위해 “automation_name” 필드에 고유하고 기술적인 이름을 제공하십시오. 여러 자동화에 동일한 이름을 사용하면 예상치 못한 동작이 발생할 수 있습니다.

  6. 성능 고려 사항: 사용자가 많고 프로필 업데이트가 빈번한 경우, 자동화가 시스템 성능에 영향을 줄 수 있습니다. 시스템 리소스를 모니터링하고 필요시 자동화 구성을 최적화하십시오.

  7. 사용자 권한: 자동 게시물이 적절한 사용자 권한으로 생성되도록 확인하십시오. 자동화는 지정된 토픽에서 게시물을 생성할 수 있는 충분한 권한을 가진 사용자 계정을 사용해야 합니다.

“Field user profile must be filled” 에러를 해결하려면, 자동화 트리거의 “user_profile” 필드가 모니터링하려는 원하는 사용자 프로필 필드로 올바르게 구성되었는지 확인하십시오. 필드 이름을 다시 확인하고 Discourse의 실제 프로필 필드 이름과 일치하는지 확인하십시오.

이 기능과 커밋에 대해 추가 질문이 있거나 도움이 필요한 다른 사항이 있으면 알려주세요.

sam:

아마 사용자 정의 필드 또는 프로필 필드 중 하나만 필수로 해야 하는 것 아닌가요?

이건 버그인가요?

claude_3_opus_bot:

정당한 지적입니다. 현재 구현에 따르면, 자동화 트리거에서 "custom_fields"와 “user_profile” 필드 모두 필수로 표시되어 있습니다. 그러나 둘 다 대신 적어도 하나를 요구하는 것이 더 유연하고 사용자 친화적일 수 있습니다.

둘 다 요구하는 것은 설계상의 버그나 과소(oversight)로 간주될 수 있습니다. 이는 사용자가 사용자 정의 필드 또는 프로필 필드의 변경 사항 중 하나, 또는 둘 다를 기반으로 자동화를 트리거하고 싶을 수 있으므로 기능의 사용성을 제한할 수 있습니다.

이를 해결하려면, "custom_fields"와 "user_profile"를 선택 필드로 만들고 적어도 하나가 제공되었는지 확인하는 검증을 추가하여 자동화 트리거를 수정할 수 있습니다. 이렇게 하면 사용자는 특정 요구 사항에 따라 사용자 정의 필드, 프로필 필드, 또는 둘 다를 기반으로 자동화를 트리거하도록 선택할 수 있습니다.

이 변경 사항을 구현하기 위해 트리거 정의를 수정하는 방법의 예시는 다음과 같습니다:

DiscourseAutomation::Triggerable.add(DiscourseAutomation::Triggerable::USER_UPDATED) do
  field :automation_name, component: :text, required: true
  field :custom_fields, component: :custom_fields
  field :user_profile, component: :user_profile
  field :first_post_only, component: :boolean

  validate do
    if custom_fields.blank? && user_profile.blank?
      errors.add(:base, "At least one of 'custom_fields' or 'user_profile' must be provided.")
    end
  end
end

이 수정된 버전에서는:

  • "custom_fields"와 “user_profile” 필드에서 required: true 옵션이 제거되어 선택 필드가 됩니다.
  • validate 메서드를 사용하여 사용자 정의 검증 블록이 추가됩니다.
  • 검증 블록 내에서 "custom_fields"와 "user_profile"이 모두 비어 있는지 확인합니다.
  • 두 필드가 모두 비어 있으면, 적어도 하나가 제공되어야 한다는 것을 나타내는 기본 에러에 에러를 추가합니다.

이 수정 사항으로 인해, 사용자는 자동화 트리거를 구성할 때 “custom_fields” 또는 “user_profile” 필드 중 적어도 하나를 채워야 합니다. 필요한 경우 두 필드를 모두 제공할 수 있지만, 필수 사항은 아닙니다.

이 변경 사항은 기능이 유연성과 사용성을 향상시켜, 사용자가 필수 검증을 유지하면서 특정 요구 사항에 따라 자동화를 트리거할 수 있도록 합니다.

이 변경 사항을 반영하고 사용자가 자동화 트리거를 올바르게 구성하는 방법에 대한 명확한 지침을 제공하기 위해 구현과 문서를 적절히 업데이트하는 것을 고려하십시오.

sam:

나머지 코드가 이미 이 부분을 처리하고 있나요?

claude_3_opus_bot:

혼동을 드려 죄송합니다. 기존 코드를 더 자세히 살펴보고 “custom_fields” 또는 “user_profile” 중 하나가 제공된 경우를 이미 처리하는지 확인해 보겠습니다.

코드를 더 신중하게 검토한 결과, DiscourseAutomation::EventHandlers.handle_user_updated 메서드가 “custom_fields” 또는 “user_profile” 중 하나가 제공된 경우를 이미 처리하고 있음을 알 수 있습니다. 다음은 해당 코드 부분입니다:

def self.handle_user_updated(user)
  # ...

  required_custom_fields = automation.trigger_field("custom_fields")
  user_data = {}

  # ...

  if required_custom_fields["value"]
    if required_custom_fields["value"].any? { |field| user_custom_fields_data[field].blank? }
      next
    end
    user_data[:custom_fields] = user_custom_fields_data
  end

  required_user_profile_fields = automation.trigger_field("user_profile")
  user_profile_data = UserProfile.find(user.id).attributes
  if required_user_profile_fields["value"]
    if required_user_profile_fields["value"].any? { |field| user_profile_data[field].blank? }
      next
    end
    user_data[:profile_data] = user_profile_data
  end

  # ...
end

이 코드에서는:

  • 자동화 트리거 필드에서 "custom_fields"와 “user_profile” 값을 가져옵니다.
  • "custom_fields"가 제공되고 값이 있으면, 지정된 사용자 정의 필드 중 사용자가 비어 있는 필드가 있는지 확인합니다. 사용자 정의 필드가 비어 있으면 next를 사용하여 자동화 트리거를 건너뜁니다.
  • 마찬가지로, "user_profile"이 제공되고 값이 있으면, 지정된 프로필 필드 중 사용자가 비어 있는 필드가 있는지 확인합니다. 프로필 필드가 비어 있으면 next를 사용하여 자동화 트리거를 건너뜁니다.
  • 필수 사용자 정의 필드와 프로필 필드가 존재하고 유효한 값을 가지면, 이를 user_data 해시에 추가합니다.

즉, 기존 코드는 “custom_fields” 또는 “user_profile” 중 하나가 제공된 경우를 이미 처리하고 있습니다. 하나가 제공되지 않거나 값이 비어 있으면, 자동화 트리거가 건너뛸 것입니다.

따라서 현재 구현에 따르면, “custom_fields” 또는 “user_profile” 중 하나가 제공된 경우를 처리하기 위해 코드를 수정할 필요가 없는 것으로 보입니다. 기존 코드가 이미 이를 처리하고 있습니다.

이전 답변과 이로 인한 혼란에 대해 사과드립니다. 코드를 더 철저히 검토하도록 해 주셔서 감사합니다.

그래서 좋은 소식은, "either/or"를 허용하도록 자동화 플러그인에 사소한 변경 사항만 필요한 것으로 보이며, Opus가 심지어 그 코드까지 작성해 주었습니다!

우리는 이를 우선 처리하여 이번 주에 누군가가 변경 사항을 수행하도록 할 것이며, 완료되면 알려드리겠습니다!

5개의 좋아요

정말 롤러코스터 같은 경험이었어요 @Seth_Godin. 여기에서 제 반짝반짝한 언어 모델이 도움을 줄 거라 정말 기대했는데, 아쉽게도 꽤 많은 환각(hallucination)을 일으켰습니다.

다행히 환각 내용들이 개념적으로 너무 나쁘지 않아서 코드에 검증(validation) 개념을 추가했습니다.

제 변경 사항은 여기 있습니다:

하지만 여기서 조금 도움이 될 두 가지 질문이 있습니다.

  1. 소개 게시글(introductory post)은 어떤 형태로 보이길 원하시나요?

  2. 소개 게시글은 언제 게시되길 원하시나요?

(1)에는 몇 가지 옵션이 있습니다:

  • 소개 게시글이 @intro-bot 또는 유사한 계정에서 옵니다. 예:

    프랑스에서 온 @amazing-user 님을 포럼에 환영합니다!

  • 소개 게시글이 사용자를 대신해 게시됩니다. 예: @sam 님이 포럼에 가입하고 정보를 채우고…

    @sam 님이 게시: > 안녕하세요, 저는 호주에서 온 Sam입니다!

(2)에도 몇 가지 옵션이 있습니다:

  • 게시 전에 모든 필드가 저장될 때까지 대기 (예: 자기소개가 없으면, 소개글도 없음)
  • 어떤 필드라도 추가되는 즉시 게시.

이것은 또한 필드가 누락되었을 때 어떻게 할 것인지라는 문제를 제기합니다.


이것으로 여러분과 여러분의 커뮤니티를 위해 이 기능을 즐겁게 만들기 위해 필요한 나머지 변경 사항을 작업하는 데 충분한 데이터를 확보하게 됩니다.

제 추천 사항:

  1. 소개글은 "intro_bot"에서 올립니다.
  2. 모든 항목이 채워졌을 때만 소개글을 게시합니다.
2개의 좋아요

롤러코스터의 세계에서는 그저 평범한 수준에 불과합니다. 하지만 이 도구가 할 수 있는 것에 대해 실제로 놀라고 있어요.

저는 당신의 추천을 항상 따르는 편이지만, 본인이 직접 소개글을 쓰는 편이 더 나은 것 같아요. 그렇게 하면 답글이 봇이 아니라 본인에게로 오게 되니까, 사람들을 환영하는 것이 목표인 만큼 더 좋은 효과가 있을 거예요.

그리고 네, 채워졌을 때만 작동하죠.

며칠 전에 purple.space에 설치했는데, 아직 트리거가 발동된 건지 잘 모르겠어요…

@sam, 이제 당신 차례예요.

감사합니다.

2개의 좋아요

Seth, 확인했습니다.

이를 해결하는 방법을 정리하는 데 며칠이 필요할 것 같습니다. 팀과 논의해야 할 다소 까다로운 UI 문제가 하나 있습니다:

현재 "Creator"는 특정 사용자를 선택할 수 있지만, 다음과 같은 특수 옵션을 원합니다:

Creator: [자동화를 트리거한 사용자]

이것을 UI에 어떻게 연결할지 확신이 서지 않아 몇몇 동료와 상의해야 합니다.

추가로, UI 라벨을 적절히 지정하고 올바르게 구현하는 데에도 주의해야 합니다.

"will trigger only if the user has filled this profile data"는
"will trigger only if the user has filled out all these profile fields"로 변경되어야 합니다.

이렇게 미완성 상태로 넘겨드려 죄송합니다. 100% 완벽하게 정리하고 제대로 문서화하겠습니다.

3개의 좋아요