Ir para o conteúdo

Alertas são muito úteis, mas, à medida que escalamos o número de automações, pode se tornar muito difícil diagnosticar problemas e verificar quais tarefas geraram erros.

Usando o recurso Erros, você pode identificar facilmente tarefas que causaram erros. Você pode filtrá-las pelo ID da tarefa, label da automação e período. Para cada erro, você pode clicar no ID do erro para ver os detalhes do que ocorreu.

Filtro de erro

Dica

Explore o Gerador de Snippet para obter exemplos de código que facilitam as manipulações de erros, acesse e aprenda como criar um erro simples e criar um erro customizável via código.

Os snippets gerados estão disponíveis nas linguagens Python, Java, JavaScript e TypeScript.

Detalhes ao clicar no ID do erro:

Erro detalhado

Erros-details

StackTrace

Stacktrace

Screenshot

Erros-screenshot

Tags

As tags ajudam você a visualizar rapidamente os dados de tempo de execução. Explore as tags padrão ou adicione tags personalizadas para insights mais aprofundados. Tags

Anexos

Os anexos ajudam a replicar o ambiente para uma solução de problemas rápida, com a opção de adicionar seus próprios arquivos. Anexos

Dessa forma, é possível ter mais controle para gerenciar, identificar e corrigir erros.

Como registrar erros usando o Maestro SDK

Você pode facilmente registrar erros na plataforma usando o Maestro SDK no código da sua automação.

Instalação do SDK

Caso você ainda não tenha a dependência instalada, basta seguir essas instruções:

pip install botcity-maestro-sdk

Importante

Além de instalar, lembre-se de incluir a dependência no arquivo requirements.txt do bot.

<repositories>
    <repository>
        <id>nexus-botcity-public</id>
        <url>https://devtools.botcity.dev:8081/repository/botcity-public/</url>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </repository>
</repositories>

<dependencies>
    <!-- Your other dependencies -->
    <dependency>
        <groupId>dev.botcity</groupId>
        <artifactId>maestro-sdk</artifactId>
        <version>2.0.3</version>
    </dependency>
</dependencies>
npm i @botcity/botcity-maestro-sdk
npm i @botcity/botcity-maestro-sdk
dotnet add package BotCity.Maestro.SDK

Importando o SDK

Após a instalação, basta importar a dependência e instanciar o Maestro SDK:

# Importando a dependência do Maestro SDK
from botcity.maestro import *

# Desabilitando erros caso não exista conexão com o Maestro
BotMaestroSDK.RAISE_NOT_CONNECTED = False

# Instanciando o Maestro SDK
maestro = BotMaestroSDK.from_sys_args()
# Buscando os detalhes da tarefa atual sendo executada
execution = maestro.get_execution()
// Importando a dependência do Maestro SDK
import dev.botcity.maestro_sdk.*;
...

