Skip to main content

Advanced Features

BlackBox provides advanced capabilities to handle complex conversation scenarios and enhance call quality. This guide covers the key features available in the Features tab when creating or editing your agent.

Overview

The Features tab allows you to enable and configure:
  • Language Switching: Let users switch languages mid-conversation
  • Ambient Noise Handling: Add realistic background noise to agent voice output
  • Call Transfer: Route calls to human agents or other endpoints
  • Post-Call Analysis: Extract structured insights from conversations
  • Talk First: Agent speaks first when call connects
  • Max Duration: Set maximum call duration limits
  • IVR Detection: Detect answering machines and IVR systems
These features are optional and can be enabled based on your use case. Start with the basics and add advanced features as your needs grow.

Language Switching

Users can request language changes during a call.

What is Language Switching?

Language switching allows your agent to:
  • Respond to user language requests
  • Adapt voice synthesis to match the requested language
  • Continue the conversation in the target language
  • Switch back to the original language when requested

When to Use Language Switching

Ideal Use Cases:
  • Customer support for global audiences
  • Healthcare services with diverse patient populations
  • Government services in multilingual regions
  • Travel and hospitality applications
Example Scenario:
User (in English): "Hello, I need help with my account"
Agent: "Hello! I'd be happy to help. How can I assist you today?"
User: "Sorry, no English. Spanish?"
Agent (in Spanish): "¡Por supuesto! ¿En qué puedo ayudarte hoy?"

Configuration

To enable language switching:
  1. Navigate to the Features tab in the agent editor
  2. Toggle Enable Language Switching to ON
  3. Save your agent configuration
The language switching feature is a simple on/off toggle. When enabled, the agent responds to user language requests. Ensure your LLM and TTS provider support the languages users may request.
Enable the FeatureIn the Features tab:
  • Toggle Language Switching to ON
  • The agent responds to user language requests
Configure TTS for Multilingual SupportEnsure your TTS provider supports multilingual voices:
  • ElevenLabs: Multilingual V2 model supports 29 languages
  • Cartesia: Sonic model with multilingual support
  • Dasha: Multi-language voice synthesis

Requirements

For language switching to work effectively, ensure:
  1. LLM Support: Use models that handle multiple languages well
    • ✅ OpenAI GPT-4/GPT-4.1 (excellent multilingual support)
    • ✅ DeepSeek (strong multilingual capabilities)
    • ⚠️ Some specialized models may have limited language support
  2. TTS Support: Choose voices that match your target languages
    • ElevenLabs Multilingual V2: Supports 29 languages
    • Cartesia Sonic: Multilingual capabilities
    • Dasha: Supports just 2 languages, but fast
  3. System Prompt: Instruct your agent to handle language requests
    You are a multilingual customer support agent. When users request
    a language change, continue the conversation in their chosen language.
    Maintain context and conversation flow.
    
Important: Voice synthesis quality varies by language and provider. Test all target languages thoroughly before production deployment.

Ambient Noise Handling

Add realistic background noise to your agent’s voice output.

What is Ambient Noise?

Ambient noise adds natural background sounds to your agent’s audio output:
  • Makes the agent sound more realistic and human-like
  • Simulates natural environments (office, call center, etc.)
  • Adds authenticity to AI-generated voice
  • Creates a more natural conversation experience

When to Use Ambient Noise

Ideal Use Cases:
  • Agents posing as human customer service representatives
  • Scenarios where perfect audio quality seems artificial
  • Call center simulations requiring realistic background
  • Applications where environmental context matters
Example Scenarios:
  • Customer service agent appearing to work from an office
  • Sales representative calling from a realistic workplace
  • Appointment reminders that sound naturally human
  • Any scenario where pure AI voice seems too perfect

Configuration

To enable ambient noise:
  1. Navigate to the Features tab
  2. Toggle Ambient Noise to ON
  3. Adjust the noise level from 0.0 (none) to 1.0 (maximum)
  4. Test to find the right balance for your use case
Ambient Noise configuration in Features tab Configure background noise level for realistic audio output
Enable Ambient NoiseIn the Features tab:
  • Toggle Ambient Noise to ON
  • Adjust the slider to set noise intensity
  • Start with 0.3-0.5 for subtle realism
  • Preview with test calls to find optimal level

Finding the Right Level

Noise Level Guidelines:
  • 0.0: No background noise - pure AI voice (most artificial)
  • 0.2-0.4: Subtle office ambiance - natural without distraction
  • 0.5-0.7: Moderate background - noticeable call center environment
  • 0.8-1.0: Heavy ambient noise - may impact clarity
