Skip to content

Post-Call Intelligence

Every completed call can automatically produce a summary, sentiment analysis, structured data extraction, evaluation scoring, and a recording — all powered by LLM analysis of the call transcript.

How It Works

text
Call ends → Transcript finalized → Post-Call Intelligence Pipeline

                                        ├─ Summary (AI-generated key takeaways)
                                        ├─ Sentiment (positive / neutral / negative)
                                        ├─ Structured Extraction (JSON from your schema)
                                        ├─ Evaluation (rubric-based scoring)
                                        └─ Recording (LiveKit Egress artifact)

Post-call intelligence runs asynchronously after a call reaches terminal state. The intelligence_status field on the call record tracks progress: not_startedpendingcompleted (or failed).

Configuration

Post-call intelligence is configured at two levels:

1. Agent Defaults

Set post_call on an agent to apply to all calls with that agent:

bash
curl -X PUT https://api.rymi.live/v1/agents/YOUR_AGENT_ID \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "post_call": {
      "recording": { "enabled": true },
      "summary": { "enabled": true },
      "structured_extraction": {
        "json_schema": {
          "type": "object",
          "properties": {
            "appointment_booked": { "type": "boolean" },
            "customer_sentiment": { "type": "string" },
            "follow_up_date": { "type": "string" },
            "key_objections": { "type": "array", "items": { "type": "string" } }
          }
        }
      },
      "evaluation": {
        "rubric": "Did the agent qualify the lead, handle objections professionally, and attempt to book a follow-up?"
      }
    }
  }'

2. Per-Call Overrides

Override the agent defaults for a specific call:

bash
curl -X POST https://api.rymi.live/v1/calls \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "agent_id": "YOUR_AGENT_ID",
    "participants": [
      { "transport": "pstn", "identity": "+15551234567", "from_number": "+15559876543" }
    ],
    "post_call": {
      "recording": { "enabled": true },
      "summary": { "enabled": true },
      "structured_extraction": {
        "json_schema": {
          "type": "object",
          "properties": {
            "order_confirmed": { "type": "boolean" }
          }
        }
      }
    }
  }'

The per-call config is merged with the agent defaults and snapped onto the call record at creation time.

Features

Summary

When summary.enabled is true, an AI model generates a concise summary of the call conversation.

json
{
  "summary": {
    "enabled": true,
    "prompt": "Focus on action items and customer intent."
  }
}

The optional prompt field guides the summary generation.

Sentiment Analysis

Sentiment is always analyzed when summary is enabled. The result is one of positive, neutral, or negative.

Structured Data Extraction

Define a JSON schema and Rymi will extract structured data from every call transcript:

json
{
  "structured_extraction": {
    "json_schema": {
      "type": "object",
      "properties": {
        "appointment_booked": { "type": "boolean" },
        "customer_name": { "type": "string" },
        "budget_range": { "type": "string" },
        "next_steps": { "type": "array", "items": { "type": "string" } }
      }
    }
  }
}

Rymi auto-generates an extraction prompt from your schema. The result is stored on call_intelligence.structured_data.

TIP

Both json_schema and a prompt must be present for extraction to run. When you provide only a json_schema, Rymi generates the extraction prompt automatically.

Evaluation Scoring

Provide a rubric to evaluate whether the agent met its goals:

json
{
  "evaluation": {
    "rubric": "Did the agent: 1) Greet the customer warmly, 2) Identify the issue, 3) Provide a resolution or escalation?"
  }
}

The result includes:

FieldTypeDescription
passedbooleanWhether the agent met the rubric criteria
scorenumberNumeric score (0-1)
reasoningstringExplanation of the evaluation

Recording

When recording.enabled is true, Rymi starts a LiveKit Egress recording at the call level. Recordings are stored and accessible via GET /v1/calls/:id/recording.

Retrieving Intelligence

Full Call Detail

bash
curl https://api.rymi.live/v1/calls/CALL_ID \
  -H "Authorization: Bearer YOUR_API_KEY"

The response includes an intelligence block:

json
{
  "intelligence": {
    "status": "completed",
    "summary": "The customer called about a billing issue. The agent resolved it by applying a credit.",
    "sentiment": "positive",
    "structured_data": {
      "appointment_booked": false,
      "customer_name": "Alice",
      "issue_resolved": true
    },
    "evaluation": {
      "passed": true,
      "score": 0.9,
      "reasoning": "The agent greeted warmly, identified the issue quickly, and resolved it."
    },
    "errors": []
  }
}

Summary Only

bash
curl https://api.rymi.live/v1/calls/CALL_ID/summary \
  -H "Authorization: Bearer YOUR_API_KEY"

Recording Only

bash
curl https://api.rymi.live/v1/calls/CALL_ID/recording \
  -H "Authorization: Bearer YOUR_API_KEY"

Returns signed URLs for the recording artifacts.

Reprocessing

If analysis failed or you want to retry with updated config:

bash
curl -X POST https://api.rymi.live/v1/calls/CALL_ID/reprocess \
  -H "Authorization: Bearer YOUR_API_KEY"

This re-queues the post-call intelligence pipeline for the call.

Transcript Privacy

If features.transcription_enabled is false on the agent:

  • No transcript is persisted
  • No transcript data packets are sent to participants
  • Post-call transcript analysis is skipped entirely
  • intelligence_status stays at not_started

Recording can still be enabled independently of transcription.