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 (stored call audio)

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 '{
    "features": { "recording_enabled": true },
    "post_call": {
      "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": {
      "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. post_call covers summary, structured_extraction, and evaluation — recording is an agent-level toggle (features.recording_enabled) and can't be overridden per call.

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

Extraction runs whenever a json_schema is present. If you don't supply your own prompt, Rymi generates one automatically from the schema.

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 the agent's features.recording_enabled is true, Rymi records the call audio. 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",
    "skip_reason": null,
    "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.