> ## Documentation Index
> Fetch the complete documentation index at: https://docs.zapbip.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Despertar por webhook

> Faça o zapbip acordar sua IA quando você escreve e ela não está ouvindo.

O despertar por webhook é o segundo degrau da [escada de despertar](https://docs.zapbip.com/pt-br/concepts/wake-ladder.md). Quando o dono escreve no WhatsApp e o agente não está ouvindo, o zapbip chama um link que o inicia. A instalação configura isso nos clientes que suportam; esta página mostra o que o zapbip envia e como configurar à mão.

O agente então lê a mensagem com [check\_inbox](https://docs.zapbip.com/pt-br/mcp-reference/check-inbox.md) ou [get\_messages](https://docs.zapbip.com/pt-br/mcp-reference/get-messages.md) e responde. O link é salvo com [set\_wake](https://docs.zapbip.com/pt-br/mcp-reference/set-wake.md).

A chamada não leva nada do seu texto: o corpo é sempre `{"event":"inbox_has_messages"}`. Mensagens que chegam em sequência compartilham um único despertar, enviado alguns segundos depois da primeira.

## Rotina do Grok Bot

Crie uma rotina com gatilho de webhook e salve:

```json theme={null}
{ "mode": "webhook", "url": "https://api2.cursor.sh/automations/webhook/<routine-id>", "token": "<token>" }
```

O zapbip envia `Authorization: Bearer <token>`.

## Tarefa agendada do claude.ai

Crie uma tarefa agendada com gatilho de API e salve:

```json theme={null}
{ "mode": "webhook", "url": "https://api.anthropic.com/v1/claude_code/routines/<trigger-id>/fire", "token": "<token>" }
```

O zapbip envia `Authorization: Bearer <token>` e os cabeçalhos da rotina.

## Seu próprio serviço

Qualquer host `https` público funciona. O token é sua chave de assinatura, com pelo menos 32 caracteres, e nunca é enviado. Cada chamada leva `X-Zapbip-Timestamp` (segundos Unix) e `X-Zapbip-Signature`, que é `sha256=` seguido do HMAC-SHA256 em hexadecimal de `<timestamp>.<body>`. Rejeite um timestamp com mais de 300 segundos.

```js theme={null}
import { createHmac, timingSafeEqual } from 'node:crypto';

const TOLERANCE_SECONDS = 300;

export function isValidWake({ timestamp, signature, body, token }) {
  const ageSeconds = Math.abs(Date.now() / 1000 - Number(timestamp));
  if (!(ageSeconds <= TOLERANCE_SECONDS)) return false;
  const expected = `sha256=${createHmac('sha256', token).update(`${timestamp}.${body}`).digest('hex')}`;
  const received = Buffer.from(signature);
  const wanted = Buffer.from(expected);
  return received.length === wanted.length && timingSafeEqual(received, wanted);
}
```

## Quando um despertar falha

* `408`, `425`, `429`, `5xx`, tempo esgotado ou erro de rede são tentados de novo, até 5 tentativas, esperando 5, 10, 20 e 40 segundos e respeitando `Retry-After` em `429` e `503`, até 60 segundos.
* Redirecionamentos e outras respostas `4xx` são recusados na hora, sem nova tentativa.
* Quando um despertar é recusado ou desiste, você recebe um aviso no WhatsApp de que a mensagem espera na caixa de entrada, e a conexão fica `failing`. Chame [set\_wake](https://docs.zapbip.com/pt-br/mcp-reference/set-wake.md) de novo para corrigir o destino; o próximo despertar entregue volta a conexão para `active`.
* Se a IA ler as mensagens antes do despertar disparar, nenhuma chamada é feita.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.