public void action(BotExecution botExecution) {

    try {
        // Instanciando o Maestro SDK
        BotMaestroSDK maestro = new BotMaestroSDK();
        maestro.login(botExecution);
    ...
// Importando a dependência do Maestro SDK
const { BotMaestroSdk } = require('@botcity/botcity-maestro-sdk')

// Obtendo parâmetros passados pelo Runner
const args = process.argv.slice(2)
const [server, taskid, token] = args

// Login com as informações da página Amb. Desenvolvedor
const maestro = new BotMaestroSdk()
maestro.login("YOUR_SERVER_HERE", "YOUR_USER_HERE", "YOUR_KEY_HERE")

// Buscando os detalhes da tarefa atual sendo executada
const executionTask = await maestro.getTask(taskid)
// Importando a dependência do Maestro SDK
import { BotMaestroSdk } from '@botcity/botcity-maestro-sdk'

// Obtendo parâmetros passados pelo Runner
const args = process.argv.slice(2)
const [server, taskid, token] = args

// Login com as informações da página Amb. Desenvolvedor
const maestro: BotMaestroSdk = new BotMaestroSdk()
maestro.login("YOUR_SERVER_HERE", "YOUR_USER_HERE", "YOUR_KEY_HERE")

// Buscando os detalhes da tarefa atual sendo executada
const executionTask: Task = await maestro.getTask(taskid)
// Importando a dependência do Maestro SDK
using Dev.BotCity;
using Dev.BotCity.MaestroSdk.Model.Execution;

// Instanciando o Maestro SDK
BotMaestroSDK maestro = BotMaestroSDK.FromSysArgs();
// Buscando os detalhes da tarefa atual sendo executada
Execution execution = await maestro.GetExecutionAsync(maestro.GetTaskId());

Registrando um erro

# Registrando erro no Maestro
try:
    div = 0 / 0
except Exception as error:
    maestro.error(task_id=execution.task_id, exception=error)
// Registrando erro no Maestro
try {
    int div = 0/0;
} catch (Exception error) {
    maestro.createError(botExecution.getTaskId(), error, null, null, null);
}
// Registrando erro no Maestro
try {
    eval("hoo bar");
} catch (error) {
    await maestro.createError(executionTask.id, error)
}
// Registrando erro no Maestro
try {
    eval("hoo bar");
} catch (error: any) {
    await maestro.createError(executionTask.id, error)
}
// Registrando erro no Maestro
try {
    throw new Exception("test");
} catch (Exception ex) {
    await instance.CreateErrorAsync(ex, execution.TaskId);
}

Código completo

from botcity.core import DesktopBot
from botcity.maestro import *

# Desabilitando erros caso não exista conexão com o Maestro
BotMaestroSDK.RAISE_NOT_CONNECTED = False

def main():
    maestro = BotMaestroSDK.from_sys_args()
    execution = maestro.get_execution()

    # Registrando erro no Maestro
    try:
        bot = DesktopBot()
        # Implemente aqui a sua lógica...
        ...

        # Forçando um erro
        div = 0 / 0

    except Exception as error:
        maestro.error(task_id=execution.task_id, exception=error)

def not_found(label):
    print(f"Element not found: {label}")

if __name__ == '__main__':
    main()
import dev.botcity.framework.bot.DesktopBot;
import dev.botcity.maestro_sdk.BotExecutor;
import dev.botcity.maestro_sdk.BotMaestroSDK;
import dev.botcity.maestro_sdk.runner.BotExecution;
import dev.botcity.maestro_sdk.runner.RunnableAgent;

public class FirstBot extends DesktopBot implements RunnableAgent
{
    public FirstBot() {
        try {
            setResourceClassLoader(this.getClass().getClassLoader());
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public void action(BotExecution botExecution) {

        try {
            BotMaestroSDK maestro = new BotMaestroSDK();
            maestro.login(botExecution);

            // Registrando erro no Maestro
            try {
                // Implemente aqui a sua lógica...
                ...

                // Forçando um erro
                int div = 0/0;

            } catch (Exception error) {
                maestro.createError(botExecution.getTaskId(, error, null, null, null);
            }

        } catch(Exception e) {
            e.printStackTrace();
        }
    }

    private void notFound(String label) {
        System.out.println("Element not found: "+label);
    }

    public static void main(String[] args) {
        BotExecutor.run(new FirstBot(), args);
    }
}
const main = async () => {
    const { BotMaestroSdk } = require('@botcity/botcity-maestro-sdk')

    const args = process.argv.slice(2)
    const [server, taskid, token] = args

    const maestro = new BotMaestroSdk()
    maestro.login("YOUR_SERVER_HERE", "YOUR_USER_HERE", "YOUR_KEY_HERE")

    const executionTask = await maestro.getTask(taskid)

    // Registrando erro no Maestro
    try {
        eval("hoo bar");
    } catch (error) {
        await maestro.createError(executionTask.id, error)
    }
}

main()
const main = async () => {
    import { BotMaestroSdk } from '@botcity/botcity-maestro-sdk'

    const args = process.argv.slice(2)
    const [server, taskid, token] = args

    const maestro: BotMaestroSdk = new BotMaestroSdk()
    maestro.login("YOUR_SERVER_HERE", "YOUR_USER_HERE", "YOUR_KEY_HERE")

    const executionTask: Task = await maestro.getTask(taskid)

    // Registrando erro no Maestro
    try {
        eval("hoo bar");
    } catch (error: any) {
        await maestro.createError(executionTask.id, error)
    }
}

main()
using Dev.BotCity.MaestroSdk.Model.AutomationTask;
using Dev.BotCity.MaestroSdk.Model.Execution;
using System;
using System.Threading.Tasks;

namespace FirstBot
{
    class Program
    {
        static async Task Main(string[] args)
        {
            BotMaestroSDK maestro = BotMaestroSDK.FromSysArgs();
            Execution execution = await maestro.GetExecutionAsync(maestro.GetTaskId());

            Console.WriteLine("Task ID is: " + execution.TaskId);
            Console.WriteLine("Task Parameters are: " + string.Join(", ", execution.Parameters));

            // Registrando erro no Maestro
            try {
                // Implemente aqui a sua lógica...
                ...

                // Forçando um erro
                throw new Exception("test");

            } catch (Exception ex) {
                await instance.CreateErrorAsync(ex, execution.TaskId);
            }
        }
    }
}

Dica

Consulte as outras operações que podemos fazer ao registrar erros utilizando o BotCity Maestro SDK, como por exemplo incluir screenshots, tags e anexos ao reportar o erro.