> For the complete documentation index, see [llms.txt](https://wiki.datadike.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://wiki.datadike.com/product-guide/configuracoes/rmm/comandos-remotos.md).

# Comandos remotos

O DataDike RMM combina **comandos padrão do Google (via AMAPI)** com **ações custom via nosso agent (via FCM)**. Cada seção abaixo enumera o que existe, como acionar via portal e qual limitação Google impõe.

## Onde ficam no portal

Todos os comandos ficam no **toolbar do detalhe do dispositivo** em `/sysadmin`. Ao clicar em um device na tabela, aparece a barra de ações. Comandos destrutivos (Wipe) sempre abrem modal de confirmação.

## Comandos padrão (Android Management API)

### LOCK — bloquear tela

* **Modos suportados:** Fully Managed, Dedicated, WPCO, BYOD (só profile)
* **Efeito:** Tela bloqueia imediatamente exigindo senha (ou trava o work profile no BYOD)
* **Uso típico:** Suspeita de perda; parada temporária
* **API:** `enterprises.devices.issueCommand({ type: "LOCK" })`
* **Backend:** `POST /api/v1/google/device-command/:deviceId` body `{ "action": "LOCK" }`

### WIPE — reset de fábrica

* **Modos suportados:** Fully Managed, Dedicated, WPCO (full ou só profile), BYOD (só profile)
* **Efeito:** Apaga TODOS os dados do device (ou só do work profile no BYOD)
* **Parâmetros opcionais:**
  * `reason` (≤200 chars) — texto mostrado ao usuário
  * `wipeDataFlags: ["WIPE_EXTERNAL_STORAGE"]` — apagar também o cartão SD
  * `wipeDataFlags: ["PRESERVE_RESET_PROTECTION_DATA"]` — manter Factory Reset Protection
* **Guardrail:** o portal EXIGE `confirm: true` no payload — o modal do frontend força confirmação explícita
* **API:** `issueCommand({ type: "WIPE", wipeDataFlags, reason })`

{% hint style="danger" %}
**WIPE é irreversível.** Sempre confirme o `deviceId` correto no modal antes de disparar. O portal registra a ação em `-logs` com o admin que executou.
{% endhint %}

### REBOOT — reiniciar dispositivo

* **Modos suportados:** **Apenas Fully Managed.** Não funciona em WPCO nem BYOD por decisão do Google.
* **Efeito:** Reinicialização imediata
* **API:** `issueCommand({ type: "REBOOT" })`
* **Uso típico:** Aplicar update de sistema, resolver travamento

### RESET\_PASSWORD — redefinir senha da tela de bloqueio

* **Modos suportados:** Fully Managed, WPCO
* **Parâmetros:**
  * `newPassword` (opcional — deixe vazio para limpar)
  * `resetPasswordFlags`: `["REQUIRE_ENTRY"]`, `["DO_NOT_ASK_CREDENTIALS_ON_BOOT"]`, `["LOCK_NOW"]`
* **Limitação:** Android 14+ exige mínimo 6 caracteres
* **API:** `issueCommand({ type: "RESET_PASSWORD", newPassword, resetPasswordFlags })`

### START\_LOST\_MODE / STOP\_LOST\_MODE

* **Modos suportados:** **Apenas Fully Managed ou WPCO.** Não em BYOD.
* **Efeito:** Dispositivo vai para "modo perdido" — trava, mostra mensagem + contato no lockscreen, desabilita UI normal
* **Parâmetros (pelo menos um obrigatório):**
  * `lostMessage` — texto mostrado (ex.: "Se encontrado, ligue para o número abaixo")
  * `lostPhoneNumber` — telefone de contato
  * `lostEmailAddress` — e-mail
  * `lostStreetAddress` — endereço
  * `lostOrganization` — nome da organização
* **API:** `issueCommand({ type: "START_LOST_MODE", startLostModeParams: { ... } })`

### CLEAR\_APP\_DATA — limpar dados de app específico

* **Modos suportados:** Todos
* **Parâmetros:** `packageNames: ["com.example.app", ...]`
* **Efeito:** Apaga os dados dos apps listados (equivalente a "Clear data" nas configurações)
* **Uso típico:** App corrompido, forçar re-login, saneamento de troubleshooting

## Comandos custom (via nosso agent + FCM)

Estes complementam o AMAPI onde o Google não tem cobertura nativa.

### LOCATE\_ON\_DEMAND

* **Modos suportados:** Qualquer modo onde nosso agent esteja instalado como companion
* **Efeito:** O agent recebe um push FCM, faz snapshot do FusedLocation e envia para o backend imediatamente (fora do cronograma de telemetria normal)
* **Uso típico:** "Onde está esse dispositivo agora?"
* **Estado:** Em roadmap — placeholder no portal

### RING

* **Modos suportados:** Qualquer modo com nosso agent
* **Efeito:** Toca alarme no dispositivo (não silenciável do lockscreen) até intervenção manual
* **Uso típico:** Encontrar aparelho perto (esquecido em sala, mochila)
* **Estado:** Em roadmap

### PUSH\_MESSAGE

* **Modos suportados:** Qualquer modo com nosso agent
* **Efeito:** Modal com mensagem custom exibido no dispositivo, exigindo dismiss explícito
* **Uso típico:** Comunicação urgente ao usuário (sem depender do sistema de push do sistema)
* **Estado:** Em roadmap

## O que Google não permite

Estas são **decisões de política do Google** — nenhum modo destrava. Não prometer para o cliente.

| Ação                                         | Motivo                                                                                                                                                                                                                                                            |
| -------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Screen mirroring / remote view**           | `MediaProjection` exige consentimento do usuário por sessão. Nenhum DPC (nem o Android Device Policy oficial do Google) pode automatizar isso. Ferramentas de "remote support" tipo TeamViewer usam add-ons OEM-signed em cada fabricante — não é padrão Android. |
| **Gravação de chamadas**                     | Play Policy proíbe apps de call recording (categoria banida). Android 10 fechou o path técnico (áudio de call não é mais capturável por apps 3rd-party).                                                                                                          |
| **Ler apps ou dados do lado pessoal (BYOD)** | Impossível por design. O work profile é um container Linux separado. DPC no work profile não enxerga UID/PID do container pessoal.                                                                                                                                |
| **Push de APK arbitrário via URL**           | Não existe endpoint AMAPI para isso. Alternativas: (a) publicar como **Private App** no Managed Google Play; (b) em Fully Managed com `installUnknownSourcesAllowed`, usar `PackageInstaller` via nosso agent — mas isso é escopo custom.                         |
| **Captura silenciosa de câmera / microfone** | Android 12+ mostra indicador obrigatório (bolinha verde) sempre que câmera ou microfone estão ativos. Não é suprimível programaticamente, nem por DPC.                                                                                                            |
| **Full backup de app data**                  | Permissão `BACKUP` é signature-only (só apps OEM assinam). Nenhum DPC 3rd-party consegue.                                                                                                                                                                         |

## Auditoria

Cada comando emitido pelo portal é gravado em `{enterpriseId}-{enterpriseName}-logs` com:

* `userId` (admin que disparou)
* `type` (ex.: `DEVICE_COMMAND_LOCK`, `DEVICE_COMMAND_WIPE`)
* `description` (ex.: `User Walter Neto issued WIPE on device XYZ (reason: device reported lost)`)
* `timestamp`

Consultável via `/api/v1/logs/interaction-logs`.

## Long-Running Operation (LRO)

A API do Google retorna uma **Operation** (LRO) para cada comando. O portal atualmente não faz polling do status — assume que o comando foi despachado (HTTP 202). Se precisar verificar o resultado, use:

```
androidmanagement.enterprises.devices.operations.get({ name: operationName })
```

O `operationName` vem no corpo da resposta do endpoint `POST /google/device-command/:deviceId`.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://wiki.datadike.com/product-guide/configuracoes/rmm/comandos-remotos.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
