Esta página tem como objetivo exemplificar o funcionamento de um robô simples para envio de e-mail customizado, com dados de processos, disponibilizado no marketplace. Para isso, utilizaremos a biblioteca RotasOpenAPI, disponibilizada pelo time de Operações da Lecom.
Arquivo de Configurações (application.properties
)
Na pasta resources
, encontra-se o arquivo application.properties
. Nele, devem ser configurados os seguintes dados:
Domínio da plataforma,
API Key do usuário, e
Informações do processo a ser consultado.
Dados do e-mail:
Assunto do e-mail.
E-mail de origem e destinatário.
Parâmetro “true“ ou “false”, definindo se será e-mail com formatação HTML (utilizar true para exemplo do template).
Mensagem utilizado no exemplo do template a ser adicionado ao corpo do e-mail.
Exemplo de configuração:
DOMAIN=<DOMINIO DA PLATAFORMA> API_KEY=<CHAVE OPEN API DO USUAIRO> CODIGO_PROCESSO=<CODIGO DO PROCESSO> VERSAO_PROCESSO=<VERSAO DO PROCESSO> NOME_ATIVIDADE=<NOME DA ATIVIDADE PARA CONSULTA> ASSUNTO=<ASSUNTO PARA PREENCHIMENTO NO EMAIL> DESTINATARIO=<EMAIL DE DESTINO> ORIGEM=<EMAIL DE ORIGEM> EMAIL_HTML=<DEFINE SE EMAIL SERA FORMATADO EM HTML (true/false). TRUE PARA EXEMPLO DESTE TEMPLATE> MENSAGEM_PADRAO=<MENSAGEM A SER ADICIONADO AO INICIO DO EMAIL POR PADRAO>
RotasOpenAPIConfig
A classe RotasOpenAPIConfig
deve ser configurada com os valores definidos no arquivo application.properties
. Isso permite a autenticação com o OpenAPI em todas as requisições realizadas.
Exemplo:
RotasOpenAPIConfig.setDomain(config.getDomain()); RotasOpenAPIConfig.setCredentials(config.getApiKey());
RotasOpenAPI
Utilizamos a classe RotasOpenApi
para consultar os processos pendentes associados ao usuário atual em uma etapa específica.
// Busca processos pendentes para envio de email ResponseOpenApi<List<ProcessosPendentesUser>> processosPendentes = RotasOpenApi .processo() .buscarProcessosPendentes() .porCodigoProcesso(Integer.valueOf(config.getCodigoProcesso())) .porVersaoProcesso(Integer.valueOf(config.getVersaoProcesso())) .porNomeAtividade(config.getNomeAtividade()) .executar();
Iteramos sobre os resultados obtidos e, para cada processo, recuperamos os dados do processo. Esses dados incluem informações como o nome do modelo do processo:
private ResponseOpenApi<RetornoDadosInstancia> recuperaDadosProcesso(Integer codigoInstanciaProcesso){ return RotasOpenApi .processo() .retornaDadosAtividadesInstancia() .setCodigoInstancia(codigoInstanciaProcesso) .executar(); }
Além disso, também extraímos os dados específicos da atividade, permitindo o acesso aos valores dos campos da etapa atual:
private ResponseOpenApi<RetornoProcessoAtividade> recuperaDadosAtividade(ProcessosPendentesUser processo){ return RotasOpenApi .processo() .buscarDadosAtividade() .setCodigoInstancia(processo.getProcessInstanceId()) .setCodigoAtividade(processo.getActivityInstanceId()) .setCodigoCiclo(processo.getCycle()) .executar(); }
Na classe EmailUtil
, substituímos os valores pré-definidos no template de e-mail localizado na pasta resources
do projeto pelos dados obtidos do processo e da atividade:
public String criaConteudoEmail(String titulo, ProcessosPendentesUser processo, ResponseOpenApi<RetornoProcessoAtividade> dadosAtividade, String mensagemPadrao) throws IOException { InputStream inputStream = getClass().getClassLoader().getResourceAsStream("email_template.html"); if (inputStream == null) { throw new IOException("Template de e-mail não encontrado."); } String templateEmail = new BufferedReader(new InputStreamReader(inputStream)).lines().collect(Collectors.joining("\n")); String atividadeDetalhes = dadosAtividade.getContent().getContent().stream() .map(campoAtividade -> String.format("<p><strong>%s</strong>: %s</p>", campoAtividade.getField(), campoAtividade.getValue())) .reduce("", String::concat); return templateEmail .replace("{{titulo}}", titulo) .replace("{{mensagemPadrao}}", mensagemPadrao) .replace("{{instancia}}", String.valueOf(processo.getProcessInstanceId())) .replace("{{atividadeDetalhes}}", atividadeDetalhes); }
Finalmente, realizamos o envio do e-mail utilizando a classe WFMail
:
public void enviaEmail(TemplateConfig config, String mensagem){ try { EmailMessage emailMessage = new EmailMessage( config.getAssunto(), mensagem, config.getOrigem(), config.getDestinatario(), config.getEmailHtml() ); WFMAIL.enviaEmailMessage(emailMessage); } catch (EmailMessageException e) { LOGGER.error("Erro ao enviar o e-mail", e); } }
Conclusão
Este exemplo demonstrou o funcionamento do template disponibilizado pelo Marketplace para a automação do envio de e-mail customizado com dados de processos. É importante ressaltar que este é um modelo básico. Após a inclusão deste template na sua plataforma, ele deve ser ajustado conforme as necessidades do seu cenário específico.
Adicionar Comentário