Automatically Add Zoom Dual-Screen Code to Zoom CRC Calls

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

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:

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

Once the rewritten call connects, you should see:

✅ 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.

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.