감사합니다, 그 방법으로 해결되었습니다!
@gilles 위에서 언급한 후속 작업을 구현했습니다:
이것은 다음과 같은 일반적인 이벤트 → 출석 설정 작업을 추가합니다:
- 참석자(attendee)
- 출석 상태: Going / Interested / Not going / 출석 제거(Remove attendance)
- 토픽 ID
- 선택적 행위자(optional actor)
따라서 원래 사용 사례는 다음과 같이 구성할 수 있습니다:
게시물 생성 → 첫 번째 게시물인 경우 → 이벤트 / 출석 설정
이벤트 작성자를 참석자로 지정하고 상태를 Going으로 설정하는 방식입니다.
Workflows GUI에서 #42932 위에 쌓아 올려 해당 패턴을 로컬에서 테스트해 보았고, 사용자가 이벤트에 자동으로 Going 상태로 등록되는 것을 확인했습니다.
PR은 현재 초안 상태이며 #42932에 의존하기 때문입니다. #42932가 병합되면 main으로 리베이스하여 출석 관련 차이만 남도록 하겠습니다.
@Ethsim2 감사합니다, 정말 최고예요
![]()
웹훅에서 페이로드를 다시 전송할 수 있는 것처럼, 동일한 이벤트로 워크플로를 다시 실행하는 방법이 있을까요?
아니요, 죄송하지만 현재 이 기능을 지원하지 않습니다.
새로운 태그가 생성될 때 발동되는 트리거/이벤트가 있나요?
사용자가 새 태그를 생성할 때, 해당 태그를 자동으로 특정 태그 그룹에 추가할 수 있는 방법이 있을까요? 그렇지 않다면 권장되는 접근 방식은 무엇인가요?
아니요, 저희에게는 그런 것이 없습니다. 사용 사례를 좀 더 자세히 설명해 주시겠어요?
다음과 같이 처리해 주시겠어요:
- 모든 새 주제를 확인합니다
- 태그가 기존 태그와 일치하는지 확인합니다
- 새 태그인 경우
<insert action>
“Topic Tag Changed”(토픽 태그 변경)가 있습니다. 이후 Discourse API를 호출하여 해당 태그가 몇 번 사용되었는지 확인할 수 있습니다. 사용 횟수가 1회이거나 특정 토픽에만 사용되고 있다면, 해당 태그가 새로 생성된 것입니다.
또는 더 쉬운 방법으로, “tag is created”(태그 생성) 웹훅을 설정하여 워크플로우 웹훅 트리거를 가리키도록 할 수도 있습니다.
사용 사례: “artist” 태그 그룹이 있습니다. 새 아티스트가 항상 데뷔하므로, 사용자가 태그를 생성할 때마다 새로운 아티스트 태그가 계속 나타납니다. 새 태그가 수동으로 추가하는 대신 “artist” 태그 그룹에 자동으로 추가되도록 하고 싶습니다. Workflows를 사용하여 이 결과를 얻을 수 있는 좋은 방법이 있을까요?
그것이 아티스트 태그인지, 아니면 다른 랜덤 태그인지 어떻게 아시나요?
바로 이 부분이 AI 단계에서 처리됩니다. AI 에이전트는 먼저 새로운 태그가 정의된 그룹(아티스트 / 멤버 / 지역 / 이벤트 유형 / 릴리스 유형) 중 어디에 속하는지 판단합니다. 어떤 그룹에도 해당하지 않으면 태그는 건너뛰어지며 어떤 그룹에도 분류되지 않습니다. 따라서 무작위 태그는 필터링되고, 올바르게 분류된 태그만 태그 그룹에 자동 추가됩니다.
네, 태그가 생성될 때 트리거를 추가하고, 태그를 태그 그룹에 추가하는 노드를 만들겠습니다.
워크플로우에 다음 항목을 추가했습니다:
특정 텍스트로 생성된 주제에 태그를 붙이고 싶습니다. {{ $JSON.topic.title }}을 소문자로 변환해서 “pub run”, “Pub Run”, “pUb rUn” 모두에서 true가 되도록 할 수 있는 방법이 있을까요?
(발췌)
{
"id": "db9e2fa2-0008-4110-9c77-f1060124d7e7",
"type": "condition:if",
"typeVersion": "1.0",
"name": "If",
"parameters": {
"combinator": "and",
"conditions": [
{
"id": "29d3ed6c-e984-4d9b-83bf-861bd11b4b0a",
"operator": {
"type": "string",
"operation": "contains",
"singleValue": false
},
"leftValue": "={{ $json.topic.title }}",
"rightValue": "pub run"
}
]
},
{{ $JSON.topic.title.toLowerCase() }}을 시도해 보셨나요?
감사합니다 – 작동했습니다!
어떤 템플릿 언어를 사용하나요?
Discourse Workflows 자체의 JavaScript 표현식 시스템으로 보입니다. Liquid나 Handlebars와 같은 별도의 템플릿 언어가 아니라, 서버 측 샌드박스에서 평가됩니다.
예를 들어:
={{ $json.topic.title.toLowerCase() }}
는 {{ ... }} 내부의 내용이 JavaScript로 평가되고, toLowerCase()가 일반적인 JavaScript 문자열 메서드이기 때문에 동작합니다.
구현은 plugins/discourse-workflows/lib/discourse_workflows/expression_resolver.rb에 있으며, $json, $input, $itemIndex, $trigger, $execution, $()와 같은 워크플로우 전용 전역 변수를 노출합니다.
구문과 개념은 n8n과 매우 유사합니다. 실제로 Workflows 소스의 다른 곳에서 n8n에 대한 명시적인 참조가 있습니다:
아래의 oneboxed 커밋은 merge-node의 combine 동작을 추가했으며, 다음과 같이 설명된 테스트를 포함합니다:
defaults clash handling to add_suffix (matches n8n position combine)
따라서 Workflows의 일부가 n8n의 동작을 의도적으로 따르고 있다는 증거는 있지만, 표현식 언어 자체가 n8n에서 복사되었거나 n8n을 기반으로 한다는 명시적인 내용은 찾지 못했습니다. 따라서 이를 Discourse Workflows가 제공하는 샌드박스된 JavaScript 표현식으로, 일부 n8n과 유사한 관례를 따르고 있다고 설명하겠습니다.
폼에 그룹 기반 접근 권한이 있으면 정말 좋을 것 같아요 ![]()
AI Agent 단계에서 Bot이 활성화되어 있어야 한다는 것을 알게 되었습니다. 왜 이렇게 해야 하는 걸까요? 어딘가에 이 내용이 문서화되어 있을까요? 드롭다운에서 특정 에이전트를 선택할 수 없는 이유를 알아내기 위해 몇 분을 헤맸습니다 ![]()