Zoom Rooms and Workspaces
cancel
Showing results for 
Search instead for 
Did you mean: 
Important updates from Zoom Support:
  • Effective immediately, customers with subscription plans greater than $10 USD/month may receive live chat support. Sign in and visit our contact page to view your support options.

  • Starting February 1, 2025, Zoom Phone customers must add their phone numbers to an approved 10DLC campaign in order to keep using SMS/MMS capabilities on their numbers.

Weekly Leaderboard

What are Zoom Rooms and Workspaces?

Zoom Rooms are modern workspaces that enable in-person and remote participants to interact in real-time in a hybrid setting. Explore the Zoom Community's Recent Activity below to join the Rooms and Workspaces conversation and connect with other members. If you're still looking for support, browse our Zoom Rooms and Workspaces support articles or start a new discussion below!

Recent Activity

Connection Error with Zoom Room Controls

Olá, estou tentando automatizar uma sala de zoom usando os controles com um dispositivo Sonoff. Este dispositivo funciona por meio de solicitações HTTP. Dentro dos Controles, tenho uma conexão com o dispositivo, mas os comandos não estão funcionando.... Show more

Olá, estou tentando automatizar uma sala de zoom usando os controles com um dispositivo Sonoff. Este dispositivo funciona por meio de solicitações HTTP. Dentro dos Controles, tenho uma conexão com o dispositivo, mas os comandos não estão funcionando. Depois de acionar qualquer comando, o dispositivo não responde.
Comando de Interação com Sonoff:
http:///cm?cmnd=Power%20On
http:///cm?cmnd=Power%20Off

 

Codificação JSON dos controles do Zoom Room:

json_sonoff.png

 

Desenvolvi um aplicativo em ReactNative para testar usando a mesma estrutura JSON que o Zoom usa e funcionou bem. No entanto, com a mesma configuração dentro da Zoom Room, ela não funciona conforme o esperado.
Imagem da lógica no aplicativo ReactNative:

 

app_sonoff.png

 

Eu li a documentação completa para os controles da sala de zoom e o dispositivo Sonoff. Acredito que o problema pode estar relacionado a alguma limitação do lado do Zoom.

Alguém pode me ajudar com isso?


Show less

Video Not Displaying for Self-Participant in Safari and Firefox with Zoom Video SDK

I am experiencing an issue with the Zoom Video SDK in my React.js project. The problem occurs specifically in Safari (MacOS) and Firefox browsers. While the video for other participants renders correctly, the self-participant's video is not displayed... Show more

 

I am experiencing an issue with the Zoom Video SDK in my React.js project. The problem occurs specifically in Safari (MacOS) and Firefox browsers. While the video for other participants renders correctly, the self-participant's video is not displayed in these browsers.

 

Here are some key details about the issue:

Browsers Affected: Safari (MacOS) and Firefox.
Behavior:
a. In Chrome, the self-participant's video works perfectly.
b. In Safari, the video element for the self-participant remains blank whereas the other person can see my video.
c. In Firefox, the same issue occurs, and no errors appear in the console.
In Chrome and Safari (iOS) everything works fine but in Safari (MacOS) and Firefox I am having this issue. The other person can see my video completely fine but in my screen my video is not being displayed. In the console it is giving below error:

 

Error:
Uncaught Error: The video-player must have a video-player-container as its ancestor element.

Even though this error is also coming in Chrome still it is working fine there. I have attached the code below. Help me solve this issue.

 

 

 

const connectVideo = async (token) => {
if (isJoining) return; // Prevent multiple join attempts
setIsJoining(true);

try {
// await zoomClient.init("en-US", "Global");
await zoomClient.init("en-US", "Global", { patchJsMedia: true, enforceMultipleVideos:true });
await zoomClient.join(roomId, token || videoToken, userName);
zoomSession = zoomClient.getMediaStream();
setRoom(zoomSession);
} catch (error) {
setIsJoining(false); // Reset joining status on error
}
};

 

 

 

