Automação personalizada - fluxo de modificações para integração bem-sucedida no plugin Automation

Olá a todos,

Estou tentando criar uma automação personalizada que, quando uma consulta for marcada como solução/resolvida, o criador do tópico receberá uma mensagem privada (ou, alternativamente, uma nova resposta será criada na thread com uma mensagem predefinida - em ambos os casos, seria uma enquete).

Precisa ser uma automação personalizada, pois o script “enviar mensagens privadas” disponível no plugin de automação envia as mensagens privadas para quem quer que tenha enviado a resposta marcada como solução/resolvida (e não para a pessoa que criou o tópico, como pretendido no meu caso).

Abaixo está o script que criei para tentar postar uma nova resposta no tópico assim que uma resposta for marcada como solução (na amostra a seguir, não estou enviando a enquete como resposta, apenas dando a liberdade para o administrador escolher o que será retornado ou deixá-lo como padrão):

# 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 || "Uma solução foi marcada para este tópico!",
      )
    end
  end

Mas não tenho certeza se deveria ser PostCreator.create!, PostCreator.reply, ou talvez algo mais. O que me leva a uma pergunta:

  • Existe algum lugar documentado as palavras-chave a serem usadas durante a criação de um script de automação personalizado?

Com base na automação acima, assim que eu a aciono marcando uma resposta como solução, após 1 segundo recebo uma mensagem pop-up com uma mensagem de erro interno do servidor 500 na tela.

  • Estou perdendo alguma coisa? Minha implantação foi feita usando devcontainers, na minha máquina local para fins de teste de desenvolvimento.
  • O que é necessário fazer, após a criação do script personalizado? Talvez eu esteja perdendo algo nesta fase? Ou talvez seja um problema no próprio script?
  • Existe algum lugar documentado os passos a serem seguidos após a conclusão do seu script? Por exemplo: quais arquivos precisam ser modificados para que tudo funcione perfeitamente? (Descobri da maneira difícil que precisei alterar o client.en.yml para que o nome e a descrição corretos aparecessem na lista de automação)

Estou planejando dar uma tentativa, com base no script integrado enviar mensagens privadas, para alterar meu script para, em vez de criar uma resposta, enviar mensagens privadas, mas não tenho certeza sobre o seguinte:

  • como eu marcaria a pessoa que criou o tópico e não a que teve a resposta marcada como solução?

Muito obrigado desde já por quaisquer dicas e ajuda.

Você seguiu este guia?

1 curtida

Olá @NateDhaliwal,

Muito obrigado pela sua resposta.

Sim, segui esse guia… Comentarei o guia com algumas sugestões depois.

Consegui fazer a automação personalizada funcionar.

O problema com o erro interno do servidor 500 foi que eu estava marcando o “contexto” errado, descobri isso olhando os logs e marcando o correto.

Assim que o conteúdo do contexto certo foi adicionado a uma variável, o erro interno do servidor 500 foi resolvido.

A lógica adicional no código também foi modificada.

Editar: Para fazer a automação personalizada funcionar na minha instância local implantada, também tive que modificar os seguintes arquivos:

Crie seu script de automação personalizado

Atualização: server.en.yml

adicione o nome da automação personalizada; título; e descrição na seção scriptables do arquivo yml.

Atualização: client.en.yml

adicione o nome da automação personalizada em scriptables; adicione a palavra-chave ‘field’; dentro da palavra-chave field adicione ‘field_name’ seguido por ‘label’ e ‘description’

Atualização: scripts.rb

adicione o nome da automação personalizada na lista de scripts. Exemplo: FILE_NAME = “file_name”

Atualização: plugin.rb

dentro de ‘after_initialize do’, adicione o caminho para o script de automação personalizado. Exemplo: ‘lib/discourse_automation/scripts/file_name’

1 curtida

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