Use SSO to log in and access the Help Center, where you can create and manage your support tickets to reduce your resolution times.

How to Setup a Call Control Object

Prev Next

This guide is intended for advanced Natterbox admins. Further customisations of this solution might not be supported.

Requirement: Contact Centre Licences

Overview

The Call Control Object allows you to manage inbound call routing entirely from Salesforce records — no routing policy changes needed. Admins can:

  • Set weekly opening and closing hours (in local time)

  • One Record to handle Holiday/Open hour rules on multiple policies

  • Handle multiple time zones with automatic daylight saving adjustment

  • Pre-set holiday routing and TTS messages using reusable slots

  • Force lines closed for emergencies

  • Dynamically route calls based on all of the above

Once created, you'll use a Query Object App in your routing policy to pull the record data, and a Rule App (Evaluate) to route calls based on the result.

How It Works

  1. A call arrives at the routing policy

  2. The Query Object App runs a query against your Call Control record

  3. Salesforce evaluates all formula fields at query time (timezone conversion, holiday checks, open/closed status)

  4. The Rule App (Evaluate) checks the returned values and routes the call:

    • Force Closed? → Play emergency message → Hang up/Voicemail

    • Holiday Active? → Play holiday message → Hang up/Voicemail

    • Out of Hours? → Play closed message → Hang up/Voicemail

    • None of the above? → Route to your normal call flow

Step 1: Create the Custom Object

  1. Navigate to Setup → Object Manager → Create → Custom Object

  2. Configure the following settings:

Setting

Value

Label

Call Control

Plural Label

Call Controls

API Name

Call_Control__c

Record Name

Routing Policy Name

Data Type

Text

Allow Reports

Allow Activities

Track Field History

Allow Search

Allow Bulk API Access

Allow Streaming API Access

  1. Click Save.

Step 2: Set Permissions

The Natterbox integration user (the user your Natterbox AVS connector authenticates as) needs Read access to this object and all its fields.

  1. Go to SetupPermission Sets (or Profiles)

  2. Find the permission set/profile assigned to your Natterbox integration user

  3. Under Object Settings, find Call Control

  4. Enable Read access on the object

  5. Enable Read access on all fields

Step 3: Create a Tab

  1. Go to SetupTabsCustom Object TabsNew

  2. Select Call Control as the object

  3. Choose a Tab Style (the clock icon works well)

  4. Add it to the relevant App (e.g., your Natterbox app or admin app)

  5. Click Save

Step 4: Create the Fields

Navigate to Setup Object Manager Call Control Fields & Relationships New for each field below.

4.1 — UTC Offset

Setting

Value

Field Type

Number

Field Label

UTC Offset

API Name

UTC_Offset

Length

2

Decimal Places

1

Required

Description

Standard (winter) UTC offset for this policy's timezone. E.g. -5 for US Eastern, 0 for UK, +1 for CET, +5.5 for India.

Help Text

Enter the standard UTC offset (not DST). See timezone reference table.

4.2 — DST Rule

Setting

Value

Field Type

Picklist

Field Label

DST Rule

API Name

DST_Rule

Values

US / EU / None (one per line)

Default Value

None

Required

Description

Which daylight saving rule applies. US = Second Sunday March to First Sunday November. EU = Last Sunday March to Last Sunday October. None = No DST observed.

Help Text

Select the DST rule for this timezone. Choose None if the region does not observe daylight saving.

4.3 — Monday Open

Setting

Value

Field Type

Time

Field Label

Monday Open

API Name

Monday_Open

Required

Description

Opening time on Monday in local time

Help Text

Enter the time this line opens on Monday in local time (e.g. 09:00). Leave blank if closed on this day.

4.4 — Monday Closed

Setting

Value

Field Type

Time

Field Label

Monday Closed

API Name

Monday_Closed

Required

Description

Closing time on Monday in local time

Help Text

Enter the time this line closes on Monday in local time (e.g. 17:30). Leave blank if closed on this day.

