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

# Outbox

> Fila persistente de envios para canais de HTTP Sender, com inspeção, reenvio e cancelamento.

# Outbox

Toda mensagem que sai de um canal de **HTTP Sender** passa por uma fila persistente chamada
**outbox**. Essa fila guarda cada tentativa de envio com seu metadado completo (request, response,
tentativas, status) e permite operações de inspeção e recuperação quando algo falha — **sem que
você precise reenviar a mensagem do zero pelo seu sistema**.

## Por que existe?

O outbox resolve dois problemas operacionais comuns em integrações HTTP:

* **Audit log** — você precisa saber, para cada mensagem despachada, o que foi enviado, qual foi a
  resposta do servidor de destino, quantas tentativas houve e em qual estado a entrega ficou. O
  outbox guarda tudo isso por canal, indexado por mensagem.
* **Recovery sem replay** — quando o destino fica fora do ar e o envio falha, geralmente a mensagem
  original já foi consumida da sua fila/banco local. Sem o outbox, você precisaria reproduzir a
  mensagem do zero para reenviar. Com o outbox, basta **reenfileirar** a entrada existente.

<Note>
  O outbox é específico de canais que entregam via HTTP (HTTP Sender). Canais de WhatsApp têm seu
  próprio mecanismo de entrega e retransmissão interno, gerenciado pelo provedor.
</Note>

## Como uma mensagem entra no outbox

Quando você envia uma mensagem por um canal de HTTP Sender:

<Steps>
  <Step title="Envio inicial">
    A mensagem é registrada no outbox com status pendente e despachada para o destino HTTP.
  </Step>

  <Step title="Resposta do destino">
    A entrada é atualizada com o request, a resposta capturada (status, headers, body) e a duração.
  </Step>

  <Step title="Sucesso ou erro">
    Sucesso confirma a entrega. Erros são contados e a entrada permanece em estado recuperável até
    atingir o limite de tentativas.
  </Step>

  <Step title="Falha permanente">
    Se o limite de tentativas é atingido, a entrada vai para um estado terminal — não é mais
    reenfileirada automaticamente, mas continua disponível para inspeção e reenvio manual.
  </Step>
</Steps>

## Operações disponíveis

<CardGroup cols={2}>
  <Card title="Listar mensagens no Outbox" icon="inbox" href="/api-reference/listar-outbox">
    Lista as entradas do outbox de um canal, com filtros por status e período.
  </Card>

  <Card title="Detalhes da mensagem" icon="file-magnifying-glass" href="/api-reference/obter-outbox">
    Inspeciona request, response e tentativas de uma entrada específica.
  </Card>

  <Card title="Reenviar mensagens" icon="rotate-right" href="/api-reference/requeue-outbox">
    Reenfileira mensagens em estado de erro (até atingir o limite de tentativas).
  </Card>

  <Card title="Cancelar mensagem" icon="ban" href="/api-reference/cancelar-outbox">
    Cancela mensagens pendentes que ainda não foram entregues.
  </Card>
</CardGroup>

## Resolução do canal de feedback

Os endpoints do outbox recebem o `channelId` do canal **de origem** (ex: WhatsApp) e resolvem
automaticamente o canal de **feedback** (HTTP) associado.

```
GET /api/v1/admin/channel/{channelId}/outbox
                          ^^^^^^^^^^^
                          ID do canal de WhatsApp,
                          não do canal de feedback HTTP
```

<Warning>
  Você **não precisa** conhecer o ID do canal de feedback diretamente — sempre passe o ID do canal
  de origem (WhatsApp) e a plataforma resolve o feedback associado. Se o canal não tem um feedback
  configurado, a API retorna `400 Bad Request`.
</Warning>

## Quando usar

<AccordionGroup>
  <Accordion title="Após um incidente no destino">
    O servidor de destino ficou indisponível por algumas horas. Liste as entradas em estado de
    erro do período e reenvie em lote.
  </Accordion>

  <Accordion title="Para investigar uma falha de entrega">
    O cliente relata que não recebeu uma notificação. Inspecione a entrada correspondente para ver
    o request enviado, a resposta retornada e o histórico de tentativas.
  </Accordion>

  <Accordion title="Para cancelar envios obsoletos">
    Uma mensagem ficou presa esperando o destino voltar, mas o conteúdo já não é mais relevante.
    Cancele a entrada para evitar entrega tardia.
  </Accordion>

  <Accordion title="Como audit log de integração">
    Mesmo sem incidentes, o outbox serve como fonte de verdade do que foi efetivamente despachado
    — útil para conciliação contábil, suporte e análise de comportamento.
  </Accordion>
</AccordionGroup>
