# Browser Dialer

### What is the Browser Dialer?

The Browser Dialer is a built-in softphone that lets agents make and receive calls directly from their web browser — no external phone apps or hardware needed. It appears as a floating widget on your dashboard, giving agents one-click calling from contacts, recent calls, or a manual dial pad.

<div data-full-width="true"><figure><img src="https://2905537093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXSbXRgC7knjpaMCHwuKc%2Fuploads%2FtmvjiQQ9DFsWKlTUYGes%2FXnapper-2026-02-08-18.29.12.png?alt=media&#x26;token=3c5d4473-b8d3-4316-b289-8f08143aff6b" alt=""><figcaption><p>Call Dialer</p></figcaption></figure></div>

{% hint style="warning" %}
**Agency Plan Required:** The Browser Dialer is only available on the Agency plan. Indie plan users can upgrade to access this feature.
{% endhint %}

{% hint style="info" %}
**Requirements:** The Browser Dialer requires Twilio credentials (Account SID + Auth Token) to be configured in your workspace, plus a separate Twilio API Key for secure browser-based calling.
{% endhint %}

***

### Setting Up the Dialer

Setting up the Browser Dialer involves four steps: enabling the feature, creating a Twilio API Key, upgrading your Twilio account if still on the free trial, and importing phone numbers for outbound caller ID.

#### Step 1: Enable the Dialer

1. Go to your **Workspace Settings**
2. Click the **Dialer** tab
3. Toggle **Enable Dialer** to on
4. Click **Update Workspace**

<figure><img src="https://2905537093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXSbXRgC7knjpaMCHwuKc%2Fuploads%2FCcLNClm2YvT7LCtzp81I%2FXnapper-2026-02-09-11.40.24.png?alt=media&#x26;token=f7f476e3-860c-4fbc-a140-b3577f295ae7" alt="" width="563"><figcaption><p>Enable the dialer toggle in workspace settings</p></figcaption></figure>

{% hint style="info" %}
Make sure your Twilio Account SID and Auth Token are already configured in the **Basic** tab. The dialer needs these to provision the necessary Twilio resources automatically.
{% endhint %}

When you save with the dialer enabled, Ring Tonic automatically creates a **TwiML Application** in your Twilio account. This is the bridge that connects browser calls to Twilio's network. If something goes wrong during provisioning, you'll see a warning message with instructions to verify your Twilio credentials.

#### Step 2: Create a Twilio API Key

The dialer uses Twilio API Keys (not your Account SID/Auth Token) to generate secure, short-lived tokens for browser calling. This is a Twilio security requirement.

**How to Create an API Key:**

