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

# Call Experience Features

> Fine-tune how your voice agent sounds and behaves — pace control, silence fillers, backchanneling, greeting variants, pronunciation, business hours, and more.

# Call Experience Features

These features control how your voice agent sounds, reacts, and behaves during calls. They're configured via voice settings and inject behavior through the system prompt — no explicit LLM tool calls needed.

***

## Dynamic Speed / Pace Control

Adjusts the agent's speaking speed based on conversation context. When explaining complex topics, the agent slows down. For simple confirmations, it speeds up.

```json theme={null}
{
  "dynamicPaceEnabled": true
}
```

The system prompt is injected with provider-specific pacing instructions.

***

## Silence Fillers

When the agent is processing a response (thinking), it speaks natural filler phrases to avoid awkward silence.

```json theme={null}
{
  "silenceFillersEnabled": true,
  "silenceFillerPhrases": [
    "Let me think about that...",
    "One moment please...",
    "Let me check that for you...",
    "Bear with me..."
  ]
}
```

| Setting                 | Type      | Default     | Description            |
| ----------------------- | --------- | ----------- | ---------------------- |
| `silenceFillersEnabled` | boolean   | `false`     | Enable silence fillers |
| `silenceFillerPhrases`  | string\[] | default set | Custom filler phrases  |

***

## Instant Filler Words

Short, natural sounds like "hmm", "aha", or "acchha" that play **instantly** when the user stops speaking — before the AI starts generating a response. This eliminates the perceived gap between the user finishing and the agent replying, creating a human-like conversational rhythm.

Unlike silence fillers (which are LLM-driven phrases for tool calls), instant filler words are fired at the audio level and don't wait for the LLM.

```json theme={null}
{
  "fillerWordsEnabled": true,
  "fillerWords": ["hmm", "aha", "um", "okay"],
  "fillerWordsMinChars": 10
}
```

| Setting               | Type      | Default           | Description                                                                                  |
| --------------------- | --------- | ----------------- | -------------------------------------------------------------------------------------------- |
| `fillerWordsEnabled`  | boolean   | `false`           | Enable instant filler words                                                                  |
| `fillerWords`         | string\[] | language defaults | Custom filler words. If empty, uses language-appropriate defaults                            |
| `fillerWordsMinChars` | number    | `10`              | Minimum user transcript length to trigger a filler. Short replies ("yes", "no") skip fillers |

**Language defaults:**

| Language | Default Fillers                            |
| -------- | ------------------------------------------ |
| Hindi    | "hmm", "acchha", "haan", "theek hai", "ji" |
| English  | "hmm", "uh huh", "um", "right", "okay"     |
| Other    | "hmm", "aha", "um", "okay"                 |

**How it works:**

1. User finishes speaking → STT produces final transcript
2. If transcript is longer than `fillerWordsMinChars`, a random filler word is spoken immediately via TTS
3. The filler is interruptible — once the LLM response is ready, it seamlessly takes over
4. The filler uses the same voice as the agent, so it sounds natural

**When to use:**

* Support agents that handle complex queries (user asks a long question → agent says "hmm" while thinking)
* Sales calls where natural flow matters
* Indian language agents where conversational fillers are culturally expected

**When to skip:**

* IVR-style bots with short yes/no interactions
* Agents that already respond very quickly (the filler may overlap with the real response)

***

## Backchanneling

The agent interjects brief acknowledgment cues ("uh huh", "got it", "I see") while the caller is speaking, showing active listening.

```json theme={null}
{
  "backchannelingEnabled": true,
  "backchannelingFrequency": "medium",
  "backchannelingPhrases": ["uh huh", "got it", "I see", "okay", "right"]
}
```

| Setting                   | Type      | Default     | Description                        |
| ------------------------- | --------- | ----------- | ---------------------------------- |
| `backchannelingEnabled`   | boolean   | `false`     | Enable active listening cues       |
| `backchannelingFrequency` | string    | `medium`    | Frequency: `low`, `medium`, `high` |
| `backchannelingPhrases`   | string\[] | default set | Custom acknowledgment phrases      |

***

## Greeting Variants (A/B Testing)

Randomly select from multiple greeting messages for A/B testing.

```json theme={null}
{
  "greetingVariantsEnabled": true,
  "greetingVariants": [
    "Hi there! How can I help you today?",
    "Hello! Thanks for calling. What can I do for you?",
    "Welcome! I'm here to help. What's on your mind?"
  ]
}
```

A random variant is selected at the start of each call.

***

## Pronunciation Dictionary

Map words or acronyms to their phonetic pronunciation for the TTS engine.

```json theme={null}
{
  "pronunciationDictEnabled": true,
  "pronunciationDictionary": {
    "HIPAA": "hip-uh",
    "SQL": "sequel",
    "GIF": "jiff",
    "thinnestAI": "thinnest A I"
  }
}
```

Before speaking, the agent replaces dictionary keys with their pronunciation values.

***

## Business Hours

Configure operating hours and after-hours behavior. When a call comes in outside business hours, the agent can play a custom greeting, switch to an after-hours prompt, or end the call.