const Room = ({ roomName, room, handleLogout, userId, roomId }) => {

const zoomClient = ZoomVideo.createClient();

const getBookingDetails = async () => {
try {
const res = await ApiCall({
route: `booking/get_booking_detail/${roomName}`,
token: token,
verb: "get",
params: data,
});
if (res?.status == "200") {
return setBookingDetail(res?.response?.booking_detail);
} else {
console.log("your error is there", res?.response);
}
} catch (e) {
console.log("your error is there", e);
}
};

const { isLoading, data } = useQuery("bookingDetails", getBookingDetails);

useEffect(() => {
const handleUserAdded = (payload) => {
setParticipants((prevParticipants) => [payload]);
setJoin(true);
};

const handleUserRemoved = (payload) => {
setParticipants([]);
};

const handleZoomPeer = (payload) => {
if (payload.action === "Start") {
// a user turned on their video, render it
room.attachVideo(payload.userId, 3).then((userVideo) => {
document
.querySelector("video-player-container")
.appendChild(userVideo);
});
handleUserAdded(payload);
} else if (payload.action === "Stop") {
// a user turned off their video, stop rendering it
room.detachVideo(payload.userId).then((userVideo) => {
document.querySelector("video-player-container").innerHTML = "";
});
handleUserRemoved(payload);
}
};

zoomClient.on("peer-video-state-change", handleZoomPeer);

return () => {
zoomClient.off("peer-video-state-change", handleZoomPeer);
};
}, [room, participants]);

useEffect(() => {
const userRemoved = (payload) => {
if (join) {
setJoin(false);
}
console.log("user removed", payload);
};
const newUserJoin = (payload) => {
setJoin(true);
getBookingDetails();
console.log("User Joined Called", payload);
};

zoomClient.on("user-added", newUserJoin);
zoomClient.on("user-removed", userRemoved);
}, [join]);

async function askPermission() {
// Checking initial permission state for microphone and camera
const MicroPermission = await navigator.permissions.query({
name: "microphone",
});
const VideoPermission = await navigator.permissions.query({
name: "camera",
});

console.log("Micro Permission At Start", MicroPermission);
console.log("Video Permission At Start", VideoPermission);

try {
if (MicroPermission.state === "prompt") {
Swal.fire({
title: "Microphone access!",
text: "Please allow microphone access to communicate.",
showConfirmButton: false,
icon: "info",
allowOutsideClick: false,
});

// Request microphone access
await navigator.mediaDevices.getUserMedia({ audio: true });

const againMicroPermission = await navigator.permissions.query({
name: "microphone",
});
if (againMicroPermission.state == "granted") {
room.startAudio();
setIsAudio(againMicroPermission.state);
setIsMute(true);

} else if (againMicroPermission.state == "denied") {
setIsAudio(againMicroPermission.state);
setIsMute(false);

// Handle the case when permission is denied
Swal.fire({
title: "Microphone Access Denied",
text: "You have denied microphone access. Some features may not work properly.",
icon: "error",
confirmButtonText: "Ok",
});
}
Swal.close();

} else {
setIsAudio(MicroPermission.state);
}
} catch (error) {
// Handle any errors (e.g., if the user denies access)
console.log("Error requesting microphone permission:", error);
if (
error.name === "NotAllowedError" ||
error.name === "PermissionDeniedError"
) {
Swal.fire({
title: "Microphone Access Denied",
text: "You have denied microphone access. Some features may not work properly.",
icon: "error",
confirmButtonText: "Ok",
});
}
}

try {
// If video permission state is "prompt", ask the user for permission
if (VideoPermission.state === "prompt") {
Swal.fire({
title: "Camera access!",
text: "Please allow camera access to communicate.",
showConfirmButton: false,
icon: "info",
allowOutsideClick: false,
});

// Request microphone access
await navigator.mediaDevices.getUserMedia({ video: true });

const againVideoPermission = await navigator.permissions.query({
name: "camera",
});
if (againVideoPermission.state == "granted") {
setIsCamera(againVideoPermission.state);
setIsVideo(true);
console.log(
"Camera permission granted:",
againVideoPermission.state,
isCamera
);

room.startVideo().then(() => {
room
.attachVideo(zoomClient.getCurrentUserInfo().userId, 3)
.then((userVideo) => {
document
.querySelector("video-local-player-container")
.appendChild(userVideo);
});
});
} else if (againVideoPermission.state == "denied") {
setIsCamera(againVideoPermission.state);
setIsVideo(false);
console.log(
"Camera permission denied:",
againVideoPermission.state,
isCamera
);
// Handle the case when permission is denied
Swal.fire({
title: "Camera Access Denied",
text: "You have denied microphone access. Some features may not work properly.",
icon: "warning",
confirmButtonText: "Ok",
});
}
Swal.close();
console.log(
"Again Camera Permission Check",
againVideoPermission,
isCamera
);
} else {
setIsCamera(VideoPermission.state);
}
} catch (error) {
// Handle any errors (e.g., if the user denies access)
console.log("Error requesting camera permission:", error);
if (
error.name === "NotAllowedError" ||
error.name === "PermissionDeniedError"
) {
Swal.fire({
title: "Camera Access Denied",
text: "You have denied camera access. Some features may not work properly.",
icon: "warning",
confirmButtonText: "Ok",
});
}
}
}

useEffect(() => {
askPermission();
}, []);

useEffect(() => {
socketConnection.on("doctorCompleted", (data) => {
console.log("doctor left the video");
console.log(data?.booking_id, roomId, data?.booking_id == roomId);
if (data?.booking_id == roomId) setDoctorCompleted(true);
});
}, []);

// on metting leave
const onMeetingLeave = (id) => {
if (bookingDetail?.doctor_id?.user_id) {
Swal.fire({
title: "Are you sure?",
text: "Do you want to end consultation?",
icon: "warning",
showCancelButton: true,
cancelButtonText: "No",
confirmButtonText: "Yes",
confirmButtonColor: "#c82333",
}).then(async (result) => {
if (result.isConfirmed) {
handleLogout(true);
}
});
} else {
if (!bookingDetail?.doctor_id?.user_id) {
Swal.fire({
title: "Are you sure?",
text: "Do you want report delay from doctor and reschedule?",
icon: "warning",
showCancelButton: true,
cancelButtonText: "No",
confirmButtonText: "Yes",
confirmButtonColor: "#c82333",
}).then(async (result) => {
if (result.isConfirmed) {
setShowReportModal(true);
}
});
}
}
};
// main return

const sendNotificationHandler = async () => {
try {
const res = await ApiCall({
route: `receiptionist/add_notifications_for_receptionists`,
token: token,
verb: "post",
params: {
bookingId: bookingDetail?._id,
},
});
console.log(res?.response, "response");
if (res?.status == "200") {
console.log("res", res?.response);
Swal.fire(
"Your request for urgent attention has been notified.",
"Staff will be in contact with you soon.",
"success"
);
setTimePassed(new Date());
} else {
console.log("your error is there", res?.response);
}
} catch (err) {
console.log("Coudln't send", err);
}
};

const reportAndRescheduleHandler = async () => {
setShowReportModal(true);
};

const closeReportModal = () => {
setShowReportModal(false);
};

let items = [];

if (
participants?.length <= 0 &&
!bookingDetail?.doctor_id?.user_id &&
(new Date() - timePassedForDelay) / (1000 * 60) > 20
) {
items.push({
id: "1",
label: (
<PrimaryButton
className="report-button "
onClick={reportAndRescheduleHandler}
>
Report Delay & Reschedule
</PrimaryButton>
),
});
}

if (
participants?.length <= 0 &&
!bookingDetail?.doctor_id?.user_id &&
(new Date() - timePassed) / (1000 * 60) > 4
) {
items.push({
id: "2",
label: (
<PrimaryButton
className="notify-receptionist"
onClick={sendNotificationHandler}
icon={
<i
style={{ transform: `rotate(0deg)` }}
class="fa-solid fa-phone"
></i>
}
>
Ring again
</PrimaryButton>
),
});
}

const toggleVideo = async () => {
console.log("Valuevale", isVideo);
if (isCamera === "granted") {
if (isVideo) {
console.log("video is allowed", isVideo);
room.stopVideo().then(() => {
room
.detachVideo(zoomClient.getCurrentUserInfo().userId)
.then((userVideo) => {
document.querySelector("video-local-player-container").innerHTML =
"";
});
});
setIsVideo(false);
} else {
room.startVideo().then(() => {
room
.attachVideo(zoomClient.getCurrentUserInfo().userId, 3)
.then((userVideo) => {
console.log("userVideo", userVideo);
document
.querySelector("video-local-player-container")
.appendChild(userVideo);
});
});
setIsVideo(true);
}
} else {
Swal.fire({
title: "Camera Permission",
text: "You have denied camera access. Please allow from the setting.",
icon: "warning",
confirmButtonText: "Ok",
});
}
};

useEffect(() => {
if (zoomClient && room) {
zoomClient
.getAllUser()
.filter((user) => user.userIdentity !== userId)
.forEach(async (user) => {
if (user.userIdentity !== userId) {
console.log(user, "user already joined");
if (user.bVideoOn) {
room
.detachVideo(user.userId)
.then((userVideo) => {
document.querySelector("video-player-container").innerHTML =
"";
})
.then(() => {
room.attachVideo(user.userId, 3).then((userVideo) => {
document
.querySelector("video-player-container")
.appendChild(userVideo);
});
});

setParticipants([user]);
}
setJoin(true);
setUsers(user);
}
});
}
}, [zoomClient, room]);

const toggleAudio = async () => {
try {
console.log("ismute value is", isMute);
if (isAudio === "granted") {
await room.startAudio();
if (isMute) {
await room.muteAudio();
setIsMute(false);
} else {
await room.unmuteAudio();
setIsMute(true);
}
} else {
Swal.fire({
title: "Microphone Access Denied",
text: "You have denied microphone access. Please allow from the setting.",
icon: "warning",
confirmButtonText: "Ok",
});
}
} catch (error) {
console.error("Error toggling audio:", error);
}
};

console.log(participants);

return (
<>
<div className="main-container-video-chat">
<div className="video-chat-container-header">
{!isMobile && (
<DrawerApp
getBookingDetails={getBookingDetails}
bookingDetail={bookingDetail}
/>
)}
<img
onClick={() => navigate("/my-consultation")}
src={logo1}
alt="logo"
className="video-chat-header-logo"
/>

<button
className="custom-button-video-call mobile-end-consultation end-consultation"
onClick={() => onMeetingLeave(bookingDetail?._id)}
>
End
</button>
</div>
<div className="video-chat-section-container-main">
<div className="video-chat-inner-contianer">
<div className="videoDiv-main">
<div
className="remote-video"
style={{ display: participants.length == 0 ? "none" : "" }}
>
<video-player-container></video-player-container>
</div>

{join ? (
participants.length == 0 ? (
<div class="video-call-ended-text-in-box">
<p>Doctor has turned off their camera!</p>
</div>
) : (
""
)
) : (
<div class="video-call-ended-text-in-box">
<h4 class="h4">Consultation Paused!</h4>
<p>
{bookingDetail?.doctor_id?.user_id
? " We've notified the doctor. "
: " "}
Doctor will be in the session soon, please don't hesitate to
ask any questions in chat.
</p>
</div>
)}

<div className="local-user-video">
{isCamera === "granted" ? (
isVideo ? (
<div className="local-video">
<video-local-player-container></video-local-player-container>
</div>
) : (
<div className="local-user-off-cam">
<i class={`fa-solid fa-video-slash text-7`}></i>
<p>Camera turned off.</p>
</div>
)
) : (
""
)}
<video-local-player-container></video-local-player-container>
</div>

{isMobile && (
<div className="mobile-long-buttons-on-top">
{items?.length == 2
? items?.find((el) => el?.id == "1")?.label
: items?.find((el) => el?.id == "2")?.label}
</div>
)}
<div className="video-chat-controls">
{isMobile && (
<DrawerApp
getBookingDetails={getBookingDetails}
bookingDetail={bookingDetail}
/>
)}
{isMobile && (
<ChatDrawer
selectedChat={{
_id: bookingDetail?.chat_id,
booking: bookingDetail,
}}
/>
)}

<button
className={
isCamera === "granted"
? "chat-control-button video-active"
: "chat-control-button"
}
onClick={() => toggleVideo()}
style={{
backgroundColor:
isCamera === "granted"
? isVideo
? "blue"
: "red"
: "orange",
}}
title={
isCamera == "granted"
? "Video Management"
: "Please provide video permissions"
}
>
<i
class={`fa-solid fa-video${isVideo ? "" : "-slash"} text-7`}
></i>
</button>

<button
className={
isAudio === "granted"
? "chat-control-button video-active"
: "chat-control-button"
}
onClick={() => toggleAudio()}
style={{
backgroundColor:
isAudio === "granted"
? isMute
? "blue"
: "red"
: "orange",
}}
title={
isMute
? "Audio Management"
: "Please provide audio permissions"
}
>
<i
class={`fa-solid fa-microphone${
isMute ? "" : "-slash"
} text-3`}
></i>
</button>
</div>
<div className="video-chat-main-buttons">
<PrimaryButton
className="end-consultation"
onClick={() => onMeetingLeave(bookingDetail?._id)}
>
End Consultation
</PrimaryButton>
{items?.length == 2
? items?.find((el) => el?.id == "1")?.label
: items?.find((el) => el?.id == "2")?.label}
</div>
</div>
</div>

{bookingDetail && !isMobile && (
<ChatBox
selectedChat={{
_id: bookingDetail?.chat_id,
booking: bookingDetail,
}}
/>
)}
</div>
</div>
<ReportModal
open={showReportModal}
close={closeReportModal}
bookingId={bookingDetail?._id}
handleLogout={handleLogout}
/>
</>
);
};