4.5–4.16 — Tuesday through Sunday - Repeat the same steps as 4.3 and 4.4 for each remaining day. All are Time fields, with the required field UNCHECKED

Label

API Name

Tuesday Open

Tuesday_Open

Tuesday Closed

Tuesday_Closed

Wednesday Open

Wednesday_Open

Wednesday Closed

Wednesday_Closed

Thursday Open

Thursday_Open

Thursday Closed

Thursday_Closed

Friday Open

Friday_Open

Friday Closed

Friday_Closed

Saturday Open

Saturday_Open

Saturday Closed

Saturday_Closed

Sunday Open

Sunday_Open

Sunday Closed

Sunday_Closed

4.17 — DST Active

Setting

Value

Field Type

Formula

Return Type

Checkbox

Field Label

DST Active

API Name

DST_Active

Description

Returns true if daylight saving time is currently active based on the DST Rule for this record.

Formula:

IF(TEXT(DST_Rule__c) = "US",
  AND(
    TODAY() >= DATE(YEAR(TODAY()), 3, 8) + MOD(1 - WEEKDAY(DATE(YEAR(TODAY()), 3, 8)) + 7, 7),
    TODAY() < DATE(YEAR(TODAY()), 11, 1) + MOD(1 - WEEKDAY(DATE(YEAR(TODAY()), 11, 1)) + 7, 7)
  ),
  IF(TEXT(DST_Rule__c) = "EU",
    AND(
      TODAY() >= DATE(YEAR(TODAY()), 3, 31) - MOD(WEEKDAY(DATE(YEAR(TODAY()), 3, 31)) - 1, 7),
      TODAY() < DATE(YEAR(TODAY()), 10, 31) - MOD(WEEKDAY(DATE(YEAR(TODAY()), 10, 31)) - 1, 7)
    ),
    false
  )
)

Click Check Syntax to validate before saving.

4.18 — Current Time

Setting

Value

Field Type

Formula

Return Type

Time

Field Label

Current Time

API Name

Current_Time

Description

The current time converted to the local timezone for this record. Uses UTC Offset + DST Active to calculate.

Formula:

TIMEVALUE(NOW() + ((UTC_Offset__c + IF(DST_Active__c, 1, 0)) / 24))

4.19 — Open Today

Setting

Value

Field Type

Formula

Return Type

Time

Field Label

Open Today

API Name

Open_Today

Description

Returns the opening time for the current day of the week.

Formula:

CASE(
  WEEKDAY(TODAY()),
  2, Monday_Open__c,
  3, Tuesday_Open__c,
  4, Wednesday_Open__c,
  5, Thursday_Open__c,
  6, Friday_Open__c,
  7, Saturday_Open__c,
  Sunday_Open__c
)

4.20 — Closed Today

Setting

Value

Field Type

Formula

Return Type

Time

Field Label

Closed Today

API Name

Closed_Today

Description

Returns the closing time for the current day of the week.

Formula:

CASE(
  WEEKDAY(TODAY()),
  2, Monday_Closed__c,
  3, Tuesday_Closed__c,
  4, Wednesday_Closed__c,
  5, Thursday_Closed__c,
  6, Friday_Closed__c,
  7, Saturday_Closed__c,
  Sunday_Closed__c
)

4.21 — Currently Open

Setting

Value

Field Type

Formula

Return Type

Checkbox

Field Label

Currently Open

API Name

Currently_Open

Description

Returns true if the current local time is between today's opening and closing hours. This is the primary field used by the routing policy.

Formula:

AND(
  NOT(ISBLANK(Open_Today__c)),
  Current_Time__c >= Open_Today__c,
  Current_Time__c <= Closed_Today__c
)

4.22–4.41 — Holiday Slots

Rather than creating named holiday fields (Christmas, Easter, etc.), create generic numbered slots. Admins can use any slot for any holiday without needing new fields. For the purpose of this example we have created 5 Holiday slots (20 Fields). You may need to create more depending on how many holidays you observe.

