自定义自动化——用于在Automation插件上成功集成的修改流程

大家好,

我正在尝试创建一个自定义自动化,当一个查询被标记为解决方案/已解决时,主题的创建者将收到一条私信(或者,在主题中创建一个带有预定义消息的新回复 - 在这两种情况下,它都会是一个投票)。

这需要是一个自定义自动化,因为当前可用的“发送私信”脚本在自动化插件中会将私信发送给标记为解决方案/已解决的回复的发送者(而不是主题的创建者,正如我的用例中所期望的那样)。

下面是我创建的脚本,用于在标记了解决方案的回复后,尝试在主题中发布新回复(在下面的示例中,我没有将投票作为回复发送,只是让管理员自由选择要返回的内容或保持默认值):

# 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")
  
      # 在标记了解决方案的主题中发布回复
      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内部服务器错误”消息的弹出窗口。

  • 我是不是遗漏了什么?我的部署是使用 devcontainers 完成的,在我本地机器上进行开发测试。
  • 在创建自定义脚本后需要做什么?也许我遗漏了这个阶段的什么东西?或者脚本本身有问题?
  • 是否有任何地方记录了脚本完成后要遵循的步骤?例如:需要修改哪些文件才能让一切顺利工作?(我费了很大力才发现需要更改 client.en.yml 以便在自动化列表中显示正确的名称和描述)

我计划尝试根据内置的 send pms 脚本,修改我的脚本,使其发送私信而不是创建回复,但我不确定以下几点:

  • 我将如何标记创建主题的人,而不是标记那个将回复标记为解决方案的人?

非常感谢您提前提供的任何提示和帮助。

您是否遵循了本指南?

1 个赞

您好 @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’

1 个赞

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.