zCommand

zCommand Dial Start

Start or join a meeting that is scheduled to occur now.

In order for the Zoom Room to be able to start the meeting before the original host joins, the meeting should be scheduled using the “Enable join before host” option. The meeting number will be an integer; however, in the future, the Zoom Room may support string-based vanity phone numbers, so this parameter is a string that currently represents an integer. It’s often useful to filter out the InfoResult Info callin_country_list, if you don’t need that info, by first invoking: zFeedback Register Op: ex Path: /Event/InfoResult/info/callin_country_list

Schema:

zCommand Dial Start meetingNumber: <string>

Example:

zCommand Dial Start meetingNumber: 3348757790
OK
*r DialStartResult (status=OK):
** end

*s Call Status: CONNECTING_MEETING
** end

...

*r InfoResult Info real_meeting_id: m71q6DwwTd6Y7b0ua5ubtQ==
*r InfoResult Info meeting_id: 371440459
*r InfoResult Info participant_id: 28
*r InfoResult Info my_userid: 16778240
*r InfoResult Info am_i_original_host: off
*r InfoResult Info is_webinar: off
*r InfoResult Info is_view_only: off
*r InfoResult Info meeting_type: NORMAL
*r InfoResult Info meeting_password: 
*r InfoResult Info dialIn: +1 669 900 6833;+1 646 558 8656
*r InfoResult Info toll_free_number: 
*r InfoResult Info international_url: /zoomconference
*r InfoResult Info is_toll_free_callin_list_available: on
*r InfoResult Info is_callin_country_list_available: on
*r InfoResult Info is_calling_room_system_enabled: on
*r InfoResult Info support_callout_type: NONE
*r InfoResult Info user_type: BASIC
*r InfoResult Info callin_country_list ...
*r InfoResult Info invite_email_subject: Please join Zoom meeting in progress
*r InfoResult Info invite_email_content: You are invited to a Zoom meeting now. 

Join from PC, Mac, Linux, iOS or Android: https://zoom.us/j/371440459

Or iPhone one-tap:
    US: +16699006833,,371440459#  or +16465588656,,371440459# 
Or Telephone:
    Dial(for higher quality, dial a number based on your current location): 
        US: +1 669 900 6833  or +1 646 558 8656 
    Meeting ID: 371 440 459
    International numbers available: https://zoom.us/u/ackaxrkh2e

Or an H.323/SIP room system:
    H.323: 
        162.255.37.11 (US West)
        162.255.36.11 (US East)
        221.122.88.195 (China)
        115.114.131.7 (India)
        213.19.144.110 (EMEA)
        202.177.207.158 (Australia)
        209.9.211.110 (Hong Kong)
        64.211.144.160 (Brazil)
        69.174.57.160 (Canada)
    Meeting ID: 371 440 459

    SIP: 371440459@zoomcrc.com


** end

...

*r ListParticipantsResult ...

*s Call Status: IN_MEETING
** end

meetingNumber: The meeting number of a meeting that is scheduled to happen today. You can get a list of scheduled meetings for this Zoom Room using zCommand Bookings List.

zCommand Dial StartPmi

Start a PMI meeting, using the PMI number for this room. The duration does not dictate when the meeting ends; the duration is used only to show the intended duration of the meeting in the calendar integration. The external Zoom Rooms Scheduling Display will show this duration.

Schema:

zCommand Dial StartPmi Duration: <int>

Example:

zCommand Dial StartPmi Duration: 9
OK
*r DialStartPmiResult (status=OK):
** end

*s Call Status: CONNECTING_MEETING
** end

...

*r InfoResult ...
** end

...

*r ListParticipantsResult ...

*e CallConnect success: off
*e CallConnect avail_minutes: 0
** end

*s Call Status: IN_MEETING
** end

Duration: The time in minutes the meeting is intended to last. The Zoom Room will book an instant meeting, which will appear on integrated calendars.

zCommand Dial Join

Join a meeting in progress.

Schema:

zCommand Dial Join meetingNumber: <string>

Example:

command dial join meetingnumber: 804452190
OK
*r DialJoinResult (status=OK):
** end

*s Call Status: CONNECTING_MEETING
** end

...

*r InfoResult ...

** end

...

*r ListParticipantsResult ...

*s Call Status: IN_MEETING
** end

meetingNumber: The meeting number to join. This meeting number will be an integer, stored as a string. In the future, Zoom may support vanity phone numbers in the form of a string that may include alphanumeric characters.

zCommand Call Disconnect - In-Meeting

Ends the current meeting. If the ZR is not connected to a meeting, this command results in an error message.

Schema:

zCommand Call Disconnect

Example

zCommand Call Disconnect
OK
*r CallDisconnectResult (status=OK):
** end

*s Sharing ...

*e CallDisconnect success : on
** end

...

*s Call Status: NOT_IN_MEETING
** end

zCommand Call Info - In-Meeting

Gets the info of the current meeting in progress. If the ZR is not connected to a meeting, this command results in an error message.

Schema:

zCommand Call Info
OK
*r InfoResult (status=OK):
*r InfoResult Info real_meeting_id: <string> An internal meeting Id that is only used in the Web Zoom back end. This ID is not used by the Zoom Room.
*r InfoResult Info meeting_id: <string> Meeting ID of the call; users will enter this ID to call in.
*r InfoResult Info participant_id: <int> If the participant wants to join the conference using a video connection from a desktop, and dial in via PSTN, then when dialing in, the user should enter this participant Id, so that the Zoom Room can correlate the video and audio. This value is not. the same as a user id, which is a value assigned to each meeting participant.
*r InfoResult Info my_userid: <int> A meeting participant ID: Use this ID to get/set in-meeting parameters for a participant. The bottom 10 bits are ignored.
*r InfoResult Info am_i_original_host: <on/off> The Zoom Room is the original host if it started the meeting via its PMI.
*r InfoResult Info is_webinar: <on/off> Whether this call is a webinar
*r InfoResult Info is_view_only: <on/off> Whether the Zoom Room is a view-only attendee in a webinar.
*r InfoResult Info meeting_type: <NORMAL, SHARING_LAPTOP, PSTN_CALLOUT, NONE> Type of meeting.
*r InfoResult Info meeting_password: <string> The meeting password
*r InfoResult Info dialIn: <string> PSTN phone numbers to use to dial into the meeting.
*r InfoResult Info toll_free_number: <string> The tool free PSTN number that participants use to join the conference
*r InfoResult Info international_url: <string> The web page link on zoom.us that shows the list of all international dial-in numbers.
*r InfoResult Info is_toll_free_callin_list_available: <on/off> DEPRECATED
*r InfoResult Info is_callin_country_list_available: <on/off> DEPRECATED
*r InfoResult Info is_calling_room_system_enabled: <on/off> if the customer has purchasd the CRC (Cloud Room Connector), the customer has the ability to invite H.323 endpoints that connect through the CRC. On the iOS ZRC, when inviting a new participant to a meeting, if the CRC is installed, then one tab will display the option "Invite Room System"
*r InfoResult Info support_callout_type: <US_ONLY, INTERNATIONAL, NONE> The callout types allowed for the Zoom Room. These permissions are configured on the web portal. None = no call out, US_ONLY = call to US only, INTERNATIONAL = allow international call out. To add international dial out, you need to go to My Profile -> Billing, on the Web portal, and add the Audio Conferencing Options add-on.
*r InfoResult Info user_type: <BASIC, PRO, CORP, NONE> Type of user. BASIC is a free user, PRO is a paid user with a license, and CORP is an on-premise user.
*r InfoResult Info callout_country_list n id: <string> Configured on the Web portal, if you have added the Audio Conferencing Options add-on.
[*r InfoResult Info callout_country_list n name: <string> ]Friendly Country name
[*r InfoResult Info callout_country_list n code: <string>] Multiple digit country code
[*r InfoResult Info callout_country_list n number: <string> ]Full number, including country code
[*r InfoResult Info callout_country_list n display_number: <string> ]Friendly number format
[*r InfoResult Info callin_country_list n id: <string> ]A list of phone numbers in foreign countries to use when dialing in.
[*r InfoResult Info callin_country_list n name: <string>]
[*r InfoResult Info callin_country_list n code: <string>]
[*r InfoResult Info callin_country_list n number: <string>]
[*r InfoResult Info callin_country_list n display_number: <string>]
[*r InfoResult Info toll_free_callin_list n id: <string>] Configured on the Web portal, if you have added the Audio Conferencing Options add-on.
[*r InfoResult Info toll_free_callin_list n name: <string>]
[*r InfoResult Info toll_free_callin_list n code: <string>]
[*r InfoResult Info toll_free_callin_list n number: <string>]
[*r InfoResult Info toll_free_callin_list n display_number: <string>]
*r InfoResult Info invite_email_subject: <string> The subject line for the invitation email that goes to invited participants
*r InfoResult Info invite_email_content: <string> The body of the email that goes to invited participants.
*r InfoResult Info default_callin_country: <string>
*r InfoResult Info schedule_option: <string>
*r InfoResult Info schedule_option2: <string>
*r InfoResult Info is_waiting_room: <on/off>
*r InfoResult Info meeting_list_item meetingName: <string>
*r InfoResult Info meeting_list_item meetingNumber: <string>
*r InfoResult Info meeting_list_item hostName: <string>
*r InfoResult Info meeting_list_item startTime: <string>
*r InfoResult Info meeting_list_item endTime: <string>
*r InfoResult Info meeting_list_item creatorEmail: <string>
*r InfoResult Info meeting_list_item creatorName: <string>
*r InfoResult Info meeting_list_item isPrivate: <on/off>
*r InfoResult Info meeting_list_item checkedIn: <1/0> //Whether meeting has been checked in
*r InfoResult Info meeting_list_item isInstantMeeting: <on/off>
*r InfoResult Info meeting_list_item calendarID: <string> //ID on calender
*r InfoResult Info meeting_list_item calendarChangeKey: <string> 
*r InfoResult Info meeting_list_item accessRole: <string>
*r InfoResult Info meeting_list_item location: <string>
*r InfoResult Info meeting_list_item scheduledFrom: <string> //How the meeting was scheduled
*r InfoResult Info meeting_list_item thirdparty service_provider: <string>
*r InfoResult Info meeting_list_item thirdparty meeting_number: <string>
*r InfoResult Info meeting_list_item thirdparty sip_address: <string>
*r InfoResult Info meeting_list_item thirdparty h323_address: <string>
** end

