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

# Call Analysis

> Turn every call into structured data — summaries, extracted fields, tags, and delivery to your systems

After a call ends, OSVI can run the transcript through an LLM and turn the conversation into structured results: a summary, the specific data points you asked for, tags, and callback detection — then deliver all of it to your webhook or a Google Sheet. Everything here is configured per agent on the **Call Analysis** tab.

<Note>
  Analysis runs only for calls that were answered and produced a transcript (`call_status: picked`), and only when post-call analysis is enabled on the agent.
</Note>

## Analysis model and prompt

* **LLM model** — choose the provider and model used for analysis (OpenAI, Azure OpenAI, or Claude). This is independent of the model the agent uses live on the call.
* **Analysis prompt** — instructions for the analysis pass: what the summary should focus on, what counts as a successful call, anything domain-specific the model should pay attention to.

## Data extraction

Define the fields you want pulled out of every conversation. For each field you set:

| Property     | Description                                                               |
| ------------ | ------------------------------------------------------------------------- |
| **Name**     | The key it appears under in results (e.g. `email`, `preferred_slot`).     |
| **Type**     | `text`, `number`, `boolean`, or `date`.                                   |
| **Hint**     | A description telling the model what to look for.                         |
| **Required** | Whether the field must be filled for the extraction to count as complete. |

Extracted values appear on each call's **Analysis** tab in [Conversations](/platform/conversations), in webhook payloads under `data_capture`, and in CSV exports.

### Output schema

Beyond flat fields, you can define a custom **output schema** — a JSON shape the analysis must produce. Use **simple** mode for a fixed structure, or **conditional** mode when the shape depends on how the call went (e.g. an `appointment` object only when one was booked). The result is delivered as `structured_output` in webhooks.

## Call tags

Define tags (e.g. `interested`, `wrong-number`, `escalation`) and the analysis pass applies the matching ones to each call. Tags show up as a filter in [Conversations](/platform/conversations), so they're the fastest way to slice call outcomes without reading transcripts.

## Callbacks

Enable **callback detection** and the analysis pass watches for moments where the caller asked to be called back ("call me after 6pm"). You tune the detection prompt; when a callback is detected, OSVI schedules the follow-up call accordingly.

## Do Not Disturb

Maintain a per-agent DND list of numbers that must not be called. Numbers on the list are skipped automatically by campaigns, and you can review the list from this tab. Callers who opt out during a conversation can be added so they're never dialled again.

## Integrations — getting results out

### Webhooks

Send analysis results to any HTTP endpoint you control. Each agent can have multiple webhook integrations; each fires independently after every analysed call. You control the method, URL (with `{{placeholder}}` support), headers, and body — either **auto mode** (toggle data sections on/off) or a fully **custom JSON template**.

The complete payload contract, template expression reference, and delivery semantics are documented in the [post-call webhook reference](/api-reference/endpoint/webhook).

### Google Sheets

Append a row to a spreadsheet after every analysed call — connect your Google account, pick the spreadsheet and sheet, and map analysis fields to columns. Useful when the destination is a human reviewing outcomes rather than a system.

### Integration logs

Every delivery attempt — payload, response status, response body — is recorded in **Integration Logs** on this tab. Failed deliveries can be retried from here, individually or in bulk, and a **Test** button sends a sample payload so you can verify your endpoint before going live.

<Tip>
  Start with the webhook in auto mode and log what arrives. Once you've seen a few real payloads, tighten it to a custom template with exactly the fields your system needs.
</Tip>
