Documentação
Como mandar notificações push do seu servidor, script, cron ou banco de dados direto pro celular — sem conta, sem cadastro.
Conteúdo
Início rápido
Três passos, menos de dois minutos.
- Crie seu canal na página inicial. Você recebe na hora um código, um QR Code e os tokens.
- Instale o app e toque em Ler QR do canal para escanear o QR.
- Mande a primeira mensagem com o comando abaixo, trocando o código e o token pelos seus:
curl -d "primeira notificação" \
-H "Authorization: Bearer SEU_PUBLISH_TOKEN" \
https://notify.hlgcloud.com.br/v1/publish/hlg-xxxxxxxxO celular deve tocar em poucos segundos, mesmo com o app fechado.
Como funciona
Tudo gira em torno de um canal. O canal é o endereço para onde as mensagens vão, e o aparelho que escaneou o QR é quem recebe.
- Canal — identificado por um código como
hlg-7ad4p7x7. É público: não é segredo, quem publica precisa também do token. - Aparelho — cada celular que escaneia o QR entra no canal. Um canal pode ter vários aparelhos, e todos recebem as mesmas mensagens.
- Mensagem — o que você envia. Tem corpo, e opcionalmente título e prioridade.
Um aparelho pode estar em vários canais ao mesmo tempo. No app, troque de canal pela lista no topo da tela e use Adicionar canal para escanear outro QR. Cada canal tem as próprias notificações: dá para silenciar um sem afetar os outros.
Enviar uma notificação
Só existe um endereço para publicar, e ele aceita POST:
POST https://notify.hlgcloud.com.br/v1/publish/SEU_CODIGO
Authorization: Bearer SEU_PUBLISH_TOKENTexto puro (o jeito mais simples)
Mande o texto no corpo, sem JSON nenhum. É o formato pensado para colar direto num cron:
curl -d "backup concluído" \
-H "Authorization: Bearer SEU_PUBLISH_TOKEN" \
https://notify.hlgcloud.com.br/v1/publish/hlg-xxxxxxxxJSON (com título e prioridade)
curl -X POST \
-H "Authorization: Bearer SEU_PUBLISH_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"title": "Backup do banco",
"body": "Concluído em 4min12s, 2.3 GB",
"priority": 3
}' \
https://notify.hlgcloud.com.br/v1/publish/hlg-xxxxxxxxCampos aceitos
| Campo | Tipo | Descrição |
|---|---|---|
body | texto | Obrigatório. O conteúdo da notificação. |
title | texto | Título. Sem ele, a notificação usa o código do canal. |
priority | 1 a 5 | Padrão 3. Define cor, som e vibração. |
tags | lista | Etiquetas livres, guardadas com a mensagem. |
click_url | texto | Link aberto ao tocar na notificação. |
data | objeto | Qualquer JSON extra que você queira anexar. |
A resposta é 202 com o id da mensagem e para quantos aparelhos ela foi enfileirada:
{ "message_id": 42, "devices": 2 }Título
O título é opcional. Quando você não manda um, a notificação mostra o código do canal no lugar — assim ela nunca chega sem identificação:
curl -d "Serviço concluído com sucesso." \
-H "Authorization: Bearer SEU_PUBLISH_TOKEN" \
https://notify.hlgcloud.com.br/v1/publish/hlg-7ad4p7x7
→ Título: hlg-7ad4p7x7
Mensagem: Serviço concluído com sucesso.Formatação
O body aceita uma sintaxe própria de marcadores para destacar trechos do
texto. São tags pareadas (abre/fecha), que podem ser combinadas livremente:
| Marcador | Efeito |
|---|---|
<bold>texto</bold> | Negrito |
<small>texto</small> | Fonte menor |
<big>texto</big> | Fonte maior |
<link>https://...</link> |
Link clicável — o conteúdo precisa ser só a URL completa
(http:// ou https://), sem texto alternativo |
<red>texto</red> | Texto vermelho |
<yellow>texto</yellow> | Texto amarelo |
<green>texto</green> | Texto verde |
<blue>texto</blue> | Texto azul |
As cores se ajustam automaticamente ao tema claro/escuro do celular — o tom exato varia um pouco entre os dois, a cor em si não.
Isso não é HTML. Apesar da aparência de tag, é uma sintaxe própria criada só
para o HLG Notify: somente os marcadores acima são reconhecidos, e não existe nenhum
parser de HTML por trás. Qualquer outra tag (ex. <div>), um marcador
não fechado ou fechado fora de ordem aparece como texto puro na mensagem — nunca quebra
o envio nem o app.
Os marcadores podem ser aninhados em qualquer ordem, desde que o fechamento siga a ordem inversa da abertura — igual HTML/XML:
<bold><big><red>Backup falhou</red></big></bold>
Confira o log em <bold><link>https://status.exemplo.com</link></bold>Quebra de linha e linha em branco não usam marcador — já são \n e
\n\n literais dentro do body, e funcionam sem nenhuma mudança:
curl -X POST \
-H "Authorization: Bearer SEU_PUBLISH_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"title": "Deploy",
"body": "<bold>Versão 2.1</bold> no ar.\n\nAcompanhe em <link>https://status.exemplo.com</link>"
}' \
https://notify.hlgcloud.com.br/v1/publish/hlg-xxxxxxxxA formatação vale só para o corpo da mensagem. O título e a notificação do sistema (barra de notificações do Android) sempre mostram texto puro, sem os marcadores — o texto com estilo só aparece dentro do app.
Prioridades
A prioridade vai de 1 a 5 e muda três coisas: a cor no app, o som e a vibração. No Android, cada canal do HLG Notify vira um grupo de notificações com os cinco níveis dentro, então dá para ajustar som e vibração por canal e por nível nas configurações do sistema — o atalho está em Configurações no app. Também dá para silenciar um canal inteiro ali: as mensagens continuam chegando no histórico, sem notificação.
| Nível | Cor | Comportamento | Quando usar |
|---|---|---|---|
1 | Verde-claro | Silencioso, sem vibrar | Log, rotina que deu certo |
2 | Verde | Som padrão, sem vibrar | Aviso de baixa urgência |
3 | Amarelo | Som e vibração | Padrão, quando não informado |
4 | Laranja | Alta prioridade, aparece na tela | Precisa de atenção agora |
5 | Vermelho | Alta prioridade e ignora o Não Perturbe | Acordar alguém de madrugada |
A prioridade 5 toca mesmo com o celular no Não Perturbe. Use com parcimônia — se tudo é crítico, nada é.
Exemplos
Cron
# todo dia às 3h, avisa se o backup falhar
0 3 * * * /opt/backup.sh || curl -s -d "BACKUP FALHOU" \
-H "Authorization: Bearer $HLG_TOKEN" \
https://notify.hlgcloud.com.br/v1/publish/hlg-xxxxxxxxBash
#!/usr/bin/env bash
notify() {
curl -s -X POST \
-H "Authorization: Bearer $HLG_TOKEN" \
-H "Content-Type: application/json" \
-d "{\"title\":\"$1\",\"body\":\"$2\",\"priority\":${3:-3}}" \
"https://notify.hlgcloud.com.br/v1/publish/$HLG_CANAL" > /dev/null
}
notify "Deploy" "Subiu a versão 2.1" 3
notify "Disco cheio" "/ com 96% de uso" 5Python
import requests
requests.post(
"https://notify.hlgcloud.com.br/v1/publish/hlg-xxxxxxxx",
headers={"Authorization": "Bearer SEU_PUBLISH_TOKEN"},
json={"title": "ETL", "body": "12.402 linhas processadas", "priority": 2},
timeout=10,
)Oracle (PL/SQL)
Depois de instalar a package uma vez (passo a passo no pacote de download abaixo), publicar é uma chamada:
BEGIN
hlgnotify_core_pkg.publicar(
p_canal => 'hlg-xxxxxxxx',
p_body => 'Concluído',
p_title => 'Job noturno',
p_priority => 2
);
END;
/A package busca token e wallet do canal numa tabela — nenhuma credencial hardcoded na chamada. Requer wallet configurado e ACL de rede liberada para o host (passo a passo no pacote de download).
Pacote completo (Oracle 19c ou superior) — DDL da tabela de canais, a package
hlgnotify_core_pkg pronta para produção (autenticação, payload em UTF-8,
timeout, escaping de JSON e tratamento de erro), os certificados para montar o wallet e
o passo a passo de instalação (wallet + ACL + tabela + package + cadastro do canal).
n8n
Use o nó HTTP Request:
- Method:
POST - URL:
https://notify.hlgcloud.com.br/v1/publish/SEU_CODIGO - Header:
Authorization: Bearer SEU_PUBLISH_TOKEN - Body (JSON):
{"title":"...","body":"...","priority":3}
API
| Endpoint | Autenticação | Para quê |
|---|---|---|
POST /v1/publish/:codigo | publish token | Enviar notificação |
GET /v1/messages/:codigo | token do aparelho | Histórico do canal |
DELETE /v1/messages/:codigo | publish token | Limpar o histórico |
GET /v1/channels/:codigo/info | publish ou aparelho | Nome e nº de aparelhos |
GET /v1/channels/:codigo/devices | publish token | Listar aparelhos |
POST /v1/public/channels | nenhuma | Criar um canal |
Token errado responde 401 e nada é gravado. Canal inexistente responde 404.
Tokens
Ao criar o canal você recebe dois tokens, com finalidades bem diferentes — e essa diferença é o que permite convidar gente pro canal sem dar a ela o poder de publicar mensagens:
| Token | Permite | Onde fica |
|---|---|---|
| Publish | Enviar mensagens, ver os aparelhos inscritos e limpar o histórico do canal — ou seja, administra o canal | Nos seus scripts e servidores, ou salvo com você. Nunca compartilhe, nunca coloque no app. |
| Enroll | Só inscrever um aparelho no canal, pra ele passar a receber notificações | Dentro do QR Code. É o que o app lê ao escanear — pode circular à vontade. |
⚠️ CUIDADO com o publish token. Quem tiver esse token consegue mandar notificações pro canal inteiro (e ver/apagar o histórico) — trate como senha. Ele aparece uma única vez, na tela de criação do canal, e não fica salvo em lugar nenhum do servidor — só o hash. Se perder, não tem como recuperar: crie outro canal.
Por isso a página inicial gera dois arquivos diferentes depois de criar o canal:
- Convite (QR .png ou .html) — só tem o QR Code, ou seja, só o enroll token embutido. É o que você distribui: manda pro grupo, imprime, cola numa página. Quem escanear entra no canal pra receber notificações; ninguém consegue publicar com ele.
- Credenciais admin (.html) — tem o código do canal, o publish token e o exemplo de curl. É só sua: guarde num local seguro e nunca mande pra quem só deveria receber as notificações.
Resumindo: dar o QR/convite a alguém não dá a essa pessoa o poder de publicar no seu canal — só o arquivo de credenciais admin faz isso, e esse você não compartilha.
Gerenciar o canal
Na página Meu canal, com o código e o publish token, você pode:
- Ver os aparelhos inscritos — identificação, plataforma, quando entrou e quando foi visto pela última vez.
- Dar um apelido ao canal — é o nome que todos os inscritos veem na lista de canais do app (até 60 caracteres). O app mostra o nome novo na próxima atualização.
- Limpar o histórico do canal — apaga todas as mensagens no servidor. Os aparelhos continuam inscritos e os tokens não mudam; só o histórico some, em todos os aparelhos.
Limpar o histórico é irreversível e afeta todos os aparelhos do canal. Por isso a página
pede que você digite APAGAR para confirmar.
Para um aparelho sair do canal, use Sair deste canal nas configurações do app. Isso desinscreve só aquele aparelho, só daquele canal — os outros canais dele continuam — e não apaga o histórico de ninguém.
Limites
| Limite | Valor |
|---|---|
| Mensagens guardadas por canal | as 100 mais recentes |
| Tamanho da mensagem (título + corpo + link) | 3500 bytes |
| Envios por canal | 60 por minuto |
| Criação de canais | 5 por minuto, por IP |
O que passa de 100 mensagens é descartado no servidor, mas continua no celular — o app guarda o próprio histórico. Precisa de mais que isso? Fale com o suporte.
Perguntas frequentes
A notificação não chega. O que verifico?
- Abra Sobre no app e confira se Notificações está como "Permitidas".
- Confira se o comando respondeu
202e com quantosdevices. Se vier0, nenhum aparelho está inscrito nesse canal. - Veja se o código do canal no comando é o mesmo que aparece em Sobre.
- Confira em Configurações se o canal não está silenciado — silenciado, a mensagem entra no histórico sem notificar.
- Se estiver com economia de bateria agressiva, libere o app para rodar em segundo plano.
Troquei de celular. E agora?
Basta escanear o mesmo QR no aparelho novo. Se você não tiver mais o QR, o enroll token sozinho resolve: dá para digitá-lo na tela inicial do app junto com o código do canal. Se você recebia de vários canais, repita para cada um, usando Adicionar canal.
Perdi o publish token.
Não há como recuperá-lo — o servidor só guarda o hash. Crie um canal novo e escaneie o QR dele no app.
Posso usar o mesmo canal em vários celulares?
Pode. Todos os aparelhos que escanearem o QR recebem as mesmas mensagens.
Quero convidar um grupo de pessoas, mas sem deixar ninguém publicar. Dá?
Dá, e já é assim por padrão — ver Tokens. Distribua só o arquivo de convite (QR .png ou .html) gerado na página inicial: ele carrega apenas o enroll token, que serve só pra inscrever o aparelho. O publish token fica no arquivo separado de credenciais admin, que você guarda só pra você — é ele quem manda mensagens.
Preciso criar conta?
Não. Não há cadastro, e-mail nem senha. O canal é a sua identidade.
Apagar uma mensagem no app apaga para todo mundo?
Não. Deslizar para o lado ou usar a lixeira remove só a cópia daquele aparelho. Para apagar de todos, use Limpar histórico do canal na página Meu canal.