Start with 0.3-0.5 and adjust based on feedback. Too much noise can reduce call quality.

Best Practices

1. Balance Realism and Clarity
  • Use enough noise to sound natural
  • Avoid levels that impair understanding
  • Test with your target audience
2. Match Your Use Case
Office environment: 0.2-0.4
Call center: 0.4-0.6
Natural outdoor setting: 0.5-0.7
3. Consider Your Disclosure Requirements
  • Some jurisdictions require AI disclosure
  • Ambient noise doesn’t replace legal requirements
  • Be transparent about AI agent identity when required
Ambient noise adds background sound to the agent’s output - it does not filter or suppress noise from the user’s environment. This feature enhances realism, not speech recognition.

Call Transfer

Route calls to human agents, other AI agents, or external phone numbers.

What is Call Transfer?

Call transfer enables your agent to:
  • Escalate complex issues to human agents
  • Route calls to departments or specialists
  • Forward calls to external phone numbers
  • Maintain conversation context during transfer

Transfer Types

BlackBox supports three transfer methods:

Cold Transfer (Blind Transfer)

The AI agent disconnects immediately after initiating the transfer. When to Use:
  • Simple routing scenarios
  • No context needed at destination
  • Fast handoff required
  • IVR-style call routing
Example:
Agent: "Let me transfer you to our billing department."
[Agent initiates transfer and disconnects]
[User connects directly to billing]

Warm Transfer (Attended Transfer)

The AI agent consults with the destination before completing the transfer. When to Use:
  • Complex issues requiring context
  • VIP or sensitive situations
  • Quality assurance needed
  • Human agent availability check
Example:
Agent: "I'm going to connect you with a specialist. Please hold."
[Agent calls specialist privately]
Agent (to specialist): "I have a customer with billing issue X..."
Specialist: "I can help. Transfer them over."
[Agent completes transfer]

HTTP Transfer (Programmatic Routing)

Uses a webhook to determine transfer destination dynamically. When to Use:
  • Business rule-based routing
  • CRM integration for routing
  • Load balancing across agents
  • Custom transfer logic
Example:
// Your webhook receives transfer request
{
  "callId": "call_123",
  "agentId": "agent_456",
  "reason": "billing_issue",
  "context": { "accountId": "acc_789" }
}

// Return transfer destination
{
  "isSuccess": true,
  "transfer": {
    "version": "v1",
    "type": "warm",
    "isEnabled": true,
    "endpointDestination": "+1-555-0199", // or SIP URI
    "description": "Transfer to specialist for account issues"
  },
  "message": "Transfer initiated successfully"
}

Configuration

To enable call transfer:
  1. Navigate to the Features tab
  2. Toggle Call Transfer to ON
  3. Select transfer type (cold, warm, or HTTP)
  4. Configure destination endpoint(s)
  5. Add transfer instructions to system prompt
Call Transfer configuration in Features tab Configure call transfer type and destinations
Dashboard Configuration:
  1. Enable Call Transfer in Features tab
  2. Select Cold Transfer type
  3. Enter endpoint destination:
    • Phone number: +1-555-0100
    • SIP URI: sip:support@example.com
  4. Update system prompt:
    You are a routing agent. When users request billing help,
    say "Let me transfer you to billing" and initiate transfer.
    When they need technical support, transfer to tech support.
    
API Configuration:
{
  config: {
    version: "v1",
    features: {
      version: "v1",
      transfer: {
        version: "v1",
        type: "cold",
        isEnabled: true,
        endpointDestination: "+1-555-0100",
        description: "Transfer to billing department for payment questions"
      }
    }
  }
}

Transfer Routes

Configure multiple transfer destinations for different scenarios using the transferRoutes array: Route Configuration:
{
  config: {
    version: "v1",
    features: {
      version: "v1",
      transfer: {
        version: "v1",
        type: "cold",
        isEnabled: true,
        endpointDestination: "+1-555-0100",
        description: "Main routing agent with multiple destinations",
        transferRoutes: [
          {
            name: "billing",
            endpointDestinations: [
              { endpoint: "+1-555-0100" }
            ],
            description: "Billing department for payment questions"
          },
          {
            name: "technical",
            endpointDestinations: [
              { endpoint: "sip:tech@example.com" }
            ],
            description: "Technical support for product issues"
          },
          {
            name: "emergency",
            endpointDestinations: [
              { endpoint: "+1-555-0911" }
            ],
            description: "Urgent issues requiring immediate attention"
          }
        ]
      }
    }
  }
}
System Prompt Example:
You are a customer service routing agent. Route calls as follows:

- Billing questions → transfer to billing route
- Technical problems → transfer to technical route
- Emergencies → transfer to emergency route immediately
- General questions → handle directly

Always explain to the user why you're transferring them and
what to expect.

Transfer Best Practices

1. Set Clear Expectations
Agent: "I'm going to connect you with our billing specialist
who can help with your payment plan. This should take just
a moment."
2. Provide Context For warm transfers, brief the receiving party:
Agent (to specialist): "I have Jane Doe on the line with a
question about invoice #12345. She's asking about payment
terms."
3. Handle Transfer Failures Configure fallback destinations for HTTP transfers:
{
  config: {
    version: "v1",
    features: {
      version: "v1",
      transfer: {
        version: "v1",
        type: "http",
        isEnabled: true,
        description: "HTTP transfer with fallback",
        webhook: {
          url: "https://your-api.com/routing"
        },
        fallback: {
          version: "v1",
          type: "cold",
          isEnabled: true,
          endpointDestination: "+1-555-0101",
          description: "Backup destination if webhook fails"
        }
      }
    }
  }
}
4. Track Transfer Metrics Monitor transfer performance:
  • Transfer success rate
  • Time to connect
  • Post-transfer customer satisfaction
  • Reasons for transfer

Testing Transfers

Step 1: Create Test Agent
  • Enable transfers
  • Configure test phone numbers
  • Set short timeout values
Step 2: Test Scenarios
  1. Successful cold transfer
  2. Successful warm transfer
  3. Transfer failure (busy/no answer)
  4. Multiple transfer attempts
  5. Fallback routing
Step 3: Verify Behavior
  • Call connects to destination
  • Context is preserved (warm transfer)
  • Fallbacks work correctly
  • User experience is smooth
Production Considerations:
  • Test transfers thoroughly with real phone numbers
  • Verify all destinations are reachable 24/7
  • Configure fallbacks for every transfer route
  • Monitor transfer success rates in production

Post-Call Analysis

Extract structured insights from conversations automatically.

What is Post-Call Analysis?

Post-call analysis uses AI to:
  • Extract key information from conversations
  • Categorize call outcomes
  • Score conversation quality
  • Generate structured data for your systems

Use Cases

Customer Support:
  • Sentiment analysis
  • Issue categorization
  • Resolution status
  • Follow-up requirements
Sales:
  • Lead qualification scores
  • Interest level assessment
  • Next steps identification
  • Objection tracking
Healthcare:
  • Symptom documentation
  • Appointment scheduling confirmation
  • Insurance information capture
  • Follow-up instructions

Configuration

Define custom analysis forms to extract exactly what you need:
Step 1: Enable Post-Call AnalysisIn the Features tab:
  1. Toggle Post-Call Analysis to ON
  2. Click Add Analysis Form
  3. Name your form (e.g., “Lead Qualification”)
Step 2: Define LabelsAdd labels to extract:
  • Name: lead_score
  • Type: number
  • Description: “Score from 1-10 based on interest level”
  • Name: contact_info_collected
  • Type: boolean
  • Description: “Did we collect email and phone?”
  • Name: next_step
  • Type: enum
  • Values: ["schedule_demo", "send_info", "call_back", "not_interested"]
  • Description: “What should happen next?”
Step 3: Save and TestAfter calls, analysis results appear in:
  • Call detail page
  • Result webhooks
  • API call details

Label Types

String: Free-form text
{
  name: "customer_concern",
  type: "string",
  description: "Main issue raised by customer"
}
Boolean: Yes/no questions
{
  name: "issue_resolved",
  type: "boolean",
  description: "Was the customer's issue resolved?"
}
Number: Numeric values
{
  name: "satisfaction_score",
  type: "number",
  description: "Customer satisfaction from 1-10"
}
Enum: Predefined choices
{
  name: "call_outcome",
  type: "enum",
  values: ["resolved", "escalated", "callback_needed", "no_action"],
  description: "Final call outcome"
}

Accessing Analysis Results

Via Dashboard:
  1. Navigate to Calls page
  2. Click on completed call
  3. View “Post-Call Analysis” section
  4. See extracted labels and values
Via API (Call Results Search):
// Post-call analysis is available in the call result object
const response = await fetch(
  'https://blackbox.dasha.ai/api/v1/callresults/search',
  {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer YOUR_API_KEY',
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      callIds: ['CALL_ID']
    })
  }
).then(r => r.json());