export default Room;

 


Show less

Neatpad controller pairing issue. "Wrong account type"

Had a weird thing happen today. Did a codec swap from a mac to a pc and when reconfigured everything works with exception of one Neatpad that when I try various activations methods the Neatpad will sign in for a second then prompt a wrong account typ... Show more

Had a weird thing happen today. Did a codec swap from a mac to a pc and when reconfigured everything works with exception of one Neatpad that when I try various activations methods the Neatpad will sign in for a second then prompt a wrong account type error and sign out. It will pair to other rooms just not the one that I swapped the codec. There is an ipad that will pair as a controller though. Any thoughts?

 

Windows 11 , 64bit
6.2.7 (5001) , 64bit


Show less

reply-icon Latest Reply - 

Resolved! Zoom Rooms: Adjust for Low Lighting

Is this setting available for a Zoom Room? We have a conference that has a few dark spots near the camera. It'd be great to be able to turn on a setting similar to what's in the Background & Effects settings of the desktop app.

reply-icon Latest Reply - 

Zoom room control option disappeared on TC8 page

Dear Team,We have a integration of Extron/Poly TC8/G7500 device with Zoom Platform, recently we updated the OS/ Firmware version (6.1.0 to 6.2.6) of Poly devices in Zoom admin portal, after upgradation Room control option (Extron Control) had disappe... Show more