Full list of API names to create:

Slot

Name

Start

End

Message

1

Holiday_1_Name

Holiday_1_Start

Holiday_1_End

Holiday_1_Message

2

Holiday_2_Name

Holiday_2_Start

Holiday_2_End

Holiday_2_Message

3

Holiday_3_Name

Holiday_3_Start

Holiday_3_End

Holiday_3_Message

4

Holiday_4_Name

Holiday_4_Start

Holiday_4_End

Holiday_4_Message

5

Holiday_5_Name

Holiday_5_Start

Holiday_5_End

Holiday_5_Message

For each slot (1–5), create these 4 fields:

Holiday X Name
(Replace X with the Slot Number)

Setting

Value

Field Type

Text

Field Label

Holiday X Name

API Name

Holiday_X_Name

Length

80

Required

Description

Name/label for this holiday slot. For admin reference only — not used in routing.

Help Text

Enter a name so you know what this holiday is. E.g. "Christmas 2026"

Holiday X Start

Setting

Value

Field Type

Date/Time

Field Label

Holiday X Start

API Name

Holiday_X_Start

Required

Description

The date and time that this holiday closure begins.

Help Text

Enter when this line should close for this holiday. E.g. 24/12/2025 17:30

Holiday X End

Setting

Value

Field Type

Date/Time

Field Label

Holiday X End

API Name

Holiday_X_End

Required

Description

The date and time that this holiday closure ends.

Help Text

Enter when this line should reopen after this holiday. E.g. 02/01/2026 09:00

Holiday X Message

Setting

Value

Field Type

Text

Field Label

Holiday X Message

API Name

Holiday_X_Message

Length

255

Required

Description

The TTS message callers hear when calling during this holiday closure.

Help Text

Enter the message callers will hear during this holiday.

4.42 — Holiday Active

Setting

Value

Field Type

Formula

Return Type

Checkbox

Field Label

Holiday Active

API Name

Holiday_Active

Description

Returns true if the current date/time falls within ANY of the holiday closure windows.

Formula:

OR(
  AND(NOT(ISBLANK(Holiday_1_Start__c)), NOW() >= Holiday_1_Start__c, NOW() <= Holiday_1_End__c),
  AND(NOT(ISBLANK(Holiday_2_Start__c)), NOW() >= Holiday_2_Start__c, NOW() <= Holiday_2_End__c),
  AND(NOT(ISBLANK(Holiday_3_Start__c)), NOW() >= Holiday_3_Start__c, NOW() <= Holiday_3_End__c),
  AND(NOT(ISBLANK(Holiday_4_Start__c)), NOW() >= Holiday_4_Start__c, NOW() <= Holiday_4_End__c),
  AND(NOT(ISBLANK(Holiday_5_Start__c)), NOW() >= Holiday_5_Start__c, NOW() <= Holiday_5_End__c)
)

4.43 — Holiday Message

Setting

Value

Field Type

Formula

Return Type

Text

Field Label

Holiday Message

API Name

Holiday_Message

Description

Returns the TTS message for whichever holiday is currently active. Checks slots in order (1 first). Returns blank if no holiday is active.

Formula:

IF(AND(NOT(ISBLANK(Holiday_1_Start__c)), NOW() >= Holiday_1_Start__c, NOW() <= Holiday_1_End__c), Holiday_1_Message__c,
IF(AND(NOT(ISBLANK(Holiday_2_Start__c)), NOW() >= Holiday_2_Start__c, NOW() <= Holiday_2_End__c), Holiday_2_Message__c,
IF(AND(NOT(ISBLANK(Holiday_3_Start__c)), NOW() >= Holiday_3_Start__c, NOW() <= Holiday_3_End__c), Holiday_3_Message__c,
IF(AND(NOT(ISBLANK(Holiday_4_Start__c)), NOW() >= Holiday_4_Start__c, NOW() <= Holiday_4_End__c), Holiday_4_Message__c,
IF(AND(NOT(ISBLANK(Holiday_5_Start__c)), NOW() >= Holiday_5_Start__c, NOW() <= Holiday_5_End__c), Holiday_5_Message__c,
"")))))