```json theme={null}
{
  "businessHoursEnabled": true,
  "businessHours": {
    "timezone": "America/New_York",
    "schedule": {
      "monday": { "enabled": true, "open": "09:00", "close": "17:00" },
      "tuesday": { "enabled": true, "open": "09:00", "close": "17:00" },
      "wednesday": { "enabled": true, "open": "09:00", "close": "17:00" },
      "thursday": { "enabled": true, "open": "09:00", "close": "17:00" },
      "friday": { "enabled": true, "open": "09:00", "close": "17:00" },
      "saturday": { "enabled": false },
      "sunday": { "enabled": false }
    }
  },
  "afterHoursGreeting": "Thank you for calling. Our office is currently closed.",
  "afterHoursPrompt": "Take a message and let the caller know we'll return their call on the next business day.",
  "afterHoursAction": "continue"
}
```

| After Hours Action | Behavior                                         |
| ------------------ | ------------------------------------------------ |
| `continue`         | Use the after-hours prompt and continue the call |
| `end_call`         | Play the after-hours greeting and hang up        |

***

## Holiday Calendar

Extend business hours with holiday support. When today matches a holiday date, the agent uses after-hours behavior.

```json theme={null}
{
  "holidayCalendarEnabled": true,
  "holidays": [
    { "date": "2026-12-25", "name": "Christmas Day", "recurring": true },
    { "date": "2026-01-01", "name": "New Year's Day", "recurring": true },
    { "date": "2026-07-04", "name": "Independence Day", "recurring": true },
    { "date": "2026-11-26", "name": "Thanksgiving", "recurring": false }
  ]
}
```

Set `recurring: true` for holidays that repeat every year (matches month/day only).

***

## Barge-In Phrases (Smart Interruption)

Configure specific phrases that immediately interrupt the agent, even if interruption threshold isn't met.

```json theme={null}
{
  "bargeInEnabled": true,
  "bargeInPhrases": ["stop", "wait", "hold on", "actually", "one second"]
}
```

***

## Call Whisper / Agent Coaching

A supervisor can send text messages to the agent during a live call. The agent sees the coaching message but the caller doesn't hear it.

```json theme={null}
{
  "callWhisperEnabled": true,
  "whisperDisplayMode": "overlay"
}
```

***

## Conversational Memory (Cross-Call)

Remember context from previous calls with the same phone number. The agent receives a summary of past interactions at the start of each new call.

```json theme={null}
{
  "conversationalMemoryEnabled": true,
  "memoryMaxPreviousCalls": 5,
  "memoryContextTokenBudget": 500
}
```

| Setting                       | Type    | Default | Description                   |
| ----------------------------- | ------- | ------- | ----------------------------- |
| `conversationalMemoryEnabled` | boolean | `false` | Enable cross-call memory      |
| `memoryMaxPreviousCalls`      | integer | `5`     | Max previous calls to include |
| `memoryContextTokenBudget`    | integer | `500`   | Max tokens for memory context |

***

## Real-Time Translation

The agent automatically detects the caller's language and responds in kind.

```json theme={null}
{
  "realTimeTranslationEnabled": true,
  "translationPrimaryLanguage": "English",
  "translationTargetLanguages": ["Spanish", "French", "German", "Hindi"]
}
```

Unlike [Multilingual Auto-Switch](/docs/voice/tools/multilingual), this doesn't switch the TTS voice — it relies on the LLM's multilingual capabilities.

***

## Voice Cloning

Override the TTS voice with a cloned voice ID for a personalized experience.

```json theme={null}
{
  "voiceCloningEnabled": true,
  "clonedVoiceId": "your-cloned-voice-id",
  "clonedVoiceProvider": "elevenlabs"
}
```

***

## Emotion-Aware TTS

Inject provider-specific emotion instructions into the system prompt so the agent adjusts its vocal delivery based on conversation context.

```json theme={null}
{
  "emotionEnabled": true
}
```

Works with Cartesia, ElevenLabs, and other providers that support SSML or emotion tags.

***

## Example — Create Agent with Call Experience Features

```bash theme={null}
curl -X POST https://api.thinnest.ai/v1/agents \
  -H "Authorization: Bearer $THINNESTAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Premium Support Agent",
    "model": "gpt-4o",
    "instructions": "You are a premium support agent. Be warm, professional, and helpful.",
    "voiceEnabled": true,
    "transcriber": { "provider": "deepgram", "model": "nova-2-conversationalai" },
    "voice": { "provider": "deepgram", "voiceId": "aura-2-thalia-en" },
    "dynamicPaceEnabled": true,
    "silenceFillersEnabled": true,
    "silenceFillerPhrases": ["Let me check that...", "One moment please..."],
    "backchannelingEnabled": true,
    "backchannelingFrequency": "medium",
    "greetingVariantsEnabled": true,
    "greetingVariants": [
      "Hi there! How can I help you today?",
      "Hello! Thanks for calling. What can I do for you?"
    ],
    "pronunciationDictEnabled": true,
    "pronunciationDictionary": { "thinnestAI": "thinnest A I", "SQL": "sequel" },
    "businessHoursEnabled": true,
    "businessHours": {
      "timezone": "America/New_York",
      "schedule": {
        "monday": { "enabled": true, "open": "09:00", "close": "17:00" },
        "tuesday": { "enabled": true, "open": "09:00", "close": "17:00" },
        "wednesday": { "enabled": true, "open": "09:00", "close": "17:00" },
        "thursday": { "enabled": true, "open": "09:00", "close": "17:00" },
        "friday": { "enabled": true, "open": "09:00", "close": "17:00" },
        "saturday": { "enabled": false },
        "sunday": { "enabled": false }
      }
    },
    "afterHoursGreeting": "Our office is closed. Please call back during business hours.",
    "afterHoursAction": "end_call",
    "conversationalMemoryEnabled": true,
    "memoryMaxPreviousCalls": 5
  }'
```