Example

zcommand call info
OK
*r InfoResult (status=OK):
*r InfoResult Info real_meeting_id: dz4mtgZsTKSZ2XBb7FUJkw==
*r InfoResult Info meeting_id: 804452190
*r InfoResult Info participant_id: 15
*r InfoResult Info my_userid: 16779264
*r InfoResult Info am_i_original_host: off
*r InfoResult Info is_webinar: off
*r InfoResult Info is_view_only: off
*r InfoResult Info meeting_type: NORMAL
*r InfoResult Info meeting_password: 
*r InfoResult Info dialIn: +1 646 876 9923;+1 669 900 6833
*r InfoResult Info toll_free_number: ...
*r InfoResult Info international_url: /zoomconference
*r InfoResult Info is_toll_free_callin_list_available: on
*r InfoResult Info is_callin_country_list_available: on
*r InfoResult Info is_calling_room_system_enabled: on
*r InfoResult Info support_callout_type: INTERNATIONAL
*r InfoResult Info user_type: PRO
*r InfoResult Info toll_free_callin_list 1 id: US
*r InfoResult Info toll_free_callin_list 1 name: US
*r InfoResult Info toll_free_callin_list 1 code: 1
*r InfoResult Info toll_free_callin_list 1 number: 1 8773690926
*r InfoResult Info toll_free_callin_list 1 display_number: +1 877 369 0926
*r InfoResult Info toll_free_callin_list 2 id: US
*r InfoResult Info toll_free_callin_list 2 name: US
*r InfoResult Info toll_free_callin_list 2 code: 1
*r InfoResult Info toll_free_callin_list 2 number: 1 8778535247
*r InfoResult Info toll_free_callin_list 2 display_number: +1 877 853 5247 
*r InfoResult Info invite_email_subject: Please join Zoom meeting in progress
*r InfoResult Info invite_email_content: You are invited to a Zoom meeting now. 

Join from PC, Mac, Linux, iOS or Android: https://success.zoom.us/j/804452190

Or iPhone one-tap:
    US: +16468769923,,804452190#  or +16699006833,,804452190# 
Or Telephone:
    Dial(for higher quality, dial a number based on your current location): 
        US: +1 646 876 9923  or +1 669 900 6833  or +1 877 369 0926 (Toll Free) or +1 877 853 5247  (Toll Free)
    Meeting ID: 804 452 190
    International numbers available: https://zoom.us/u/acpJ3PkjBo

Or an H.323/SIP room system:
    H.323: 
        162.255.37.11 (US West)
        162.255.36.11 (US East)
        221.122.88.195 (China)
        115.114.131.7 (India)
        213.19.144.110 (EMEA)
        202.177.207.158 (Australia)
        209.9.211.110 (Hong Kong)
        64.211.144.160 (Brazil)
        69.174.57.160 (Canada)
    Meeting ID: 804 452 190

    SIP: 804452190@zoomcrc.com

Or Skype for Business (Lync):
    https://success.zoom.us/skype/804452190


*r InfoResult Info default_callin_country: US
*r InfoResult Info schedule_option: 2382404203751407872
*r InfoResult Info schedule_option2: 1649267441664
*r InfoResult Info is_waiting_room: off
*r InfoResult Info meeting_list_item meetingName: 
*r InfoResult Info meeting_list_item meetingNumber: 
*r InfoResult Info meeting_list_item hostName: 
*r InfoResult Info meeting_list_item startTime: 
*r InfoResult Info meeting_list_item endTime: 
*r InfoResult Info meeting_list_item creatorEmail: 
*r InfoResult Info meeting_list_item creatorName: 
*r InfoResult Info meeting_list_item isPrivate: off
*r InfoResult Info meeting_list_item checkedIn: off
*r InfoResult Info meeting_list_item isInstantMeeting: off
*r InfoResult Info meeting_list_item calendarID: 
*r InfoResult Info meeting_list_item calendarChangeKey: 
*r InfoResult Info meeting_list_item accessRole: 
*r InfoResult Info meeting_list_item location: 
*r InfoResult Info meeting_list_item scheduledFrom: ZRP
*r InfoResult Info meeting_list_item thirdparty service_provider: -1
*r InfoResult Info meeting_list_item thirdparty meeting_number: 
*r InfoResult Info meeting_list_item thirdparty sip_address: 
*r InfoResult Info meeting_list_item thirdparty h323_address: 
** end

zCommand Call MuteAll - In-Meeting

Mute the audio of all participants in the current meeting.

There are several scenarios:

  • If the Zoom Room is not the host, this command has no effect.

  • If the Zoom Room is the host, then the first time the Zoom Room unmutes another participant’s audio, that participant’s client will ask permission from the participant to unmute:

    unmute_req

  • The second and subsequent times that the host Zoom Room attempts to unmute a participant’s audio, that participant’s audio will be automatically unmuted if the participant previously gave permission to unmute audio.

Schema:

zCommand Call MuteAll mute: <on/off>

Example:

zcommand call muteall mute: off 
OK
*r CallMuteAllResult (status=OK):
** end

If the other pariticipant agrees to allow audio to be unmuted, you get this notification:

...
*r ListParticipantsResult audio_status state: AUDIO_UNMUTED
...

Mute: If the Zoom Room is the host of the meeting (the is_host parameter is set to on in the ListParticipant result for Zoom Room), set this parameter to true to audio mute all users in a meeting; set to false to audio unmute all users. When unmuting all users, in some cases, the remote users need to agree to the unmute operation. If the ZR is not connected to a meeting, this command results in an error message.

zCommand Call MuteParticipant - In-Meeting

Mute the audio of a specific participant in a meeting. The same permission mechanism is active as in the MuteAll command. If the ZR is not connected to a meeting, this command results in an error message. The bottom 10 bits of the Id are not significant. Do not use this command to mute the microphone audio of the Zoom Room itself; instead, use zConfiguration Call Microphone.

Schema:

zCommand Call MuteParticipant mute: <on/off> Id: <int>

Example:

zcommand call muteparticipant mute: off id: 33555457
OK
*r CallMuteParticipantResult (status=OK):
** end

If the other pariticipant agrees to allow audio to be unmuted, you get this notification:

*r ListParticipantsResult user_name: Scott Firestone
...
*r ListParticipantsResult audio_status state: AUDIO_UNMUTED
...

Mute: set to on to mute the audio of the participant, and off to unmute the participant. When unmuting a user, the remote user may need to agree to the unmute operation.

Id: the ID of the participant, according to the participant list. To see the participants list, issue the command zCommand Call ListParticipants. The lower 10 bits of the participant ID are ignored.

zCommand Call ListParticipants - In-Meeting

List all participants in a meeting. If the ZR is not connected to a meeting, this command results in an error message.

Note: When switching between the ZR-CSAPI and the Zoom Room Controller (iOS / Android tablet), make sure to exit existing meetings first. Otherwise, the participants list may not update.

Note: The is_recording and can_record fields are only applicable to the other participants and those who are not host, not the Zoom Room itself. If another participant is host, the is_recording and can_record fields do not apply to them either. For the Zoom Room itself, rely on the RecordingInfo zEvent.

Schema:

zcommand call listparticipants
OK
*r ListParticipantsResult (status=OK):
*r ListParticipantsResult resultInfo TotalRows: <int>
*r ListParticipantsResult n user_name: <string> // The username
*r ListParticipantsResult n user_id: <string> // The user ID, used only in the current meeting. The bottom 10 bits are ignored.
*r ListParticipantsResult n is_host: <on/off> // Whether this particpant started the meeting as a host.
*r ListParticipantsResult n is_myself: <on/off> // Whether the participant is this Zoom Room.
*r ListParticipantsResult n can_record: <on/off> // Whether this participant can start a recording. (do not use, use is_host instead)
*r ListParticipantsResult n is_recording: <on/off> // Whether this participant has started a recording.
*r ListParticipantsResult n avatar_url: <string> // The avatar iamge URL for the participant
*r ListParticipantsResult n local_recording_disabled: <on/off> // If this participant is not allowed to record to a local file
*r ListParticipantsResult n is_video_can_mute_byHost: <on/off> // Whether the host can video mute this participant.
*r ListParticipantsResult n is_video_can_unmute_byHost:  <on/off> // Whether the host can video unmute this participant after getting permission from the participant.
*r ListParticipantsResult n isCohost: <on/off> // A cohost has all privileges of a host. Not supported on the ZR.
*r ListParticipantsResult n user_type: <NORMAL, H323, CALL_IN> // Type of call
*r ListParticipantsResult n audio status type: <AUDIO_VOIP, AUDIO_TELE, AUDIO_NONE> // Type of participant. AUDIO_VOIP: connected over 
*r ListParticipantsResult n audio status state: <AUDIO_MUTED, AUDIO_UNMUTED> // Whether audio is muted or unmuted
*r ListParticipantsResult n video status has_source: <on/off>
*r ListParticipantsResult n video status is_sending: <on/off> // Whether the participants is sending video others. Otherwise, this person's camera is muted.
*r ListParticipantsResult n video status is_receiving: <on/off> // DEPRECATED
*r ListParticipantsResult n camera status can_i_request_control: <on/off> // Whether it is possible to request control of the camera for this participant
*r ListParticipantsResult n camera status am_i_controlling: <on/off> // Whether the Zoom Room is controlling the camera for this participant
*r ListParticipantsResult n camera status can_switch_camera: <on/off> // Whether the Zoom Room can switch the camera source for this particpant
*r ListParticipantsResult n camera status can_move_camera: <on/off> // Whether the zoom Room can move the camera for this participant.
*r ListParticipantsResult n camera status can_zoom_camera: <on/off> Whether the zoom Room can zoom the camera for this participant.
*r ListParticipantsResult n is_client_support_closed_caption: <on/off> //Whether client supports closed caption
*r ListParticipantsResult n can_edit_closed_caption: <on/off> //Whether client can edit closed caption
*r ListParticipantsResult n is_client_support_coHost: <on/off> //Whether client supports co-host
*r ListParticipantsResult n hand_status is_valid: <on/off> //Whether hand status is supported
*r ListParticipantsResult n hand_status is_raise_hand: <on/off> //Only visible if hand_status is_valid is true, whether hand is raised
*r ListParticipantsResult n hand_status time_stamp: <int> //Only visible if hand_status is_valid is true, timestamp of hand status
*r ListParticipantsResult n event: <None, ZRCUserChangedEventJoinedMeeting, ZRCUserChangedEventLeftMeeting, ZRCUserChangedEventUserInfoUpdated, ZRCUserChangedEventHostChanged> // The event will be none, if there is no asynchronous change to the status of the participant. Update: ZRCUserChangedEventJoinedMeeting and ZRCUserChangedEventLeftMeeting notifications are not sent; instead, you will get a revised total participant list via the *r ListParticipantsResult asynchronous notification.
*r ListParticipantsResult 2 ...
...
** end

Example:

zcommand call listparticipants
OK
*r ListParticipantsResult (status=OK):
*r ListParticipantsResult resultInfo TotalRows: 2
*r ListParticipantsResult 1 user_name: ZR-ScottFirestone2
*r ListParticipantsResult 1 user_id: 16778240
*r ListParticipantsResult 1 is_host: on
*r ListParticipantsResult 1 is_myself: on
*r ListParticipantsResult 1 can_record: off
*r ListParticipantsResult 1 is_recording: off
*r ListParticipantsResult 1 avatar_url: https://zoom.us/p/U-ygqt3HStSmbY1JfYW-OA/15d64cfd-3b0d-46c0-93c1-08985d0c96b1-2618
*r ListParticipantsResult 1 local_recording_disabled: on
*r ListParticipantsResult 1 is_video_can_mute_byHost: on
*r ListParticipantsResult 1 is_video_can_unmute_byHost: on
*r ListParticipantsResult 1 isCohost: off
*r ListParticipantsResult 1 user_type: NORMAL
*r ListParticipantsResult 1 audio_status type: AUDIO_VOIP
*r ListParticipantsResult 1 audio_status state: AUDIO_UNMUTED
*r ListParticipantsResult 1 video_status has_source: on
*r ListParticipantsResult 1 video_status is_sending: on
*r ListParticipantsResult 1 video_status is_receiving: off
*r ListParticipantsResult 1 camera_status can_i_request_control: off
*r ListParticipantsResult 1 camera_status am_i_controlling: off
*r ListParticipantsResult 1 camera_status can_switch_camera: off
*r ListParticipantsResult 1 camera_status can_move_camera: off
*r ListParticipantsResult 1 camera_status can_zoom_camera: off
*r ListParticipantsResult 1 is_client_support_closed_caption: off
*r ListParticipantsResult 1 can_edit_closed_caption: off
*r ListParticipantsResult 1 is_client_support_coHost: off
*r ListParticipantsResult 1 hand_status is_valid: off
*r ListParticipantsResult 1 event: None
*r ListParticipantsResult 2 user_name: Scott Firestone
...
** end

zCommand Call Accept

You can configure a Zoom Room to NOT accept incoming calls automatically, by turning off the setting on the Web portal “Automatically accept incoming call and far end camera control”. When another user dials the Zoom Room directly via the Contacts list, the incoming call arrives, and the ZR-CSAPI will issue a zEvent IncomingCallIndication notification message containing a callerJID of the incoming call. If the client wants to accept the incoming caller, the client should issue this command with the callerJID from the zEvent IncomingCallIndication notification.

Schema:

zCommand Call Accept callerJID: <string>

Example: An incoming call arrives:

*e IncomingCallIndication callerJID: thqrasdqs4wzdnch8kcbiw@xmpp.zoom.us
*e IncomingCallIndication calleeJID: 
*e IncomingCallIndication meetingID: :
*e IncomingCallIndication password: 
*e IncomingCallIndication meetingOption: 6
*e IncomingCallIndication meetingNumber: 815366714
*e IncomingCallIndication callerName: Scott Firestone Testing ZR
*e IncomingCallIndication avatarURL: 
*e IncomingCallIndication lifeTime: 60
** end

And then the CLI accepts the call:

zCommand Call Accept callerJID: thqrasdqs4wzdnch8kcbiw@xmpp.zoom.us
OK
*r CallAcceptRejectResult (status=OK):
** end

*s Call Status: CONNECTING_MEETING
** end

...
*r ListParticipantsResult ...
...

*s Call Status: IN_MEETING
** end

callerJID: The callerJID from the IncomingCallIndication event.

zCommand Call Reject

Similar to zCommand Call Accept, but this command rejects the call. Reject incoming calls using the JID that was included in the zEvent IncomingCallIndication notification.

Schema:

zCommand Call Reject callerJID: <string>

Example: An incoming call arrives:

*e IncomingCallIndication callerJID: thqrasdqs4wzdnch8kcbiw@xmpp.zoom.us
*e IncomingCallIndication calleeJID: 
*e IncomingCallIndication meetingID: :
*e IncomingCallIndication password: 
*e IncomingCallIndication meetingOption: 6
*e IncomingCallIndication meetingNumber: 815366714
*e IncomingCallIndication callerName: Scott Firestone Testing ZR
*e IncomingCallIndication avatarURL: 
*e IncomingCallIndication lifeTime: 60
** end

And then the CLI rejects the call:

zCommand Call Reject callerJID: thqrasdqs4wzdnch8kcbiw@xmpp.zoom.us
OK
*r CallAcceptRejectResult (status=OK):
** end

callerJID: The callerJID from the IncomingCallIndication event.

zCommand Invite

Create a new PMI meeting, and invite these users, using the JID of each user from the phonebook. The Zoom Room will book an instant meeting, using the duration that you specify. The external Zoom Rooms Scheduling Display panel (if hooked up) will show this duration.

Schema:

zCommand Invite Duration: <int> user: <string> user: <string> ...

Example:

zcommand invite duration: 30 user: thqrasdqs4wzdnch8kcbiw@xmpp.zoom.us
OK
*r InviteResult (status=OK):
** end

*s Call Status: CONNECTING_MEETING
** end
...
 *r InfoResult Info ...
...
*s Call Status: IN_MEETING
** end
...
*r ListParticipantsResult ...
...

Duration: The intended duration of the meeting, in minutes. The Zoom Room will automatically book an instant meeting for this duration, and update it via calendar integration.

user: The jid (join ID) user ID to invite. Use zCommand Phonebook List to get a list of Phonebook entries, and use the jid entry for a user.

zCommand Bookings List

Return the list of meetings scheduled for today, between 12:01 AM and midnight. It is not possible to retrieve scheduled meetings for other days.

Schema:

