Tratamento de erro no Power Automate: avise antes do usuário

Em resumo
- O padrão tem três escopos: Tentar guarda as ações do processo, Capturar roda só depois de falha ou tempo esgotado e avisa o dono, e Finalizar decide o status final da execução.
- O aviso leva o nome da ação que falhou, a mensagem de erro e o link direto da execução, montado dentro do próprio fluxo com a função
workflow(). - A variável de controle precisa ser inicializada no nível raiz, antes dos escopos, porque o Power Automate não deixa inicializar variável dentro de escopo.
- Um fluxo que trata o erro e termina com sucesso esconde a falha do histórico, então o Finalizar encerra com a ação Terminar em status Falhou.
- Depois de validado em um fluxo, o Capturar vira um fluxo filho reutilizável, e os demais fluxos que a TI sustenta só chamam esse filho.
Como fazer o tratamento de erro no Power Automate para saber da falha antes do usuário?
Envolva as ações do processo num escopo chamado Tentar, crie um segundo escopo, o Capturar, que só roda quando o primeiro falha ou estoura o tempo, e use o Capturar para avisar o dono do processo com o link da execução, deixando o status final para um terceiro escopo, o Finalizar. Tudo se monta no designer de fluxos de nuvem com ações nativas, serve para qualquer fluxo que a TI herdou de outra área e passa a ser necessário no dia em que a falha só aparece porque alguém ligou.
Pense no fluxo de cadastro de associado de uma cooperativa de crédito: a agência preenche o formulário, o fluxo grava o item numa lista do SharePoint e dispara as etapas seguintes, e tudo funciona até alguém da área de cadastro renomear ou recriar uma coluna da lista. Renomear só o título de exibição costuma preservar o nome interno, mas recriar a coluna muda esse nome, e o fluxo passa a apontar para um campo que não existe mais. A execução falha no meio da tarde, ninguém abre o histórico, e a TI descobre quando o gerente da agência liga perguntando por que o associado novo não aparece no sistema, com a fila de atendimento já formada.
O desenho segue o padrão try, catch, finally das linguagens de programação, que a página de diretrizes de tratamento de erro do Microsoft Learn trata com escopos e a configuração de executar após. O que este texto acrescenta é a versão de quem sustenta fluxo alheio: escopo no lugar da ação única, variável inicializada no lugar certo, status final decidido de propósito e um Capturar que sobe para um fluxo filho. Tudo o que aparece aqui está em disponibilidade geral, sem recurso em preview.
Pré-requisitos
Antes de abrir o designer, confira os itens abaixo, porque o passo 8 (fluxo filho) é o único que muda de exigência em relação ao fluxo simples, e é melhor descobrir isso agora do que no meio da montagem, quando o ambiente já estiver aberto e o fluxo pela metade.
- Fluxo de nuvem existente, no qual você seja proprietário ou coproprietário, para poder editar. O Capturar é montado dentro do fluxo que já roda.
- Licença: escopo, Compor, Filtrar matriz, variáveis e Terminar são ações nativas, e SharePoint e Office 365 Outlook são conectores padrão. Para o fluxo filho, confira o FAQ de licenciamento do Power Platform para o ambiente onde a solução vai viver.
- Solução: fluxo filho só funciona com fluxos dentro de solução, e a página de fluxos filho do Microsoft Learn lista as exigências de gatilho, ação de resposta e conexão.
- Conexão de envio do aviso que não dependa da mesma conta que o fluxo usa para o SharePoint, de preferência uma caixa compartilhada ou conta de serviço da TI, por um motivo que aparece na seção de erros.
- E-mail do dono do processo, que é quem vai receber o aviso. Quem aprova o fluxo na área de negócio costuma ser outra pessoa, e o aviso precisa chegar a quem consegue agir.
Os nomes de menu abaixo seguem a interface em português do designer atual, em que o painel de configuração da ação abre à direita, então quem estiver no designer clássico ou em outro idioma pode encontrar o rótulo um pouco diferente. Mesmo assim, a lógica de cada passo é a mesma, e por isso basta procurar a opção equivalente no seu ambiente.
Passo a passo
A sequência tem oito passos, e os sete primeiros bastam para o padrão funcionar num fluxo isolado, porque tudo o que ele precisa está dentro do próprio fluxo. O oitavo transforma o Capturar em peça reutilizável, e é ele que faz o padrão valer para todos os fluxos que a TI sustenta, já que o aviso passa a ficar num lugar só.