1. Log into your [Twilio Console](https://console.twilio.com)
2. Navigate to **Account** → **API keys & tokens**
3. Click **Create API Key**
4. Give it a name (e.g., "Ring Tonic Dialer")
5. Leave the key type as **Standard**
6. Click **Create API Key**
7. **Copy both the SID and Secret immediately** — the Secret is only shown once

<figure><img src="https://2905537093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXSbXRgC7knjpaMCHwuKc%2Fuploads%2Fe1m2tc2hw1yYm7MJyUtB%2FXnapper-2026-02-09-11.42.24.png?alt=media&#x26;token=0bbfc2ec-af29-42f2-b2c7-d8378e15b8c7" alt=""><figcaption><p>Create an API Key in the Twilio Console</p></figcaption></figure>

{% hint style="danger" %}
**Important:** Copy the API Key Secret immediately after creation. Twilio only displays it once. If you lose it, you'll need to create a new API Key.
{% endhint %}

**Add the API Key to Ring Tonic:**

1. Go to **Workspace Settings** → **Dialer** tab
2. Paste the **API Key SID** (starts with "SK") into the "API Key SID" field
3. Paste the **API Key Secret** into the "API Key Secret" field
4. Click **Update Workspace**

<figure><img src="https://2905537093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXSbXRgC7knjpaMCHwuKc%2Fuploads%2F4EiXOWP3vWT6lHnsg7eN%2FXnapper-2026-02-09-11.44.22.png?alt=media&#x26;token=89380afb-1e6d-4333-86fe-622510b87a23" alt="" width="563"><figcaption><p>Enter your Twilio API Key credentials in the dialer settings</p></figcaption></figure>

{% hint style="success" %}
Once saved, the dialer widget will appear for all agents in your workspace. Each agent gets a unique, encrypted token that refreshes automatically every hour.
{% endhint %}

#### Step 3: Upgrade Your Twilio Account (If on Free Trial)

{% hint style="danger" %}
**Critical:** If your Twilio account is still on the **free trial**, outbound calls are severely limited. Trial accounts can only call **verified phone numbers** (numbers you've manually verified in Twilio), are limited to **one Twilio number**, and calls are capped at **10 minutes**. You must upgrade to a paid Twilio account for the dialer to work properly.
{% endhint %}

To upgrade your Twilio account:

1. Log into your [Twilio Console](https://console.twilio.com)
2. Click the **Upgrade** button (or navigate to **Billing** → **Upgrade**)
3. Add a payment method and fund your account
4. Once upgraded, all restrictions are removed — you can call any phone number using any of your Twilio numbers as the caller ID

{% hint style="success" %}
After upgrading, all your tracking numbers can be used for outbound calls to any destination, with no call duration limits.
{% endhint %}

#### Step 4: Set Up Phone Numbers for Outbound Calls

To make outbound calls, agents need at least one tracking number to use as the caller ID. These are the same phone numbers you manage in your **Phone Numbers** inventory.

1. Go to **Phone Numbers**
2. Make sure you have at least one number imported from Twilio
3. Numbers can be assigned to a campaign or unassigned — both work for outbound dialing

{% hint style="info" %}
Don't have phone numbers yet? See the [Phone Numbers guide](https://help.ringtonic.app/guides/phone-numbers) to learn how to import numbers from your Twilio account.
{% endhint %}

All tracking numbers in your workspace automatically appear in the dialer's caller ID dropdown. Agents can pick which number to show as the outbound caller ID.

***

### Adding Agents

Only users with the **Agent**, **Admin**, or **Owner** role can access the dialer. When you invite team members, assign them the "Agent" role if they need to make and receive calls.

#### How to Add an Agent

1. Go to **Workspace Members**
2. Click **Invite Member**
3. Enter the person's email address
4. Select **Agent** as the role
5. Click **Send Invitation**

<figure><img src="https://2905537093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXSbXRgC7knjpaMCHwuKc%2Fuploads%2FE4QHkjz560Ypb9wnx2we%2FXnapper-2026-02-09-11.45.54.png?alt=media&#x26;token=05ab2f06-892f-4996-9079-53248d4e8c78" alt="" width="563"><figcaption><p>Invite a new member with the Agent role</p></figcaption></figure>

The invited person receives an email with a link to join your workspace. Once they accept and log in, the dialer widget automatically appears on their dashboard.

{% hint style="info" %}
**Existing members:** If a team member already has the Manager or Member role and you want them to use the dialer, change their role to Agent from the members page. See [Team Management](https://help.ringtonic.app/guides/team-management) for details.
{% endhint %}

#### What Agents Can Do

| Capability            | Agent | Admin/Owner | Manager | Member  |
| --------------------- | ----- | ----------- | ------- | ------- |
| Make outbound calls   | Yes   | Yes         | No      | No      |
| Receive inbound calls | Yes   | Yes         | No      | No      |
| View contacts         | Yes   | Yes         | Depends | Depends |
| Edit contacts         | Yes   | Yes         | Depends | No      |
| View call logs        | Yes   | Yes         | Depends | Depends |
| Qualify leads         | Yes   | Yes         | No      | No      |
| Add call notes        | Yes   | Yes         | No      | No      |

{% hint style="warning" %}
**Only agents and admins/owners receive incoming calls.** Managers and Members never see the dialer widget, even if the dialer is enabled for the workspace.
{% endhint %}

***

### Using the Dialer

Once set up, the dialer appears as a floating widget in the bottom-right corner of your screen. It has three main views: idle (with tabs), active call, and incoming call.

#### Agent Status

Before making or receiving calls, set your availability status using the dropdown in the dialer header:

| Status             | Icon          | Meaning                                               |
| ------------------ | ------------- | ----------------------------------------------------- |
| **Online**         | Green circle  | Available — you'll receive incoming calls             |
| **Away**           | Yellow circle | Temporarily unavailable — calls are not routed to you |
| **Do Not Disturb** | Red circle    | Manually set — no incoming calls                      |
| **In Call**        | Blue circle   | Automatically set when on a call                      |
| **Offline**        | Gray circle   | Disconnected — no calls                               |

<figure><img src="https://2905537093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXSbXRgC7knjpaMCHwuKc%2Fuploads%2Fgit-blob-0f2de3749df299a6b84bf6ff1a0b393a1c1fd22b%2Fplaceholder.png?alt=media" alt=""><figcaption><p>Agent status dropdown in the dialer header</p></figcaption></figure>

{% hint style="info" %}
**Auto-away:** If you're inactive for 10 minutes, your status automatically changes to Away. It restores to Online when you interact with the page again.
{% endhint %}

{% hint style="info" %}
**Heartbeat:** The dialer sends a heartbeat every 30 seconds to keep your session alive. If the heartbeat stops (e.g., you close your browser), you'll be marked as Offline after 2 minutes.
{% endhint %}

#### Making Outbound Calls

There are three ways to make an outbound call:

{% tabs %}
{% tab title="From Contacts" %}
**Dial from the Contacts tab**

1. Open the dialer widget
2. Click the **Contacts** tab
3. Search for a contact by name or phone number
4. Click the **phone icon** next to the contact

<figure><img src="https://2905537093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXSbXRgC7knjpaMCHwuKc%2Fuploads%2F2CBZGcDEruwwtuAvB7Im%2FXnapper-2026-02-09-11.47.33.png?alt=media&#x26;token=191f7ef3-52e8-4a0e-a779-24cfa3275f06" alt="" width="375"><figcaption><p>Dial a contact from the Contacts tab</p></figcaption></figure>
{% endtab %}

{% tab title="From Keypad" %}
**Dial a number manually**

1. Open the dialer widget
2. Click the **Keypad** tab
3. Enter the phone number using the dial pad or type it directly
4. Click the **call button** (green phone icon)

<figure><img src="https://2905537093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXSbXRgC7knjpaMCHwuKc%2Fuploads%2Fc12YTqHutdxOPWQTk7C2%2FXnapper-2026-02-09-11.50.22.png?alt=media&#x26;token=8d820ddc-455e-4ab3-9ccd-436d837ff695" alt="" width="375"><figcaption><p>Enter a number on the keypad and dial</p></figcaption></figure>
{% endtab %}

{% tab title="From Contacts Page" %}
**Dial from the Contacts page**

1. Go to the **Contacts** page in the main navigation
2. Find the contact you want to call
3. Click the **phone icon** in the row actions
4. The dialer widget opens and initiates the call

<figure><img src="https://2905537093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXSbXRgC7knjpaMCHwuKc%2Fuploads%2FUsFbUgbCwynUqIggnfPq%2FXnapper-2026-02-09-11.58.49.png?alt=media&#x26;token=beb30920-c627-439f-8bc7-d383957027e6" alt="" width="563"><figcaption><p>One-click calling from the contacts table</p></figcaption></figure>
{% endtab %}
{% endtabs %}

#### Smart Caller ID Selection

When you dial a number, the dialer automatically selects the best caller ID (the "From" number) using smart logic:

1. **Sticky sender:** If you've called this contact before, the dialer uses the same tracking number from the last call. This ensures the contact sees a familiar number when you call back.
2. **First available:** If this is a new contact with no call history, the dialer uses the first tracking number in your workspace.

**Manual override:** You can also select a specific tracking number from the caller ID dropdown at the top of the dialer. Your selection is saved locally and used for all subsequent calls until you change it.

<figure><img src="https://2905537093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXSbXRgC7knjpaMCHwuKc%2Fuploads%2F2cIvFqOLhup9xH3fc3DI%2FXnapper-2026-02-09-12.00.08.png?alt=media&#x26;token=e1c780b6-c3a8-445f-a2d5-85054d41a521" alt="" width="563"><figcaption><p>Select a caller ID from the dropdown or let smart selection choose automatically</p></figcaption></figure>

{% hint style="success" %}
**Best Practice:** Let smart caller ID handle selection automatically. This keeps your outbound number consistent per contact, which improves answer rates since the contact recognizes the number.
{% endhint %}

#### During an Active Call

When a call connects, the dialer switches to the active call view:

<figure><img src="https://2905537093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXSbXRgC7knjpaMCHwuKc%2Fuploads%2F1HTxmiLs43QLtj2VTBCM%2FXnapper-2026-02-09-12.04.47.png?alt=media&#x26;token=da829b33-7dcd-4d0e-b5f0-09113e9bc147" alt=""><figcaption><p>Active call view with call controls and context sidebar</p></figcaption></figure>

**Call controls:**

| Control     | Action                                                               |
| ----------- | -------------------------------------------------------------------- |
| **Mute**    | Toggle your microphone on/off                                        |
| **Keypad**  | Open DTMF keypad for touch-tone input (e.g., navigating phone menus) |
| **Hang Up** | End the call                                                         |

**Context sidebar:** When a call starts, a sidebar slides in from the left showing:

* Contact name, email, company
* Tags and lead status
* Call statistics (total calls, last call date, average duration)
* Deal value
* Recent call history with this contact

This gives agents full context about who they're talking to without leaving the call.

#### Receiving Inbound Calls

When a customer calls one of your tracking numbers and you're **Online**, the dialer automatically expands and shows an incoming call notification:

The notification shows:

* **Caller's phone number** (formatted)
* **Caller's name** (if available from CNAM lookup or existing contact)
* **Tracking number called** (which number the customer dialed)
* **Campaign name** (if the tracking number is assigned to a campaign)

**Answering:**

* Click **Answer** (green button) to pick up the call
* Click **Reject** (red button) to decline

{% hint style="info" %}
**Multi-agent routing:** All online agents in the workspace hear the ring simultaneously. The first agent to click Answer gets the call. Once answered, all other agents' ringing stops immediately.
{% endhint %}

{% hint style="info" %}
**Page refresh safe:** If you refresh the page while a call is ringing, the incoming call notification persists and you can still answer it.
{% endhint %}

#### Recent Calls Tab

The **Recents** tab in the dialer shows your personal call history — only calls you've made or answered. Each entry shows:

* Contact name or phone number
* Call direction (inbound/outbound icon)
* Call duration
* Time of the call

Click any entry to quickly redial that number.

***

### Contacts & Auto-Creation

The dialer is deeply integrated with Ring Tonic's contact management system. Contacts are automatically created from calls so you never lose track of who called or who you called.

#### How Contacts Are Auto-Created

Every time a call happens, Ring Tonic checks if a contact already exists for that phone number in your workspace:

* **If a contact exists:** The call is linked to that contact.
* **If no contact exists:** A new contact is automatically created with the phone number, and the call is linked to it. The source is set to "call."

This happens for both inbound and outbound calls, so your contact list grows organically as you use the dialer.

{% hint style="success" %}
**No manual entry needed:** You don't need to create a contact before making a call. Just dial the number and Ring Tonic handles the rest.
{% endhint %}

#### From Call to Contact: Lead Conversion

After a call, you can enrich the auto-created contact with business information:

1. Open the contact (from the **Contacts** page or from the dialer's context sidebar)
2. Add details like **name**, **email**, **company**, and **notes**
3. Update the **lead status** to track where they are in your pipeline:

| Lead Status      | Meaning                           |
| ---------------- | --------------------------------- |
| **New**          | Just created, not yet evaluated   |
| **Contacted**    | You've spoken with them           |
| **Qualified**    | Meets your qualification criteria |
| **Disqualified** | Does not meet your criteria       |

4. Set a **deal value** to track potential revenue
5. Add **tags** for categorization (e.g., "Hot Lead", "Follow Up", "Enterprise")
6. Set a **next follow-up date** to schedule your next action

<figure><img src="https://2905537093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXSbXRgC7knjpaMCHwuKc%2Fuploads%2Fgit-blob-0f2de3749df299a6b84bf6ff1a0b393a1c1fd22b%2Fplaceholder.png?alt=media" alt=""><figcaption><p>Contact detail sheet with lead information and call history</p></figcaption></figure>

{% hint style="info" %}
**AI automation:** If you have OpenAI configured in your workspace, Ring Tonic can automatically analyze each **call log** — qualifying leads, estimating deal values, extracting keywords, and tagging calls based on the conversation. These AI insights live on the call log, not the contact. The one exception is **caller name detection**, which updates the contact's name automatically. To sync a call's qualification status to the contact, manually qualify the call log within 24 hours and it will update the linked contact's lead status. See [Setup Workspace](https://help.ringtonic.app/guides/setup-workspace) for AI configuration.
{% endhint %}

***

### Contacts vs. Call Logs: Understanding the Difference

Ring Tonic stores information in two places — the **Contact** and individual **Call Logs**. This is intentional and important for accurate reporting. Think of it as **"Master vs. Snapshot"**:

* **Contact** = the **current truth** about a person ("John is a Qualified Lead worth $5,000 right now")
* **Call Log** = a **historical snapshot** of a specific interaction ("On Feb 1st, Agent Mike qualified John and attributed $5,000 to this call")

This separation is what lets you answer questions like "How much revenue did Agent Mike generate last week?" — something you can't answer from the Contact alone because the value may have changed since then.

#### Field-by-Field Breakdown

| Field           | On Contact (Master)                                                                         | On Call Log (Snapshot)                                                                    |
| --------------- | ------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- |
| **Deal Value**  | Total pipeline value for this person                                                        | Attribution — the value generated by this specific call                                   |
| **Lead Status** | The person's status right now                                                               | The outcome of that specific interaction                                                  |
| **Notes**       | Contextual notes about the person (e.g., "Gatekeeper is Susan. Best time to call is 2 PM.") | Transactional notes about what happened on the call (e.g., "Customer asked for a refund") |
| **Tags**        | Categorize the person (e.g., "VIP", "Enterprise")                                           | Categorize the call (e.g., "Ready to Buy", "Needs Quote")                                 |

#### Why Lead Status Exists in Both Places

Consider this scenario:

1. **Monday:** Agent A calls John, marks the call as **Qualified**. The contact's status becomes Qualified.
2. **Tuesday:** Agent B calls John, realizes it was a mistake, marks the call as **Junk**. The contact's status becomes Junk.

Without the call log snapshot, Agent A's work on Monday would be invisible. The call log preserves that Agent A correctly qualified a lead — even though the contact's status changed later. This is essential for fair performance reporting.

#### How Notes Work

Contact notes and call log notes serve different purposes and are displayed separately:

* **Contact notes** appear pinned at the top of the contact sidebar — these are persistent, contextual details about the person that every agent should see
* **Call log notes** appear in the activity timeline alongside each call — these describe what happened during that specific conversation

{% hint style="success" %}
**Best Practice:** Use contact notes for information that's always relevant (preferences, best times to call, decision-maker details). Use call log notes for what happened during the call (requests made, issues raised, follow-up commitments).
{% endhint %}

***

### Managing Contacts

The **Contacts** page gives you a full view of all contacts in your workspace, whether auto-created from calls or manually added.

#### Viewing Contacts

1. Go to **Contacts** in the main navigation
2. Browse the table with columns for name, phone, company, lead status, deal value, call count, and last contact date
3. Use **search** to find contacts by name, phone, or email
4. Use **sorting** on any column to organize your list

<figure><img src="https://2905537093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXSbXRgC7knjpaMCHwuKc%2Fuploads%2Fz1aiOhs7H4uCFopgMwSm%2FXnapper-2026-02-08-18.34.30.png?alt=media&#x26;token=12e7a6e6-089a-4d8e-bf2e-df8bfe972551" alt=""><figcaption><p>Contacts page with searchable, sortable table</p></figcaption></figure>

#### Creating a Contact Manually

1. Go to **Contacts**
2. Click **Add Contact**
3. Enter at least a **phone number** (required)
4. Optionally fill in name, email, company, notes, lead status, and deal value
5. Click **Create**

{% hint style="info" %}
Phone numbers are automatically normalized to E.164 format (e.g., +12125551234). You can enter them in any common format and Ring Tonic will handle the conversion.
{% endhint %}

#### Editing a Contact

1. Click on any contact row to open the **Contact Detail Sheet**
2. Click on any field to edit it inline (name, email, company, etc.)
3. Changes are saved automatically

The detail sheet also shows:

* **Recent calls** with this contact (paginated)
* **Call statistics** (total calls, last call, average duration)
* **Tags** with autocomplete suggestions

#### Bulk Actions

Select multiple contacts using the checkboxes to perform bulk operations:

| Action                 | Description                                  |
| ---------------------- | -------------------------------------------- |
| **Add Tags**           | Apply one or more tags to selected contacts  |
| **Remove Tags**        | Remove specific tags from selected contacts  |
| **Update Lead Status** | Change lead status for all selected contacts |
| **Delete**             | Remove selected contacts from the workspace  |

***

### How It All Fits Together

Here's the complete workflow from setup to daily use:

{% stepper %}
{% step %}
**Set Up the Workspace**

Enable the dialer, add your Twilio API Key, and ensure you have tracking numbers imported. This is a one-time setup.
{% endstep %}

{% step %}
**Invite Your Agents**

Invite team members with the **Agent** role. They'll see the dialer widget as soon as they log in.
{% endstep %}

{% step %}
**Agents Go Online**

Agents set their status to **Online** to start receiving inbound calls. The dialer connects to Twilio and listens for calls in real-time.
{% endstep %}

{% step %}
**Make and Receive Calls**

Agents dial from contacts, the keypad, or the contacts page. Inbound calls ring all online agents simultaneously — first to answer gets the call.
{% endstep %}

{% step %}
**Contacts Are Auto-Created**

Every call automatically creates or links to a contact. Agents see full context (call history, lead status, tags) during the call via the context sidebar.
{% endstep %}

{% step %}
**Qualify and Follow Up**

After calls, agents update contact details, set lead status, add tags, and schedule follow-ups. If AI automation is configured, call logs are automatically qualified, tagged, and estimated with deal values — agents can then review and sync those insights to the contact.
{% endstep %}
{% endstepper %}

***

### Troubleshooting

<details>

<summary>Dialer widget is not showing up</summary>

**Possible causes:**

* Your role is not Agent, Admin, or Owner — ask an admin to change your role
* The dialer is not enabled — go to Workspace Settings → Dialer tab and enable it
* Twilio credentials are missing — check that Account SID and Auth Token are configured in the Basic tab
* API Key is missing — check that API Key SID and Secret are configured in the Dialer tab

</details>

<details>

<summary>"Dialer not ready" warning in workspace settings</summary>

**Problem:** Ring Tonic couldn't create the TwiML Application in your Twilio account.

**Solution:**

1. Verify your Account SID and Auth Token are correct in the Basic tab
2. Make sure your Twilio account is active (not suspended)
3. Save the workspace settings again — Ring Tonic will retry provisioning

</details>

<details>

<summary>No audio during calls</summary>

**Possible causes:**

* Browser microphone permission not granted — click the lock icon in your browser's address bar and allow microphone access
* Wrong audio device selected — click the settings icon in the dialer to select the correct microphone and speaker
* Browser audio blocked — interact with the page (click anywhere) to unlock audio playback, especially on Safari/iOS

</details>

<details>

<summary>Incoming calls not ringing</summary>

**Possible causes:**

* Your status is not Online — change it to Online in the dialer status dropdown
* Heartbeat timed out — refresh the page to reconnect
* Browser tab is in background — some browsers throttle background tabs; keep Ring Tonic in a visible tab

</details>

<details>

<summary>Cannot make outbound calls</summary>

**Possible causes:**

* No tracking numbers in the workspace — import at least one number from Twilio
* API Key not configured — add your Twilio API Key SID and Secret in the Dialer tab
* Phone number format invalid — ensure you're entering a valid phone number with country code

</details>

<details>

<summary>Agent shows as Offline unexpectedly</summary>

**Problem:** The heartbeat connection was lost.

**Solution:**

1. Refresh the page — the dialer will reconnect and restore your intended status
2. Check your internet connection
3. If the issue persists, your browser may be aggressively throttling background tabs — keep Ring Tonic as your active tab

</details>

<details>

<summary>Call connected but no one can hear each other</summary>

**Problem:** WebRTC connection issue.

**Solution:**

1. Check that your firewall allows WebRTC traffic
2. Try a different browser (Chrome is recommended)
3. Disable VPN if active — VPNs can interfere with real-time audio
4. Check the audio device settings in the dialer (gear icon)

</details>

<details>

<summary>Smart caller ID picking the wrong number</summary>

**Problem:** The sticky sender logic is using a number from an old call.

**Solution:**

* Manually select the desired tracking number from the caller ID dropdown
* Your manual selection is saved and used for all future calls until you change it

</details>
