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

# Receita: n8n

> Credencial Bearer, um workflow de reativação completo e como tratar 429 com o nó Wait.

Este guia monta um workflow de reativação no [n8n](https://n8n.io) usando só o nó **HTTP Request**: busca contatos sem a tag "reativado", dispara um flow do FlowBuilder pra cada um e aplica a tag ao final.

## Credencial

Crie uma credencial do tipo **Header Auth** (Settings → Credentials → New) com:

* **Name**: `Authorization`
* **Value**: `Bearer wtx_live_SEU_TOKEN`

Reaproveite essa credencial em todos os nós HTTP Request do workflow — evita colar o token em cada nó e facilita rotacionar depois (veja [Autenticação](/pt/autenticacao)).

<Steps>
  <Step title="Buscar contatos sem a tag">
    Nó **HTTP Request** — `GET`, com a credencial Header Auth criada acima:

    ```
    https://sua-instancia.whatix.cloud/wapi/v1/contacts?pageSize=100
    ```

    Sem `tagId`, isso traz todos os contatos da sua conta. O objetivo é quem **não tem** a tag "reativado" (13) — filtre no workflow com um nó **Filter**: `{{$json.tags.some(t => t.id === 13)}}` deve ser `false`.

    A resposta vem com o array em `contacts` (não na raiz) — adicione um nó **Split Out** logo depois, no campo `contacts`, pra transformar isso numa lista de itens que o resto do workflow processa um por um.

    <Note>`pageSize=100` traz só a primeira página. Se a conta tem mais de 100 contatos que batem o filtro, monte um loop de paginação (nó **Loop Over Items** ou uma segunda chamada incrementando `pageNumber`) até `hasMore: false` — veja [Paginação e filtros](/pt/paginacao-e-filtros).</Note>
  </Step>

  <Step title="Disparar o flow pra cada contato">
    Nó **Split In Batches** (tamanho 1, pra não estourar o rate limit) seguido de **HTTP Request** — `POST`:

    ```
    https://sua-instancia.whatix.cloud/wapi/v1/flows/trigger
    ```

    Body (JSON):

    ```json theme={null}
    {
      "flowId": 14,
      "whatsappId": 2,
      "number": "{{$json.number}}",
      "contactName": "{{$json.name}}",
      "variables": { "nome": "{{$json.name}}" }
    }
    ```

    Veja os detalhes de `variables`, a guarda de atendimento humano (409) e a janela de 24h em [Disparar flows](/pt/guias/disparar-flows).
  </Step>

  <Step title="Aplicar a tag de reativado">
    Depois do disparo aceito (`202`), outro nó **HTTP Request** — `PUT`:

    ```
    https://sua-instancia.whatix.cloud/wapi/v1/contacts/{{$json.contactId}}/tags
    ```

    Body:

    ```json theme={null}
    { "tagIds": [13] }
    ```

    <Warning>Esse endpoint substitui todas as tags do contato. Se o contato tinha outras tags, busque-as antes (`GET /v1/contacts/{contactId}`) e inclua os IDs delas no array — senão elas são removidas.</Warning>
  </Step>
</Steps>

## Tratando 429 com o nó Wait

Com **Split In Batches** de tamanho 1 e um workflow que roda centenas de contatos, é fácil passar de 120 requisições/minuto. Trate o `429` assim:

<Steps>
  <Step title="Capture o erro e peça os headers no HTTP Request">
    Nas opções do nó HTTP Request, marque **"Continue On Fail"** (deixa o `429` passar como saída normal, em vez de abortar o workflow) e **"Include Response Headers and Status"** — sem essa segunda opção, `statusCode` e os headers da resposta não aparecem no item de saída.
  </Step>

  <Step title="Verifique o status code">
    Nó **IF**: `{{$json.statusCode}} == 429`.
  </Step>

  <Step title="Espere o tempo do Retry-After">
    No ramo verdadeiro, nó **Wait** configurado para ler o header `Retry-After` da resposta (`{{$json.headers['retry-after']}}` segundos) e depois voltar pro mesmo nó HTTP Request — reconecte a saída do Wait de volta na entrada do HTTP Request pra formar o retry.
  </Step>
</Steps>

<Note>Se o workflow processa muitos contatos, prefira reduzir a velocidade de disparo (um pequeno delay fixo entre execuções do Split In Batches) a depender só do retry — isso evita empurrar toda a fila pra rajadas de 429 repetidas. Veja o backoff de referência em [Erros e limites](/pt/erros-e-limites).</Note>

## Erros comuns

| Código | HTTP | Onde aparece | O que fazer |
| - | - | - | - |
| `ERR_TOKEN_INVALID` | 401 | Qualquer nó | Confira o valor da credencial Header Auth (`Bearer wtx_live_...`, sem espaços extras). |
| `ERR_RATE_LIMITED` | 429 | Disparo em massa | Use o padrão IF + Wait acima. |
| `ERR_TICKET_IN_HUMAN_SERVICE` | 409 | Disparar flow | Contato em atendimento ativo — pule ou trate manualmente, evite `force: true` em massa. |

Veja o [catálogo completo de erros](/pt/erros-e-limites).
