Saltar a contenido

Errores

Las Alertas son muy útiles, pero a medida que aumentamos la cantidad de automatizaciones, puede volverse muy difícil diagnosticar problemas y verificar qué tareas generaron errores.

Usando la función de Errores, puedes identificar fácilmente las tareas que causaron errores. Puedes filtrarlos por ID de tarea, etiqueta de automatización y período.

Filtro-de-errores

Dentro de cada error, hay una opción de visualización donde es posible ver en detalle lo que ocurrió.

Vista-de-errores

También puedes ampliarlo para incluir lo siguiente:

Detalles del error

Detalles-de-errores

StackTrace

StackTrace

Captura de pantalla

Captura-de-errores

Etiquetas

Etiquetas

Adjuntos

Adjuntos

De esta manera, es posible tener un mayor control para gestionar, identificar y corregir errores.

Cómo registrar errores usando el SDK de Maestro

Puedes registrar fácilmente errores en la plataforma utilizando el SDK de Maestro en tu código de automatización.

Instalación

Si aún no tienes la dependencia instalada, simplemente sigue estas instrucciones:

pip install botcity-maestro-sdk

Important

Además de la instalación, recuerda incluir la dependencia en el archivo requirements.txt del 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

Importar el SDK

Después de la instalación, importa la dependencia e instancia el SDK de Maestro:

# Import for integration with BotCity Maestro SDK
from botcity.maestro import *

# Disable errors if we are not connected to Maestro
BotMaestroSDK.RAISE_NOT_CONNECTED = False

# Instantiating the Maestro SDK
maestro = BotMaestroSDK.from_sys_args()
# Fetching the details of the current task being executed
execution = maestro.get_execution()
// Import for integration with BotCity Maestro SDK
import dev.botcity.maestro_sdk.*;
...

public void action(BotExecution botExecution) {

    try {
        // Instantiating the Maestro SDK
        BotMaestroSDK maestro = new BotMaestroSDK();
        maestro.login(botExecution);
    ...
// Import for integration with BotCity Maestro SDK
const { BotMaestroSdk } = require('@botcity/botcity-maestro-sdk')

// Getting parameters passed by Runner
const args = process.argv.slice(2)
const [server, taskid, token] = args

// Login with information from the Dev. Environment page
const maestro = new BotMaestroSdk()
maestro.login("YOUR_SERVER_HERE", "YOUR_USER_HERE", "YOUR_KEY_HERE")

// Fetching the details of the current task being executed
const executionTask = await maestro.getTask(taskid)
// Import for integration with BotCity Maestro SDK
import { BotMaestroSdk } from '@botcity/botcity-maestro-sdk'

// Getting parameters passed by Runner
const args = process.argv.slice(2)
const [server, taskid, token] = args

// Login with information from the Dev. Environment page
const maestro: BotMaestroSdk = new BotMaestroSdk()
maestro.login("YOUR_SERVER_HERE", "YOUR_USER_HERE", "YOUR_KEY_HERE")

// Fetching the details of the current task being executed
const executionTask: Task = await maestro.getTask(taskid)

Registrar un error

# Recording error in Maestro
try:
    div = 0 / 0
except Exception as error:
    maestro.error(task_id=execution.task_id, exception=error)
// Recording error in Maestro
try {
    int div = 0/0;
} catch (Exception error) {
    maestro.createError(botExecution.getTaskId(), error, null, null, null);
}
// Recording error in Maestro
try {
    eval("hoo bar");
} catch (error) {
    await maestro.createError(executionTask.id, error)
}
// Recording error in Maestro
try {
    eval("hoo bar");
} catch (error: any) {
    await maestro.createError(executionTask.id, error)
}

Código completo

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

# Disable errors if we are not connected to Maestro
BotMaestroSDK.RAISE_NOT_CONNECTED = False

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

    # Recording error in Maestro
    try:
        bot = DesktopBot()
        # Implement here your logic...
        ...

        # Forcing an error
        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);

            // Recording error in Maestro
            try {
                // Implement here your logic...
                ...

                // Forcing an error
                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)

    // Recording error in 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)

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

main()

Tip

Observa las otras operaciones que podemos realizar al registrar errores utilizando el SDK de BotCity Maestro, incluyendo capturas de pantalla, etiquetas y adjuntos al informar el error.