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

# Brief Operators Before Connecting Callers

> Configure warm transfers where the AI agent briefs the operator before connecting the caller, providing context and ensuring smooth handoffs for personalized customer service.

Brief operators before connecting callers. Warm transfers let your agent speak with the operator first — providing context so customers don't need to re-explain their situation.

**What you'll learn:** Warm transfer workflow, configuration steps, operator briefing scripts, and best practices for context handoffs.

## How Warm Transfer Works

1. **Agent determines the caller needs transfer** (based on conversation and configured description)
2. **Agent calls the operator** at configured endpoint
3. **Agent speaks with operator** to provide context about the caller and situation
4. **Agent bridges the call** - all three parties are connected
5. **Operator handles the call** - when the operator disconnects, the agent can optionally resume the conversation with the caller

## When to Use Warm Transfer

**Best for:**

* Complex customer issues requiring context
* High-value calls where personalization matters
* Situations where operator needs background before speaking
* Escalations where caller shouldn't repeat information

**Choose cold transfer instead when:**

* Simple routing to departments or menus
* High-volume, basic escalations
* Speed matters more than context

## Configuring Warm Transfer

<Accordion title="Quick Start: Configure via API">
  This example shows only the transfer-related fields. The PUT endpoint requires the full agent configuration including `name`, `config.primaryLanguage`, `config.ttsConfig`, and `config.llmConfig`.

  ```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
  curl -X PUT "https://blackbox.dasha.ai/api/v1/agents/{agentId}" \
    -H "Authorization: Bearer YOUR_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "name": "Your Agent Name",
      "config": {
        "primaryLanguage": "en-US",
        "ttsConfig": { ... },
        "llmConfig": { ... },
        "features": {
          "transfer": {
            "type": "warm",
            "description": "Transfer when customer requests human agent or issue is complex",
            "endpointDestination": "+15550100",
            "callerIdMode": "userPhoneNumber",
            "interactionWithOperator": {
              "type": "smartV1",
              "additionalInstructions": "Brief operator in under 10 seconds. Include customer name and issue summary."
            },
            "sayPhraseToCustomer": "Let me connect you with a specialist. One moment please.",
            "continueAfterOperatorDisconnected": true,
            "continueRecordingInTransfer": true,
            "failoverBehavior": {
              "continueConversation": true,
              "staticPhrase": "All specialists are busy. Let me try to help you directly."
            }
          }
        }
      }
    }'
  ```
</Accordion>

### Configure via Dashboard

1. Open your agent's configuration
2. Navigate to the **Features** tab
3. Scroll to **Call Transfers** section
4. Select **Warm Transfer** type

### Step 2: Configure Basic Settings

**Transfer Description**

* Guides the language model on when to use this transfer
* Example: "Transfer to a human agent when the customer explicitly requests to speak with a person, or when the issue is too complex for you to handle."
* Be specific about triggers: explicit requests, complex scenarios, frustrated customers, etc.

**Endpoint Destination**

* Phone number: `+1234567890`
* SIP URI: `sip:operator@yourdomain.com`

**Caller ID Mode**

* **Agent Phone Number**: Operator sees agent's number (default)
* **Original Caller Number**: Operator sees caller's number

### Step 3: Configure Operator Interaction

Choose how the agent communicates with the operator before bridging:

**Static Mode**

* Predefined phrase spoken to operator
* Example: "I have a customer on the line with a question about billing. I'm connecting you now."
* Fast and consistent
* Good for simple context

**Smart Mode**

* Language model generates context based on conversation
* Agent summarizes caller's situation intelligently
* Example generated phrase: "Hi, I have John Smith on the line. He's experiencing an issue with his recent invoice and needs help understanding the charges. I'm connecting him now."
* More personalized and contextual
* Best for complex scenarios

**Optional Instructions for Smart Mode:**

* Guide the language model's summary style
* Example: "Keep operator briefing under 10 seconds. Focus on the specific problem and any relevant account details."

### Step 4: Configure Caller Experience

**Say Phrase to Customer** (optional)

* What agent says to caller before transfer
* Example: "I'm connecting you with a specialist who can help you with that. Please hold for just a moment."
* Manages caller expectations during transfer

**Continue After Operator Disconnect**

* Toggle: Yes or No
* If enabled: Agent can resume conversation if operator hangs up
* If disabled: Call ends when operator disconnects
* Recommended: Enable for customer service scenarios

### Step 5: Configure Recording and Recognition

**Continue Recording During Transfer**

* Toggle: Yes or No
* If enabled: Call recording continues while transferred
* Useful for quality assurance and compliance

**Continue Speech Recognition**

* Toggle: Yes or No
* If enabled: Speech-to-text remains active during transfer
* Useful for transcript completeness

### Step 6: Configure Three-Way Announcement (Optional)

Speak to both caller and operator simultaneously right before bridging:

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
"threewayMessaging": {
  "type": "static",
  "phrase": "Connecting you now."
}
```

Or use AI to generate a contextual announcement:

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
"threewayMessaging": {
  "type": "smartV1",
  "additionalInstructions": "Keep it brief and professional"
}
```

Both parties hear the same message at the exact moment of connection — useful for compliance notices or smooth handoff transitions.

