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

# Obter resultado da chamada

> Retorna o resultado da conversa de uma chamada: estado da análise, dados coletados, resumo e transcrição

# Obter resultado da chamada

Retorna o que o agente capturou em uma conversa: se uma pessoa atendeu, o resultado, os dados que o agente foi configurado para coletar, um resumo e a transcrição completa.

É a mesma informação que o webhook `event_call_report` entrega, disponível por consulta. Use para reconciliar uma chamada sem depender do webhook, ou para ler o resumo e a transcrição, que não entram em [Listar chamadas](/pt-br/api-reference/endpoints/list-calls) por causa do tamanho.

## Endpoint

```
GET /api/v1/calls/{call_id}/insight
```

## Parâmetros de path

<ParamField path="call_id" type="string" required>
  O `id` da chamada, como devolvido por [Listar chamadas](/pt-br/api-reference/endpoints/list-calls) ou [Fazer chamada](/pt-br/api-reference/endpoints/make-call).
</ParamField>

## Cabeçalhos da requisição

<ParamField header="Authorization" type="string" required>
  Token Bearer. Formato: `Bearer talq_seu_token_de_ambiente`
</ParamField>

## Exemplo de requisição

<RequestExample>
  ```bash theme={null}
  curl -X GET "https://app.talkover.ai/api/v1/calls/01a0c5a5-390e-710a-a3aa-cab502215d09/insight" \
    -H "Authorization: Bearer talq_seu_token_de_ambiente"
  ```

  ```javascript theme={null}
  const response = await fetch(
    'https://app.talkover.ai/api/v1/calls/01a0c5a5-390e-710a-a3aa-cab502215d09/insight',
    { headers: { Authorization: 'Bearer talq_seu_token_de_ambiente' } }
  );

  const { data } = await response.json();

  if (data.analysis_status === 'pending') {
    // A análise roda depois que a chamada termina. Consulte de novo mais tarde.
  }
  ```
</RequestExample>

## Resposta

### Resposta de sucesso (200 OK)

<ResponseExample>
  ```json theme={null}
  {
    "success": true,
    "data": {
      "call_id": "01a0c5a5-390e-710a-a3aa-cab502215d09",
      "analysis_status": "completed",
      "duration": 64,
      "human_detected": true,
      "objective_achieved": false,
      "call_result": "partial_contact",
      "collected_data": {
        "intencao": null,
        "valor_acordado": null,
        "data_acordada": null,
        "whatsapp_confirmado": null
      },
      "campaign_id": "019ea766-4f99-731a-ad31-d99ac48d4812",
      "summary": "O agente tentou iniciar uma conversa com Marcos, mas a chamada foi interrompida duas vezes. Marcos confirmou sua identidade; nenhum acordo foi fechado.",
      "transcript": [
        {
          "role": "assistant",
          "content": "Oi, falo com o Marcos?",
          "timestamp": "2026-09-21T20:25:46.000000Z"
        },
        {
          "role": "user",
          "content": "Alô?",
          "timestamp": "2026-09-21T20:26:13.000000Z"
        },
        {
          "role": "assistant",
          "content": "Olá, Marcos. Aqui é a Ana, da assessoria parceira do seu financiamento.",
          "timestamp": "2026-09-21T20:26:13.000000Z"
        }
      ]
    }
  }
  ```
</ResponseExample>

### Campos da resposta

<ResponseField name="success" type="boolean" required>
  Se a requisição foi bem-sucedida.
</ResponseField>

