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

> ## Agent Instructions
> Wabox é uma API não-oficial de WhatsApp (aparelho vinculado). Tudo é snake_case; a base é https://api.wabox.me/instances/{instance_id}/token/{token}.
> Envios respondem { id, message_id, wabox_id, status: "queued" } na hora; o resultado real chega no webhook delivery. Envios não são idempotentes: confira GET /queue antes de repetir.
> Sempre verifique X-Wabox-Signature (HMAC-SHA256 de "<t>.<corpo cru>") nos webhooks e deduplique por event_id.
> Botões, listas, carrossel e catálogo são best effort e não renderizam no WhatsApp Web/Desktop. Não existem: chamadas, listas de transmissão, histórico de mensagens, instância mobile.
> Não invente endpoints ou campos: use o OpenAPI em https://api.wabox.me/openapi.json.

# Make

> Monte um cenário no Make que recebe mensagens do WhatsApp por webhook e responde com o módulo HTTP.

O cenário tem dois módulos: **Webhooks › Custom webhook**, que recebe o evento `received` do Wabox, e **HTTP › Make a request**, que chama o `send-text`. Entre eles, um filtro para responder só a mensagens de texto vindas de outras pessoas.

<Note>
  Base das rotas: `https://api.wabox.me/instances/{instance_id}/token/{token}`. Pegue `instance_id` e `token` no dashboard (instância › Credenciais). O header `Client-Token` só é necessário se estiver ativado no workspace — veja [Client-Token](/security/client-token).
</Note>

## Receber mensagens

<Steps>
  <Step title="Crie o webhook no Make">
    Em um cenário novo, adicione o módulo **Webhooks › Custom webhook** e crie um webhook novo (dê um nome, por exemplo "Wabox received"). Copie o endereço gerado.

    O Make responde `200 Accepted` assim que recebe a requisição, antes de rodar o resto do cenário. Isso atende o limite de 10 s do Wabox sem configuração extra.
  </Step>

  <Step title="Configure a URL no Wabox">
    No dashboard, cole o endereço no webhook de mensagens recebidas da instância, ou use a API:

    ```bash theme={"system"}
    curl -X PUT "https://api.wabox.me/instances/{instance_id}/token/{token}/webhooks" \
      -H "Content-Type: application/json" \
      -d '{ "received_url": "https://hook.SUA-REGIAO.make.com/SEU-ID" }'
    ```
  </Step>

  <Step title="Determine a estrutura de dados">
    Com o módulo do webhook em modo de escuta ("Redetermine data structure" / aguardando dados), envie uma **mensagem de texto** para o número conectado. O Make usa essa primeira requisição para descobrir os campos e passa a exibi-los no mapeamento.

    <Warning>
      O Make só conhece os campos que apareceram na amostra. Se a primeira mensagem for uma imagem ou um áudio, `text.message` não vai existir na estrutura. Se isso acontecer, redetermine a estrutura com uma mensagem de texto — ou edite a estrutura de dados manualmente.
    </Warning>

    Campos úteis do payload (completo em [Webhook received](/webhooks/received)):

    | Campo          | Uso                                             |
    | -------------- | ----------------------------------------------- |
    | `type`         | `received` — confirme antes de processar        |
    | `phone`        | número de quem enviou, só dígitos               |
    | `text.message` | texto da mensagem (ausente em mídia)            |
    | `from_me`      | `true` quando a mensagem saiu do próprio número |
    | `is_group`     | `true` em grupos                                |
    | `message_id`   | para citar a mensagem na resposta               |
    | `event_id`     | id da entrega, para deduplicar                  |
  </Step>

  <Step title="Adicione um filtro">
    Clique na ligação entre os dois módulos e crie um filtro com as condições:

    * `type` igual a `received`
    * `from_me` igual a `false`
    * `text.message` existe

    Sem o filtro de `from_me`, um cenário com `notify_sent_by_me` ligado responde às próprias respostas em loop.
  </Step>
</Steps>

## Responder pelo WhatsApp

<Steps>
  <Step title="Adicione o módulo HTTP › Make a request">
    Configure:

    * **URL**: `https://api.wabox.me/instances/{instance_id}/token/{token}/send-text`
    * **Method**: `POST`
    * **Body type**: `Raw`, **Content type**: `JSON (application/json)`
    * **Request content**: o corpo abaixo, mapeando os campos do webhook (módulo 1) nos pontos indicados:

    ```json theme={"system"}
    {
      "phone": "{{1.phone}}",
      "message": "Recebemos: {{1.text.message}}"
    }
    ```

    * **Parse response**: ligado, para usar `id`, `message_id` e `wabox_id` nos próximos módulos.
    * **Headers**: adicione `Client-Token` se ele estiver ativado no workspace.

    <Tip>
      Texto vindo do usuário pode conter aspas ou quebras de linha que quebram um JSON montado à mão. Se for interpolar conteúdo livre, monte o corpo com o módulo **JSON › Create JSON** (a partir de uma estrutura com `phone` e `message`) e passe o resultado como conteúdo da requisição.
    </Tip>
  </Step>

  <Step title="Use a resposta">
    A API responde na hora com a mensagem enfileirada:

    ```json theme={"system"}
    { "id": "3EB0A9C6D2F1E4B5A7D0", "message_id": "3EB0A9C6D2F1E4B5A7D0", "wabox_id": "wbx_01J5Q8ZK3M4N5P6Q7R8S9T0M01", "status": "queued" }
    ```

    `id` é um alias de `message_id`. O envio é assíncrono: o resultado (sucesso ou `error`/`error_code`) chega no webhook [delivery](/webhooks/delivery), com o mesmo `message_id`. Se precisar reagir a falhas, aponte `delivery_url` para um segundo Custom webhook.
  </Step>
</Steps>

## Mapeamento rápido

| Para enviar     | Rota                        | Campos principais                                    |
| --------------- | --------------------------- | ---------------------------------------------------- |
| Texto           | `POST .../send-text`        | `phone`, `message`, `reply_to_message_id` (opcional) |
| Imagem          | `POST .../send-image`       | `phone`, `image` (URL ou base64), `caption`          |
| Documento       | `POST .../send-document`    | `phone`, `document`, `file_name`                     |
| Lista de opções | `POST .../send-option-list` | `phone`, `message`, `option_list`                    |

Os corpos completos estão na [API Reference](/api-reference/introduction). Antes de usar mensagens interativas, veja [O que renderiza onde](/guides/rendering-support).

## Reentregas e duplicados

Se o Make não responder `2xx` em 10 s (por exemplo, cenário desativado ou limite de operações atingido), o Wabox reenvia a entrega em 10 s, 1 min, 10 min, 1 h e 6 h, sempre com o mesmo `event_id`. Para não responder duas vezes ao mesmo cliente, guarde os `event_id` processados em um **Data Store** do Make e adicione um filtro que descarta os já vistos.

## Sobre a assinatura

Cada entrega vem assinada no header `X-Wabox-Signature` (HMAC-SHA256 do corpo cru; veja [Assinatura de webhooks](/security/webhook-signature)). O Custom webhook do Make entrega o corpo já interpretado, e a assinatura precisa ser calculada sobre os bytes originais — então a verificação completa não é prática dentro do Make. Duas alternativas:

* Trate o endereço do webhook como segredo (ele já é único e difícil de adivinhar) e confira, com a opção de receber os headers da requisição, que `X-Wabox-Instance-Id` é o id da sua instância.
* Se precisar da verificação criptográfica, receba o webhook em um backend seu que valide a assinatura e só então encaminhe para o Make — veja [Integração HTTP genérica](/integrations/http).