A variável fica fora dos escopos e o Finalizar roda nos quatro estados do Capturar, senão a execução termina sem decidir o status.
1. Inicialize a variável de controle fora de qualquer escopo
No topo do fluxo, logo abaixo do gatilho, adicione Variável > Inicializar variável, com nome varFalhou, tipo Booliano e valor false. Adicione também duas ações Compor, uma chamada "Nome do processo", com o texto do processo (por exemplo, Cadastro de associado), e outra chamada "Dono do processo", com o e-mail de quem recebe o aviso. Em fluxo dentro de solução, vale trocar esse e-mail por uma variável de ambiente, para mudar o destinatário sem editar o fluxo.
A posição importa porque o Power Automate não permite inicializar variável dentro de um escopo, e a documentação de variáveis trata a inicialização como ação de nível raiz. Muita cópia do padrão que circula por aí inicializa a variável dentro do Capturar, e o resultado é um fluxo que sempre avisa falha, porque a variável é criada já verdadeira. Aqui ela nasce falsa, antes de tudo, e só o Capturar muda o valor.
2. Crie o escopo Tentar e mova as ações do processo para dentro
Clique no + abaixo das ações de preparação, escolha Controle > Escopo e renomeie para Tentar, para que o escopo reúna tudo o que pode falhar no cadastro. Arraste para dentro dele todas as ações do cadastro: criar o item na lista do SharePoint, atualizar o status, notificar a agência, o que houver, e deixe de fora o gatilho e as ações do passo 1, que precisam continuar no nível raiz.
O motivo de usar escopo em vez de olhar ação por ação é que o escopo termina com falha se qualquer ação interna falhar, o que dá ao Capturar um único ponto para observar, como a página de diretrizes do Microsoft Learn descreve. Quando o fluxo cresce e ganha ação nova dentro do Tentar, a proteção cresce junto, sem mexer em configuração nenhuma.
3. Crie o escopo Capturar e configure o executar após
Adicione outro escopo abaixo do Tentar, renomeie para Capturar, selecione-o e abra a aba Configurações no painel da direita. Na seção Executar após, expanda Tentar e deixe marcados apenas falhou e tempo esgotado, desmarcando foi bem-sucedido e foi ignorado, e lembre que a configuração vai no escopo e não nas ações de dentro dele.
Ignore as capturas de tela de tutoriais antigos, porque no designer clássico o caminho era os três pontos da ação e Configurar executar após, e o lugar mudou no designer novo. O tempo esgotado precisa estar marcado porque ação que expira, como uma aprovação sem resposta ou uma chamada HTTP que demora, termina nesse status e não em falha, e sem essa marca o Capturar fica parado enquanto o processo trava. Se sobrar foi bem-sucedido marcado, o aviso sai em toda execução, e o dono do processo aprende a ignorar o e-mail.
4. Dentro do Capturar, monte o endereço da execução
Dentro do Capturar, adicione uma ação Compor chamada "URL da execução", abra a aba Expressão do campo e cole o trecho abaixo, que usa a função workflow(), descrita na referência de funções da linguagem de definição de fluxo. Com ela, o aviso leva quem o recebe direto à execução que falhou, sem que ninguém precise procurar no histórico.
concat(
'https://make.powerautomate.com/environments/',
workflow()?['tags']?['environmentName'],
'/flows/',
workflow()?['name'],
'/runs/',
workflow()?['run']?['name']
)A função devolve os dados do próprio fluxo em execução, e o texto monta o endereço com três pedaços: o identificador do ambiente, o do fluxo e o da execução. O formato é o mesmo que Devaney usa e que um leitor dele propôs com o prefixo do ambiente, e eu o testei apenas como padrão de campo, então valide no seu tenant antes de replicar. Em fluxo dentro de solução, se o link abrir uma página de fluxo não encontrado, troque workflow()?['name'] por workflow()?['tags']?['xrmWorkflowId'] e teste de novo.
5. Descubra qual ação falhou e por quê
Ainda no Capturar, adicione Operações de dados > Filtrar matriz, chamada "Filtrar falhas", e no campo De use a expressão result('Tentar'), que devolve o resultado de cada ação de primeiro nível do escopo. Depois alterne a condição para o modo avançado e use este filtro:
@or(
equals(item()?['status'], 'Failed'),
equals(item()?['status'], 'TimedOut')
)Em seguida, crie duas ações Compor, "Ação com falha" e "Mensagem de erro", com as expressões abaixo, porque assim o aviso diz o que quebrou e por quê. O coalesce evita que o aviso saia vazio quando a plataforma não devolve mensagem, o que acontece com tempo esgotado.
coalesce(first(body('Filtrar_falhas'))?['name'], 'Não identificada')
coalesce(first(body('Filtrar_falhas'))?['error']?['message'], 'A plataforma não devolveu mensagem de erro para esta ação.')A pegadinha está nas ações compostas: quando o erro acontece dentro de uma condição ou de um aplicar a cada, o resultado de primeiro nível mostra a condição ou o laço como ação com falha, com a mensagem genérica "An action failed. No dependent actions succeeded.", e não a ação interna que de fato quebrou. O aviso ainda diz em qual bloco olhar, e o link da execução leva direto ao detalhe da iteração, mas se o bloco é grande vale dar nome claro a ele e, nos pontos críticos, deixar o corpo do laço num escopo próprio, para o nome aparecer na leitura do histórico.
6. Marque a falha e envie o aviso ao dono do processo
Dentro do Capturar, adicione Variável > Definir variável, com varFalhou igual à expressão true. Definir variável é permitido dentro de escopo, ao contrário de inicializar. Depois adicione Office 365 Outlook > Enviar um email (V2), com o dono do processo em Para, o assunto com o nome do processo e a palavra falha, e o corpo em HTML, no modo código (botão </>) da caixa de texto.
<p>O fluxo <strong>{Nome do processo}</strong> falhou na ação <strong>{Ação com falha}</strong>.</p>
<p>Mensagem da plataforma: {Mensagem de erro}</p>
<p><a href="{URL da execução}">Abrir a execução que falhou</a></p>Os trechos entre chaves são as saídas dos quatro Compor, inseridas pelo seletor de conteúdo dinâmico, e não texto digitado. O link vai no corpo, e não só como texto solto, porque quem recebe o aviso na agência ou na área de cadastro precisa de um clique até a execução, sem procurar o fluxo pelo nome numa lista longa.
7. Crie o escopo Finalizar e decida o status final
Adicione um terceiro escopo abaixo do Capturar, renomeie para Finalizar e, na aba Configurações > Executar após, marque os quatro estados do Capturar: foi bem-sucedido, falhou, foi ignorado e tempo esgotado. Dentro dele, coloque uma Condição em que varFalhou seja igual à expressão true, usando a expressão e não o texto, para comparar booliano com booliano. No ramo Sim, adicione Controle > Terminar, com status Falhou, um código como FalhaNoCadastro e a mensagem apontando para a saída "Mensagem de erro". O ramo Não fica vazio.
O quarto estado marcado é o que mantém o Finalizar rodando também quando o Tentar dá certo e o Capturar fica ignorado, que é o caso de quase todas as execuções. A decisão de status merece cuidado porque o fluxo que trata o erro e termina com sucesso esconde a falha no histórico: o Capturar tratou, a execução fica verde, e quem abrir o histórico, ou qualquer painel que leia o status, não vê nada. Terminar como Falhou mantém o aviso e a verdade do histórico, e é a escolha certa quando a TI quer contar falhas, enquanto terminar como Bem-sucedido só faz sentido quando a falha é esperada e tratada de fato.
8. Transforme o Capturar num fluxo filho reutilizável
Com o padrão validado, crie na mesma solução um fluxo chamado, por exemplo, "Aviso de falha de fluxo", com o gatilho manual e cinco entradas de texto: dono, processo, ação com falha, mensagem e URL da execução. Dentro dele, ponha o Enviar um email (V2) do passo 6, usando as entradas, e a conexão de envio da conta de serviço da TI. No fluxo de origem, o Capturar passa a ter só os Compor dos passos 4 e 5, o Definir variável e a ação Executar um Fluxo Filho apontando para esse aviso. As exigências de gatilho, ação de resposta e conexão estão na página de fluxos filho, e a lógica de funções reutilizáveis aparece em detalhe no artigo Como criar funções reutilizáveis no Power Automate, aqui no blog.
A armadilha está na URL: dentro do fluxo filho, workflow() devolve os dados do filho, e não os do fluxo que o chamou, então o endereço da execução precisa ser montado no fluxo de origem e passado como entrada. O ganho aparece na sustentação, porque o texto do e-mail, o destino e a conexão ficam num lugar só, e trocar o aviso de e-mail para uma mensagem no Teams deixa de ser uma edição em dezenas de fluxos.
Como validar que deu certo
No fim do Tentar, adicione temporariamente uma ação Compor com a expressão div(1,0), que sempre falha, e rode o fluxo. No histórico de execuções, a execução deve aparecer com status Falhou, o Tentar com falha, o Capturar bem-sucedido e o Finalizar com o ramo Sim executado e a ação Terminar em vermelho. O dono do processo deve receber o e-mail com o nome da ação, a mensagem e o link, e o clique no link deve abrir exatamente a execução do teste, não a lista de execuções do fluxo.
Remova o Compor de teste e rode de novo: a execução deve terminar com status Bem-sucedido, o Capturar deve aparecer como ignorado e nenhum e-mail deve sair. Faça um último teste com falha real, em cópia do fluxo, recriando uma coluna da lista com o mesmo nome, porque é esse tipo de quebra que a TI quer pegar, e confirme que o aviso chega antes de qualquer ligação da agência.
Erros comuns
O que aparece | Causa |
|---|---|
O e-mail de falha chega em toda execução, até nas que deram certo. | O executar após do Capturar ficou com foi bem-sucedido marcado, ou a variável foi inicializada dentro do Capturar já verdadeira. |
O processo trava numa aprovação sem resposta e ninguém é avisado. | O Capturar tem só falhou marcado, e a ação que expirou terminou como tempo esgotado. |
A mensagem "An action failed. No dependent actions succeeded." não diz o que quebrou. | O erro aconteceu dentro de uma condição ou de um aplicar a cada, e o resultado de primeiro nível mostra o bloco, não a ação interna. Use o link da execução e, nos pontos críticos, um escopo próprio no corpo do laço. |
Capturar aparece como ignorado, com texto parecido com "The 'runAfter' condition for action 'Tentar' is not satisfied". | É o comportamento esperado quando o Tentar dá certo. O defeito só existe se isso acontecer com o Tentar falhando. |
A execução termina verde mesmo com falha tratada. | O Finalizar não tem a ação Terminar em status Falhou, ou terminou com Bem-sucedido, e o histórico passa a esconder o problema. |
O aviso não sai quando a causa é uma conexão vencida. | O e-mail usa a mesma conexão que quebrou. Mande o aviso por conta de serviço separada, de preferência no fluxo filho, para o aviso não depender do que falhou. |
Um limite que o padrão não resolve: se o gatilho falha, o fluxo nem começa a rodar, e então nenhum escopo existe para capturar nada. Por isso a falha de gatilho continua dependendo do e-mail padrão da plataforma ou do monitoramento do ambiente.
Quando não usar este padrão
Num fluxo pessoal e trivial, como o que copia um anexo para a pasta de quem o criou, o escopo extra é peso sem retorno, porque o dono já olha o histórico e o custo de uma falha é baixo. O padrão também não é o caminho quando a necessidade é monitorar dezenas de fluxos de uma vez, porque aí você acabaria copiando o mesmo Capturar em cada um para ter um retrato geral que ele não dá. Nesse caso, o ponto de partida é o Centro de Automação, que lê o histórico de execuções do ambiente, e o Capturar fica para os fluxos críticos, em que o aviso tem de chegar a uma pessoa específica na hora.
O que levar para quem aprova
Depois de pronto, a TI passa a saber da falha de cada fluxo crítico no momento em que ela acontece, com o nome da ação e o link da execução, e o histórico continua mostrando a falha como falha, porque o Finalizar termina em status Falhou, o que mantém os relatórios do ambiente honestos.
O padrão usa ações nativas e conectores padrão, então não pede licença nova para o fluxo simples, só que o fluxo filho exige solução, e por isso o gerente de TI deve confirmar a licença para o ambiente. A sustentação, por sua vez, se resume a manter um único fluxo de aviso com uma conta de serviço da TI.
O risco fica sob controle da TI porque o texto, o destino e a conexão do aviso ficam num lugar só, e por isso o fornecedor ou o analista que montou o padrão pode sair sem levar o conhecimento junto, já que quem assumir encontra tudo num único fluxo.
Se ajudar na conversa interna, a Trinapse pode montar com vocês o modelo da solução com o fluxo filho e o checklist para encaixar o padrão nos fluxos que a TI já herdou, de modo que a proposta chegue à reunião com algo concreto na mão.
Luiz Antonio Sgargeta é sócio fundador e CEO da Trinapse, consultoria brasileira de Microsoft 365 com quase duas décadas de operação, acumula mais de 20 anos em desenvolvimento de software e em ambientes corporativos de alta complexidade.
Ver maisVer menos
Trabalha com SharePoint desde o SharePoint Portal Server 2003 e com .NET desde a versão 1.0. Acompanhou a plataforma em todas as suas reinvenções, do portal de documentos on-premises ao SharePoint Online dentro do Microsoft 365, o que dá a ele uma leitura rara sobre o que muda de verdade e o que é apenas nome novo para o mesmo problema.
No início da carreira atuou em uma das maiores operações de e-commerce do país, em sistemas que não toleram degradação de performance nem indisponibilidade, essa origem definiu o critério que ele aplica até hoje: solução boa é a que sustenta volume real, integra com o legado que já existe e não quebra no pico.
Depois disso, passou por praticamente todo tipo de projeto corporativo, de portais e intranets de milhares de usuários a integrações críticas e automação de processos de ponta a ponta, sempre em grandes empresas e em desafios de alta exigência.
A marca do trabalho dele é a tradução entre tecnologia e negócio, levanta a necessidade real por trás do pedido do cliente, questiona o processo antes de automatizá-lo e desenha a solução pelo resultado esperado, não pela ferramenta disponível, é o que permite conversar com a diretoria sobre retorno e com o time técnico sobre arquitetura na mesma reunião.
Hoje lidera a frente comercial e estratégica da Trinapse e conduz a empresa no novo ciclo da inteligência artificial, com foco em agentes de IA e operação de processos assistida por IA para cooperativas de crédito, agronegócio e indústria. Escreve no blog da Trinapse desde 2019, com mais de 450 artigos sobre IA, SharePoint, Power Platform, Modern Workplace e transformação de processos, sempre a partir de projeto entregue e não de teoria.