<ResponseField name="data" type="object" required>
  <Expandable title="Objeto de resultado">
    <ResponseField name="call_id" type="string" required>
      O `id` da chamada.
    </ResponseField>

    <ResponseField name="analysis_status" type="string" required>
      Estado da análise pós-chamada. Opções: `completed`, `pending`, `unavailable`. Veja [Como ler `analysis_status`](#como-ler-analysis_status).
    </ResponseField>

    <ResponseField name="duration" type="integer | null" required>
      Duração da chamada em segundos. Vem da chamada, não da análise, então aparece em qualquer estado. `null` quando não houve tempo de conversa medido (veja as notas).
    </ResponseField>

    <ResponseField name="human_detected" type="boolean | null" required>
      Uma pessoa atendeu a chamada.
    </ResponseField>

    <ResponseField name="objective_achieved" type="boolean | null" required>
      O objetivo configurado no agente foi atingido.
    </ResponseField>

    <ResponseField name="call_result" type="string | null" required>
      Opções: `success`, `partial_contact`, `unsuccessful`.
    </ResponseField>

    <ResponseField name="collected_data" type="object | null" required>
      Os campos que o agente está configurado para coletar ("fields to collect"), com os valores extraídos da conversa. As chaves são as definidas no **seu** agente. `{}` quando nada foi coletado.
    </ResponseField>

    <ResponseField name="campaign_id" type="string | null" required>
      Campanha que originou a discagem. `null` em chamada fora de campanha. Cada retentativa é uma chamada própria, e todas apontam para a mesma campanha.
    </ResponseField>

    <ResponseField name="summary" type="string | null" required>
      Resumo da conversa produzido pela análise.
    </ResponseField>

    <ResponseField name="transcript" type="array" required>
      Falas da conversa em ordem cronológica. Vazia quando não houve conversa. Pode já vir preenchida com `analysis_status` em `pending`: a transcrição é gravada antes de a análise rodar.

      <Expandable title="Objeto de fala">
        <ResponseField name="role" type="string" required>
          Quem falou. Opções: `assistant` (o agente), `user` (a pessoa).
        </ResponseField>

        <ResponseField name="content" type="string | null" required>
          O que foi dito.
        </ResponseField>

        <ResponseField name="timestamp" type="string | null" required>
          Timestamp ISO 8601 da fala.
        </ResponseField>
      </Expandable>
    </ResponseField>
  </Expandable>
</ResponseField>

`human_detected`, `objective_achieved`, `call_result`, `collected_data` e `summary` são `null` sempre que `analysis_status` não for `completed`. Um `false` nesses campos é resultado real da análise, nunca ausência dela.

## Como ler `analysis_status`

A análise roda **depois** que a chamada termina, normalmente em menos de um minuto. Uma chamada consultada logo após o fim ainda não tem resultado.

| Valor         | Significado                                                                                                                                                      | O que fazer                                    |
| ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------- |
| `completed`   | A análise terminou. Os campos são confiáveis.                                                                                                                    | Usar.                                          |
| `pending`     | A chamada ainda está em curso, ou terminou há menos de 30 minutos e a análise ainda pode chegar.                                                                 | Consultar de novo mais tarde. Não é resultado. |
| `unavailable` | Não há análise e não haverá: ninguém atendeu (`no-answer`, `busy`, `failed`, `canceled`), a conversa foi vazia, ou a análise não foi concluída dentro da janela. | Tratar como "sem resultado".                   |

Uma chamada nunca volta de `unavailable` para `completed`. Quando vir `unavailable`, pare de consultar.

Chamadas `voicemail` seguem o fluxo normal (`pending`, depois `completed` ou `unavailable`), porque o agente pode ter falado antes de a caixa postal ser detectada.

## Respostas de erro

### 404 Não encontrado

A chamada não existe ou pertence a outro ambiente.

<ResponseExample>
  ```json theme={null}
  {
    "success": false,
    "message": "Not found",
    "error": "Not found"
  }
  ```
</ResponseExample>

### 401 Não autorizado

<ResponseExample>
  ```json theme={null}
  {
    "message": "Unauthenticated."
  }
  ```
</ResponseExample>

## Notas

<Info>
  **`duration: null`** em chamadas `voicemail`, `no-answer`, `failed` e `busy` significa que não houve tempo de conversa medido. Não é zero.
</Info>

<Info>
  **Reconciliação em lote.** Para reconciliar um dia, use [Listar chamadas](/pt-br/api-reference/endpoints/list-calls) com `include=insight`, pelo menos 30 minutos depois do fim da última chamada. O `pending` desaparece e você faz uma requisição por página em vez de uma por chamada.
</Info>

<Info>
  **Fora de propósito.** O SID do provedor, flags internos de roteamento e os demais campos da análise (sentimento, objeções, conclusão do script) não fazem parte desta resposta.
</Info>

## Endpoints relacionados

* **Listar chamadas**: `GET /api/v1/calls?include=insight` — o mesmo bloco, sem `summary` e `transcript`, para uma página inteira de chamadas.
* **Obter chamadas do agente**: `GET /api/v1/agents/{agent_id}/calls?include=insight`
* **Obter URL da gravação**: `GET /api/v1/calls/{call_id}/recording-url`