4.44 — Force Closed

Setting

Value

Field Type

Checkbox

Field Label

Force Closed

API Name

Force_Closed

Default Value

Unchecked

Description

When checked, forces this line closed regardless of business hours. Use for emergencies or unplanned closures.

Help Text

Tick this box to immediately close this line. Callers will hear the Force Closed Message.

4.45 — Force Closed Message

Setting

Value

Field Type

Text

Field Label

Force Closed Message

API Name

Force_Closed_Message

Length

255

Required

Description

The TTS message callers hear when the line has been manually force-closed.

Help Text

E.g. "We are currently experiencing unexpected issues. Please try again later."

Step 5: Configure the Page Layout

  1. Navigate to Setup → Object Manager → Call Control → Page Layouts

  2. Click on the default layout

  3. Organise fields into sections:

Section 1 — Settings (single column)

  • Routing Policy Name

  • UTC Offset

  • DST Rule

Section 2 — Opening Hours (2-column)

Left Column

Right Column

Monday Open

Monday Closed

Tuesday Open

Tuesday Closed

Wednesday Open

Wednesday Closed

Thursday Open

Thursday Closed

Friday Open

Friday Closed

Saturday Open

Saturday Closed

Sunday Open

Sunday Closed

Section 3 — Status (single column, all read-only)

  • DST Active

  • Current Time

  • Open Today

  • Closed Today

  • Currently Open

Section 4 — Holidays (2-column)

Left Column

Right Column

Holiday 1 Name

Holiday 1 Message

Holiday 1 Start

Holiday 1 End

Holiday 2 Name

Holiday 2 Message

Holiday 2 Start

Holiday 2 End

Holiday 3 Name

Holiday 3 Message

Holiday 3 Start

Holiday 3 End

Holiday 4 Name

Holiday 4 Message

Holiday 4 Start

Holiday 4 End

Holiday 5 Name

Holiday 5 Message

Holiday 5 Start

Holiday 5 End

Holiday Active (read-only)

Holiday Message (read-only)

Section 5 — Overrides (single column)

  • Force Closed

  • Force Closed Message

  1. Click Save

Step 6: Create Your Records

Create a record for each unique schedule you need. If multiple routing policies share the same opening hours, timezone, and holidays, they can all point to the same record — no need to duplicate.

Example: If your UK Sales, UK Support, and UK Billing policies all follow the same hours and holidays, create one record called UK Standard Hours and point all three routing policies at the record using the same query. Update hours or holidays once, and it applies everywhere.

For policies with different schedules (different timezone, different hours, different holidays), create a separate record.

Filling in Opening Hours

  • Enter all times in local time — the formulas handle timezone conversion automatically

  • If the line is closed on a particular day (e.g., weekends), leave both the Open and Closed fields blank for that day. A blank day will always evaluate as closed.

  • If the line has different hours on different days (e.g., closes early on Fridays), just enter the different times for that day

  • Times use 24-hour format: 09:00, 17:30, 22:00, etc.

