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

# fact_conversations

> Uma linha por cada conversa atendida por um agente.

# fact\_conversations

Cada linha representa uma conversa na plataforma de agentes. Inclui informações do agente que a atendeu, da equipe, do estado final e dados do fluxo de conversa associado.

## Que perguntas responde?

* Quantas conversas foram atendidas em um período?
* Qual agente atendeu cada conversa?
* Quanto tempo levou para resolver uma conversa?
* Quantas conversas foram inbound vs outbound?
* Quantas transferências cada conversa teve?
* Qual foi a avaliação (rating) do usuário?

## Colunas

| Coluna                   | Tipo       | Descrição                                                                                     |
| ------------------------ | ---------- | --------------------------------------------------------------------------------------------- |
| `conversation_id`        | Int32      | Identificador único da conversa                                                               |
| `company_id`             | Int32      | Identificador da empresa (filtrado automaticamente)                                           |
| `survey_user_id`         | Int64      | Identificador do fluxo de conversa associado. `0` se não tiver fluxo vinculado                |
| `contact_id`             | Int32      | Identificador do contato na plataforma de agentes                                             |
| `created_at`             | DateTime64 | Data e hora de criação da conversa                                                            |
| `finished_at`            | DateTime64 | Data e hora de fechamento. `NULL` se continuar aberta                                         |
| `assigned_at`            | DateTime64 | Data e hora de atribuição ao agente. `NULL` se não foi atribuída                              |
| `status`                 | String     | Estado atual: `OPEN`, `CLOSED`, `PENDING`, etc.                                               |
| `finish_type`            | String     | Como foi fechada: `AGENT`, `SYSTEM`, `TIMEOUT`, etc.                                          |
| `rating`                 | Int32      | Avaliação do usuário (1-5). `0` se não avaliou                                                |
| `is_redirected`          | Bool       | `true` se a conversa foi transferida pelo menos uma vez                                       |
| `agent_id`               | Int32      | Identificador do agente que atendeu. `0` se não foi atribuída                                 |
| `agent_name`             | String     | Nome completo do agente                                                                       |
| `tag_id`                 | Int32      | Identificador da tag/fila atribuída                                                           |
| `tag_name`               | String     | Nome da tag/fila                                                                              |
| `team_id`                | Int32      | Identificador da equipe                                                                       |
| `team_name`              | String     | Nome da equipe                                                                                |
| `channel_id`             | Int32      | Identificador do canal (linha de WhatsApp)                                                    |
| `inbound_outbound`       | String     | `inbound` se o usuário iniciou a conversa, `outbound` se foi iniciada por campanha            |
| `campaign_name`          | String     | Nome da campanha associada                                                                    |
| `transfer_count`         | UInt32     | Número de transferências que a conversa teve                                                  |
| `first_agent_message_at` | DateTime64 | Data da primeira mensagem do agente. `NULL` se o agente não respondeu                         |
| `first_response_sec`     | Int32      | Segundos entre a criação da conversa e a primeira mensagem do agente. `NULL` se não respondeu |
| `helpdesk_contact_id`    | String     | Identificador do contato no CRM externo (se existe integração)                                |
| `contact_wa_id`          | String     | Número de WhatsApp do contato                                                                 |

## Consultas de exemplo

### Conversas por agente nos últimos 30 dias

```sql theme={null}
SELECT
    agent_name,
    count() AS total_conversas,
    countIf(status = 'CLOSED') AS fechadas,
    round(avg(if(finished_at IS NOT NULL,
        dateDiff('minute', created_at, finished_at), NULL)), 1) AS tempo_resolucao_min_medio
FROM client_analytics.fact_conversations
WHERE created_at >= now() - INTERVAL 30 DAY
GROUP BY agent_name
ORDER BY total_conversas DESC
```

### Nível de serviço por equipe (SLA personalizável)

```sql theme={null}
SELECT
    team_name,
    count() AS conversas,
    -- Você pode trocar 120 pelo limiar que precisar (em segundos)
    round(countIf(first_response_sec <= 120) * 100.0 / count(), 1) AS sla_120s_pct,
    round(countIf(first_response_sec <= 60) * 100.0 / count(), 1) AS sla_60s_pct,
    round(avg(first_response_sec), 0) AS media_resposta_seg
FROM client_analytics.fact_conversations
WHERE created_at >= now() - INTERVAL 7 DAY
  AND first_response_sec IS NOT NULL
GROUP BY team_name
ORDER BY sla_120s_pct DESC
```

### Conversas inbound vs outbound por dia

```sql theme={null}
SELECT
    toDate(created_at) AS dia,
    inbound_outbound,
    count() AS total
FROM client_analytics.fact_conversations
WHERE created_at >= now() - INTERVAL 30 DAY
GROUP BY dia, inbound_outbound
ORDER BY dia DESC
```
