Daily sales
| Region | Orders | Change |
|---|---|---|
| BR | 612 | +21% |
| US | 433 | +15% |
| EU | 239 | — |
A notificação é multipart, com JSON como base. Cada notificação leva várias representações do mesmo conteúdo, e cada cliente usa a melhor que suporta. A ideia vem do e-mail, sem herdar seus problemas (HTML livre, rastreamento, phishing visual).
{ "summary": "Deploy finished: api-v2 (3m12s)", "card": { "title": "Deploy", "blocks": [] }, "rich": { "html_ref": "…", "height": 480 }}| Parte | Obrigatória | Onde aparece |
|---|---|---|
summary |
Sim | Push, relógio, aparelhos pequenos, a lista do inbox |
card |
Recomendada | App, app web, clientes open source |
rich (HTML) |
Não; sempre com card como alternativa |
Só app e web, em sandbox |
O card tem um title opcional, um theme opcional (cor de destaque accent em #RRGGBB e um icon, URL ou emoji curto) e de 1 a 40 blocos.
| Bloco | Uso | Campos principais |
|---|---|---|
text |
Parágrafo (texto puro, até 4000 caracteres) | text |
metric |
Número com rótulo e variação | label, value, unit, delta ("+18%") |
chart |
Gráfico de linha ou barra a partir de séries | kind (line/bar), x, series (até 6) |
table |
Colunas e linhas | columns, rows (até 200) |
list |
Itens com ícone opcional | items[].text, items[].icon |
image |
Imagem por URL | src, alt |
progress |
Barra de progresso e etapas (ótimo para cards vivos) | value (0..1), steps, current |
buttons |
Links e ações de plugin, não decisões (até 4) | buttons[].label, url ou action |
options |
Renderiza uma pergunta yesno, single ou multi |
question_id |
input |
Renderiza uma pergunta text, voice, number ou date |
question_id |
Este card usa vários deles, do jeito que o app web mostra:
| Region | Orders | Change |
|---|---|---|
| BR | 612 | +21% |
| US | 433 | +15% |
| EU | 239 | — |
A decisão é sempre renderizada pelo app, nunca pelo HTML.
notific.reply() com ações já declaradas no JSON, e a confirmação final aparece numa tela nativa que o remetente não controla.O renderizador web também trata todo texto como texto puro (sem injeção de HTML ou markdown), abre só links http(s) em nova aba com noopener, aceita só imagens http(s) ou data:image raster, e só cores de destaque #RRGGBB.
O mesmo conteúdo vira texto no push, card completo no app e um resumo de duas linhas num aparelho pequeno. Cards vivos atualizam o mesmo card em vez de criar notificações novas.