zCommand Bookings List
OK
*r BookingsListResult (status=OK):
*r BookingsListResult resultInfo TotalRows: N
*r BookingsListResult Meeting n meetingName: <string> // Name of the meeting. If a meeting is set to "private", it is the responsibility of the CLI user to not show the meeting name.
*r BookingsListResult Meeting n meetingNumber: <int> // meeting number
*r BookingsListResult Meeting n hostName: // RESERVED for future use
*r BookingsListResult Meeting n startTime: <ISO 8601 date> // Meeting start time
*r BookingsListResult Meeting n endTime: <ISO 8601 date> // Meeting end time
*r BookingsListResult Meeting n creatorEmail: <string> // Creator of the Google Calendar item.  This parameter might be empty.
*r BookingsListResult Meeting n creatorName: // Creator of the Google Calendar item.  This parameter might be empty.
*r BookingsListResult Meeting n isPrivate: <on/off> // On if meeting is private. If private, then the end system should show the name of the meeting using the CreatorName; for instance, "Bob's meeting." If the creatorName is not available, use the creatorEmail.
*r BookingsListResult Meeting n checkedIn: <1/0> //Whether meeting has been checked in
*r BookingsListResult Meeting n isInstantMeeting: <on/off>
*r BookingsListResult Meeting n calendarID: <string> //ID on calender
*r BookingsListResult Meeting n calendarChangeKey: <string> 
*r BookingsListResult Meeting n accessRole: <string>
*r BookingsListResult Meeting n location: <string>
*r BookingsListResult Meeting n scheduledFrom: <string> //How the meeting was scheduled
*r BookingsListResult Meeting n thirdparty service_provider: <string>
*r BookingsListResult Meeting n thirdparty meeting_number: <string>
*r BookingsListResult Meeting n thirdparty sip_address: <string>
*r BookingsListResult Meeting n thirdparty h323_address: <string>
...
** end

Example:

zcommand bookings list
OK
*r BookingsListResult (status=OK):
*r BookingsListResult resultInfo TotalRows: 2
*r BookingsListResult Meeting 1 meetingName: Instant Meeting
*r BookingsListResult Meeting 1 meetingNumber: 6225245297
*r BookingsListResult Meeting 1 hostName: 
*r BookingsListResult Meeting 1 startTime: 2019-01-04T01:50:32Z
*r BookingsListResult Meeting 1 endTime: 2019-01-04T01:59:32Z
*r BookingsListResult Meeting 1 creatorEmail: room@kanovia.com
*r BookingsListResult Meeting 1 creatorName: 
*r BookingsListResult Meeting 1 isPrivate: off
*r BookingsListResult Meeting 1 checkedIn: on
*r BookingsListResult Meeting 1 isInstantMeeting: on
*r BookingsListResult Meeting 1 calendarID: onrccc4oufoo2q68r15hphtr94
*r BookingsListResult Meeting 1 calendarChangeKey: 
*r BookingsListResult Meeting 1 accessRole: owner
*r BookingsListResult Meeting 1 location: ZachMacMini, HQ-1-E-TestRoom (8)
*r BookingsListResult Meeting 1 scheduledFrom: InstantMeeting
*r BookingsListResult Meeting 1 thirdparty service_provider: -1
*r BookingsListResult Meeting 1 thirdparty meeting_number: 
*r BookingsListResult Meeting 1 thirdparty sip_address: 
*r BookingsListResult Meeting 1 thirdparty h323_address: 
*r BookingsListResult Meeting 2 meetingName: New Meeting
*r BookingsListResult Meeting 2 meetingNumber: 204690242
*r BookingsListResult Meeting 2 hostName: 
*r BookingsListResult Meeting 2 startTime: 2019-01-04T02:30:00Z
*r BookingsListResult Meeting 2 endTime: 2019-01-04T03:00:00Z
*r BookingsListResult Meeting 2 creatorEmail: room@kanovia.com
*r BookingsListResult Meeting 2 creatorName: 
*r BookingsListResult Meeting 2 isPrivate: off
*r BookingsListResult Meeting 2 checkedIn: off
*r BookingsListResult Meeting 2 isInstantMeeting: off
*r BookingsListResult Meeting 2 calendarID: 83f18p0uh083tpcf78vu25in8k
*r BookingsListResult Meeting 2 calendarChangeKey: 
*r BookingsListResult Meeting 2 accessRole: owner
*r BookingsListResult Meeting 2 location: ZachMacMini, HQ-1-E-TestRoom (8)
*r BookingsListResult Meeting 2 scheduledFrom: ZRP
*r BookingsListResult Meeting 2 thirdparty service_provider: -1
*r BookingsListResult Meeting 2 thirdparty meeting_number: 
*r BookingsListResult Meeting 2 thirdparty sip_address: 
*r BookingsListResult Meeting 2 thirdparty h323_address: 
** end

zCommand Phonebook List

Get a list of phonebook entries, starting with Offset, and retrieve up to Limit entries.

Note: The avatarURL field of a contact will be empty until the Zoom Room has been in a meeting with that contact, once the Zoom Room has been in a meeting with that participant, the Zoom Room will cache the avatarURL of that participant. The cache is located here:

Mac: /Users/xxx/Library/Application Support/ZoomPresence

Windows: %APPDATA%\ZoomRooms\data

Schema:

zCommand Phonebook List Offset: <int> Limit: <int>
OK
*r PhonebookListResult (status=OK):
*r PhonebookListResult resultInfo Offset: <int> // original offset passed
*r PhonebookListResult resultInfo Limit: <int> // original limit passed
*r PhonebookListResult resultInfo TotalRows: N
*r PhonebookListResult Contact n jid: <string> // the Join Id of the contact.
Use this ID to invite a person to a meeting.
*r PhonebookListResult Contact n screenName: <string> // the Zoom IM ScreenName of the contact
*r PhonebookListResult Contact n firstName: <string> // the First name of the contact.
*r PhonebookListResult Contact n lastName: <string> // the Last name of the contact.
*r PhonebookListResult Contact n phoneNumber: <string> // the phone number of the contact
*r PhonebookListResult Contact n email: <string> // the email of the contact
*r PhonebookListResult Contact n avatarURL: <string> // a URL pointing to the avatar of the contact, if available
*r PhonebookListResult Contact n presence: <PRESENCE_OFFLINE, PRESENCE_ONLINE, PRESENCE_AWAY, PRESENCE_BUSY, PRESENCE_DND> 
*r PhonebookListResult Contact n onDesktop: <bool> // Set to on if the user is currently using a desktop Zoom client. Only valid if the presence status is PRESENCE_ONLINE.
*r PhonebookListResult Contact n onMobile: <bool> // Set to on if the user is currently using a mobile Zoom client. Only valid if the presence status is PRESENCE_ONLINE.
*r PhonebookListResult Contact n isZoomRoom: <on/off> // Set to on if the user is a zoom room.
*r PhonebookListResult Contact n isLegacy: <on/off> // Set to on if the user is currently using a legacy platform (EX. SIP/H323).
*r PhonebookListResult Contact n presence_status: <int>
*r PhonebookListResult Contact n sip_phone_number: <string> // sip_phone_number if applicable
*r PhonebookListResult Contact n cloud_pbx_info isValid: <on/off> // Whether cloud_pbx is on/off
*r PhonebookListResult Contact n cloud_pbx_info extension: <string> //Only if cloud_pbx_info isValid is on
*r PhonebookListResult Contact n cloud_pbx_info company_number: <string> //Only if cloud_pbx_info isValid is on
*r PhonebookListResult Contact n cloud_pbx_info direct_number_list: m direct_number: <string> //Only if cloud_pbx_info isValid is on
...
** end

Example:

zCommand Phonebook List Offset: 0 Limit: 1
OK
*r PhonebookListResult (status=OK):
*r PhonebookListResult resultInfo Offset: 0
*r PhonebookListResult resultInfo Limit: 5
*r PhonebookListResult resultInfo TotalRows: 5
*r PhonebookListResult Contact 1 jid: x1ozr9jbrew8ahgvsmkzww@xmpp.zoom.us
*r PhonebookListResult Contact 1 screenName: Alex Marmer
*r PhonebookListResult Contact 1 firstName: Alex
*r PhonebookListResult Contact 1 lastName: Marmer
*r PhonebookListResult Contact 1 phoneNumber: 
*r PhonebookListResult Contact 1 email: 
*r PhonebookListResult Contact 1 avatarURL: 
*r PhonebookListResult Contact 1 presence: PRESENCE_OFFLINE
*r PhonebookListResult Contact 1 onDesktop: off
*r PhonebookListResult Contact 1 onMobile: off
*r PhonebookListResult Contact 1 isZoomRoom: off
*r PhonebookListResult Contact 1 isLegacy: off
*r PhonebookListResult Contact 1 presence_status: 0
*r PhonebookListResult Contact 1 sip_phone_number: 
*r PhonebookListResult Contact 1 cloud_pbx_info isValid: off
** end

Offset: Offset into the phonebook list (0 = no offset)

Limit: number of entries to return, maximum.

If a contact is a Zoom Room, then the convention is to refer to the Zoom Room as “Available” if it has a status if PRESENCE_ONLINE.

zCommand Run

