Ir para o conteúdo

Lab 2.4: Manipulando estados da tarefa atual

Nessa etapa vamos aprender como manipular o SDK da BotCity para fazer todas as integrações necessárias na Automação, passando por diversas funcionalidades como a finalização de tarefas, disparo de alerta, upload de arquivos, entre outras.

Dica

A BotCity também oferece SDKs específicos para linguagens como Java, C#, Javascript e Typescript. Também é possível utilizar o BotCity Maestro SDK via API REST em qualquer linguagem que suporte requisições HTTP.

Veja mais na Documentação BotCity Maestro SDK.

Integração com Orquestrador BotCity

Para integrar nossa automação com o Orquestrador BotCity Maestro, precisamos utilizar o BotCity Maestro SDK.

No projeto de exemplo, há uma instância do BotCity Maestro SDK que pode ser acessada utilizando a referência maestro.

Outro ponto importante a ser ressaltado é que quando executamos nossa automação via BotCity Runner, a instância do BotCity Maestro será autenticada automaticamente através dos parâmetros passados pelo Runner, no método .from_sys_args().

Aplicando o seguinte trecho no código, já teremos acesso às funcionalidades do BotCity Maestro SDK.

Veja as linhas destacadas no código abaixo:

# Import de integração com BotCity Maestro SDK
from botcity.maestro import *
# Import de Web Bot
from botcity.web import Browser, By, WebBot
# WebDriver Manager para gerenciamento automático do driver
from webdriver_manager.firefox import GeckoDriverManager

# Import para registro de log
from log import logger

# Desativa mensagem de erros por não estar conectado ao Maestro
BotMaestroSDK.RAISE_NOT_CONNECTED = False


def main():
    # Instancia do BotMaestroSDK
    maestro = BotMaestroSDK.from_sys_args()
    # Objeto com informações da execução
    execution = maestro.get_execution()

    print(f"Task ID is: {execution.task_id}")
    print(f"Task Parameters are: {execution.parameters}")

Atenção

Quando executamos o código localmente, a instância do BotCity Maestro SDK não estará autenticada, podendo ocorrer erros ao tentar utilizar as funcionalidades.

Isso não acontece pois podemos facilmente tratar isso silenciando os erros com:

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

Para simplificar nosso código, vamos assumir que todas execuções serão feitas via BotCity Maestro e Runner

Gestão de tarefas

Na etapa anterior vimos que somos responsáveis por indicar o estado em que a tarefa será finalizada em nossa lógica, caso não seja indicado o estado, a tarefa finalizará acusando erro.

Para finalizar uma tarefa podemos utilizar o método finish_task() do BotCity Maestro SDK.

Vamos alterar o código para que ao final do processo o Orquestrador BotCity seja notificado do sucesso de nossa tarefa.

Para isso incluiremos duas modificações no código:

  1. Defina as variáveis status e message conforme o número de canais processados com sucesso ou falha logo após o processamento de todos os canais:

    if canais_sucesso == total_canais:
        # Define o status de finalização da tarefa
        message = f"Todos os {total_canais} canais foram processados com sucesso."
        status = AutomationTaskFinishStatus.SUCCESS
    
    elif canais_falha == total_canais:
        # Define o status de finalização da tarefa
        message = f"Todos os {total_canais} canais foram processados com erro."
        status = AutomationTaskFinishStatus.FAILED
    
    else:
        # Define o status de finalização da tarefa
        message = f'Dos {total_canais} canais pesquisados, número de falha: {canais_falha} e número de sucesso: {canais_sucesso}.'
        status = AutomationTaskFinishStatus.PARTIALLY_COMPLETED
    

Dica

Você pode finalizar a tarefa com os seguintes estados:

  • SUCCESS: Sucesso, tudo ocorreu conforme o esperado.
  • FAILED: Falha, algum erro ocorreu e o robô não conseguiu executar a tarefa.
  • PARTIALLY_COMPLETED: Sucesso parcial, parte da tarefa foi executada com sucesso. Como um exemplo, pense em um robô que processa entradas em uma planilha porém apenas uma parte dos dados é processado com sucesso.
  1. Em seguida, adicione o seguinte bloco de código indicando a finalização da tarefa com o status, mensagem e número de itens processados:

    maestro.finish_task(
            task_id=execution.task_id,
            status=status,
            message=message,
            total_items=total_canais, # Número total de itens processados
            processed_items=canais_sucesso, # Número de itens processados com sucesso
            failed_items=canais_falha # Número de itens processados com falha
            )
    

Agora a execução do robô finalizará a tarefa no Orquestrador BotCity com o status correto, conforme o resultado do processamento dos canais.

Dica

Note que pegamos o parâmetro task_id através do execution, definido no inicio do código, após a autenticação com o Orquestrador.