Skip to main content

Manual Calling

Who Can Use This

Agents, Managers, and Admins can all make manual calls. Agents gained access on October 8, 2025.

Overview

The Manual Dialer enables one-on-one, browser-based calling to individual contacts without requiring campaigns or bulk calling infrastructure. Make personalized calls with full control over timing and recipient.

Key Features:

  • 🌐 Browser-based WebRTC calling - No phone hardware required
  • 🎯 Click-to-call - Enter number or select from contacts
  • 📱 Floating UI - Multitask while on call
  • 🎛️ Real-time controls - Mute, hold, transfer during call
  • 📊 Call logging - Automatic tracking in Analytics

For Agents: Making Manual Calls

New Feature (Oct 8, 2025)

Agents can now make manual calls to contacts! Previously this was Manager+ only.

What You Can Do

  • ✅ Make one-on-one calls to contacts via browser
  • ✅ Call any valid phone number (with country code)
  • ✅ Select contacts from your contact list
  • ✅ Use floating dialer while working on other tasks
  • ✅ View your own call history in Analytics

What You Cannot Do

  • ❌ Create or manage campaigns (Manager+ only)
  • ❌ Import contact lists (Manager+ only)
  • ❌ View other agents' call history
  • ❌ Configure Twilio settings (Admin only)

How to Make a Manual Call

Step 1: Open the Manual Dialer

  1. Click "Outbound" in left sidebar
  2. Select "Manual Dialer"
  3. Dialer opens in floating window

Step 2: Choose Contact Method

Option A: Dial by Phone Number

  1. Enter phone number in dialer (include country code: +1XXXXXXXXXX)
  2. Click "Call"

Option B: Select from Contacts

  1. Click "Contacts" dropdown in dialer
  2. Search or browse your contact list
  3. Click contact name
  4. Click "Call"

Step 3: Manage the Call

Once connected:

  • Mute/Unmute: Click microphone icon
  • Hold/Resume: Click hold icon
  • End Call: Click red phone icon
  • Add Notes: Type in notes field (saves automatically)

Step 4: Complete Wrap-Up

  1. After call ends, dialer shows wrap-up screen
  2. Select call outcome (Connected, No Answer, Voicemail, etc.)
  3. Add any final notes
  4. Click "Complete"

Floating Dialer Features

The dialer UI "floats" above other windows so you can:

  • Access customer records while on call
  • Look up information in real-time
  • Take notes in other systems
  • Drag dialer to any screen position

Minimize/Maximize:

  • Click minimize icon to shrink to taskbar
  • Click maximized dialer to restore full controls

Daily Use Tips

Before Your First Call:

  1. Test browser microphone permissions (Settings → Privacy)
  2. Use headset for best audio quality
  3. Ensure stable internet connection (WiFi or wired)

During Calls:

  • Use mute when listening or looking up info
  • Add notes in real-time - don't wait until end
  • Check contact details in separate tab if needed

After Calls:

  • Complete wrap-up immediately (don't batch)
  • Select accurate outcome for reporting
  • Add context in notes for future reference

Viewing Your Call History

  1. Navigate to Analytics in sidebar
  2. Click "Voice" tab
  3. Scroll to "Call History" section
  4. Filter by date range, outcome, or contact

What you'll see:

  • Your manual outbound calls
  • Your campaign calls (if assigned)
  • Your inbound queue calls
  • Call duration, outcome, notes

Learn more: Call History & Reports

Troubleshooting

Cannot hear customer:

  1. Check browser microphone permissions
  2. Ensure headset/speakers are connected
  3. Try different browser (Chrome recommended)

Customer cannot hear you:

  1. Click unmute icon (check if muted)
  2. Grant microphone access in browser
  3. Check system audio input settings

Call won't connect:

  1. Verify phone number includes country code (+1XXXXXXXXXX)
  2. Check internet connection stability
  3. Contact manager if issue persists

Dialer not appearing:

  1. Disable browser pop-up blocker for DutyCall
  2. Refresh page and try again
  3. Clear browser cache if problem continues

Technical Architecture

Call Flow Diagram

1. User clicks "Call" in browser

2. Frontend requests Access Token from backend

3. Backend generates Twilio Access Token (JWT)

4. Frontend initializes Twilio Device with token

5. Device connects to Twilio via WebRTC

6. Twilio requests TwiML from webhook

7. TwiML instructs Twilio to dial destination number

8. Call connects via PSTN/SIP

9. Audio streams via WebRTC (browser ↔ Twilio)

10. Call ends → Status webhook fires

11. Backend logs call to twilio_call_logs table

Data Model

twilio_call_logs table:

- id (bigint, primary key)
- user_id (foreign key → users.id)
- contact_id (foreign key → contacts.id, nullable)
- direction (enum: 'outbound-manual', 'outbound-campaign', 'inbound')
- phone_number (varchar)
- call_sid (varchar, unique, Twilio Call SID)
- status (enum: 'completed', 'failed', 'busy', 'no-answer')
- duration (integer, seconds)
- recording_url (text, nullable)
- notes (text, nullable)
- created_at (timestamp)

API Endpoints

POST /api/voice/token

  • Purpose: Generate Twilio Access Token for WebRTC
  • Auth: Required (Bearer token)
  • Response: { "token": "eyJhbGc..." }

POST /api/voice/manual/twiml

  • Purpose: Return TwiML for outbound call
  • Params: To (phone number), contactId (optional)
  • Response: XML TwiML

POST /api/voice/manual/status

  • Purpose: Receive call status updates from Twilio
  • Params: CallSid, CallStatus, CallDuration
  • Action: Log call to database

GET /api/voice/call-logs

  • Purpose: Fetch user's call history
  • Auth: Required
  • Scoping: Agent (own calls), Manager (dept calls), Admin (org calls)

Need Help?

  • Agents: Contact manager if dialer not accessible
  • Managers: See contact management guides or contact support
  • Admins: Check Twilio configuration or contact technical support

Quick Links: