# Operações assíncronas

Algumas operações do MoreLogin aceitam o trabalho antes de o navegador, Cloud Phone, arquivo, aplicativo ou execução de RPA subjacente atingir o estado final. Uma resposta de envio bem-sucedida significa que a requisição foi aceita; não significa sempre que o estado solicitado já foi alcançado.

## Modelo de estados do cliente

| Estado | Significado | Ação do cliente |
|  --- | --- | --- |
| Enviado | A API aceitou o comando ou criou uma tarefa | Guarde os IDs retornados e o `requestId`; não reenvie a mesma escrita imediatamente |
| Pendente ou em execução | A operação posterior ainda está em andamento | Consulte o endpoint documentado de status/resultado com intervalos crescentes |
| Bem-sucedido | O recurso ou a tarefa alcançou seu estado terminal de êxito | Pare de consultar e continue o fluxo |
| Falhou | O endpoint de status/resultado informa falha ou um erro de negócio terminal | Pare as novas tentativas automáticas; guarde os IDs, os detalhes da falha e o `requestId` |
| Resultado desconhecido | A escrita expirou ou a conexão fechou sem uma resposta utilizável | Consulte o estado atual do recurso ou da tarefa antes de decidir repetir |


## Regras de polling

- Comece por cerca de 1 segundo e aumente o intervalo para 2, 4 e 8 segundos, com limite de 15–30 segundos.
- Aplique jitter para que clientes concorrentes não consultem no mesmo instante.
- Pare em um estado terminal documentado; não faça polling indefinidamente.
- Interprete `data: null` como pendente apenas quando o endpoint documentar esse comportamento explicitamente.
- Um tempo limite de transporte em uma escrita não é prova de falha.


## Fluxos documentados

| Fluxo | Operação de envio | Operação de observação | Estado terminal |
|  --- | --- | --- | --- |
| Início/parada do cloud browser | `POST /cloudbrowser/start` ou `/cloudbrowser/stop` | `POST /cloudbrowser/page` | O runtime alcança o estado pretendido ou desaparece após a parada |
| Ligar/desligar Cloud Phone | `POST /cloudphone/powerOn` ou `/cloudphone/powerOff` | `POST /cloudphone/page` | `envStatus=4` ligado ou `envStatus=2` desligado; `1` é falha de criação |
| Upload de arquivo no Cloud Phone | Envie para a URL assinada e depois `POST /cloudphone/uploadFile` | `POST /cloudphone/uploadFileResult` | `status=1` êxito ou `status=2` falha; `data: null` e `status=0` são pendentes |
| Download do Cloud Phone | `POST /cloudphone/download` | `POST /cloudphone/download/result` | `status=20` êxito, `30` falha ou `40` cancelado; `10` é em execução |
| Instalação de aplicativo | `POST /cloudphone/app/install` | `POST /cloudphone/app/installedList` | O pacote solicitado aparece na lista de aplicativos instalados |
| Agendamento/execução de RPA | `POST /cloudphone/rpa/task/save` ou `/onceTask/save` | `POST /cloudphone/rpa/task/page`, `/subTask/page` e `/subTask/detail/{id}` | `taskState=2` concluído ou `3` cancelado; verifique `handleResult` (`0` falha, `1` êxito) |
| Transmissão ao vivo | `POST /cloudphone/live/start` ou `/live/end` | `POST /cloudphone/live/status` | O status confirma que a transmissão começou ou parou |
| Upload para cloud storage | `POST /cloudstorage/upload/init`, seguido do `PUT` no object store | `POST /cloudstorage/upload/complete` depois que cada PUT necessário tiver êxito | A resposta de conclusão tem êxito; nunca chame complete antes de o upload do objeto ter êxito |


Os equivalentes da Local API usam o prefixo `/api` onde documentado. Veja a [Matriz de novas tentativas e conclusão de endpoints](/pt/api-reference/getting-started/endpoint-behavior) para orientação operação por operação.

## Exemplo de recuperação após tempo limite

```python
try:
    submit_operation()
except TimeoutError:
    # The write may already have succeeded.
    current = query_current_state()
    if current.is_terminal_success:
        pass
    elif current.is_pending:
        poll_until_terminal()
    else:
        decide_whether_retry_is_safe(current)
```

A API pública não define atualmente um cabeçalho geral de chave de idempotência. Por isso IDs de recurso, IDs de tarefa, consultas de estado e o `requestId` são essenciais para uma recuperação segura.