Run a test script. The test script must be in the proper directory:

  • Mac: ~/Library/Logs/zoom.us/zaapi
  • Windows: %APPDATA%/ZoomRooms/logs Provide the name of the file, without the path.

Schema:

zCommand Run File: <string>

Example:

zCommand Run File: tst2

File: Name of the script file to run.

zCommand Comment

Used in scripts only: Issue a comment, to be echoed back on the CLI.

Schema:

zCommand Comment text: <string>

Example:

zCommand Comment Text: Try this test.

Text: Text of the comment.

zCommand Wait

Wait for a given number of seconds. Can be used only in script files. It is used to wait for a reply to come back before executing the next command in the script file, to ensure that commands and replies are displayed in order, to make test verification easier.

Schema:

zCommand Wait Sec: <int>

Example

zCommand Wait Sec: 4

Sec: Number of seconds to delay

zCommand Call Leave - In-Meeting

Leave the meeting, without ending the meeting for everyone: applies if the Zoom Room is a host or non-host.

Schema:

zCommand Call Leave

Example:

zcommand call leave
OK
*r CallDisconnectResult (status=OK):
** end
...
*e CallDisconnect success : on
** end
...
*s Call Status: NOT_IN_MEETING
** end

zCommand Call Invite - In-Meeting

Invite a contact to a meeting, while in the meeting.

Schema

zCommand Call invite user: <string> user: <string> ...

Example

zcommand call invite user: thqrasdqs4wzdnch8kcbiw@xmpp.zoom.us
OK
*r InviteCallResult (status=OK):
** end

user: jID of user to invite. After the user is invited to the call, the presence status of the user will change to PRESENCE_BUSY.

zCommand Call InviteH323Room - In-Meeting

Invite a H.323 Room to the meeting.

Address: Address of the H.323 endpoint. Cancel: On to cancel a sent request, Off to send a new request. Schema

zCommand Call InviteH323Room Address: <string> cancel: <on/off>

Example

zCommand Call InviteH323Room Address: xxx@xxx.xx.xxx.xxx Cancel: Off
OK
*r CallInviteH323Room (status=OK):
** end

*e H323SIPRoomCallingStatus status: CallingStatus_Accepted
** end

*e H323SIPRoomCallingUserInfo user_id: 16779265
*e H323SIPRoomCallingUserInfo user_name: Name
** end

The command returns a common response, then when the foreign room responds, two notifications are returned. The call status, and the call info. Since they are separate notifications, and the status notification does not have any identification information, it is recommended to only send 1 invitation at a time and limit the scope of when you are listening to the status notifications. That way you can easily match a status notification to an info notification.

If you don’t get a reply from the room in a given amount of time, the status notification will return a timeout with the value CallingStatus_TimeOut.

zCommand Call InviteSipRoom - In-Meeting

Invite a SIP Room to the meeting.

Address: Address of the SIP endpoint. Cancel: On to cancel a sent request, Off to send a new request. Schema

zCommand Call InviteSipRoom Address: <string> cancel: <on/off>

Example

zCommand Call InviteSipRoom Address: xxx@xxx.xx.xxx.xxx Cancel: Off
OK
*r CallInviteSipRoom (status=OK):
** end

*e H323SIPRoomCallingStatus status: CallingStatus_Accepted
** end

*e H323SIPRoomCallingUserInfo user_id: 16779265
*e H323SIPRoomCallingUserInfo user_name: Name
** end

The command returns a common response, then when the foreign room responds, two notifications are returned. The call status, and the call info. Since they are separate notifications, and the status notification does not have any identification information, it is recommended to only send 1 invitation at a time and limit the scope of when you are listening to the status notifications. That way you can easily match a status notification to an info notification.

If you don’t get a reply from the room in a given amount of time, the status notification will return a timeout with the value CallingStatus_TimeOut.

zCommand Call MuteParticipantVideo - In-Meeting

If the Zoom Room is the meeting host, mute or unmute the video of a meeting participant. The remote client will always ask the user for permission to unmute video, but not to mute video.

Schema

zCommand Call MuteParticipantVideo Mute: <bool> Id: <int32>

Example

zcommand call muteparticipantvideo mute: off id: 33555457
OK
*r CallMuteParticipantVideoResult (status=OK):
** end

If the participant agrees to unmute video, you get a notification:

...
*r ListParticipantsResult video_status is_sending: on
...

Mute: Set to On to mute the participant. Set to Off to unmute.

Id: Participant ID. Retrive the participant ID from the user_id parameter returned from zCommand Call ListParticipants.

zCommand Bookings update

Download the current meeting list for this Zoom Room, for all meetings starting today, between 12:00 AM and midnight. Users may use this command to manually force a meeting list download after a change to the meetings.

Schema:

zCommand Bookings Update

Example:

zCommand bookings update
OK
*r BookingsUpdateResult (status=OK):
** end

If there were new bookings to update, you get a zEvent notification:

*e Bookings Updated
** end

zCommand Dial Sharing

Start a presentation-only meeting. Corresponds to the ZRC Presentation Tab -> Desktop, iPhone/iPad/Mac buttons:

Schema:

zCommand Dial Sharing Duration: <int> Displaystate: <None | Laptop | IOS> Password: <string>
OK
*r DialSharingResult (status=OK):
** end

Example:

zcommand dial sharing duration: 30 displaystate: Laptop password:
OK
*r DialSharingResult (status=OK):
** end

*e StartLocalPresentMeeting success: on
** end

*s Call Status: CONNECTING_MEETING
** end
...
*s Call Status: IN_MEETING
** end

Duration: After presentation mode starts, the Zoom Room will automatically book a meeting for the zoom Room, and on the integrated calendar, for this many minutes. BUG: The Zoom Room currently does not book a meeting, when using any combination of ZR / ZRC / ZR-CSAPI. It is likely that this bug will not be fixed; see the bug list at the beginning of this doc. Displaystate: Display instructions for sharing with a Laptop or IOS, or None to display no instructions. Password: Enter only white space after the : to specify no password, otherwise enter a string.

zCommand Call ShareCamera - In-Meeting

Start sharing with the camera. This command only works in a regular meeting, not a sharing meeting. Corresponds to the “Share content or Camera” button on the ZRC. First, invoke: zStatus video camera line To get a list of camera devices. Then use the Id from a device to choose that device for sharing.

schema

zCommand Call ShareCamera id: <string> Status: <on/off>

Example 1:

zCommand Call ShareCamera id: 0x14200000046d082d Status: on
OK
*r ShareCameraResult (status=OK):
** end
...
*e SharingState state: Sending
*e SharingState paused: off
** end
...
*s CameraShare is_Sharing: on
*s CameraShare id: 0x14200000046d082d
*s CameraShare can_Control_Camera: on
*s CameraShare is_Mirrored: off
** end

Example 2: Error scenario, such as if another participant is already sharing:

zCommand Call ShareCamera id: CamTwist Status: on
OK
	
*e CallConnectError error_code: 0
*e CallConnectError error_message: Unable to start camera sharing. Try again later.
** end

zCommand Call SetInstructions

Change sharing instructions. After sharing is launched, and the Zoom Room is waiting for a participant to start sharing, this command provides the ability to change the instructions that are shown on the ZR:

Schema

zCommand Call SetInstructions Show: on Type: <Laptop | IOS | None>

The OK response is “CallSharingToggle” which is also used for zCommand Call Sharing ToNormal.

Example:

zcommand call setinstructions show: on Type: IOS
OK
*r CallSharingToggle (status=OK):
** end

zCommand Call Sharing ToNormal - In-Meeting

While actively sharing using the sharing key, convert the meeting to a normal meeting.

Schema

zCommand Call Sharing ToNormal

The OK response is “CallSharingToggle” which is also used for zCommand Call SetInstructions.

Example:

zcommand call sharing tonormal
*e SharingState state: Sending
*e SharingState paused: off
** end

OK
*r CallSharingToggle (status=OK):
** end

Once you are in a normal meeting, to exit, you must use either zCommand Call Disconnect or zCommand call leave.

zCommand Call Sharing Disconnect - In-Meeting

While actively sharing using the sharing key, use this command to stop the sharing, but stay in presentation mode, and go back to showing the sharing instructions:

Schema

zCommand Call Sharing Disconnect

Example:

zCommand Call Sharing Disconnect
OK
*r CallSharingDisconnect (status=OK)
** end

Invoking this command puts the ZR back into presentation-only mode, waiting for someone to start sharing. The instructions for either None, Laptop, or IOS will appear on the screen.

zCommand Call Sharing HDMI Start

Start sharing the HDMI input. Zoom Rooms are often configured to automatically start sharing when an HDMI signal is connected to an HDMI capture device. However, if that automatic sharing is not enabled, use this command to start sharing the HDMI input. Be aware that only certain white-listed HDMI capture cards may be used with content sharing. See restriction here

Schema

zCommand Call Sharing HDMI Start

Example:

zCommand call sharing hdmi start
*s Sharing wifiName: 
*s Sharing serverName: ZR-ScottFirestone2
*s Sharing password: 5182
*s Sharing isAirHostClientConnected: off
*s Sharing isBlackMagicConnected: on
*s Sharing isBlackMagicDataAvailable: on
*s Sharing isSharingBlackMagic: on
*s Sharing directPresentationPairingCode: 224425
*s Sharing directPresentationSharingKey: EWOOVF
*s Sharing isDirectPresentationConnected: off
*s Sharing dispState: Laptop
** end
OK

*r CallSharingHDMI (status=OK):
** end

zCommand Call Sharing HDMI Stop

Stop sharing the HDMI input.

Schema

zCommand Call Sharing HDMI Stop

Example:

zCommand call sharing hdmi stop 
*s Sharing wifiName: 
*s Sharing serverName: ZR-ScottFirestone2
*s Sharing password: 5182
*s Sharing isAirHostClientConnected: off
*s Sharing isBlackMagicConnected: on
*s Sharing isBlackMagicDataAvailable: on
*s Sharing isSharingBlackMagic: off
*s Sharing directPresentationPairingCode: 224425
*s Sharing directPresentationSharingKey: EWOOVF
*s Sharing isDirectPresentationConnected: off
*s Sharing dispState: Laptop
** end
OK

*r CallSharingHDMI (status=OK):
** end

zCommand Call Layout TurnPage - In-Meeting

In Gallery view, the zoom Room can show multiple participants at the same time, each in a small video thumbnail. The zoom Room can also show multiple pages of tiled thumbnails, and provides a way to page flip forward and back. In Strip view, up to about 8 video thumbnails are shown at the bottom, and the user can flip forward and back to different sets of 8 videos.

Schema:

zCommand Call Layout TurnPage Forward: <bool>

Example:

zCommand Call Layout TurnPage Forward: On
OK

*r TurnPageResult (status=OK)
** end

Forward: Set to On, to flip forward. Set to Off to flip backward.

zCommand Call Expel - In-Meeting

Corresponds to the ZRC per-user “Remove” button. If the Zoom Room is a host, the Zoom Room can expel participants. Once a participant is expelled, that participant cannot re-join the meeting, unless the meeting is ended for all and re-launched. First invoke zCommand Call ListParticipants To get a list of participants, which will include the Id for each participant. Then use the Id to expel a user.

Schema:

zCommand Call Expel Id: <int32>

Example:

zCommand Call Expel Id: 16780288
OK

*r ExpelResult (status=OK):
** end

zCommand Test Microphone Start

Start Testing Microphone. Corresponds to launching the Microphone settings dialog, which shows the microphone volume level in real time as a volume indicator. When this mode is activated, the API will send a message as often as once every 1/2 second, with an updated volume level from the microphone, if the microphone volume level has changed. First, invoke zStatus audio input line To get a list of microphone devices. Then use the id from a device to choose that device for the volume check. The device id can have spaces.

Schema:

zCommand Test Microphone Start Id: <string>

Example:

zCommand Test Microphone Start Id: Sennheiser SC70 USB CTRL
...
*e TestMicrophone Volume: <int>
** end

zCommand Test Microphone Stop

Stop Testing the Microphone

Schema:

zCommand Test Microphone Stop

Example:

zCommand Test Microphone Stop
OK

*r TestMicrophoneResult (status=OK):
** end

zCommand Test Speaker Start

Start Testing the Speaker. Corresponds to the “Test Speaker” link on the ZRC, under Settings. First, invoke zStatus audio output line To get a list of speaker devices. Then use the id from a device to choose that device for the volume check. The device id can have spaces. The speaker test will start: the test has a fixed duration of a few seconds, but you can end it sooner using the stop command.

Schema:

zCommand Test Speaker Start Id: <string>

Example:

zCommand Test Speaker Start Id: Sennheiser SC70 USB CTRL
OK
*r TestSpeakerResult (status=OK):
** end
...
*e TestSpeakerFinished Volume: <int>
*e TestSpeakerFinished Ended: <bool>

zCommand Test Speaker Stop

Stop Testing Speaker. You do not get additional notifications if you end the test using this method.

Schema:

zCommand Test Speaker Stop

Example:

zCommand Test Speaker Stop
OK
*r TestSpeakerResult (status=OK):
** end

zCommand Call HostChange - In-Meeting

Change Host. When a meeting is scheduled for a Zoom Room, the first person to join will have host status.

If a participant (including a Zoom Room) has host status, it’s possible for that participant to pass host status to any another participant.

If the Zoom Room is currently the host, this command re-assigns the host of the meeting to a different participant. First check to verify that you have host status, by invoking:zCommand Call ListParticipants and check to see if the participant with is_myself set to On also has is_host set to On. Then look for the participant Id of the person who you want to be the host.

Note: Once a participant is host, the Zoom Room no longer tracks its can_record and is_recording status.

Schema:

zCommand Call HostChange Id: <int>

Example:

zCommand Call HostChange id: 33555457
OK
*r CallHostChange (status=OK):
** end

This command will trigger a participant List notification message, with updated values for all participants, including an update is_host parameter.

zCommand Call HostClaim - In-Meeting

Any participant without host status can try to claim host status. In order to claim host status, the participant must enter either:

  • The host key of the Zoom Room
  • The host key of the person who scheduled the meeting

You can check to see if you have host status, by invoking: zCommand Call ListParticipants and check to see if the participant with is_myself set to On also has is_host set to On.

If the Zoom Room is currently not the host, this command allows the Zoom Room to attempt to claim host status.

Note: Once a participant is host, the Zoom Room no longer tracks its can_record and is_recording status.

Schema:

zCommand Call HostClaim Key: <int>

Example:

zCommand Call HostClaim Key: 620501
OK
*r CallHostClaim (status=OK):
** end
...
*e CallHostClaim result: Success
** end

Followed by a participant list update notification. Or, if you entered the wrong host key, you get an error notification:

*e CallHostClaim result: InvalidHostKey
** end

zCommand Call Record - In-Meeting

If the Zoom Room has recording privilage (either by being host or being granted privilage by host), this command will start recording the meeting.

Note: Currently, we only support recording of meetings scheduled through calendar apps such as Google Calendar. Instant Meeting recording and recording of meetings scheduled through ZRC itself is currently disabled due to needing the user to enter an email address. However, for those meetings, the Zoom Room can still give permission for other participants to record locally

Bug: zCommand Call ListParticipants’s can_record and is_recording might be wrong for the Zoom Room itself (is right for non-host participants). It is recommended to not rely on the participant list’s can_record and is_recording for the Zoom Room itself. Instead, use the UpdatedCallRecordInfo zEvent documented below and in the zEvent section.

Schema:

zCommand Call Record Enable: <on/off>

Example (successful response):

zCommand Call Record Enable: on
OK
*r CallRecord (status=OK):
** end

Example (no recording privilege)

zCommand Call Record Enable: on
*r CallRecord(status=Error):
*r Result reason: "No recording privilege"
** end
ERROR

Example (need email address/instant meeting)

zCommand Call Record Enable: on
*r CallRecord(status=Error):
*r Result reason: "Need email address"
** end
ERROR

You will get this notification whenever the Zoom Room’s recording privilege is updated:

*e UpdateCallRecordInfo canRecord: true
*e UpdateCallRecordInfo emailRequired: true
*e UpdateCallRecordInfo amIRecording: false
*e UpdateCallRecordInfo meetingIsBeingRecorded: false
** end

zCommand Call Pin - In-Meeting

Allows the Zoom Room to pin participants to a screen. The Zoom Room does not have to be a host to do this.

You can see meeting participants by invoking: zCommand Call ListParticipants

Schema:

Turning on: zCommand Call Pin Id: <int> Enable: On Screen: <int>

For the screen input, the integer can between 0-3 depending on how many screens your Zoom Room has.

Turning off: zCommand Call Pin Id: <int> Enable: Off

Example:

zCommand Call Pin Id: 33555457 Enable: On Screen: 0
OK
*r PinVideoOnScreen (status=OK):
** end

You will get this notification whenever the pin status of one of the Zoom Room is updated:

In this example the user 33555457 is pinned to screen 0:

*e PinStatusOfScreenNotification screen_index: 0
*e PinStatusOfScreenNotification can_be_pinned: true
*e PinStatusOfScreenNotification pinned_user_id: 33555457
*e PinStatusOfScreenNotification screen_layout: PinnedVideo
*e PinStatusOfScreenNotification pinned_share_source_id: -1
*e PinStatusOfScreenNotification share_source_type: None
*e PinStatusOfScreenNotification can_pin_share: false
*e PinStatusOfScreenNotification why_cannot_pin_share: None
** end
In this example, nobody is pinned to screen 0:

*e PinStatusOfScreenNotification screen_index: 0
*e PinStatusOfScreenNotification can_be_pinned: true
*e PinStatusOfScreenNotification pinned_user_id: -1
*e PinStatusOfScreenNotification screen_layout: Gallery
*e PinStatusOfScreenNotification pinned_share_source_id: -1
*e PinStatusOfScreenNotification share_source_type: None
*e PinStatusOfScreenNotification can_pin_share: false
*e PinStatusOfScreenNotification why_cannot_pin_share: None
** end