Filling in Holiday Slots

  • Use any available slot for any holiday — the slot number doesn't matter, they're checked in order

  • Once a holiday has passed, you can clear the slot and reuse it for the next one, or leave old holidays in place (they won't trigger once the end date has passed)

  • Leave all 4 fields blank for unused slots — they'll be ignored by the formula

Writing Messages (TTS)

The text you enter in Holiday Message and Force Closed Message fields is read aloud to callers by the Text-to-Speech (TTS) engine. Keep the following in mind:

  • Language: The message must be written in the language that matches the TTS voice configured in your routing policy. If your policy uses an English voice, write in English. If it uses a French voice, write in French.

Example record:


Part 2: Building the Routing Policy

Step 7: Add the Query Object App

In your routing policy, inside an Action Container (placed after Inbound Numbers):

  1. Add a Query Object app

  2. Configure:

    - Record Type = Call Control

    - Filter Results (Routing Policy Name) = (Testing Policy)  
    (Replace “Testing Policy” with the name of your Call Control record you created)

    - Return Fields (Currently Open), (Holiday Active), (Holiday Message), (Force Closed), (Force Closed Message)

Macro Reference

When the Query Object App retrieves a record, all returned fields are stored as macros using this format:

$(SForce_ResultSetName.FieldAPIName)

With the Result Set (Query Component Name) named CallControl:

Macro

Returns

$(SForce_CallControl.Currently_Open__c)

true or false

$(SForce_CallControl.Holiday_Active__c)

true or false

$(SForce_CallControl.Holiday_Message__c)

The active holiday's TTS message text

$(SForce_CallControl.Force_Closed__c)

true or false

$(SForce_CallControl.Force_Closed_Message__c)

The force-closed TTS message text

Step 8: Add Rules

Add a new Action Container, after the Query Object and connect all nodes:

  1. Add 3 Rule apps

  2. Order matters — Force Closed → Holiday → Out of Hours → Open. Most restrictive first.

  3. Configure:

Rule

Force Closed

Rule Type

Evaluate

Property

$(SForce_CallControl.Force_Closed__c)

Operator

Equals

Value

true

Rule

Holiday Closure

Rule Type

Evaluate

Property

$(SForce_CallControl.Holiday_Active__c)

Operator

Equals

Value

true

Rule

Out of Hours

Rule Type

Evaluate

Property

$(SForce_CallControl.Currently_Open__c)

Operator

Equals

Value

false

Step 9: Setting up closure messages in the TTS Speak App

After each rule rule:

  1. Add a speak app

  2. Configure:

Each speak component can have its respective Macro added and voice set.

Force Close Message - $(SForce_CallControl.Force_Closed_Message__c)

Holiday Message - $(SForce_CallControl.Holiday_Message__c)

Out of Hours - This will be a static TTS message as it does not need to change frequently. Optionally you could add another field under the call control object to capture this input if desired.

Step 10: Open Hours Flow

If none of the above rules trigger, the call falls through to the next app below — this is your open/in-hours flow. Connect to your normal routing (Hunt Group, Call Queue, Connect a Call, etc.).

Key Points

  • Rules trigger on match — if the condition is met, the call routes via the middle connector. If not, it passes to the next app below.

  • Order matters — Force Closed → Holiday → Out of Hours → Open. Most restrictive first.

  • One record per schedule — each has its own timezone, hours, and holidays.

  • Admins enter local times — formulas handle UTC conversion automatically.

  • One rule for all holidays — generic slots mean you never touch the policy to add a new holiday.

  • No policy changes needed — admins manage everything from the Salesforce record.


Testing

  1. Set a test record's hours to a window you can test within

  2. Call the number assigned to that policy

  3. Verify the call routes correctly for open/closed

  4. Toggle Force Closed and call again — confirm the override message plays

  5. Set a holiday slot window that includes now — confirm the holiday message plays

  6. Check the formula fields on the record to verify Currently Open, Current Time, DST Active, and Holiday Active are calculating correctly

Timezone Reference

Timezone

UTC Offset

DST Rule

US Eastern

-5

US

US Central

-6

US

US Mountain

-7

US

US Pacific

-8

US

UK

0

EU

Central Europe

+1

EU

Eastern Europe

+2

EU

India

+5.5

None

Singapore / HK

+8

None

Japan

+9

None

Australia (Sydney)

+10

AU*

New Zealand

+12

NZ*

*For AU/NZ timezones, add additional IF branches to the DST_Active__c formula with the appropriate transition dates for those regions.