> For the complete documentation index, see [llms.txt](https://library.zoom.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://library.zoom.com/business-services/zoom-contact-center/expert-insights/agentless-dialer-with-custom-fields.md).

# Agentless Dialer with Custom Fields

## Overview

### What is Agentless Dialer?

The Zoom Contact Center **Agentless Dialer** is a type of dialer that places outbound calls without requiring agents to be logged in or available. Unlike the **Preview** and **Progressive** dialers, which are agent-driven, the **Agentless Dialer** operates independently, executing campaigns by dialing contacts from a list and delivering automated experiences through a configured **Flow** or recorded message. **Agentless Dialer** is useful for outbound communications where a live agent is not required for every call. Common use cases include:

* Appointment reminders
* Payment due notifications
* Community updates
* Event invitations
* Health screening reminders

With **Custom Fields** support, these messages can be personalized per contact.

{% hint style="success" %}
**Example**

Instead of a generic "you have an upcoming appointment," the dialer can say "your appointment is scheduled for Friday at 3:00 PM at our Main Street location."
{% endhint %}

{% hint style="info" %}
Contacts can also be given the option to connect with a live agent during the call if needed.
{% endhint %}

### Licensing

The **Agentless Dialer** requires an add-on license in Zoom Contact Center. At least one Zoom Contact Center user license (Essentials or above) is required for the admin who configures Contact Center Management. The Agentless Dialer itself carries a per-minute usage charge. Please contact your Zoom sales team for additional pricing information.

When an Agentless Dialer call escalates to a human agent through the Flow, the receiving agent can hold any Zoom Contact Center license type (Essentials, Premium, or Elite). There is no requirement for the agent to have a Premium+ license to handle escalated Agentless Dialer calls.

### Core Concepts

A personalized Agentless Dialer deployment involves four main components:

The **Campaig**n is the top-level object that defines the dialer behavior. It specifies the dialer type (agentless), the contact list to dial, the caller ID, business hours, concurrent call limits, **Answering Machine Detection** (AMD) settings, and what happens when a live contact is detected (play a message or route to a flow). The campaign also has an "Always Running" setting that controls whether the campaign runs continuously or executes once.

The **Contact List** contains the phone numbers and associated data for the people the campaign will dial. Each entry in the list includes standard fields (first name, last name, phone number, etc.) and can include custom fields with additional data. A single contact list can be associated with one or more campaigns.

**Custom Fields** extend the standard contact list record with user-defined data columns. Each custom field has a name, a data type (e.g., text, date/time), and an option to control whether the value is visible to agents. Custom fields allow campaign-specific data — such as appointment dates, account numbers, or location details — to travel with each contact and be referenced dynamically in the flow. Values can be populated manually, via CSV import/export, or via the Zoom Contact Center API.

The **Flow** is the call-handling logic that executes when a dialed contact answers (or when AMD detects a live contact). Flows for the Agentless Dialer use the same Flow builder and widget set as standard inbound voice flows. Within a Flow, you can play personalized messages using contact list fields, collect DTMF input, make API calls, route to a ZVA voice agent, or escalate to a human agent queue. Escalation to a live agent is a standard Zoom Contact Center Flow capability and can be built in to any Agentless Dialer Flow.

{% hint style="info" %}
For an introduction to Flows, see the [Zoom Customer Experience Bluepaper](/business-services/zoom-contact-center/zoom-customer-experience/zoom-contact-center-components/flows.md).
{% endhint %}

## Flows with Custom Fields Support

With Custom Fields, the Flow can deliver an experience that is fully personalized to each dialed contact. Custom Fields are exposed as contact attributes in the flow builder and can be referenced anywhere variables are supported, including **Send Media** widgets, **Collect Input** widgets, **Condition** widgets, and **Script** widgets.

The Flow builder provides an Insert Variable UI that lets you browse and insert the correct variable syntax. There are two variable namespaces available in flows:

* **Contact List fields**: Data from the campaign contact list, including both standard fields (e.g., `contactList.standardField.firstName`) and custom fields (e.g., `contactList.customField.appointmentTime`). These are the most reliable sources for campaign-specific data.
* **Address Book fields**: Data from the Zoom Contact Center address book, including standard and custom fields. Note that a dialed number is not guaranteed to exist in the address book, so contact list fields are preferred for campaign data.

{% hint style="success" %}
**Example**

"Hello {{contactList.standardField.firstName}} {{contactList.standardField.lastName}}, this is Example Corp calling with an appointment reminder. Your appointment is scheduled for {{contactList.customField.appointmentTime}} at our {{contactList.customField.appointmentLocation}} location. To confirm, press 1. To cancel, press 2. To speak with an agent, press 3."
{% endhint %}

### Custom Fields and Answering Machine Detection (AMD)

Custom Fields are available in the Flow regardless of whether AMD is enabled. With AMD turned off, all connected calls route to the flow. With AMD turned on, calls where a live contact is detected route to the flow. In both cases, custom fields are fully accessible within the flow.

{% hint style="info" %}
When AMD (Answering Machine Detection) detects a voicemail, the system automatically plays a pre-recorded message from the Asset Library instead of routing the call to a Flow. Because of this limitation, Custom Fields cannot be used in voicemail messages. A future release will add support for routing AMD-detected voicemail calls to Zoom Contact Center Flows, which will enable customized voicemail messages with dynamic content for Agentless Dialer campaigns.
{% endhint %}

## Initial Setup and Configuration

This section outlines the steps to configure a personalized Agentless Dialer campaign.

### Step 1: Create Custom Fields

1. Navigate to **Contact Center Management** > **Campaign Management**.
2. Go to the **Contact List** section.
3. Select **Custom Fields**.
4. Click **Add Custom Field**.
5. Enter a name for the custom field (e.g., `appointmentTime`, `appointmentLocation`).
6. Select the data type (e.g., Text, Date/Time).
7. Optionally, configure whether the field value should be displayed to Zoom Contact Center agents.
8. Repeat for each custom field needed.

<div align="center" data-with-frame="true"><figure><img src="/files/OkQX705FLZ5y4L2BuIVD" alt=""><figcaption></figcaption></figure></div>

### Step 2: Create a Flow with Contact List Field References

1. Navigate to **Contact Center Management** > **Flows**.
2. Create a new voice flow for the **Agentless Dialer** campaign.
3. Add widgets as needed (Send Media, Collect Input, Condition, Script, Route To, etc.).
4. In any widget that supports text or variable insertion, use the **Insert Variable** button to browse and insert contact list standard fields and custom fields.
   * Contact list standard fields follow the format: `{{contactList.standardField.fieldName}}`
   * Contact list custom fields follow the format: `{{contactList.customField.fieldName}}`

<div align="center" data-with-frame="true"><figure><img src="/files/qakUdVcyhZCoVw7tXSBx" alt=""><figcaption></figcaption></figure></div>

#### Flow Design Pattern: Escalation to a Human Agent

To give the dialed contact the option to speak with a live agent, use a **Collect Input** widget to capture a DTMF keypress (e.g., "Press 3 to speak with an agent") and route the call to a queue via the **Route To** widget.

It is recommended to set a variable before the call reaches the queue so the agent can identify that the call originated from an agentless dialer campaign. This is important because the queue may be blended — agents in that queue may also receive standard inbound calls and would otherwise have no way to distinguish the call source.

To do this, use a **Set Variable** widget to store a descriptive value (e.g., set a custom variable `agentlessCampaign` to `"Appointment Reminder Dialer"`) before the **Route To** widget. Then, in **Contact Center Management** > **Preferences**, configure that variable to be displayed to agents. When the agent receives the call, they will see the variable value on their incoming notification screen, providing context about why the call was made. Additional global variables can be added to display additional information to the agent upon the escalation.

Agents who receive escalated Agentless Dialer calls can hold any Zoom Contact Center license tier (Essentials, Premium, or Elite).

### Step 3: Create a Contact List

1. Navigate to **Contact Center Management** > **Campaign Management** > **Contact Lists**.
2. Create a new contact list or select an existing one.
3. Add contacts manually, via CSV import, or via the Zoom Contact Center API.
4. When adding contacts, populate both the standard fields (first name, last name, phone number) and any custom fields you defined.

<div data-with-frame="true"><figure><img src="/files/7xjNzm3Ax839paR97t4N" alt="" width="458"><figcaption></figcaption></figure></div>

### Step 4: Create and Configure the Campaign

1. Navigate to **Contact Center Management** > **Campaign Management**.
2. Click **Add Campaign** and select **Agentless Dialer.**

<div data-with-frame="true"><figure><img src="/files/2VKqx4Rg9Ylcvsddib3N" alt=""><figcaption></figcaption></figure></div>

3. Name the campaign and configure the following settings:
   * **Contact List**: Select the contact list created in [Step 3](#step-3-create-a-contact-list).
   * **Caller ID**: Select the outbound caller ID number.
   * **Max Concurrent Calls**: Set a value between 1 and 15.
   * **Business Hours**: Configure the allowed dialing window.
   * **Always Running**: Set to True if contacts will be added continuously, or False for a one-time campaign run.
   * **Answering Machine Detection (AMD)**: Enable or disable as needed. If enabled, configure the voicemail action (disconnect or play asset library message).
   * **Live Contact Detected**: Select **Connect to Flow** and choose the Flow created in [Step 2](#step-2-create-a-flow-with-contact-list-field-references).

<div data-with-frame="true"><figure><img src="/files/K7EEEmuoihljAhOq6Tiw" alt=""><figcaption></figcaption></figure></div>

## Managing the Contact List

Contacts can be added to the contact list via manual entry in the admin portal, CSV import, or the Zoom Contact Center API. All three methods support both standard and custom fields.

### Adding Contacts via CSV Import/Export

To import contacts with custom fields via CSV, it is helpful to first add a single contact manually with all desired custom fields populated, then export the list. The exported CSV will contain the correct column headers for both standard and custom fields, which you can use as a template for bulk imports.

### Adding Contacts via API

The Zoom Contact Center API supports adding contact list entries with custom field values programmatically. This is useful for integrations where contact data is managed in an external system (e.g., a CRM, scheduling platform, or EHR) and needs to be pushed into the contact list automatically.

For more info, please see the [API Reference documentation](https://developers.zoom.us/docs/api/contact-center/#tag/campaigns/post/contact_center/outbound_campaign/contact_lists/{contactListId}/contacts).

### Timing: When to Add Contacts

The timing for adding contacts depends on the campaign's Always Running setting:

* **Always Running** = **True**: Contacts can be added to the contact list at any time — before, during, or after the campaign starts. The campaign runs continuously and will pick up newly added contacts as they are loaded. This mode is ideal for ongoing use cases such as rolling appointment reminders, where new contacts are generated throughout the day.
* **Always Running** = **False**: Contacts should be loaded into the contact list before the campaign is started. Once the campaign finishes dialing all contacts in the list, it transitions to an Ended state. Contacts added after the campaign ends will not be dialed unless the campaign is restarted. This mode is suited for batch-style campaigns such as one-time event notifications or payment reminders.

### Removing Contacts from the Campaign

You may need to remove a contact from the campaign for various reasons. For example, a customer might reach out to you before you are able to call them. To remove a contact, use the [remove campaign contact list's contact API](https://developers.zoom.us/docs/api/contact-center/#tag/campaigns/delete/contact_center/outbound_campaign/contact_lists/{contactListId}/contacts/{contactId}).


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://library.zoom.com/business-services/zoom-contact-center/expert-insights/agentless-dialer-with-custom-fields.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