zCommand Call Spotlight - In-Meeting

The Zoom Room can spotlight a user, which means that the spotlightted user will be the primary active speaker for all participants. The requirements to do this are that the Zoom Room is a host and that there are at least 3 participants in the meeting.

You can see meeting participants by invoking: zCommand Call ListParticipants

Schema:

zCommand Call Spotlight Id: <int> Enable: <on/off>

Example:

zCommand Call Spotlight Id: 33555457 Enable: On
OK
*r SetSpotlight (status=OK):
** end

You will get this notification whenever the spotlight status of the Zoom Room is updated:

In this example the spotlight is on 33555456:

*e SpotlightStatusNotification user_id: 33555456
*e SpotlightStatusNotification present: on

In this example the spotlight is off:

*e SpotlightStatusNotification user_id: -1
*e SpotlightStatusNotification present: off

zCommand Call AllowRecord - In-Meeting

If the Zoom Room is the host, it can allow other participants to record meetings.

You can see meeting participants by invoking: zCommand Call ListParticipants

Note: Once a participant is host, the Zoom Room no longer tracks its can_record and is_recording status in zCommand Call ListParticipants

Schema:

zCommand Call AllowRecord Id: <int> Enable: <On/Off>

Example:

zCommand Call Allowrecord Id: 33555457 Enable: On  
OK
*r AllowRecord (status=OK):
** end

You will get a ListParticipantsResults notification, in that notification, check to make sure that the can_record field for the user you want is set to the value that you want:

zcommand call allowrecord id: 33555457 enable: on   
*r ListParticipantsResult user_name: Scott Firestone Testing ZR
*r ListParticipantsResult user_id: 33555457
*r ListParticipantsResult is_host: off
*r ListParticipantsResult is_myself: off
*r ListParticipantsResult can_record: on
*r ListParticipantsResult is_recording: off
*r ListParticipantsResult avatar_url: https://zoom.us/p/ThqraSdQS4WzDNCH8kCBiw/bc48fef7-66a7-49c3-a388-076df886b6e4-2983
*r ListParticipantsResult local_recording_disabled: off
*r ListParticipantsResult is_video_can_mute_byHost: on
*r ListParticipantsResult is_video_can_unmute_byHost: on
*r ListParticipantsResult isCohost: off
*r ListParticipantsResult user_type: NORMAL
*r ListParticipantsResult audio_status type: AUDIO_VOIP
*r ListParticipantsResult audio_status state: AUDIO_MUTED
*r ListParticipantsResult video_status has_source: on
*r ListParticipantsResult video_status is_sending: on
*r ListParticipantsResult video_status is_receiving: off
*r ListParticipantsResult camera_status can_i_request_control: on
*r ListParticipantsResult camera_status am_i_controlling: off
*r ListParticipantsResult camera_status can_switch_camera: on
*r ListParticipantsResult camera_status can_move_camera: off
*r ListParticipantsResult camera_status can_zoom_camera: off
*r ListParticipantsResult event: ZRCUserChangedEventUserInfoUpdated
** end

zCommand Call CameraControl - In-Meeting

The Zoom Room can control its own camera, as well as controlling remote camera (far end camera control).

To control a remote camera, both the Zoom Room and the participant must have far end camera control settings turned on: See here to learn more

You can see meeting participants by invoking: zCommand Call ListParticipants

Schema:

There are two versions of the commands, their usage will be explained.

zCommand Call CameraControl Id: <int> State: <Start|Continue|Stop|RequestRemote|GiveupRemote|RequestedByFarEnd> Action: <Left|Right|Up|Down|In|Out>

zCommand Call CameraControl Id: <int> Speed: <int>

For both versions of the commands:

Id: 0 to control own camera, Id of participant to control remote camera

For first version of command:

State: Describes what you intend to do. For example, start a new movement or maintain an existing movement.

Action: How you want your state executed. For example, move left, or maintain left.

Below are the list of States:
Start: Start a new movement
Continue: Continue an existing movement
Stop: Stop an existing movement
RequestRemote: Request far end camera for control
GiveupRemote: Give up control of far end camera
RequestedByFarEnd: Let participant control Zoom Room's camera

Below are the list of Actions:
Left: Move camera left
Right: Move camera right
Up: Move camera up
Down: Move camera down
In: Zoom camera in
Out: Zoom camera out

For second version of command:

Speed: Speed of the camera while controlling (1-100)

The second version of the command is used to control the speed of some models of cameras, however, not all camera models support speed control. In fact, the majority of cameras do not.

The first version of the command is used for the majority of camera control functionalities. Note that there are two ways to use the second version of this command. The way that it is used will depend on the model of camera you are trying to control. For some camera models (referred to as type 1 from now on), issuing a start move command will keep moving the camera until the camera’s limit is reached or a stop command is issued. For other models (referred to as type 2 from now on), issuing a move command will move the camera a little bit then wait for a continue command.

Below is a sequence of commands to turn a type 1 camera to the left:

State: Start, Action: Left
Then when camera is in position that you want:
State: Stop, Action: Left

Below is a sequence of commands to turn a type 2 camera to the left:

State: Start, Action: Left
Wait 10ms
State: Continue, Action: Left
Wait 10ms
State: Continue, Action: Left
Wait 10ms
State: Continue, Action: Left
Once camera is in position that you want, stop issuing continue.
Note: If you wait more than 10ms between Continue or Start, you have to issue Start again.

As you can see the two types of cameras are controlled radically differently. Type 1 uses Start State and Stop State commands while type 1 uses Start State and Continue State. So what should you do if you want your controls to work for both camera types? You have to issue both commands.

Below is an example of a sequence of commands that will turn both camera types to the left:

State: Start, Action: Left
Wait 10ms
State: Continue, Action: Left
Wait 10ms
State: Continue, Action: Left
Wait 10ms
State: Continue, Action: Left
Wait 10ms
State: Continue, Action: Left
State: Stop, Action: Left

The Stop command will stop type 1 cameras, while the Continue command will continue to move type 2 cameras.

As for the other States such as RequestRemote, GiveupRemote, and RequestedByFarEnd, they are the same between type 1 and type 2 cameras. Also these States do not use a corresponding Action, however since the zCommand requires an action as an input no matter what, you can simply enter whatever Action you want when using these States, the Action will simply have no impact.

Example 1 Giving far end control of camera:

Note: In this case, the Action can be anything, it will not affect the command

zCommand Call CameraControl Id: 16778240 State: RequestedByFarEnd Action: Left
OK
*r CameraControl (status=OK):
** end

Example 2 Controlling Zoom Room’s own camera type 1:

Note: Id of 0 means own camera

zCommand Call CameraControl Id: 0 State: Start Action: Left            
OK
*r CameraControl (status=OK):
** end

Then when camera is in position we want:

zCommand Call CameraControl Id: 0 State: Stop Action: Left            
OK
*r CameraControl (status=OK):
** end

Example 3 Controlling far end camera type 2:

zCommand Call CameraControl Id: 16778240 State: Start Action: Left            
OK
*r CameraControl (status=OK):
** end

In 10ms:

zCommand Call CameraControl Id: 16778240 State: Continue Action: Left           
OK
*r CameraControl (status=OK):
** end

Now camera in position that we want, stop issuing continue.

Example 4 Controlling far end camera both types:

zCommand Call CameraControl Id: 16778240 State: Start Action: Left            
OK
*r CameraControl (status=OK):
** end

In 10ms:

zCommand Call CameraControl Id: 16778240 State: Continue Action: Left           
OK
*r CameraControl (status=OK):
** end

When camera in position we want:

zCommand Call CameraControl Id: 16778240 State: Stop Action: Left            
OK
*r CameraControl (status=OK):
** end

When a far end participant requests to control the Zoom Room’s camera, this notification will be sent:

*e CameraControlNotification user_name: Zach
*e CameraControlNotification user_id: 16778241
*e CameraControlNotification state: ZRCCameraControlStateRequestedByFarEnd
** end

When a far end participant gives up the Zoom Room’s camera controls, this notification will be sent:

*e CameraControlNotification user_name: Zach
*e CameraControlNotification user_id: 16778241
*e CameraControlNotification state: ZRCCameraControlStateGaveUpByFarEnd
** end

zCommand Dial CheckIn

Allows the user to check in to a meeting without actually joining. If check in feature is enabled in the web portal, this command will prevent the Zoom Room from releasing a meeting. You can see meetings currently booked by invoking: zCommand Bookings List

This command will return a common response, then if check in was successful, a Bookings Updated event notification will also be returned.

Schema:

zCommand Dial CheckIn MeetingNumber: <string>

Example:

zCommand Dial CheckIn MeetingNumber: 890741258
OK
*r CheckIn (status=OK):
** end

*e Bookings Updated
** end

zCommand Schedule Add

Schedule a meeting.

This command will return a common response, then if schedule was successful, a Bookings Updated event notification will also be returned.

Schema:

zCommand Schedule Add MeetingName: <string> Start: <string> End: <string> private: <on/off>

MeetingName: Name of meeting

Start: Start time in YYYYMMDDHHMM format, date must before End, HHMM are in 24 hour clock