Dear Team,

We have a integration of Extron/Poly TC8/G7500 device with Zoom Platform, recently we updated the OS/ Firmware version (6.1.0 to 6.2.6) of Poly devices in Zoom admin portal, after upgradation Room control option (Extron Control) had disappeared from zoom home page of TC8.Now is any way we can downgrade it.??

With Regards,
Vikas

 


Show less

reply-icon Latest Reply - 

zoom admin portal equipment update

In the Zoom admin portal, under room management, when I select a Zoom room, I notice that equipment updates do not occur automatically. Even when I click on "Upgrade," it doesn't work. The only way to update is by connecting directly to the equipment... Show more

In the Zoom admin portal, under room management, when I select a Zoom room, I notice that equipment updates do not occur automatically. Even when I click on "Upgrade," it doesn't work. The only way to update is by connecting directly to the equipment.

Even after updating the equipment by connecting to it directly.

On the Zoom portal, the mentioned update has not been applied, and the equipment is still displayed with its previous update.


Show less

reply-icon Latest Reply - 

Picture in Picture On Zoom Room

I work at a TV station that also operates multiple PTZ cameras for board room meetings. There is the table for the boards, a podium, and a computer desk that we often switch between while having two picture-in-picture windows at the bottom left and b... Show more

I work at a TV station that also operates multiple PTZ cameras for board room meetings. There is the table for the boards, a podium, and a computer desk that we often switch between while having two picture-in-picture windows at the bottom left and bottom right corners so you can see the back and forth discussions while not having to switch the cameras constantly.

 

