Este navegador não consegue exibir a página corretamente. Atualize seu navegador para a versão mais recente.

Miharu

Guia de integração de Webhook

Ao configurar um Webhook, o Miharu envia os resultados do monitoramento (alertas do sistema) para a URL que você indicar, como um POST HTTP com corpo JSON. Assim dá para integrar com Zapier, Make, n8n, seu próprio servidor e mais, e tratar as notificações como preferir.

Este recurso é voltado a desenvolvedores e usuários avançados. É preciso um endpoint receptor do seu lado.

1. Configuração

  1. 1No app, abra “Notificações externas” → “Webhook”.
  2. 2Digite a URL do Webhook de destino (precisa começar com https://).
  3. 3Se quiser, defina o filtro de notificações (por exemplo, apenas um grupo de monitoramento).
  4. 4Ao salvar, é enviada uma notificação de teste confirmando a configuração.

2. Especificação HTTP

Método
POST
Corpo
JSON (UTF-8)
Cabeçalhos principais
Content-Type: application/json; charset=utf-8 User-Agent: Miharu-Webhook/1.0 X-Miharu-Event: <event> (tipo de evento) X-Miharu-Notification-Id: <id> (ID único da notificação)
Tempo limite
10 segundos
Condição de sucesso
Devolver um status HTTP 2xx
Devolva 2xx rapidamente. Se ocorrerem 10 respostas seguidas diferentes de 2xx, o envio para esse Webhook para automaticamente (reative reconfigurando no app). Faça o processamento pesado de forma assíncrona, depois de responder.

Nenhum cabeçalho de assinatura (HMAC ou outro) é enviado. A própria URL do Webhook é o segredo (veja Segurança abaixo).

3. Payload (campos comuns)

source stringValor fixo "miharu"
version stringVersão da especificação do payload (atualmente "1")
id stringID único da notificação (UUID). O mesmo evento mantém o mesmo id nas retentativas (use para descartar duplicatas).
timestamp stringMomento do evento (ISO 8601, UTC)
language stringCódigo do idioma (en/ja/de/pt/es/fr/ko)
event stringTipo de evento (tabela abaixo)
monitor object / nullPágina monitorada {id, name, url}. null nos eventos system.
message objectTexto de exibição {body, label}. label é null quando não se aplica.
detail objectDetalhes por tipo de evento (abaixo)

4. Tipos de evento e detail

page_changedDetecção de mudanças (o conteúdo da página mudou desde a última verificação){ diff: [...], truncated: bool }
keyword_hitDetecção de palavras-chave{ hits: [{ keywords: [...], excerpts: [...] }] }
new_linkDetecção de novos links{ links: [{ text, url }] }
price_changedMudança de preço ou valor{ target_name, before, after }
text_changedMudança de texto{ target_name, before, after }
systemNotificação do sistema (configuração concluída, monitoramento pausado etc.){ kind: string } (texto que indica o tipo)

O diff de page_changed

diff é um array com as mudanças. Cada elemento é um destes:

Se truncated for true, a diferença era grande e parte dela foi omitida.

5. Exemplos

Detecção de mudanças (page_changed)

JSON
{
  "source": "miharu",
  "version": "1",
  "id": "5c2e1b7a-9f3d-5a6b-8c4e-1d2f3a4b5c6d",
  "timestamp": "2026-05-22T01:23:45Z",
  "language": "pt",
  "event": "page_changed",
  "monitor": { "id": "abc123", "name": "Página do produto", "url": "https://example.com/item" },
  "message": { "body": "A página foi atualizada.", "label": "Atualização" },
  "detail": {
    "diff": [
      { "op": "replaced", "before": "Sem estoque", "after": "Em estoque" },
      { "op": "added", "text": "Reposto hoje" }
    ],
    "truncated": false
  }
}

Detecção de palavras-chave (keyword_hit)

JSON
{
  "source": "miharu", "version": "1", "id": "…",
  "timestamp": "2026-05-22T01:23:45Z", "language": "pt",
  "event": "keyword_hit",
  "monitor": { "id": "abc123", "name": "Página de disponibilidade", "url": "https://example.com/stock" },
  "message": { "body": "Uma palavra-chave foi detectada.", "label": "Palavra-chave" },
  "detail": { "hits": [ { "keywords": ["reposto"], "excerpts": ["…reposto hoje…"] } ] }
}

Detecção de novos links (new_link)

JSON
{
  "…": "…",
  "event": "new_link",
  "message": { "body": "Um link novo foi detectado.", "label": "Link novo" },
  "detail": { "links": [ { "text": "Anúncio de um produto novo", "url": "https://example.com/news/123" } ] }
}

Mudança de preço ou valor (price_changed)

JSON
{
  "…": "…",
  "event": "price_changed",
  "message": { "body": "“Preço” mudou.\n\n1980 → 1480", "label": "Preço/Valor" },
  "detail": { "target_name": "Preço", "before": "1980", "after": "1480" }
}

6. Idempotência (descarte de duplicatas)

O mesmo evento sempre chega com o mesmo id, inclusive nas retentativas (esse mesmo valor também vai no cabeçalho X-Miharu-Notification-Id). Use o id do seu lado para não processar a mesma notificação duas vezes.

7. Segurança

8. Integrações

Gere uma URL de recebimento no seu serviço e cadastre-a no Miharu como URL do Webhook.

9. Limitações

10. Solução de problemas


Envie suas observações e sugestões por “Comentários e sugestões” no app.

Todos os canais de notificação são configurados pelo app.Baixar o app