# Automatically Add Zoom Dual-Screen Code to Zoom CRC Calls

**URL:** <https://community.pexip.com/t/automatically-add-zoom-dual-screen-code-to-zoom-crc-calls/1096>\
**Category:** Endpoint Macros\
**Created:** [August 25, 2026, 3:49pm UTC](https://community.pexip.com/t/automatically-add-zoom-dual-screen-code-to-zoom-crc-calls/1096 "2026-08-25T15:49:53Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![ssmith](https://avatars.discourse-cdn.com/v4/letter/s/958977/32.png) [@ssmith](https://community.pexip.com/u/ssmith)\
**Post date:** [August 25, 2026, 3:49pm UTC](https://community.pexip.com/t/automatically-add-zoom-dual-screen-code-to-zoom-crc-calls/1096/1 "2026-08-25T15:49:53Z")

</div>

I wanted to share a Cisco RoomOS macro **Youssef**  **Aoufi** originally put together to automatically request the **Zoom dual-screen experience** when joining Zoom meetings through the Zoom CRC SIP service.

The macro monitors successfully connected calls to `zoomcrc.com`. If it detects a standard Zoom SIP dial string, it disconnects the original call and immediately redials it with Zoom’s **608 dual-screen code** appended.

### Why use this?

When Cisco video endpoints join Zoom meetings over SIP, adding `.608` to the Zoom dial string requests the dual-screen layout.

Instead of requiring users to manually modify the SIP URI, this macro handles the process automatically.

### Supported dial-string formats

The macro supports Zoom calls both with and without a meeting passcode.

**Without a passcode:**

`93282267874@zoomcrc.com`

The macro changes this to:

`93282267874.608@zoomcrc.com`

**With a passcode:**

`93282267874.123456@zoomcrc.com`

The macro changes this to:

`93282267874.123456.608@zoomcrc.com`

### Macro

```auto
import xapi from 'xapi';

/*
 * Zoom Dual-Screen Dial String Macro
 * written by: Youssef Aoufi 
 *
 * Purpose:
 * Detect successful Zoom CRC calls that use either of these formats:
 *
 * <MeetingID>@zoomcrc.com
 * <MeetingID>.<Passcode>@zoomcrc.com
 *
 * and automatically redial the call with Zoom code "608" appended.
 *
 * Supported Zoom meeting passcodes for SIP/H.323 room systems
 * are expected to contain between 6 and 10 numeric digits.
 *
 * Examples:
 *
 * Without passcode:
 * 93282267874@zoomcrc.com
 * becomes:
 * 93282267874.608@zoomcrc.com
 *
 * With passcode:
 * 93282267874.123456@zoomcrc.com
 * becomes:
 * 93282267874.123456.608@zoomcrc.com
 *
 * A URI that already contains ".608", such as:
 *
 * 93282267874.608@zoomcrc.com
 *
 * will not match the filter, preventing the macro from
 * repeatedly appending the Zoom dual-screen code.
 */

/*
 * Capture group 1:
 * Zoom Meeting ID (11–13 digits)
 *
 * Capture group 2:
 * Optional Zoom meeting passcode/PIN (6–10 digits)
 */
const zoomPattern = /^(\d{11,13})(?:\.(\d{6,10}))?@zoomcrc\.com$/;

/*
 * Listen for a successfully connected call and inspect
 * the remote SIP URI.
 */
xapi.Event.CallSuccessful.on(event => {

  let remoteUri = event.RemoteURI;

  // Nothing to inspect if RoomOS does not provide a RemoteURI.
  if (!remoteUri) {
    console.log('⚠️ No RemoteURI found. Skipping.');
    return;
  }

  // Remove the "sip:" prefix if RoomOS includes it.
  remoteUri = remoteUri.replace(/^sip:/, '');

  // Check whether the call matches a supported Zoom CRC URI.
  const match = remoteUri.match(zoomPattern);

  if (match) {

    const [, meetingId, pin] = match;

    /*
     * Append the Zoom 608 dual-screen code while preserving
     * the meeting passcode when one is present.
     */
    const newUri = pin
      ? `${meetingId}.${pin}.608@zoomcrc.com`
      : `${meetingId}.608@zoomcrc.com`;

    console.log(`🔁 Rewriting Zoom call: ${remoteUri} → ${newUri}`);

    // Disconnect the original call.
    xapi.Command.Call.Disconnect({
      CallId: event.CallId
    });

    /*
     * Give RoomOS a short period to begin tearing down the
     * original call before placing the replacement call.
     */
    setTimeout(() => {
      xapi.Command.Dial({
        Number: newUri
      });
    }, 500);

  } else {

    /*
     * Ignore normal SIP calls, unsupported Zoom URI formats,
     * and Zoom calls that already contain the ".608" code.
     */
    console.log(`✅ Call URI does not require Zoom rewrite: ${remoteUri}`);
  }
});

```

### How it works

1. A user dials a Zoom CRC address normally from the Cisco endpoint.

2. RoomOS establishes the SIP call.

3. The macro listens for the `CallSuccessful` event.

4. It checks the `RemoteURI` to determine whether the call matches a supported Zoom CRC format.

5. The macro extracts the Zoom Meeting ID and optional passcode.

6. It disconnects the original call.

7. After a short 500 ms delay, it redials the meeting with `.608` appended.

8. The call remains connected using the requested Zoom dual-screen layout.

### Deployment

The macro can be added through the Cisco endpoint’s **Macros** interface in the device web administration page or through Control Hub where macro management is available.

After adding the code:

- Save the macro.

- Enable it.

- Place a test Zoom CRC call.

- Review the macro console logs to verify the original and rewritten SIP URI.

For example:

```auto
🔁 Rewriting Zoom call:
1234567890@zoomcrc.com
→
93282267874.608@zoomcrc.com

```

Once the rewritten call connects, you should see:

```auto
✅ Call URI does not require Zoom rewrite:
1234567890.608@zoomcrc.com

```

### Notes

This macro is specifically filtering calls to `zoomcrc.com`, so normal SIP calls are unaffected. You can manually update the Zoom filter to include a different Zoom domain as needed, for example, [`global.zoomcrc.com`](http://zoomcrc.com)`.`

It is also worth testing the behavior on your specific Cisco RoomOS release and endpoint configuration before deploying it broadly.

Hopefully this is useful for anyone looking for a simple way to automatically request Zoom dual-screen mode from Cisco RoomOS devices without requiring users to change how they normally dial Zoom meetings.
