> For the complete documentation index, see [llms.txt](https://portal-integracao.intelbras.com.br/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://portal-integracao.intelbras.com.br/cameras-and-gravadores/integracao-api-cftvip-e-mibo/cameras-e-gravadores/leitura-de-placas.md).

# Leitura de Placas

Guia de integração de câmeras LPR via Push: Webhook/Subscribe, HTTP Digest, endpoints DeviceInfo/KeepAlive/TollgateInfo e payloads ANPR (placa, snapshots, heartbeat).

Esta documentação apresenta comandos úteis para integração com dispositivos LPR e orienta a configuração do recurso **Push Customizado**, utilizado para personalizar o payload enviado pelo dispositivo para uma aplicação ou servidor externo.

> **Observação:**\
> Os IPs, placas, horários, nomes de listas e caminhos de arquivos apresentados neste documento são exemplos. Substitua-os conforme o ambiente de teste ou produção.

## Dicas & Boas Práticas <a href="#dicas-and-boas-praticas" id="dicas-and-boas-praticas"></a>

* Prefira o modo **Webhook (Push ativo)** sempre que disponível.
* Garanta que o endpoint esteja **acessível na internet** e responda **HTTP 200**.
* Utilize **HTTPS** e **HTTP Digest Authentication**.
* Trate corretamente **eventos, imagens e payloads JSON**.
* Monitore o **Heartbeat (KeepAlive)** para validar a disponibilidade do dispositivo.
* Implemente **reconexão automática** no modo Subscribe.
* Registre logs e trate falhas para garantir **estabilidade e confiabilidade** da integração.

***

### Comandos úteis

#### Importar lista de placas permitidas ou bloqueadas

Este comando realiza o upload de um arquivo CSV (Seguindo o padrão do arquivo modelo)para importar placas em uma lista do dispositivo.

{% file src="/files/eeMKetsWSB1xUiYoJyAe" %}

```bash
curl --location --request POST \
'http://<IP>/cgi-bin/trafficRecord.cgi?action=uploadFile&Type=TrafficRedList&format=CSV&code=utf-8' \
--form 'blackfile=@"/C:/Users/gu050972/Downloads/Listateste.CSV"'
```

**Parâmetros principais**

| Parâmetro             | Descrição                                                    |
| --------------------- | ------------------------------------------------------------ |
| `action=uploadFile`   | Indica que será realizado o upload de um arquivo.            |
| `Type=TrafficRedList` | Define a lista de destino. Ajuste conforme a lista desejada. |
| `format=CSV`          | Define que o arquivo enviado está no formato CSV.            |
| `code=utf-8`          | Define a codificação do arquivo.                             |
| `blackfile`           | Campo utilizado para envio do arquivo no formulário.         |

***

#### Obter versão de firmware do dispositivo

Este comando consulta informações do sistema, incluindo a versão de firmware do dispositivo.

```bash
curl --location \
'http://<IP>/cgi-bin/magicBox.cgi?action=getSystemInfo'
```

***

#### Exportar lista de placas permitidas ou bloqueadas

Este comando inicia a exportação assíncrona de uma lista cadastrada no dispositivo.

```bash
curl --location \
'http://<IP>/cgi-bin/recordUpdater.cgi?action=exportAsyncFile&name=TrafficBlackList&filename=RecordFile01&format=CSV&code=utf-8'
```

**Parâmetros principais**

| Parâmetro                | Descrição                                  |
| ------------------------ | ------------------------------------------ |
| `action=exportAsyncFile` | Inicia a exportação assíncrona do arquivo. |
| `name=TrafficBlackList`  | Define qual lista será exportada.          |
| `filename=RecordFile01`  | Nome do arquivo gerado.                    |
| `format=CSV`             | Define o formato de exportação.            |
| `code=utf-8`             | Define a codificação do arquivo.           |

***

#### Adicionar uma placa individualmente

Este comando adiciona uma placa individual à lista configurada no dispositivo.

```bash
curl --location \
'http://<IP>/cgi-bin/recordUpdater.cgi?action=insert&name=TrafficRedList&PlateNumber=MKG5566&MasterOfCar=Prim&PlateColor=Yellow&VehicleColor=Blue&BeginTime=2011-01-01%2012%3A00%3A00&CancelTime=2026-01-10%2012%3A00%3A00'
```

**Parâmetros principais**

| Parâmetro             | Descrição                                           |
| --------------------- | --------------------------------------------------- |
| `action=insert`       | Indica a inclusão de um novo registro.              |
| `name=TrafficRedList` | Lista na qual a placa será adicionada.              |
| `PlateNumber`         | Número da placa.                                    |
| `MasterOfCar`         | Proprietário ou identificação associada ao veículo. |
| `PlateColor`          | Cor da placa.                                       |
| `VehicleColor`        | Cor do veículo.                                     |
| `BeginTime`           | Data e hora inicial de validade do registro.        |
| `CancelTime`          | Data e hora final de validade do registro.          |

***

#### Remover uma placa individualmente

Este comando remove um registro específico da lista, utilizando o identificador `recno`.

```bash
curl --location \
'http://<IP>/cgi-bin/recordUpdater.cgi?action=remove&name=TrafficRedList&recno=27'
```

**Parâmetros principais**

| Parâmetro             | Descrição                                 |
| --------------------- | ----------------------------------------- |
| `action=remove`       | Indica a remoção de um registro.          |
| `name=TrafficRedList` | Lista da qual o registro será removido.   |
| `recno`               | Identificador do registro a ser removido. |

***

#### Gerar snapshot manualmente

Este comando aciona manualmente a captura de imagem no canal informado.

```bash
curl --location \
'http://<IP>/cgi-bin/trafficSnap.cgi?action=manSnap&channel=1'
```

**Parâmetros principais**

| Parâmetro        | Descrição                                |
| ---------------- | ---------------------------------------- |
| `action=manSnap` | Aciona a captura manual da imagem.       |
| `channel=1`      | Define o canal utilizado para a captura. |

***

#### Abrir saída de alarme

Este comando configura a saída de alarme do dispositivo.

```bash
curl --location --globoff \
'http://<IP>/cgi-bin/configManager.cgi?action=setConfig&AlarmOut[0].Mode=1&AlarmOut[0].Name=port1'
```

**Parâmetros principais**

| Parâmetro                | Descrição                         |
| ------------------------ | --------------------------------- |
| `action=setConfig`       | Indica alteração de configuração. |
| `AlarmOut[0].Mode=1`     | Define o modo da saída de alarme. |
| `AlarmOut[0].Name=port1` | Define o nome da saída de alarme. |

***

### Como funciona a função Push em câmeras LPR

A função **Push** permite que a própria câmera LPR envie proativamente os eventos capturados (como leitura de placas, estado do dispositivo ou sinal de keep-alive) para um servidor remoto definido pela aplicação integradora.

Esse envio ocorre via protocolo **HTTP**, em formato **JSON**, e utiliza o modelo de autenticação HTTP Digest. A arquitetura é baseada em dois modos principais: **Webhook (100% ativo)** e **Subscribe (túnel persistente)**.

**\*O modelo VIP 7250 LPR IA FT de primeira geração não possui a função push\***

***

### Como Ativar a função Push em câmeras LPR

No menu lateral, utilize a opção de Rede:

<figure><img src="https://1515909874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F6mQgRU27bLHXXNsZMjlv%2Fuploads%2FvAcws8WrxXsvSOlnY2uw%2Fimage.png?alt=media&amp;token=d2ad79c4-d1e3-45d8-9698-ab06302afbef" alt=""><figcaption></figcaption></figure>

Na aba de redes, selecione "acesso à plataforma" (1.), então o menu "Notificação Push" (2.)

<figure><img src="https://1515909874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F6mQgRU27bLHXXNsZMjlv%2Fuploads%2FM4iOGHHzLwV3xy9N8XIc%2Fimage.png?alt=media&amp;token=24a822b4-74f6-42ca-9a81-e887d3a1b2eb" alt=""><figcaption></figcaption></figure>

&#x20; Ative a função e preencha os campos com as informações necessárias:

<figure><img src="https://1515909874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F6mQgRU27bLHXXNsZMjlv%2Fuploads%2Fn8YgntHMK2MRXC5FmPB4%2Fimage.png?alt=media&amp;token=abac9424-1f1c-46ec-8b28-8283728096cd" alt=""><figcaption></figcaption></figure>

{% hint style="warning" icon="globe-pointer" %}
O passo a passo permanece o mesmo para as diferentes versões de Interface presentes nos dispositivos

Rede -> Acesso à Plataforma -> Notificação Push.
{% endhint %}

***

## Modo Webhook (Função Push Ativa)

Neste modo, a câmera LPR é totalmente ativa: ela detecta eventos (como uma placa lida) e envia imediatamente um POST para o endereço configurado do servidor da aplicação.

Características:

* A aplicação é 100% passiva
* A câmera inicia a requisição HTTP
* Espera-se resposta HTTP 200 com payload válido
* Em caso de erro, o evento é reenviado automaticamente

**(Este é um Webhook para teste)**

{% embed url="<https://github.com/Integracao-Intelbras-Cftv/Lpr-Push.git>" %}

Endpoints obrigatórios (exemplos):

{% code title="Express.js - exemplo de rotas" %}

```powershell
router.post("/NotificationInfo/DeviceInfo")
 // Recebe informações do dispositivo (como status ou atualizações)
 // Resposta esperada:
res.status(200).json({ Result: true, Message: "Success" });
```

{% endcode %}

```powershell
router.post("/NotificationInfo/KeepAlive")
 // Keep-alive enviado periodicamente caso não haja eventos
 // Resposta esperada:
res.status(200).send({});
```

```powershell
router.post("/NotificationInfo/TollgateInfo")
 // Evento de leitura de placa veicular
 // Payload inclui dados como timestamp, imagem e número da placa
```

Requisitos:

* Webhook deve estar disponível na internet
* Deve responder corretamente (status 200)
* Deve validar e registrar os eventos recebidos

***

### Modo Subscribe (Conexão Persistente HTTP)

Neste modelo, a aplicação assume um papel ativo inicial, estabelecendo uma conexão com a câmera que permanece aberta para troca contínua de dados.

**Etapas do fluxo:**

1. A aplicação envia um pedido de conexão para a câmera LPR
2. A câmera autentica e aceita a requisição
3. A câmera passa a enviar eventos no mesmo canal HTTP aberto

**Observações importantes:**

* A conexão **não pode ser encerrada**; se cair, a aplicação deve refazer
* Este modelo simula um túnel HTTP entre cliente e servidor
* Postman, Insomnia ou Thunder Client **não funcionam** nesse modo

***

### Autenticação HTTP Digest (Para ambos os modos)

As câmeras que utilizam Push autenticam a aplicação por meio de HTTP Digest. O processo segue:

1. A câmera envia um desafio (401 Unauthorized com nonce e realm)
2. A aplicação responde com cabeçalho `Authorization: Digest ...`

Exemplo de desafio da câmera:

```powershell
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Digest realm="IB_00408CA5EA04",
nonce="000562fdY631973ef04f77a3ede7c1832ff48720ef95ad",
stale=FALSE,
qop="auth"
Authorization: Digest username="admin", realm="00408CA5EA04", nc=00000001, cnonce="0a4f113b", qop="auth", nonce="000562fdY631973ef04f77a3ede7c1832ff48720ef95ad", url = "/cgi- bin/magicBox.cgi?action=getLanguageCaps", response="65002de02df697e946b750590b44f8bf"
```

***

### Glossário de Respostas

#### Envio de informações básicas

O push de informações básicas é utilizado pela plataforma para a obtenção e o gerenciamento de dados relevantes dos dispositivos.

<table><thead><tr><th>URI</th><th>/NotificationInfo/DeviceInfo</th><th data-hidden></th></tr></thead><tbody><tr><td>Descrição</td><td>Envia as informações básicas do equipamento para o servidor.<br>Observação: Após o primeiro envio ser concluído com sucesso, o dispositivo deve reenviar os dados sempre que ocorrer qualquer atualização nessas informações.</td><td></td></tr></tbody></table>

| Method | URI Request Parameters | Request Message                                              | esponse Message                              |
| ------ | ---------------------- | ------------------------------------------------------------ | -------------------------------------------- |
| Method | URI Request Parameters | Request Message                                              | Response Message                             |
| POST   | None                   | Definição da Mensagem de Informações Básicas do Dispositivo. | Definição da Resposta de Informações Básicas |

Definições das informações Básicas do dispositivo:

| Amostra                                              | Descrição                                                                                 | Obrigatório | Value                                                             |
| ---------------------------------------------------- | ----------------------------------------------------------------------------------------- | ----------- | ----------------------------------------------------------------- |
| {                                                    | Informação Básica                                                                         |             |                                                                   |
| “DeviceName” : “VIP-7250-LPR-IA-FT-G2”               | Nome do dispositivo                                                                       | **SIM**     |                                                                   |
| “DeviceModel” : “VIP-7250-LPR-IA-FT-G2”              | Modelo do dispositivo                                                                     |             |                                                                   |
| “DeviceType” : “Tolgate”                             | <p><br>Modelo do dispositivo</p><p>“DeviceType” : “Tolgate”</p><p>Tipo do dispositivo</p> |             | <p>“Tolgate”: ANPR</p><p>“E-Police”: Eletrica alarm equipment</p> |
| <p>“Manufacturer”:</p><p>“Intelbras”</p>             | Fabricante                                                                                |             |                                                                   |
| <p>“IPAdress”:</p><p>“192.168.1.108”</p>             | Endereço IPV4                                                                             | Não         |                                                                   |
| “IPV6Address”: “::”                                  | Endereço IPV6                                                                             | Não         |                                                                   |
| “MACAdress” “A:B:C”                                  | Endereço MAC                                                                              | Não         |                                                                   |
| “DeviceID”: “1c11c9c4- 8dbc-4391-0dd7- 56764ba18dbc” | <p>“1c11c9c4- 8dbc-4391-0dd7- 56764ba18dbc”</p><p>Indentificação única UUID</p>           | **SIM**     | Using UUID                                                        |
| }                                                    |                                                                                           |             |                                                                   |

Definição para as informações de resposta:

| Amostra              | Descrição                     | Obrigatório | Value                                     |
| -------------------- | ----------------------------- | ----------- | ----------------------------------------- |
| {                    | Informação Básica de resposta |             |                                           |
| “Result”: true       |                               | **SIM**     | <p>True: Sucess;</p><p>False: Failed;</p> |
| “Message”: “Success” |                               |             |                                           |

***

### Mensagem de Heartbeat

**O Heartbeat é utilizado pela plataforma para identificar o status do dispositivo.**

Se ele não for recebido dentro de **3 ciclos** (valor recomendado), sendo cada ciclo de **5 minutos** (valor recomendado), a plataforma poderá gerar um **alarme** para verificar o status de funcionamento do dispositivo.

<table><thead><tr><th>URI</th><th>/Notification/KeepAlive</th><th data-hidden></th></tr></thead><tbody><tr><td>Descrição</td><td>Heartbeat é um recurso da aplicação para regularmente verificar o status do dispositivo conectado</td><td></td></tr></tbody></table>

| Method | URI Request Parameters | Request Message                                   | Response Message                                |
| ------ | ---------------------- | ------------------------------------------------- | ----------------------------------------------- |
| POST   | None                   | Definição da Mensagem de Informações do Heartbeat | <p>Definição da Resposta do</p><p>Heartbeat</p> |

Definição da mensagem do Heartbeat:

<table><thead><tr><th></th><th></th><th></th><th></th><th data-hidden></th></tr></thead><tbody><tr><td>{</td><td>Heartbeat</td><td></td><td></td><td></td></tr><tr><td>“Active”: true</td><td>Resultado do Heartbeat</td><td><strong>SIM</strong></td><td>True: Indica o sucesso ao retornar o Heartbeat</td><td>True: Indica o sucesso ao retornar o Heartbeat</td></tr><tr><td>“DeviceID”: “1c11c9c4- 8dbc-4391-0dd7- 56764ba18dbc”</td><td>Consistente com a informação retornada pelo dispositivo</td><td></td><td></td><td></td></tr><tr><td>}</td><td></td><td></td><td></td><td></td></tr></tbody></table>

#### Snapshots e dados do evento de leitura de placas

<table><thead><tr><th>URI</th><th>/Notification/TollgateInfo</th><th data-hidden></th></tr></thead><tbody><tr><td>Descrição</td><td>Enviar os dados e a imagem do snapshot ANPR (reconhecimento automático de placas), podendo incluir a imagem original e a imagem destacando a placa do veículo.</td><td></td></tr></tbody></table>

| Method | URI Request Parameters | Request Message                                   | Response Message                |
| ------ | ---------------------- | ------------------------------------------------- | ------------------------------- |
| POST   | None                   | Consulta a Definição dos dados e Body da mensagem | Definição da Resposta do evento |

**Amostra:**

<table><thead><tr><th width="231.3333740234375">Amostra</th><th width="190">Descrição</th><th width="108.6666259765625">Descrição</th><th width="244.66668701171875">Value</th><th data-hidden></th></tr></thead><tbody><tr><td>“Picture”: {</td><td>Informações da Imagem</td><td></td><td></td><td></td></tr><tr><td>“NormalPic”: {</td><td>Imagem Original</td><td>Não</td><td></td><td></td></tr><tr><td>“PicName”: “xyz.jpg”,</td><td>Nome da imagem</td><td></td><td></td><td></td></tr><tr><td>“Content”: “”</td><td>Dados da imagem</td><td></td><td>Codificado em Base64</td><td></td></tr><tr><td>},</td><td></td><td></td><td></td><td></td></tr><tr><td>“CutoutPic”: {</td><td>Comparação da placa veícular</td><td>Não</td><td></td><td></td></tr><tr><td>“PicName”: “zyx.jpg”</td><td>Nome da imagem</td><td></td><td></td><td></td></tr><tr><td>“Content”: “”</td><td>Dados da imagem</td><td></td><td>Codificado em Base64</td><td></td></tr><tr><td>},</td><td></td><td></td><td></td><td></td></tr><tr><td>“VehiclePic”: {</td><td>Imagem completa do veículo</td><td>Não</td><td></td><td></td></tr><tr><td>“PicName”: “zyx.jpg”</td><td>Nome da imagem</td><td></td><td></td><td></td></tr><tr><td>“Content”: “”</td><td>Dados da imagem</td><td></td><td>Codificado em Base64</td><td></td></tr><tr><td>},</td><td></td><td></td><td></td><td></td></tr><tr><td>“FacePic”: {[</td><td>Imagem da face</td><td>Não</td><td>Array</td><td></td></tr><tr><td>“PicType”: 1,</td><td>Tipo de imagem</td><td></td><td></td><td></td></tr><tr><td>“PicName”: “zyx.jpg”</td><td>Nome da imagem</td><td></td><td>Codificado em Base64</td><td></td></tr><tr><td>],</td><td></td><td></td><td></td><td></td></tr><tr><td>},</td><td></td><td></td><td></td><td></td></tr><tr><td>“Plate”: {</td><td>Plate Info</td><td></td><td></td><td></td></tr><tr><td>“IsExist”: true,</td><td>Existência de uma placa cadastrada</td><td>SIM</td><td>Bool</td><td></td></tr><tr><td>“PlateNumber”: “ABC1234”</td><td>Caracteres da placa</td><td>Não</td><td>char (64) Suporta Múltiplos métodos de codificação: UTF-8, GB2312, hexadecimal ASCII encoding</td><td></td></tr><tr><td>“ADR”: “ABC1234”</td><td>Informações do Veículo (Caminha de Carga com identificação de componente Químico)</td><td>Não</td><td>char(32). Somente quando o componente químico carrega a placa de com identificador visível</td><td></td></tr><tr><td>“PlateColor”:”Gray”,</td><td>Cor da placa</td><td>SIM</td><td></td><td></td></tr><tr><td>“PlateType”:” Normal”;</td><td>Tipo da placa veícular</td><td>SIM</td><td></td><td></td></tr><tr><td>“Confidence”:80</td><td>Confiabilidade</td><td>Não</td><td>Range de confiabilidade 0 - 255</td><td></td></tr><tr><td>“BoundingBox”:[10, 20,30, 40],</td><td>Coordenadas da placa Veícular</td><td>SIM</td><td>Left, up, right, down</td><td></td></tr><tr><td>“UploadNum”:””,</td><td>Upload do número de série</td><td>Não</td><td>int (32) imagem auto-adicionada com número de série, 0, 1, 2 …, etc.</td><td></td></tr><tr><td>“Channel”:0</td><td>Canal</td><td>Não</td><td><p>nt(32)</p><p>Há apenas um canal, e o número do canal é 0;</p><p>Camera: o número do canal começa em 0; Ou seja, o canal de número 0 corresponde ao canal 1, o canal de número 1 corresponde ao canal 2, e assim por diante.</p></td><td></td></tr><tr><td>},</td><td></td><td></td><td></td><td></td></tr><tr><td>Vehicle”:{</td><td>Informação do veículo</td><td></td><td></td><td></td></tr><tr><td>“VehicleColor”:” White”</td><td>Cor do veículo</td><td>Não</td><td></td><td></td></tr><tr><td>“VehicleSign”:”Audi”</td><td>Logo/marca do veículo</td><td>Não</td><td></td><td></td></tr><tr><td>“VehicleType”:”PassengerCar”</td><td>Tipo do veículo</td><td>Não</td><td></td><td></td></tr><tr><td>“VehicleSeries”:”UnKnown” ，</td><td>Geração do Veículo</td><td></td><td>Temporariamente não identificado</td><td></td></tr><tr><td>“Speed”:0</td><td>Velocidade</td><td>Não</td><td>Unidade: km/h</td><td></td></tr><tr><td>},</td><td></td><td></td><td></td><td></td></tr><tr><td>“SnapInfo”:</td><td>Informação da Captura</td><td></td><td></td><td></td></tr><tr><td>“TriggerSource”: “Coil”,</td><td>Fonte do evento</td><td>Não</td><td><p>“Unknown” “Coil”</p><p>“Radar”</p><p>“Video”</p></td><td></td></tr><tr><td>“SnapTime”:” 2018-03-01 16:00:00”,</td><td>Horário da Captura</td><td>Não</td><td>yyyy-mm-dd hh:mm:ss</td><td></td></tr><tr><td>“AccurateTime”: “2020- 08-29 13:38:23.246”,</td><td>Momento exato do evento</td><td>Não</td><td>yyyy-mm-dd hh:mm:ss.sss</td><td></td></tr><tr><td>“SnapAddress”:””,</td><td>Endereço de captura</td><td>Não</td><td>Char(64)</td><td></td></tr><tr><td>“LanNo”: 1,</td><td>Número da pista</td><td>Não</td><td><p>Int(32)</p><p>O número de pistas começa em 1</p></td><td></td></tr><tr><td>“Direction”:” Obverse”,</td><td>Sentido da captura</td><td>Não</td><td>“Obverse”: Frontal “Reverse”: Traseiro</td><td></td></tr><tr><td>“OpenStrobe”:true</td><td>Abrir acesso</td><td></td><td>Bool type, true:abre o acesso， false:Não abre o acesso</td><td></td></tr><tr><td>“AllowUser”:true,</td><td>Está na lista de permitidos</td><td>Não</td><td><p>Bool Type,</p><p>True: Sim,</p><p>False: Não</p></td><td></td></tr><tr><td>“AllowUserEndTime”:” ”20 19-11-29 23:59:59</td><td>Validade na lista de permitido</td><td>Não</td><td>yyyy-mm-dd hh:mm:ss</td><td></td></tr><tr><td>“BlockUser”:true,</td><td>Está na lista</td><td>Não</td><td><p>Bool Type,</p><p>True: Sim,</p><p>False: Não</p></td><td></td></tr><tr><td>“BlockUserEndTime”:” ”20 19-11-29 23:59:59”</td><td>Validade na lista de bloqueados</td><td>Não</td><td>yyyy-mm-dd hh:mm:ss</td><td></td></tr><tr><td>“DefenseCode”:”xxxx”</td><td>Código de anti-falcificação</td><td>SIM</td><td></td><td></td></tr><tr><td>“DeviceID”:” 1c11c9c4- 8dbc-4391-0dd7- 56764ba18dbc”</td><td>Código único de identificação por dispositivo</td><td>SIM</td><td>UUID</td><td></td></tr><tr><td>}</td><td></td><td></td><td></td><td></td></tr><tr><td>}</td><td></td><td></td><td></td><td></td></tr></tbody></table>

#### Definição da resposta de retorno do ANPR no ponto de acesso

| Amostra                                                                                                                            | Descrição                                            | Obrigatório | Value                                                                  |
| ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------- | ----------- | ---------------------------------------------------------------------- |
| {                                                                                                                                  | Resposta do evento                                   | SIM         |                                                                        |
| Result" : true                                                                                                                     | Resultado                                            | SIM         | <p>True: Processado com sucesso</p><p>Failed: Processamento falhou</p> |
| “DeviceID”:” 1c11c9c4- 8dbc-4391-0dd7- 56764ba18dbc”                                                                               | Código único de identificação por dispositivo        | SIM         | UUID                                                                   |
| PlateNumber" : "ABC1234"                                                                                                           | Dados da leitura de placa recebidos com sucesso      | Não         | Char(32) string com os caracteres da placa                             |
| "AllowUser" : true                                                                                                                 | Se a placa estiver cadastrada na lista de permitidos | Não         | true: lista de permissões (allowlist)                                  |
| <p><br>false: não está na lista de permissões,</p>                                                                                 |                                                      |             |                                                                        |
| <p><br>Se o cenário da aplicação não exigir essa função, você pode simplesmente omitir este campo ou usar o valor padrão true.</p> |                                                      |             |                                                                        |
| "BlockUser" : true                                                                                                                 | Se a placa estiver cadastrada na lista de bloqueados | Não         | true: lista de bloqueio (blocklist)                                    |
| <p><br>false: não está na lista de bloqueio</p>                                                                                    |                                                      |             |                                                                        |
| <p><br>Se o cenário da aplicação não exigir essa função, você pode simplesmente omitir este campo ou usar o valor padrão true.</p> |                                                      |             |                                                                        |
| "OpenStrobe" : true                                                                                                                | Abrir ou não o acesso.                               |             | true: indica que o portão precisa ser aberto.                          |
| <p><br>false: indica que o portão não será aberto.</p>                                                                             |                                                      |             |                                                                        |
| <p><br>Se o cenário da aplicação não exigir essa função, você pode simplesmente omitir este campo.</p>                             |                                                      |             |                                                                        |
| }                                                                                                                                  |                                                      |             |                                                                        |

***

## Push Customizado

O **Push Customizado** permite personalizar a estrutura do payload enviado pelo dispositivo para uma aplicação ou servidor externo.

Diferentemente do push padrão, no qual o payload enviado pelo dispositivo não pode ser alterado, o push customizado permite:

* Renomear parâmetros enviados no payload;
* Adicionar seções ou objetos dentro do JSON;
* Isolar parâmetros conforme a necessidade da aplicação;
* Definir quais imagens e informações serão enviadas;
* Utilizar um token no envio dos eventos.

***

### Modelos compatíveis

{% hint style="danger" %}
O recurso de **Push Customizado** está disponível apenas para os seguintes modelos:

VIP 94180 LPR IA FT

VIP 94120 LPR IA FT G2
{% endhint %}

***

### Acesso ao menu de Push Customizado

Na interface do dispositivo, acesse a área de configuração de **Notificação PUSH** e selecione a opção **Push Customizado**.

A partir dessa tela, é possível configurar o servidor de destino, ativar o envio dos eventos e definir as opções de autenticação.

<figure><img src="https://1515909874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F6mQgRU27bLHXXNsZMjlv%2Fuploads%2FFBADFHPP5UqGmYjGjcpN%2Fimage.png?alt=media&amp;token=6ca5779f-09eb-40ed-8580-e9ec3a6af0c5" alt=""><figcaption></figcaption></figure>

***

### Configuração do servidor de destino

Na seção de configuração do Push Customizado, informe o servidor ou endpoint que receberá os eventos enviados pelo dispositivo.

Também é possível configurar um **token**, que poderá ser utilizado pela aplicação receptora como mecanismo de autenticação ou como identificador único do dispositivo.

#### Informações configuráveis

| Campo     | Descrição                                                                                  |
| --------- | ------------------------------------------------------------------------------------------ |
| Servidor  | Endereço ou endpoint da aplicação que receberá os eventos.                                 |
| Token     | Valor gerado pela aplicação ou servidor para autenticação ou identificação do dispositivo. |
| Canal     | Canal do dispositivo utilizado para envio dos eventos.                                     |
| Habilitar | Ativa ou desativa o envio do push customizado.                                             |

{% hint style="success" %}
O token, quando configurado, será enviado no header da requisição.
{% endhint %}

<figure><img src="https://1515909874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F6mQgRU27bLHXXNsZMjlv%2Fuploads%2FKAiehnRaRyXkeLLCUb2q%2Fimage.png?alt=media&amp;token=d9c3e18a-045e-45ac-bced-cf45be310046" alt=""><figcaption></figcaption></figure>

***

### Configuração das imagens enviadas

Após configurar a conexão com o servidor, é possível definir quais imagens serão enviadas junto aos eventos.

A configuração pode variar conforme o tipo de evento, como eventos de leitura, controle ou violação.

#### Tipos de imagem disponíveis

| Tipo de imagem        | Descrição                                           | Campo associado                      |
| --------------------- | --------------------------------------------------- | ------------------------------------ |
| Imagem original       | Imagem completa da cena capturada pelo dispositivo. | `NormalPic`                          |
| Corte                 | Recorte da placa detectada.                         | `CutoutPic`                          |
| Carroceria do veículo | Recorte do veículo associado ao evento.             | `VehiclePic`                         |
| Imagem composta       | Imagem composta ou associada ao evento.             | Conforme configuração do dispositivo |

<figure><img src="https://1515909874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F6mQgRU27bLHXXNsZMjlv%2Fuploads%2Fy3HbvVeow1RsBQmcciR9%2Fimage.png?alt=media&amp;token=ca8f5b1e-e1f7-42ce-ad34-5d99dc37e453" alt=""><figcaption></figcaption></figure>

***

### Modos de upload das imagens

Para o armazenamento ou envio das imagens, o dispositivo permite selecionar diferentes modos de upload.

#### Armazenamento Direto

No modo **Armazenamento Direto**, o dispositivo envia as imagens diretamente para o endpoint configurado.

Nesse modo, as imagens selecionadas são enviadas no payload, normalmente em formato Base64.

#### Local

No modo **Local**, o dispositivo armazena as imagens localmente.

Para utilizar essa opção, é necessário que o dispositivo possua um cartão SD instalado e funcional. As imagens ficam associadas aos eventos de leitura e podem ser consultadas posteriormente.

#### Caminho FTP

No modo **Caminho FTP**, o dispositivo utiliza o servidor FTP previamente configurado no menu de armazenamento.

O caminho utilizado será o mesmo configurado em:

```
Armazenamento > FTP > Servidor 1, 2 ou 3
```

Será utilizado o servidor FTP que estiver ativo e online na câmera.

<figure><img src="https://1515909874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F6mQgRU27bLHXXNsZMjlv%2Fuploads%2FbyGnPjGmXbI1Sl3S6VIS%2Fimage.png?alt=media&amp;token=a764ad21-ff37-4257-b50a-6b6fe1d0d5d0" alt=""><figcaption></figcaption></figure>

***

### Filtros de envio

Durante a configuração das imagens, a interface pode apresentar filtros conforme o tipo de evento.

Exemplos de filtros disponíveis:

| Filtro            | Descrição                                                                                    |
| ----------------- | -------------------------------------------------------------------------------------------- |
| Veículo sem placa | Permite tratar eventos em que o veículo é detectado, mas não há placa reconhecida.           |
| Violação de vídeo | Permite tratar eventos associados a condições de violação, quando disponível no dispositivo. |

***

## Configuração de área do payload

A seção **Configuração de Área** permite gerenciar a forma como os parâmetros serão enviados no payload do Push Customizado.

Nessa configuração, é possível:

* Renomear parâmetros do payload;
* Criar objetos dentro do JSON;
* Organizar os dados por áreas;
* Criar subáreas para segmentar informações;
* Adaptar a estrutura do JSON à necessidade da aplicação ou servidor receptor.

<figure><img src="https://1515909874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F6mQgRU27bLHXXNsZMjlv%2Fuploads%2F69M8UqJPlSx88HwsaLXw%2Fimage.png?alt=media&amp;token=dd34a6cf-2d4a-4c4e-bb6c-63d0a2baae1b" alt=""><figcaption></figcaption></figure>

***

### Parâmetros raiz

Alguns parâmetros são enviados nativamente no objeto principal do payload. Esses parâmetros podem ser renomeados conforme a necessidade da integração.

#### Exemplo conceitual sem área configurada

```json
{
  "plate": "ABC1234",
  "channel": 1,
  "eventTime": "2026-01-10 12:00:00",
  "vehicleColor": "Blue",
  "plateColor": "Yellow"
}
```

Nesse cenário, os parâmetros são enviados diretamente na raiz do JSON.

<figure><img src="https://1515909874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F6mQgRU27bLHXXNsZMjlv%2Fuploads%2FGPfs4Rn80sIRRhNOuXuQ%2Fimage.png?alt=media&amp;token=effdf4e1-7c56-44d1-b78a-e02bb370cd96" alt=""><figcaption></figcaption></figure>

***

### Renomear parâmetros

O Push Customizado permite renomear os parâmetros enviados no payload.

Essa funcionalidade é útil quando a aplicação receptora exige nomes específicos de campos ou quando é necessário padronizar o payload de acordo com uma estrutura já utilizada pelo servidor.

#### Exemplo

Um parâmetro originalmente enviado como:

```json
{
  "plate": "ABC1234"
}
```

Pode ser renomeado para:

```json
{
  "Placa_Teste": "ABC1234"
}
```

<figure><img src="https://1515909874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F6mQgRU27bLHXXNsZMjlv%2Fuploads%2FraLApa6XKgu8MwnFcOlE%2Fimage.png?alt=media&amp;token=13955256-dc8a-4113-a448-0ecea5d1f872" alt=""><figcaption></figcaption></figure>

***

### Área

A opção  <img src="https://1515909874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F6mQgRU27bLHXXNsZMjlv%2Fuploads%2FINf4tzHKsrMzTn3LXZ4E%2Fimage.png?alt=media&amp;token=a1b7d461-e186-462a-b803-1df4d62cebb9" alt="" data-size="line"> permite criar um objeto dentro do mesmo JSON, agrupando parâmetros conforme a necessidade da aplicação.

Essa configuração é indicada quando a aplicação receptora espera receber os dados organizados em blocos ou objetos específicos.

#### Exemplo conceitual com área configurada

```json
{
  "vehicle": {
    "plate": "ABC1234",
    "vehicleColor": "Blue",
    "plateColor": "Yellow"
  },
  "eventTime": "2026-01-10 12:00:00",
  "channel": 1
}
```

Nesse exemplo, os dados relacionados ao veículo foram agrupados dentro do objeto `vehicle`.

<figure><img src="https://1515909874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F6mQgRU27bLHXXNsZMjlv%2Fuploads%2FRyr11z98kisovnfP34zC%2Fimage.png?alt=media&amp;token=a6168b03-f023-437f-a807-67155d36b9b0" alt=""><figcaption></figcaption></figure>

***

### Subárea

A **Subárea** permite criar uma segmentação adicional dentro de uma área já configurada.

Essa opção é útil quando a aplicação receptora precisa receber os dados de forma mais organizada ou particionada.

#### Exemplo conceitual com área e subárea

```json
{
  "vehicle": {
    "plateInfo": {
      "number": "ABC1234",
      "color": "Yellow"
    },
    "vehicleInfo": {
      "color": "Blue"
    }
  },
  "eventTime": "2026-01-10 12:00:00",
  "channel": 1
}
```

<figure><img src="https://1515909874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F6mQgRU27bLHXXNsZMjlv%2Fuploads%2FjeqxwXN1Erm0YoXqK6k1%2Fimage.png?alt=media&amp;token=2c914c1c-639b-4224-a0de-c9565da8c987" alt=""><figcaption></figcaption></figure>

***

### Visualização do payload configurado

Após configurar os parâmetros, áreas e subáreas, a interface apresenta uma prévia da estrutura do payload que será enviada pelo dispositivo.

Essa visualização deve ser utilizada para validar se o JSON está de acordo com a estrutura esperada pela aplicação receptora.

<figure><img src="https://1515909874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F6mQgRU27bLHXXNsZMjlv%2Fuploads%2F7Jw12QF5N8j5rSZofW9l%2Fimage.png?alt=media&amp;token=6b05ae52-4cd6-459f-853b-8d394aa2ba4f" alt=""><figcaption></figcaption></figure>

***

### Comportamento após a configuração

Após a configuração do Push Customizado, o dispositivo passa a enviar os eventos utilizando a mesma estrutura de payload exibida na interface.

Caso um token tenha sido configurado, ele será enviado no header da requisição.

#### Fluxo geral

```
Dispositivo LPR
    ↓
Evento gerado
    ↓
Payload montado conforme configuração do Push Customizado
    ↓
Token enviado no header, se configurado
    ↓
Aplicação ou servidor externo recebe o evento
```

***

### Recomendações de implementação

Para uma integração mais segura e estável, recomenda-se:

1. Validar previamente o endpoint que receberá os eventos.
2. Confirmar se o servidor aceita payloads com imagens em Base64, caso o modo de armazenamento direto seja utilizado.
3. Definir uma estrutura JSON padronizada antes de configurar as áreas e subáreas.
4. Utilizar token para autenticação ou identificação do dispositivo.
5. Testar o envio com poucos parâmetros antes de habilitar o envio completo.
6. Validar o comportamento de imagens grandes, principalmente quando forem enviadas junto ao payload.
7. Registrar logs no servidor receptor para facilitar troubleshooting.
8. Documentar o payload final configurado na interface do dispositivo.

***

#### Pontos de atenção

* O recurso de Push Customizado não está disponível para todos os modelos LPR.
* A estrutura do payload depende diretamente da configuração realizada na interface.
* Alterações nos nomes dos parâmetros podem exigir ajustes na aplicação receptora.
* O envio de imagens em Base64 pode aumentar significativamente o tamanho do payload.
* O modo Local depende de cartão SD instalado no dispositivo.
* O modo Caminho FTP depende de servidor FTP previamente configurado e online.
* O token, quando configurado, é enviado no header da requisição.

***

Notas finais:

* Utilize o modo **Webhook** para cenários simples e robustos, onde a aplicação apenas escuta.
* Utilize o modo **Subscribe** se for necessário manter uma conexão em tempo real e contínua.
* Sempre implemente e valide os endpoints obrigatórios.
* Garanta disponibilidade pública da aplicação receptora.
* Teste exaustivamente em ambiente controlado.
* **NÃO é recomendado** utilizar o push padrão e o push customizado em conjunto

***


---

# 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 by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://portal-integracao.intelbras.com.br/cameras-and-gravadores/integracao-api-cftvip-e-mibo/cameras-e-gravadores/leitura-de-placas.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