### Step 7: Configure Hold Media (Optional)

**Hold Media**

* Audio file played while transfer is being established
* Upload hold music or messages
* Example: "Please wait while we connect you with an agent."
* Improves experience during connection delays

### Step 8: Configure Transfer Routes (Optional)

Multiple transfer destinations for intelligent routing:

**Example: Department-based routing**

* Route Name: "Billing Department"

* Description: "Use for billing and payment questions"

* Destination: `+1234567891`

* Route Name: "Technical Support"

* Description: "Use for technical issues and troubleshooting"

* Destination: `+1234567892`

The language model selects the appropriate route based on conversation context.

### Step 9: Configure Failover Behavior

What happens if transfer fails (number busy, unavailable, or doesn't answer):

**Failover Options:**

* **Continue Conversation**: Agent resumes and tries to help
* **End Call**: Call terminates gracefully

**System Message** (for agent context):

* Example: "The operator is unavailable. Apologize and offer to help or schedule a callback."

**Static Phrase** (to caller):

* Example: "I apologize, but all our representatives are currently assisting other customers. Would you like me to help you, or can I schedule a callback?"

## Configuration Example

<Accordion title="Example: Complete Warm Transfer Configuration">
  This shows the `config.features.transfer` object structure for warm transfer:

  ```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
  {
    "type": "warm",
    "description": "Transfer when customer explicitly requests a human agent, or when their issue requires account-level access you don't have.",
    "endpointDestination": "+15550100",
    "callerIdMode": "userPhoneNumber",
    "interactionWithOperator": {
      "type": "smartV1",
      "additionalInstructions": "Brief the operator in under 10 seconds. Mention customer name, issue category, and any relevant account details."
    },
    "sayPhraseToCustomer": "Let me connect you with someone who can help with that immediately. One moment please.",
    "continueAfterOperatorDisconnected": true,
    "continueRecordingInTransfer": true,
    "continueRecognitionInTransfer": true,
    "holdMedia": {
      "isEnabled": true,
      "mediaFileId": "your-media-file-id"
    },
    "failoverBehavior": {
      "continueConversation": true,
      "systemMessage": "Operator unavailable. Offer to help or schedule callback.",
      "staticPhrase": "I'm sorry, our specialists are all busy right now. I can try to help you, or I can schedule a callback. Which would you prefer?"
    }
  }
  ```

  Example using static operator interaction instead of smart mode:

  ```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
  {
    "type": "warm",
    "description": "Transfer to billing department",
    "endpointDestination": "+15550100",
    "interactionWithOperator": {
      "type": "static",
      "sayPhraseToOperator": {
        "phrase": "I have a customer on the line with a billing question. Connecting now.",
        "beforeOperator": false
      },
      "waitFirstAnswerFromOperator": true,
      "waitChecksTimeoutInS": 4
    },
    "sayPhraseToCustomer": "Connecting you to billing now.",
    "continueAfterOperatorDisconnected": false
  }
  ```
</Accordion>

## Common Use Cases

### Customer Service Escalations

**Configuration:**

* Smart Mode with instructions: "Brief operator about customer issue and sentiment"
* Continue After Disconnect: Yes
* Hold media: Professional hold music

**Why:** Complex issues need context; agent can help if transfer fails

### VIP Customer Handling

**Configuration:**

* Smart Mode with instructions: "Mention customer VIP status, name, and specific request"
* Caller ID: Original Caller Number
* Hold media: Premium hold experience

**Why:** VIP customers expect personalized, seamless service

### Technical Support Escalations

**Configuration:**

* Smart Mode with instructions: "Describe technical issue, steps already attempted, and error codes mentioned"
* Continue Recording: Yes
* Continue Speech Recognition: Yes

**Why:** Operators need technical context; recording captures full troubleshooting session

## Troubleshooting

### Problem: Operators Lack Context

**Solution:** Switch from Static to Smart Mode. Improve Smart Mode instructions to be more specific about what information operators need. Review example transfers to identify missing context.

### Problem: Operator Briefings Too Long

**Solution:** Update Smart Mode instructions to emphasize brevity (e.g., "Keep briefing under 10 seconds"). Use Static Mode for simpler scenarios.

### Problem: Transfers Take Too Long

**Solution:** Warm transfers inherently take longer than cold transfers. Consider cold transfer for less complex scenarios. Optimize hold media to keep callers engaged.

### Problem: Operator Doesn't Answer

**Solution:** Verify endpoint is correct and operational. Configure appropriate failover behavior. Enable "Continue After Disconnect" so agent can help.

## Next steps

<CardGroup cols={2}>
  <Card title="Cold Transfer" icon="phone-arrow-right" href="/docs/advanced-features/call-transfers/cold-transfer">
    Faster, simpler routing
  </Card>

  <Card title="HTTP Transfer" icon="webhook" href="/docs/advanced-features/call-transfers/http-transfer">
    Dynamic routing decisions
  </Card>

  <Card title="Call Transfers Overview" icon="phone" href="/docs/advanced-features/call-transfers">
    Compare all transfer types
  </Card>

  <Card title="Maximum Call Duration" icon="clock" href="/docs/advanced-features/max-call-duration">
    Control transferred call length
  </Card>
</CardGroup>
