
# API de Resumos

Dois tipos de resumos escritos por IA estão disponíveis via API:

- **Resumos de chat** — uma breve recapitulação da conversa de um contato, gerada sob demanda. É a mesma coisa que o controle de resumo em um chat (veja [Resumo de Chat](../chats/chat-interface.md#chat-summary)).
- **Resumos diários** — o resumo feito uma vez por dia de todas as suas conversas que os [Resumos Diários](../daily-summaries/daily-summaries.md) geram todas as manhãs: estatísticas, um bloco markdown por seção e quaisquer tarefas que a IA tenha criado a partir disso.

- **URL Base** — `https://api.dmchamp.com/v1`
- **Autenticação** — sua chave de API (veja [Autenticação](authentication.md)). Uma [chave com escopo](api-keys.md#scoped-keys) precisa da seção `Summaries`.
- **Erros e paginação** — veja [Erros e Paginação](errors-and-pagination.md)

Todos os exemplos abaixo mostram a forma de consulta `?apiKey=` em cURL e o cabeçalho `X-API-Key` em JavaScript e Python — ambos funcionam em todos os endpoints.

---

## Gerar um resumo de chat

`POST /summaries` — envie o `phoneNumber` do contato (com código do país) ou o `email`; um dos dois é obrigatório.

A IA lê a conversa mais recentemente **encerrada** do contato, ou aquela que ainda está aberta caso nenhuma tenha sido encerrada, e escreve uma recapitulação dela. A recapitulação é armazenada no contato (ela aparece em **Resumos** no painel do contato no aplicativo) e retornada na resposta, para que você possa encaminhá-la diretamente para um CRM, um canal do Slack ou um e-mail.

**Custo:** o mesmo que uma resposta de IA no nível de Qualidade de IA do Agente — Pro 1 crédito, Max 0,25, Mini 0,15; com sua própria chave da Anthropic conectada, Pro custa 0. A solicitação é recusada antes que qualquer coisa seja gerada quando o saldo não for suficiente.

**cURL**

```bash
curl -X POST "https://api.dmchamp.com/v1/summaries?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"phoneNumber": "+31612345678"}'
```

**JavaScript**

```javascript
const res = await fetch("https://api.dmchamp.com/v1/summaries", {
  method: "POST",
  headers: { "X-API-Key": "YOUR_API_KEY", "Content-Type": "application/json" },
  body: JSON.stringify({ email: "jane@example.com" }),
});
const { summary } = await res.json();
```

**Python**

```python
import requests

r = requests.post(
    "https://api.dmchamp.com/v1/summaries",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={"phoneNumber": "+31612345678"},
)
print(r.json()["summary"])
```

**Resposta**

```json
{
  "success": true,
  "message": "Chat summary generated successfully",
  "summary": "Jane asked about the 10-session package for her two children (ages 6 and 9) and preferred Saturday mornings. She booked a trial lesson for Saturday at 10:00 and wants to know whether siblings get a discount."
}
```

| Status | Significado |
|---|---|
| `400` | Nem `phoneNumber` nem `email` foram enviados. |
| `404` | Nenhum contato corresponde, o contato ainda não tem conversa ou a conversa não tem mensagens. O `message` do corpo da resposta indica qual. |
| `500` | A geração falhou (por exemplo, créditos insuficientes). |

> **Receita de automação: e-mail de agendamento com recapitulação.** Em uma [automação](../automations/automations.md) no gatilho **Agendamento marcado**, adicione uma etapa de **Requisição HTTP** que chama este endpoint com `${trigger.contact.phone_number}` (ou o e-mail do contato), depois uma etapa de **E-mail** que insere o `summary` da resposta da etapa HTTP junto com um link para o chat (o endereço do seu aplicativo seguido por `/chats/` e o ID do contato do gatilho). Sua equipe recebe o contexto do agendamento no mesmo e-mail, sem precisar abrir a caixa de entrada.

> **Lendo resumos anteriores.** Não existe um endpoint que liste resumos de chat armazenados. Guarde o texto da resposta se precisar dele mais tarde, ou gere-o novamente (cada chamada é cobrada).

### Alternativa: por ID de contato

`POST /summaries/chat-summary` com `{"contactId": "..."}` faz a mesma geração para um contato do qual você já possui o ID. Ele apenas confirma o sucesso (`{"success": true, "data": "Chat summary generated successfully"}`) e **não** retorna o texto, portanto, use `POST /summaries` quando quiser a recapitulação em si. Um membro da equipe cuja chave é limitada aos seus contatos atribuídos recebe `404` para um contato fora desse escopo.

---

## Obter um resumo diário

`GET /summaries/daily/{date}` — `date` é `YYYY-MM-DD`. Retorna o resumo para aquele dia, ou `null` em `summary` quando nenhum tiver sido gerado ainda, além da configuração da sua seção.

**cURL**

```bash
curl "https://api.dmchamp.com/v1/summaries/daily/2026-09-08?apiKey=YOUR_API_KEY"
```

**Resposta**

```json
{
  "success": true,
  "data": {
    "summary": {
      "date": "2026-09-08",
      "status": "completed",
      "generated_at": "2026-09-09T05:02:11.000Z",
      "stats": {
        "total_conversations": 42,
        "total_messages_sent": 310,
        "total_messages_received": 268,
        "human_alerts": 3,
        "bookings": 5,
        "new_contacts": 11,
        "sales": 2
      },
      "sections": {
        "wins_losses_improvements": "## Wins\n- ...",
        "tasks_action_items": "- Call Jane back about the sibling discount",
        "human_alerts_reviews": "...",
        "sentiment_analysis": "...",
        "booked_meetings_sales": "..."
      },
      "contact_map": { "Jane Doe": "uid_whatsapp_31612345678" },
      "auto_tasks": [],
      "created_task_ids": []
    },
    "section_configs": [
      { "id": "wins_losses_improvements", "name": "Wins, Losses & Improvements", "enabled": true, "position": 0 }
    ]
  }
}
```

- **`status`** — `pending`, `generating`, `completed` ou `failed` (com `error` definido). Consulte este endpoint após uma regeneração até que ele indique `completed`.
- **`sections`** — uma string markdown por seção, indexada pelo ID da seção. As cinco seções padrão são `wins_losses_improvements`, `tasks_action_items`, `human_alerts_reviews`, `sentiment_analysis` e `booked_meetings_sales`; seções que você adiciona em **Configurar** na página de Resumos Diários recebem um ID `custom_…`. Nomes e ordem são repetidos em `section_configs`.
- **`contact_map`** — nome de exibição para ID de contato, para que você possa transformar os nomes no texto em links.
- **`auto_tasks`** / **`created_task_ids`** — os itens de ação que a IA extraiu e as tarefas que ela criou a partir deles (quando **Criar cartões de tarefa a partir de itens de ação** estiver ativado).

| Status | Significado |
|---|---|
| `400` | `date` não está `YYYY-MM-DD`, ou está no futuro. |
| `403` | Os Resumos Diários estão desativados para a conta. |

> Prefere um push em vez de consulta (polling)? O [evento de webhook](../integrations/webhooks.md) **Resumo Diário Criado** entrega o mesmo payload no momento em que um resumo matinal é concluído.

---

## Regenerar um resumo diário

`POST /summaries/daily/{date}/regenerate` — inicia uma nova geração para aquele dia em segundo plano e retorna imediatamente com `status: "generating"` e `sections` vazio. Consulte `GET /summaries/daily/{date}` até que seja concluído. As mesmas regras se aplicam ao link **Tentar novamente** no aplicativo.

O corpo opcional `{"deleteTasks": false}` mantém as tarefas que a execução anterior criou; por padrão, elas são excluídas e recriadas a partir do novo resumo. Envie um booleano real — a string `"false"` é ignorada e tratada como o padrão.

```bash
curl -X POST "https://api.dmchamp.com/v1/summaries/daily/2026-09-08/regenerate?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"deleteTasks": false}'
```

---

## Referência rápida

| Tarefa | Endpoint |
|---|---|
| Gerar um resumo de chat e obter o texto | `POST /summaries` |
| Gerar um resumo de chat por ID de contato (nenhum texto retornado) | `POST /summaries/chat-summary` |
| Ler o resumo de um dia | `GET /summaries/daily/{date}` |
| Regenerar o resumo de um dia | `POST /summaries/daily/{date}/regenerate` |