const callResult = response.results[0];
const analysis = callResult.result?.postCallAnalysis;
// {
//   lead_qualification: {
//     lead_score: 8,
//     budget_confirmed: true,
//     timeline: "1-3_months",
//     main_pain_point: "Manual data entry taking too much time"
//   }
// }
Via Webhooks (Completed Webhook):
// Completed webhook payload includes result.postCallAnalysis
{
  "type": "CompletedWebHookPayload",
  "status": "Completed",
  "callId": "call_123",
  "agentId": "agent_456",
  "orgId": "org_789",
  "callAdditionalData": {},
  "agentAdditionalData": {},
  "callType": "OutboundAudio",
  "createdTime": "2024-01-15T10:30:00Z",
  "completedTime": "2024-01-15T10:35:30Z",
  "durationSeconds": 330,
  "inspectorUrl": "https://blackbox.dasha.ai/calls/call_123",
  "transcription": [...],
  "result": {
    "postCallAnalysis": {
      "lead_qualification": {
        "lead_score": 8,
        "budget_confirmed": true,
        "timeline": "1-3_months",
        "main_pain_point": "Manual data entry"
      }
    },
    "transferInformation": []
  }
}

Combining Features

Advanced features work together to create powerful experiences:

Example: Multilingual Support with Transfer

{
  config: {
    version: "v1",
    primaryLanguage: "en-US",
    features: {
      version: "v1",
      languageSwitching: {
        version: "v1",
        isEnabled: true
      },
      transfer: {
        version: "v1",
        type: "cold",
        isEnabled: true,
        endpointDestination: "+1-555-0100",
        description: "Transfer to language-specific support teams",
        transferRoutes: [
          {
            name: "english_support",
            endpointDestinations: [
              { endpoint: "+1-555-0100" }
            ],
            description: "English support team"
          },
          {
            name: "spanish_support",
            endpointDestinations: [
              { endpoint: "+1-555-0101" }
            ],
            description: "Spanish support team"
          },
          {
            name: "french_support",
            endpointDestinations: [
              { endpoint: "+1-555-0102" }
            ],
            description: "French support team"
          }
        ]
      }
    }
  }
}
System prompt:
You are a multilingual support router. Detect and respond in the user's
language. For complex issues requiring human assistance, transfer to the
appropriate language support team based on the conversation language.

Example: Post-Call Analysis for Compliance

{
  config: {
    version: "v1",
    features: {
      version: "v1",
      postCallAnalysis: [
        {
          version: "v1",
          name: "compliance_check",
          isEnabled: true,
          labels: [
            {
              name: "sensitive_data_shared",
              type: "boolean",
              description: "PII or sensitive data discussed"
            },
            {
              name: "escalation_needed",
              type: "boolean",
              description: "Issue requires human follow-up"
            }
          ]
        }
      ]
    }
  }
}

Best Practices Summary

Language Switching

  • Ensure your LLM supports multilingual conversations
  • Choose TTS providers with strong multilingual capabilities
  • Test language detection and switching in realistic scenarios
  • Monitor quality and accuracy across languages

Ambient Noise

  • Start with level 0.3-0.5 for subtle realism
  • Balance natural sound with call clarity
  • Test with target audience before deployment
  • Match noise level to your use case scenario

Call Transfer

  • Always configure fallback destinations for HTTP transfers
  • Brief recipients during warm transfers for context
  • Test all transfer flows thoroughly before production
  • Monitor transfer success rates and failure reasons

Post-Call Analysis

  • Define clear, specific labels with detailed descriptions
  • Use enums for categorical data to ensure consistency
  • Keep label count manageable (5-10 per form)
  • Validate analysis accuracy against actual conversations

Troubleshooting

Language Switching Not Working

  • Verify TTS provider supports target languages
  • Check LLM has multilingual capabilities
  • Ensure voices are available for all languages
  • Review system prompt language instructions

Ambient Noise Too High or Too Low

  • Reduce level if users complain about audio quality
  • Increase level if agent sounds too artificial
  • Test different levels with various audiences
  • Consider use case requirements (realism vs clarity)

Transfer Failures

  • Verify destination numbers are correct
  • Test reachability of transfer endpoints
  • Check SIP configuration if using SIP URIs
  • Monitor network connectivity
  • Configure fallback routes

Inaccurate Post-Call Analysis

  • Review and refine label descriptions
  • Provide examples in descriptions
  • Use enums instead of free-form strings
  • Test with various conversation types
  • Iterate based on results

Next Steps

Now that you understand advanced features:
  1. Enable Features: Add features one at a time to your agent
  2. Test Thoroughly: Verify each feature works as expected
  3. Monitor Performance: Track metrics for enabled features
  4. Optimize: Refine configuration based on real-world usage

API Cross-Refs