End: End time in YYYYMMDDHHMM format, date must be after Start, HHMM are in 24 hour clock

Private: Is meeting private <on/off>

Example:

zCommand Schedule Add MeetingName: Example Start: 201812061800 End: 201812061830 Private: off
OK
*r ScheduleAdd (status=OK):
** end

*e Bookings Updated
** end

Example (Invalid date, scheduled for 32nd day of December)

zCommand Schedule Add MeetingName: Example Start: 201812321800 End: 201812321830 Private: off
*r ScheduleAdd(status=Error):
*r Result reason: "Invalid date"
** end
ERROR

Example (Invalid time, start time is after end time)

zCommand Schedule Add MeetingName: Example Start: 201812061830 End: 201812061800 Private: off
*r ScheduleAdd(status=Error):
*r Result reason: "Invalid time"
** end
ERROR

zCommand Schedule Delete

Delete a booked meeting. You can see meetings currently booked by invoking: zCommand Bookings List

This command will return a common response, then if check in was successful, a Bookings Updated event notification will also be returned.

Schema:

zCommand Schedule Delete MeetingNumber: <string>

Example:

zCommand Schedule Delete MeetingNumber: 890741258
OK
*r ScheduleDelete (status=OK):
** end

*e Bookings Updated
** end

zCommand Dial PhoneCallOut

Call a telephone using Zoom Room. You must first enable this feature by following the instructions here

This command will return a common response, then if successful, an event displaying the phone call will be returned.

Please note that at this time, the Zoom Room can only support one phone call dial out at a time. Trying to call out to multiple calls at a time may lead to undocumented behavior.

Schema:

zCommand Dial PhoneCallOut Number: <string>

Example:

zCommand Dial PhoneCallOut Number: 5555555555
OK
*r DialPhoneCallOut (status=OK):
** end

*e PhoneCallStatus callID: oCo7mCnH2o8fEIxl5A-h9w..1fb31480@16692714630.zoom.us
*e PhoneCallStatus peerDisplayName: 
*e PhoneCallStatus peerNumber: 5555555555
*e PhoneCallStatus peerUri: 5555555555
*e PhoneCallStatus isIncomingCall: false
*e PhoneCallStatus status: PhoneCallStatus_Ringing
** end

zCommand Dial PhoneHangUp

Hang up a telephone call. You must first enable this feature by following the instructions here

This command will return a common response, then if successful, an event displaying the phone call that was terminated will be returned.

Please note that at this time, the Zoom Room can only support one phone call dial out at a time.

The CallId can be gotten by calling zCommand PhoneCall List.

Schema:

zCommand Dial PhoneHangUp CallId: <string>

Example:

zCommand Dial PhoneHangUp CallId: oCo7mCnH2o8fEIxl5A-h9w..1fb31480@16692714630.zoom.us
OK
*r DialPhoneHangUp (status=OK):
** end

*e PhoneCallTerminated callID: oCo7mCnH2o8fEIxl5A-h9w..1fb31480@16692714630.zoom.us
*e PhoneCallTerminated peerDisplayName: 
*e PhoneCallTerminated peerNumber: 5555555555
*e PhoneCallTerminated peerUri: 5555555555
*e PhoneCallTerminated isIncomingCall: false
*e PhoneCallTerminated status: PhoneCallTerminateReason_ByLocal
** end

zCommand PhoneCall List

Displays the current list of telephone calls that the Zoom Room is in. Currently, the Zoom Room can only dial out to one call at a time, however, this command returns a list of calls to support future features.

Schema:

zCommand PhoneCall List

Example:

zCommand PhoneCall List
OK
*r PhoneCallListResult (status=OK):
*r PhoneCallListResult start
*r PhoneCallListResult Call 0 callID:  yKdds2buO8crJDrsYlLgdw..1fb39430@16692714630.zoom.us
*r PhoneCallListResult Call 0 peerDisplayName: 
*r PhoneCallListResult Call 0 peerNumber: 5555555555
*r PhoneCallListResult Call 0 peerUri: 5555555555
*r PhoneCallListResult Call 0 isIncomingCall: false
** end

zCommand DTMF Support

Syntax: zCommand SendSIPDTMF CallID: <string> Key: <string>

zCommand SendSIPDTMF CallID : f26863c2-0c06-1238-0599-000c29324577 Key : 1

Description of the parameter:

For parameter CallID: The CallID is a unique ID representing the ongoing call, which should be found in the previous control system output. There are two situations.

  1. When receiving an incoming sip call. The control system’s output is as below:
*e PhoneCallStatus callID: f26863c2-0c06-1238-0599-000c29324577
*e PhoneCallStatus peerDisplayName: 4133
*e PhoneCallStatus peerNumber: 4133
*e PhoneCallStatus peerUri: 4133@10.100.56.198
*e PhoneCallStatus isIncomingCall: true
*e PhoneCallStatus status: PhoneCallStatus_Incoming

end
  1. When making a call. The control system’s input and output is as below:

intput:zCommand Dial PhoneCallOut Number:4133

output:OK*r DialPhoneCallOut (status=OK):

end
*e PhoneCallStatus callID: 8LoH6D8QMYa4yye9IZtk_Q..53cdda0@4134
*e PhoneCallStatus peerDisplayName:
*e PhoneCallStatus peerNumber: 4133
*e PhoneCallStatus peerUri: 4133
*e PhoneCallStatus isIncomingCall: false
*e PhoneCallStatus status: PhoneCallStatus_Ringing

end

For parameter Key: Key is a character among 0-9 or * #

zCommand Phonebook Subscribe

Syntax: zCommand Phonebook Subscribe offset : limit :

Usage: Subscribe to the presence status update of contacts in a given interval. (If not subscribe, the presence status in the output of command “zCommand Phonebook list” will be incorrect. Most of the time,it’s offline)

After the subscription, if the presence status of the contact changes, a “Phonebook Updated” notification will be received.

The contact interval which is subscribed should be similar or slightly larger than the contact interval displayed on the UI dynamically.

The maximum number of contacts subscribed is 500, If more than 500,later subscribed contacts will kick off the previous ones.

Parameter description

offset: offset of the contacts interval (0 means no offset)

limit: length of the contacts interval

Example:

zcommand phonebook subscribe offset :121 limit :20
OK
*r PhonebookSubscribeResult (status=OK):
** end


*e Phonebook Updated Contact 122 jid: xxxxxxxxxxxx@xmpp.domain.com
*e Phonebook Updated Contact 122 screenName: David's Room2
*e Phonebook Updated Contact 122 firstName: David's Room2
*e Phonebook Updated Contact 122 lastName:
*e Phonebook Updated Contact 122 phoneNumber:
*e Phonebook Updated Contact 122 email: rooms_xxxxxxxxxxxx@xmpp.domain.com
*e Phonebook Updated Contact 122 avatarURL:
*e Phonebook Updated Contact 122 presence: PRESENCE_ONLINE
*e Phonebook Updated Contact 122 onDesktop: on
*e Phonebook Updated Contact 122 onMobile: off
*e Phonebook Updated Contact 122 isZoomRoom: on
*e Phonebook Updated Contact 122 isLegacy: off
*e Phonebook Updated Contact 122 presence_status: 0
*e Phonebook Updated Contact 122 sip_phone_number:
*e Phonebook Updated Contact 122 cloud_pbx_info isValid: off
** end


*e Phonebook Updated Contact 122 jid: xxxxxxxxxxxx@xmpp.domain.com
*e Phonebook Updated Contact 122 screenName: David's Room2
*e Phonebook Updated Contact 122 firstName: David's Room2
*e Phonebook Updated Contact 122 lastName:
*e Phonebook Updated Contact 122 phoneNumber:
*e Phonebook Updated Contact 122 email: rooms_xxxxxxxxxxxx@xmpp.domain.com
*e Phonebook Updated Contact 122 avatarURL:
*e Phonebook Updated Contact 122 presence: PRESENCE_BUSY
*e Phonebook Updated Contact 122 onDesktop: on
*e Phonebook Updated Contact 122 onMobile: off
*e Phonebook Updated Contact 122 isZoomRoom: on
*e Phonebook Updated Contact 122 isLegacy: off
*e Phonebook Updated Contact 122 presence_status: 1
*e Phonebook Updated Contact 122 sip_phone_number:
*e Phonebook Updated Contact 122 cloud_pbx_info isValid: off
** end

zCommand Accept SIPCall

Schema: zCommand Accept SIPCall CallID :

Usage:

Accept an imcoming SIP call.

Parameter description:

CallID: The CallID is a unique ID representing the imcoming sip call, which should be found in the previous control system output

Example

zCommand Accept SIPCall CallID : c1edf8fc-5520-1238-a6b1-000c29324577

zCommand Reject SIPCall

Syntax: zCommand Reject SIPCall CallID :

Usage: Reject an imcoming SIP call.

Parameter description:

CallID: The CallID is a unique ID representing the imcoming sip call, which should be found in the previous control system output

Example:

zCommand Reject SIPCall CallID : c1edf8fc-5520-1238-a6b1-000c29324577