We are looking into doing Zoom Rooms so we have flexibility in terms of remotely covering the meetings, however we were told by the person looking to install the new setup that Zoom Rooms do not support picture-in-picture the way we do it now, but I understand that Zoom does updates to their software.

 

Is there native support for having picture-in-picture with Zoom Rooms the way I described? Otherwise, is there any third party software like a plug-in of some sort available that would support that kind of picture-in-picture?


Show less

reply-icon Latest Reply - 

Resolved! Zoom Certification Course

Hi Zoom community,

 

I'm wondering if there is a complete Zoom certification course, similar to Microsoft Teams and Cisco?

reply-icon Latest Reply - 

Resolved! Transient Connection Error on NEC Displays in Room Controls

has anyone else seen this?In two different zoom rooms with NEC displays, the displays have started failing to turn on and off for meetings. When I go into manual Room Controls at the iPad or virtually in a browser, it looks like this: If I click on R... Show more

has anyone else seen this?
In two different zoom rooms with NEC displays, the displays have started failing to turn on and off for meetings. When I go into manual Room Controls at the iPad or virtually in a browser, it looks like this:

 Screenshot 2024-11-26 090633.png

If I click on Retry, the devices all work fine for a minute, and I can turn the displays on and off. Within a few minutes, the connection errors return. Retry always fixes the problem for a few minutes. The NEC projectors are not affected.
In both rooms, the displays, projector, and Zoom PC are on their own dedicated room AV switch. No display firmware has been changed. This room has been working well for 3 years, and the room profile has been unchanged for almost two years.
I've opened a ticket, but as usual, it's hard to get past the "have you tried power cycling" stage.


Show less

reply-icon Latest Reply - 

Resolved! Fire TV Omni Cant connect to Video or Audio of the Webcam

Hello, Recently we setup a new office that has Fire TV Omni's and Logitech C920 webcams (As per recommended by amazon for compatibility to the TV's). We have the Zoom app on the TV's but when going into a meeting or test meeting, the camera or microp... Show more

Hello,

 

Recently we setup a new office that has Fire TV Omni's and Logitech C920 webcams (As per recommended by amazon for compatibility to the TV's).

We have the Zoom app on the TV's but when going into a meeting or test meeting, the camera or microphones are not picked up.

 

In the settings, it shows the camera seen as an external camera but there is no video feed and the camera itself does not have the light on as it normally would when the video is being seen.

We have tried mix and matching cameras, uninstalling and reinstalling the zoom app.
The camera and microphone works in other apps, just not zoom.

We allow all permissions that it prompts for. Went into the Application settings and allowed Zoom to view and use the camera and microphone, nothing has worked.

 

The turn camera on or off is grayed out. 

 

Amazon states it is an issue with the Zoom app and to contact zoom support.
Any suggestions or modifications to the app I can make, so this works?


Thank you in advance!


Show less

reply-icon Latest Reply -