Add Zoom Web co-host automation: auto-grant Multi-Pin on raised hand#2
Add Zoom Web co-host automation: auto-grant Multi-Pin on raised hand#2
Conversation
|
Seems you are using me but didn't get OPENAI_API_KEY seted in Variables/Secrets for this repo. you could follow readme for more information |
Co-authored-by: FriskyDevelopments <220081212+FriskyDevelopments@users.noreply.github.com>
|
Seems you are using me but didn't get OPENAI_API_KEY seted in Variables/Secrets for this repo. you could follow readme for more information |
|
Tampermonkey userscript that runs under a Zoom Host/Co-Host session and automatically grants Multi-Pin permission to participants who raise their hand — no backend, no Zoom API, DOM-only. Files scripts/zoom-host-tools.user.js — Main userscript. Matches .zoom.us/wc/ and .zoom.us/j/. Polls participant rows every CONFIG.SCAN_INTERVAL_MS (2.5 s): Detects raised-hand indicator via layered fallback: data-testid → aria-label → class → text/emoji content Phase 2: checkCameraStatus() fires after every grant; reads video icon aria-label/class to infer on/off state. TODO (Phase 2) marks where to wire in the camera-off chat reminder. All selectors live in selectors/zoom-dom-selectors.json with ordered candidates arrays and fallbackStrategy prose per element. Priority: data-testid → aria-label → class name → text match → structural traversal. Selector mismatches emit [WARN] logs; successful matches emit [DEBUG] logs — keeping breakage easy to diagnose. Debug panel When CONFIG.DEBUG = true, a floating overlay shows live scan/grant counters and last action taken. |
Tampermonkey userscript that runs under a Zoom Host/Co-Host session and automatically grants Multi-Pin permission to participants who raise their hand — no backend, no Zoom API, DOM-only.
Files
scripts/zoom-host-tools.user.js— Main userscript. Matches*.zoom.us/wc/*and*.zoom.us/j/*.selectors/zoom-dom-selectors.json— Canonical selector map; update here when Zoom changes its UI, then mirror into theSELECTORSconstant in the script.docs/automation-design.md— Architecture, DOM strategy, assumptions, extension points.docs/testing-checklist.md— Manual test plan across all three phases.Phase 1 — Implemented (MVP)
Polls participant rows every
CONFIG.SCAN_INTERVAL_MS(2.5 s):data-testid→aria-label→ class → text/emoji contentdata-participant-id→ display name → DOM fingerprint); deduplicates viaSetMENU_CLICK_RETRIEStimes for the Multi-Pin itemPhases 2 & 3 — Scaffolded
checkCameraStatus()fires after every grant; reads video icon aria-label/class to infer on/off state.TODO (Phase 2)marks where to wire in the camera-off chat reminder.MutationObserveron the chat container flags messages matchinghttp(s)://,t.me/,bit.ly/,discord.gg/.TODO (Phase 3)marks the moderation hook.Selector strategy
All selectors live in
selectors/zoom-dom-selectors.jsonwith orderedcandidatesarrays andfallbackStrategyprose per element. Priority:data-testid→aria-label→ class name → text match → structural traversal. Selector mismatches emit[WARN]logs; successful matches emit[DEBUG]logs — keeping breakage easy to diagnose.Debug panel
When
CONFIG.DEBUG = true, a floating overlay shows live scan/grant counters and last action taken.Original prompt
Here’s the Copilot Super-Agent Query version — stronger, more explicit, and designed so the agent builds a more reliable Zoom automation foundation while still keeping the first delivery small.
COPILOT SUPER-AGENT QUERY — ZOOM CO-HOST MULTIPIN AUTOMATION
You are a coding agent working inside this repository.
Your task is to build a lightweight Zoom Web automation tool that runs under a Zoom Host or Co-Host account and automates Multi-Pin granting for participants who raise their hand.
The main goal is to create a simple first working version quickly, but structure it so it can later support camera checks, chat moderation, and other host/co-host workflows.
Do not overengineer.
Do not build a backend.
Do not require external services.
Prefer plain JavaScript and a Tampermonkey userscript that interacts directly with the Zoom Web DOM.
Assume the automation user already has the required co-host or host permissions to perform these actions.
⸻
PRIMARY OBJECTIVE
Implement this core behavior:
When a participant raises their hand, automatically:
1. detect the participant row
2. determine whether that participant already has Multi-Pin permission
3. if not, open the participant menu
4. click Allow to Multi-Pin
5. store internal state so the same participant is not processed repeatedly
This is the most important feature.
Everything else is secondary.
⸻
PERMISSION MODEL
Assume the script runs in a Zoom session where the user has:
• Host permissions, or
• Co-Host permissions
So the script may safely attempt actions such as:
• opening participant action menus
• granting Multi-Pin
• sending chat messages
• performing moderation actions later
Do not implement authentication logic.
Do not use Zoom APIs unless absolutely necessary.
The tool should work through the existing Zoom Web interface.
⸻
BUILD STRATEGY
Implement the project in phases, but code the repository so Phase 1 works immediately.
Phase 1 — Required
Auto-grant Multi-Pin when a participant raises their hand.
Phase 2 — Scaffold only
After granting Multi-Pin, detect whether the participant’s camera is on.
If the camera is off, prepare logic to send a one-time chat message:
Please turn your camera on to use Multi-Pin.
This phase can be partially scaffolded if camera detection is uncertain.
Phase 3 — Scaffold only
Monitor chat for likely spam links:
• http://
• https://
• t.me
• bit.ly
• discord.gg
For now, just log detections and structure future moderation hooks.
⸻
CRITICAL REQUIREMENT: DOM MAPPING LAYER
Because Zoom Web UI may change, you must create a DOM selector mapping layer.
Do not hardcode selectors everywhere.
Create a centralized selector/config system that contains entries for:
• participant list container
• participant row
• raised hand indicator
• participant name
• participant menu button
• Multi-Pin menu item
• camera status indicator
• chat container
• chat message rows
• chat input
The code should use helper functions to resolve selectors from this config.
If the exact selector is uncertain, implement a fallback strategy:
• first try stable attributes
• then aria-labels
• then text matching
• then defensive DOM traversal
Comment all assumptions clearly.
⸻
RELIABILITY REQUIREMENT
The agent must make the automation as reliable as possible without making it heavy.
Implement:
• a lightweight polling loop or MutationObserver
• max scan interval of about 2–3 seconds
• deduplication of already-processed participants
• guard clauses to prevent repeated clicks
• safe retry behavior when menus fail to open
• console logging for every important decision
Examples of logs:
• detected raised hand
• participant already has multipin
• granting multipin
• failed to find menu item
• selector mismatch warning
⸻
IMPLEMENTATION REQUIREMENTS
Use:
• plain JavaScript
• Tampermonkey userscript format
• no backend
• no external libraries
• no framework unless absolutely necessary
Keep code modular with functions or modules for:
• selector resolution
• participant scanning
• raised-hand detection
• multipin status detection
• multipin granting
• camera status checks
• chat monitoring
• moderation hooks
• debug logging
⸻
FILES TO CREATE
Create this structure:
/scripts/zoom-host-tools.user.js
Main Tampermonkey userscript
/selectors/zoom-dom-selectors.json
Central selector map and fallback notes
/docs/automation-design.md
Explain architecture, assumptions, Zoom DOM strategy, and extension points
/docs/testing-checklist.md
Manual test plan for Zoom Web behavior
⸻
REQUIRED BEHAVIOR DETAILS
Raised Hand Detection
Detect participants who currently show the raised-hand state.
Multi-Pin Detection
Before clicking anything, try to determine whether the participant already has Multi-Pin enabled.
If direct status detection is not available, use one of these strategies:
1. infer from menu text
2. inspect whether the action says “Allow to Multi-Pin” vs some granted state
3....
📍 Connect Copilot coding agent with Jira, Azure Boards or Linear to delegate work to Copilot in one click without leaving your project management tool.