wxcli 1.2.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- wxcli/__init__.py +4 -0
- wxcli/_playbook/.claude/agents/migration-advisor.md +239 -0
- wxcli/_playbook/.claude/agents/wxc-calling-builder.md +946 -0
- wxcli/_playbook/.claude/rules/cleanup.md +29 -0
- wxcli/_playbook/.claude/rules/cucm-migration.md +58 -0
- wxcli/_playbook/.claude/rules/org-health.md +14 -0
- wxcli/_playbook/.claude/settings.json +8 -0
- wxcli/_playbook/.claude/skills/audit-compliance/SKILL.md +515 -0
- wxcli/_playbook/.claude/skills/call-control/SKILL.md +747 -0
- wxcli/_playbook/.claude/skills/configure-features/SKILL.md +623 -0
- wxcli/_playbook/.claude/skills/configure-routing/SKILL.md +627 -0
- wxcli/_playbook/.claude/skills/contact-center/SKILL.md +1181 -0
- wxcli/_playbook/.claude/skills/cucm-migrate/SKILL.md +820 -0
- wxcli/_playbook/.claude/skills/customer-assist/SKILL.md +443 -0
- wxcli/_playbook/.claude/skills/device-platform/SKILL.md +407 -0
- wxcli/_playbook/.claude/skills/manage-call-settings/SKILL.md +757 -0
- wxcli/_playbook/.claude/skills/manage-devices/SKILL.md +790 -0
- wxcli/_playbook/.claude/skills/manage-identity/SKILL.md +638 -0
- wxcli/_playbook/.claude/skills/manage-licensing/SKILL.md +528 -0
- wxcli/_playbook/.claude/skills/manage-meetings/SKILL.md +708 -0
- wxcli/_playbook/.claude/skills/messaging-bots/SKILL.md +365 -0
- wxcli/_playbook/.claude/skills/messaging-spaces/SKILL.md +520 -0
- wxcli/_playbook/.claude/skills/org-health/SKILL.md +159 -0
- wxcli/_playbook/.claude/skills/provision-calling/SKILL.md +421 -0
- wxcli/_playbook/.claude/skills/query-live/SKILL.md +183 -0
- wxcli/_playbook/.claude/skills/query-live/domains/call-flow-trace.md +223 -0
- wxcli/_playbook/.claude/skills/query-live/domains/call-history.md +44 -0
- wxcli/_playbook/.claude/skills/query-live/domains/features.md +169 -0
- wxcli/_playbook/.claude/skills/query-live/domains/numbers.md +93 -0
- wxcli/_playbook/.claude/skills/query-live/domains/people-and-settings.md +146 -0
- wxcli/_playbook/.claude/skills/query-live/domains/routing.md +124 -0
- wxcli/_playbook/.claude/skills/reporting/SKILL.md +501 -0
- wxcli/_playbook/.claude/skills/reporting/references/cdr-recipes.md +1628 -0
- wxcli/_playbook/.claude/skills/reporting-cc/SKILL.md +251 -0
- wxcli/_playbook/.claude/skills/reporting-meetings/SKILL.md +290 -0
- wxcli/_playbook/.claude/skills/teardown/SKILL.md +214 -0
- wxcli/_playbook/.claude/skills/video-mesh/SKILL.md +379 -0
- wxcli/_playbook/.claude/skills/wxc-calling-debug/SKILL.md +475 -0
- wxcli/_playbook/CLAUDE.md +373 -0
- wxcli/_playbook/docs/reference/CLAUDE.md +25 -0
- wxcli/_playbook/docs/reference/admin-apps-data.md +643 -0
- wxcli/_playbook/docs/reference/admin-audit-security.md +322 -0
- wxcli/_playbook/docs/reference/admin-hybrid.md +383 -0
- wxcli/_playbook/docs/reference/admin-identity-scim.md +1007 -0
- wxcli/_playbook/docs/reference/admin-licensing.md +414 -0
- wxcli/_playbook/docs/reference/admin-org-management.md +586 -0
- wxcli/_playbook/docs/reference/admin-partner.md +357 -0
- wxcli/_playbook/docs/reference/archive/wxc-sdk-patterns.md +1229 -0
- wxcli/_playbook/docs/reference/archive/wxcadm-advanced.md +835 -0
- wxcli/_playbook/docs/reference/archive/wxcadm-core.md +743 -0
- wxcli/_playbook/docs/reference/archive/wxcadm-devices-workspaces.md +1305 -0
- wxcli/_playbook/docs/reference/archive/wxcadm-features.md +849 -0
- wxcli/_playbook/docs/reference/archive/wxcadm-locations.md +938 -0
- wxcli/_playbook/docs/reference/archive/wxcadm-person.md +1255 -0
- wxcli/_playbook/docs/reference/archive/wxcadm-routing.md +1262 -0
- wxcli/_playbook/docs/reference/authentication.md +965 -0
- wxcli/_playbook/docs/reference/call-control.md +1205 -0
- wxcli/_playbook/docs/reference/call-features-additional.md +2541 -0
- wxcli/_playbook/docs/reference/call-features-major.md +1320 -0
- wxcli/_playbook/docs/reference/call-routing.md +2304 -0
- wxcli/_playbook/docs/reference/contact-center-analytics.md +1049 -0
- wxcli/_playbook/docs/reference/contact-center-core.md +1614 -0
- wxcli/_playbook/docs/reference/contact-center-journey.md +457 -0
- wxcli/_playbook/docs/reference/contact-center-routing.md +1138 -0
- wxcli/_playbook/docs/reference/devices-core.md +1869 -0
- wxcli/_playbook/docs/reference/devices-dect.md +1150 -0
- wxcli/_playbook/docs/reference/devices-platform.md +467 -0
- wxcli/_playbook/docs/reference/devices-workspaces.md +1426 -0
- wxcli/_playbook/docs/reference/emergency-services.md +1122 -0
- wxcli/_playbook/docs/reference/location-calling-core.md +2037 -0
- wxcli/_playbook/docs/reference/location-calling-media.md +1334 -0
- wxcli/_playbook/docs/reference/location-recording-advanced.md +1482 -0
- wxcli/_playbook/docs/reference/meetings-content.md +473 -0
- wxcli/_playbook/docs/reference/meetings-core.md +903 -0
- wxcli/_playbook/docs/reference/meetings-infrastructure.md +899 -0
- wxcli/_playbook/docs/reference/meetings-settings.md +850 -0
- wxcli/_playbook/docs/reference/messaging-bots.md +1091 -0
- wxcli/_playbook/docs/reference/messaging-spaces.md +695 -0
- wxcli/_playbook/docs/reference/person-call-settings-behavior.md +1639 -0
- wxcli/_playbook/docs/reference/person-call-settings-handling.md +1394 -0
- wxcli/_playbook/docs/reference/person-call-settings-media.md +1898 -0
- wxcli/_playbook/docs/reference/person-call-settings-permissions.md +1329 -0
- wxcli/_playbook/docs/reference/provisioning.md +1366 -0
- wxcli/_playbook/docs/reference/reporting-analytics.md +1318 -0
- wxcli/_playbook/docs/reference/self-service-call-settings.md +1020 -0
- wxcli/_playbook/docs/reference/virtual-lines.md +1132 -0
- wxcli/_playbook/docs/reference/webhooks-events.md +1444 -0
- wxcli/_playbook/docs/reference/wxcadm-xsi-realtime.md +953 -0
- wxcli/_version.py +24 -0
- wxcli/auth.py +137 -0
- wxcli/commands/__init__.py +0 -0
- wxcli/commands/_registry.py +181 -0
- wxcli/commands/activation_email.py +103 -0
- wxcli/commands/admin_recordings.py +585 -0
- wxcli/commands/analytics.py +105 -0
- wxcli/commands/announcement_playlists.py +219 -0
- wxcli/commands/announcements.py +519 -0
- wxcli/commands/archive_users.py +36 -0
- wxcli/commands/attachment_actions.py +60 -0
- wxcli/commands/audit_events.py +83 -0
- wxcli/commands/authorizations.py +113 -0
- wxcli/commands/auto_attendant.py +642 -0
- wxcli/commands/broadworks_billing_reports.py +126 -0
- wxcli/commands/broadworks_enterprises.py +160 -0
- wxcli/commands/broadworks_subscribers.py +319 -0
- wxcli/commands/broadworks_workspaces.py +108 -0
- wxcli/commands/call_controls.py +1304 -0
- wxcli/commands/call_park.py +494 -0
- wxcli/commands/call_pickup.py +229 -0
- wxcli/commands/call_queue.py +1878 -0
- wxcli/commands/call_recording.py +707 -0
- wxcli/commands/call_routing.py +1610 -0
- wxcli/commands/call_settings_for_me_phase_5.py +212 -0
- wxcli/commands/caller_reputation.py +169 -0
- wxcli/commands/calling_service.py +305 -0
- wxcli/commands/cc_address_book.py +770 -0
- wxcli/commands/cc_agent_greetings.py +242 -0
- wxcli/commands/cc_agent_summaries.py +39 -0
- wxcli/commands/cc_agent_wellbeing.py +216 -0
- wxcli/commands/cc_agents.py +425 -0
- wxcli/commands/cc_ai_assistant.py +55 -0
- wxcli/commands/cc_ai_feature.py +294 -0
- wxcli/commands/cc_audio_files.py +149 -0
- wxcli/commands/cc_auto_csat.py +311 -0
- wxcli/commands/cc_aux_code.py +458 -0
- wxcli/commands/cc_business_hour.py +353 -0
- wxcli/commands/cc_call_monitoring.py +228 -0
- wxcli/commands/cc_callbacks.py +194 -0
- wxcli/commands/cc_campaign.py +212 -0
- wxcli/commands/cc_captures.py +39 -0
- wxcli/commands/cc_contact_list.py +169 -0
- wxcli/commands/cc_contact_number.py +295 -0
- wxcli/commands/cc_data_sources.py +235 -0
- wxcli/commands/cc_desktop_layout.py +380 -0
- wxcli/commands/cc_desktop_profile.py +322 -0
- wxcli/commands/cc_dial_number.py +511 -0
- wxcli/commands/cc_dial_plan.py +347 -0
- wxcli/commands/cc_dnc.py +101 -0
- wxcli/commands/cc_entry_point.py +545 -0
- wxcli/commands/cc_ewt.py +51 -0
- wxcli/commands/cc_flow.py +477 -0
- wxcli/commands/cc_global_vars.py +430 -0
- wxcli/commands/cc_holiday_list.py +335 -0
- wxcli/commands/cc_journey.py +1261 -0
- wxcli/commands/cc_legacy_flows.py +49 -0
- wxcli/commands/cc_multimedia_profile.py +436 -0
- wxcli/commands/cc_notification.py +51 -0
- wxcli/commands/cc_outdial_ani.py +604 -0
- wxcli/commands/cc_overrides.py +341 -0
- wxcli/commands/cc_queue.py +1083 -0
- wxcli/commands/cc_queue_stats.py +55 -0
- wxcli/commands/cc_realtime.py +51 -0
- wxcli/commands/cc_resource_collection.py +312 -0
- wxcli/commands/cc_search.py +46 -0
- wxcli/commands/cc_site.py +400 -0
- wxcli/commands/cc_skill.py +350 -0
- wxcli/commands/cc_skill_profile.py +289 -0
- wxcli/commands/cc_subscriptions.py +426 -0
- wxcli/commands/cc_summaries.py +130 -0
- wxcli/commands/cc_tasks.py +844 -0
- wxcli/commands/cc_team.py +325 -0
- wxcli/commands/cc_user_profiles.py +349 -0
- wxcli/commands/cc_users.py +701 -0
- wxcli/commands/cc_work_types.py +363 -0
- wxcli/commands/cdr.py +89 -0
- wxcli/commands/classifications.py +38 -0
- wxcli/commands/cleanup.py +1427 -0
- wxcli/commands/client_settings.py +72 -0
- wxcli/commands/conference.py +328 -0
- wxcli/commands/configure.py +72 -0
- wxcli/commands/converged_recordings.py +347 -0
- wxcli/commands/converged_recordings_export.py +310 -0
- wxcli/commands/cq_playlists.py +42 -0
- wxcli/commands/cucm.py +2794 -0
- wxcli/commands/cucm_config.py +129 -0
- wxcli/commands/customer_assist.py +373 -0
- wxcli/commands/data_sources.py +227 -0
- wxcli/commands/dect_devices.py +787 -0
- wxcli/commands/device_configurations.py +77 -0
- wxcli/commands/device_dynamic_settings.py +320 -0
- wxcli/commands/device_settings.py +1489 -0
- wxcli/commands/devices.py +280 -0
- wxcli/commands/domains.py +142 -0
- wxcli/commands/ecm.py +178 -0
- wxcli/commands/emergency_services.py +827 -0
- wxcli/commands/events.py +83 -0
- wxcli/commands/external_voicemail.py +52 -0
- wxcli/commands/groups.py +206 -0
- wxcli/commands/guest_management.py +76 -0
- wxcli/commands/hds.py +340 -0
- wxcli/commands/hot_desk.py +67 -0
- wxcli/commands/hot_desking_members.py +118 -0
- wxcli/commands/hot_desking_portal.py +124 -0
- wxcli/commands/hunt_group.py +577 -0
- wxcli/commands/hybrid_clusters.py +71 -0
- wxcli/commands/hybrid_connectors.py +67 -0
- wxcli/commands/identity_org.py +159 -0
- wxcli/commands/init_playbook.py +155 -0
- wxcli/commands/licenses.py +106 -0
- wxcli/commands/live_monitoring.py +40 -0
- wxcli/commands/location_call_handling.py +577 -0
- wxcli/commands/location_schedules.py +341 -0
- wxcli/commands/location_settings.py +1297 -0
- wxcli/commands/location_voicemail.py +494 -0
- wxcli/commands/locations.py +336 -0
- wxcli/commands/meeting_captions.py +110 -0
- wxcli/commands/meeting_chats.py +63 -0
- wxcli/commands/meeting_invitees.py +234 -0
- wxcli/commands/meeting_messages.py +28 -0
- wxcli/commands/meeting_participants.py +278 -0
- wxcli/commands/meeting_polls.py +111 -0
- wxcli/commands/meeting_preferences.py +515 -0
- wxcli/commands/meeting_qa.py +78 -0
- wxcli/commands/meeting_qualities.py +43 -0
- wxcli/commands/meeting_reports.py +101 -0
- wxcli/commands/meeting_session_types.py +105 -0
- wxcli/commands/meeting_site.py +57 -0
- wxcli/commands/meeting_slido.py +44 -0
- wxcli/commands/meeting_summaries.py +92 -0
- wxcli/commands/meeting_tracking_codes.py +233 -0
- wxcli/commands/meeting_transcripts.py +230 -0
- wxcli/commands/meetings.py +1997 -0
- wxcli/commands/memberships.py +164 -0
- wxcli/commands/messages.py +213 -0
- wxcli/commands/mode_management.py +244 -0
- wxcli/commands/my_call_settings.py +3577 -0
- wxcli/commands/numbers.py +405 -0
- wxcli/commands/operating_modes.py +410 -0
- wxcli/commands/org_contacts.py +284 -0
- wxcli/commands/org_health_cli.py +55 -0
- wxcli/commands/org_settings.py +71 -0
- wxcli/commands/organizations.py +83 -0
- wxcli/commands/paging_group.py +257 -0
- wxcli/commands/partner_admins.py +141 -0
- wxcli/commands/partner_reports.py +188 -0
- wxcli/commands/partner_tags.py +216 -0
- wxcli/commands/people.py +279 -0
- wxcli/commands/person_call_settings.py +71 -0
- wxcli/commands/pstn.py +280 -0
- wxcli/commands/recording_report.py +154 -0
- wxcli/commands/report_templates.py +38 -0
- wxcli/commands/reports.py +144 -0
- wxcli/commands/resource_group_memberships.py +160 -0
- wxcli/commands/resource_groups.py +67 -0
- wxcli/commands/roles.py +63 -0
- wxcli/commands/room_tabs.py +160 -0
- wxcli/commands/rooms.py +225 -0
- wxcli/commands/scim_bulk.py +46 -0
- wxcli/commands/scim_groups.py +246 -0
- wxcli/commands/scim_schemas.py +82 -0
- wxcli/commands/scim_users.py +283 -0
- wxcli/commands/security_audit.py +54 -0
- wxcli/commands/service_apps.py +51 -0
- wxcli/commands/single_number_reach.py +209 -0
- wxcli/commands/team_memberships.py +155 -0
- wxcli/commands/teams.py +153 -0
- wxcli/commands/ucm_profile.py +42 -0
- wxcli/commands/update.py +219 -0
- wxcli/commands/user_settings.py +5116 -0
- wxcli/commands/video_mesh.py +1090 -0
- wxcli/commands/virtual_extensions.py +502 -0
- wxcli/commands/virtual_line_settings.py +2072 -0
- wxcli/commands/webhooks.py +176 -0
- wxcli/commands/wholesale_billing_reports.py +147 -0
- wxcli/commands/wholesale_provisioning.py +523 -0
- wxcli/commands/workspace_locations.py +339 -0
- wxcli/commands/workspace_metrics.py +103 -0
- wxcli/commands/workspace_personalization.py +70 -0
- wxcli/commands/workspace_settings.py +3347 -0
- wxcli/commands/workspaces.py +279 -0
- wxcli/commands/xapi.py +114 -0
- wxcli/config.py +139 -0
- wxcli/errors.py +77 -0
- wxcli/main.py +210 -0
- wxcli/migration/CLAUDE.md +106 -0
- wxcli/migration/__init__.py +1 -0
- wxcli/migration/advisory/CLAUDE.md +196 -0
- wxcli/migration/advisory/__init__.py +46 -0
- wxcli/migration/advisory/advisor.py +107 -0
- wxcli/migration/advisory/advisory_patterns.py +2552 -0
- wxcli/migration/advisory/recommendation_rules.py +835 -0
- wxcli/migration/cucm/CLAUDE.md +74 -0
- wxcli/migration/cucm/__init__.py +5 -0
- wxcli/migration/cucm/connection.py +265 -0
- wxcli/migration/cucm/discovery.py +225 -0
- wxcli/migration/cucm/extractors/__init__.py +1 -0
- wxcli/migration/cucm/extractors/announcements.py +92 -0
- wxcli/migration/cucm/extractors/base.py +90 -0
- wxcli/migration/cucm/extractors/device_profiles.py +98 -0
- wxcli/migration/cucm/extractors/devices.py +193 -0
- wxcli/migration/cucm/extractors/e911.py +103 -0
- wxcli/migration/cucm/extractors/features.py +309 -0
- wxcli/migration/cucm/extractors/helpers.py +73 -0
- wxcli/migration/cucm/extractors/informational.py +295 -0
- wxcli/migration/cucm/extractors/locations.py +221 -0
- wxcli/migration/cucm/extractors/moh.py +100 -0
- wxcli/migration/cucm/extractors/remote_destinations.py +96 -0
- wxcli/migration/cucm/extractors/routing.py +493 -0
- wxcli/migration/cucm/extractors/shared_lines.py +146 -0
- wxcli/migration/cucm/extractors/templates.py +229 -0
- wxcli/migration/cucm/extractors/tier4.py +173 -0
- wxcli/migration/cucm/extractors/users.py +240 -0
- wxcli/migration/cucm/extractors/voicemail.py +243 -0
- wxcli/migration/cucm/extractors/workspaces.py +88 -0
- wxcli/migration/cucm/unity_connection.py +304 -0
- wxcli/migration/execute/CLAUDE.md +372 -0
- wxcli/migration/execute/__init__.py +303 -0
- wxcli/migration/execute/batch.py +277 -0
- wxcli/migration/execute/dependency.py +483 -0
- wxcli/migration/execute/engine.py +964 -0
- wxcli/migration/execute/handlers.py +2232 -0
- wxcli/migration/execute/planner.py +1939 -0
- wxcli/migration/execute/runtime.py +571 -0
- wxcli/migration/export/CLAUDE.md +49 -0
- wxcli/migration/export/__init__.py +8 -0
- wxcli/migration/export/csv_export.py +126 -0
- wxcli/migration/export/deployment_plan.py +479 -0
- wxcli/migration/export/json_export.py +60 -0
- wxcli/migration/models.py +941 -0
- wxcli/migration/phone_models.py +50 -0
- wxcli/migration/preflight/CLAUDE.md +52 -0
- wxcli/migration/preflight/__init__.py +89 -0
- wxcli/migration/preflight/checks.py +911 -0
- wxcli/migration/preflight/runner.py +293 -0
- wxcli/migration/rate_limiter.py +144 -0
- wxcli/migration/report/CLAUDE.md +245 -0
- wxcli/migration/report/__init__.py +7 -0
- wxcli/migration/report/appendix.py +2437 -0
- wxcli/migration/report/assembler.py +183 -0
- wxcli/migration/report/charts.py +263 -0
- wxcli/migration/report/executive.py +776 -0
- wxcli/migration/report/explainer.py +704 -0
- wxcli/migration/report/helpers.py +74 -0
- wxcli/migration/report/ingest.py +152 -0
- wxcli/migration/report/notice_templates.py +192 -0
- wxcli/migration/report/score.py +375 -0
- wxcli/migration/report/styles.py +1052 -0
- wxcli/migration/report/user_diff.py +1052 -0
- wxcli/migration/report/user_notice.py +425 -0
- wxcli/migration/state.py +139 -0
- wxcli/migration/store.py +860 -0
- wxcli/migration/transform/CLAUDE.md +107 -0
- wxcli/migration/transform/__init__.py +12 -0
- wxcli/migration/transform/analysis_pipeline.py +453 -0
- wxcli/migration/transform/analyzers/__init__.py +142 -0
- wxcli/migration/transform/analyzers/css_permission.py +189 -0
- wxcli/migration/transform/analyzers/css_routing.py +335 -0
- wxcli/migration/transform/analyzers/device_compatibility.py +122 -0
- wxcli/migration/transform/analyzers/dn_ambiguity.py +131 -0
- wxcli/migration/transform/analyzers/duplicate_user.py +221 -0
- wxcli/migration/transform/analyzers/extension_conflict.py +173 -0
- wxcli/migration/transform/analyzers/feature_approximation.py +227 -0
- wxcli/migration/transform/analyzers/layout_overflow.py +174 -0
- wxcli/migration/transform/analyzers/location_ambiguity.py +184 -0
- wxcli/migration/transform/analyzers/missing_data.py +300 -0
- wxcli/migration/transform/analyzers/selective_call_handling.py +394 -0
- wxcli/migration/transform/analyzers/shared_line.py +170 -0
- wxcli/migration/transform/analyzers/voicemail_compatibility.py +267 -0
- wxcli/migration/transform/analyzers/workspace_license.py +212 -0
- wxcli/migration/transform/cross_reference.py +1136 -0
- wxcli/migration/transform/cucm_pattern.py +246 -0
- wxcli/migration/transform/decisions.py +301 -0
- wxcli/migration/transform/e164.py +145 -0
- wxcli/migration/transform/engine.py +256 -0
- wxcli/migration/transform/mappers/CLAUDE.md +123 -0
- wxcli/migration/transform/mappers/__init__.py +76 -0
- wxcli/migration/transform/mappers/announcement_mapper.py +122 -0
- wxcli/migration/transform/mappers/base.py +190 -0
- wxcli/migration/transform/mappers/button_template_mapper.py +186 -0
- wxcli/migration/transform/mappers/call_forwarding_mapper.py +228 -0
- wxcli/migration/transform/mappers/call_settings_mapper.py +144 -0
- wxcli/migration/transform/mappers/css_mapper.py +868 -0
- wxcli/migration/transform/mappers/dect_mapper.py +367 -0
- wxcli/migration/transform/mappers/device_layout_mapper.py +289 -0
- wxcli/migration/transform/mappers/device_mapper.py +227 -0
- wxcli/migration/transform/mappers/device_profile_mapper.py +190 -0
- wxcli/migration/transform/mappers/device_settings_mapper.py +464 -0
- wxcli/migration/transform/mappers/e911_mapper.py +129 -0
- wxcli/migration/transform/mappers/ecbn_mapper.py +263 -0
- wxcli/migration/transform/mappers/executive_assistant_mapper.py +156 -0
- wxcli/migration/transform/mappers/feature_mapper.py +1179 -0
- wxcli/migration/transform/mappers/line_mapper.py +310 -0
- wxcli/migration/transform/mappers/location_mapper.py +235 -0
- wxcli/migration/transform/mappers/moh_mapper.py +114 -0
- wxcli/migration/transform/mappers/monitoring_mapper.py +221 -0
- wxcli/migration/transform/mappers/receptionist_mapper.py +245 -0
- wxcli/migration/transform/mappers/routing_mapper.py +821 -0
- wxcli/migration/transform/mappers/snr_mapper.py +201 -0
- wxcli/migration/transform/mappers/softkey_mapper.py +205 -0
- wxcli/migration/transform/mappers/user_mapper.py +264 -0
- wxcli/migration/transform/mappers/voicemail_group_mapper.py +286 -0
- wxcli/migration/transform/mappers/voicemail_mapper.py +514 -0
- wxcli/migration/transform/mappers/workspace_mapper.py +464 -0
- wxcli/migration/transform/normalizers.py +2008 -0
- wxcli/migration/transform/pattern_converter.py +106 -0
- wxcli/migration/transform/pipeline.py +271 -0
- wxcli/migration/transform/rules.py +255 -0
- wxcli/org_health/CLAUDE.md +63 -0
- wxcli/org_health/__init__.py +7 -0
- wxcli/org_health/analyze.py +93 -0
- wxcli/org_health/checks.py +458 -0
- wxcli/org_health/collector.py +62 -0
- wxcli/org_health/models.py +78 -0
- wxcli/org_health/report.py +300 -0
- wxcli/output.py +101 -0
- wxcli-1.2.0.dist-info/METADATA +505 -0
- wxcli-1.2.0.dist-info/RECORD +413 -0
- wxcli-1.2.0.dist-info/WHEEL +5 -0
- wxcli-1.2.0.dist-info/entry_points.txt +2 -0
- wxcli-1.2.0.dist-info/licenses/LICENSE +191 -0
- wxcli-1.2.0.dist-info/scm_file_list.json +751 -0
- wxcli-1.2.0.dist-info/scm_version.json +8 -0
- wxcli-1.2.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,899 @@
|
|
|
1
|
+
# Meetings Infrastructure: Video Mesh, Participants, and Invitees
|
|
2
|
+
|
|
3
|
+
Reference for Webex Meetings infrastructure management. Covers the 43 commands across 3 CLI groups that an IT admin uses to monitor Video Mesh on-premises media processing, manage meeting participants in real time, and configure meeting invitees pre-meeting. Sourced from the Webex Meetings API (OpenAPI spec: `specs/webex-meetings.json`).
|
|
4
|
+
|
|
5
|
+
## Sources
|
|
6
|
+
|
|
7
|
+
- OpenAPI spec: `specs/webex-meetings.json`
|
|
8
|
+
- [developer.webex.com Video Mesh APIs](https://developer.webex.com/docs/api/v1/video-mesh)
|
|
9
|
+
- [developer.webex.com Meeting Participants APIs](https://developer.webex.com/docs/api/v1/meeting-participants)
|
|
10
|
+
- [developer.webex.com Meeting Invitees APIs](https://developer.webex.com/docs/api/v1/meeting-invitees)
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Table of Contents
|
|
15
|
+
|
|
16
|
+
1. [Meetings Infrastructure Overview](#1-meetings-infrastructure-overview)
|
|
17
|
+
2. [Video Mesh: Clusters and Nodes](#2-video-mesh-clusters-and-nodes)
|
|
18
|
+
3. [Video Mesh: Availability](#3-video-mesh-availability)
|
|
19
|
+
4. [Video Mesh: Utilization and Overflow](#4-video-mesh-utilization-and-overflow)
|
|
20
|
+
5. [Video Mesh: Call Redirects and Client Distribution](#5-video-mesh-call-redirects-and-client-distribution)
|
|
21
|
+
6. [Video Mesh: Test Results](#6-video-mesh-test-results)
|
|
22
|
+
7. [Video Mesh: On-Demand Tests](#7-video-mesh-on-demand-tests)
|
|
23
|
+
8. [Video Mesh: Event Thresholds](#8-video-mesh-event-thresholds)
|
|
24
|
+
9. [Meeting Participants](#9-meeting-participants)
|
|
25
|
+
10. [Meeting Invitees](#10-meeting-invitees)
|
|
26
|
+
11. [Raw HTTP Endpoints](#11-raw-http-endpoints)
|
|
27
|
+
12. [Gotchas](#12-gotchas)
|
|
28
|
+
13. [See Also](#13-see-also)
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## 1. Meetings Infrastructure Overview
|
|
33
|
+
|
|
34
|
+
This doc covers three distinct API surfaces that support the Webex Meetings infrastructure:
|
|
35
|
+
|
|
36
|
+
- **Video Mesh** (30 commands) -- on-premises media processing nodes that keep meeting traffic local. The API is read-only for monitoring and analytics, plus event threshold configuration. Cluster and node provisioning is done through the Webex Control Hub UI, not via API.
|
|
37
|
+
- **Meeting Participants** (7 commands) -- real-time management of who is in a meeting. List, query, admit from lobby, mute/unmute, expel, and call out to SIP devices.
|
|
38
|
+
- **Meeting Invitees** (6 commands) -- pre-meeting management of who is invited. CRUD operations on the invitation list before the meeting starts.
|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
Video Mesh (on-prem media nodes)
|
|
42
|
+
├── Clusters (grouping of nodes)
|
|
43
|
+
│ ├── Availability, Utilization, Overflow
|
|
44
|
+
│ ├── Call Redirects, Client Distribution
|
|
45
|
+
│ └── Test Results (network, reachability, media health)
|
|
46
|
+
├── Nodes (individual media processing servers)
|
|
47
|
+
│ └── Availability, Test Results
|
|
48
|
+
└── Event Thresholds (alert configuration)
|
|
49
|
+
|
|
50
|
+
Meeting Lifecycle
|
|
51
|
+
├── Invitees (pre-meeting: who to invite)
|
|
52
|
+
└── Participants (in-meeting: who joined, lobby, mute, expel, SIP callout)
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
**CLI groups in this doc:**
|
|
56
|
+
|
|
57
|
+
| CLI Group | Resource | Commands |
|
|
58
|
+
|-----------|----------|---------|
|
|
59
|
+
| `video-mesh` | Video Mesh clusters, nodes, analytics | 30 |
|
|
60
|
+
| `meeting-participants` | Meeting participants | 7 |
|
|
61
|
+
| `meeting-invitees` | Meeting invitees | 6 |
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## 2. Video Mesh: Clusters and Nodes
|
|
66
|
+
|
|
67
|
+
**CLI group:** `video-mesh`
|
|
68
|
+
**API base:** `https://webexapis.com/v1/videoMesh`
|
|
69
|
+
|
|
70
|
+
Video Mesh deploys on-premises media processing nodes that keep real-time media (audio, video, content sharing) local to reduce bandwidth to the cloud. Clusters group multiple nodes for redundancy and load balancing. All cluster and node management (provisioning, registration, decommissioning) is done through the Webex Control Hub -- the API provides monitoring and analytics only.
|
|
71
|
+
|
|
72
|
+
### Commands
|
|
73
|
+
|
|
74
|
+
| Command | CLI | HTTP Method | What It Does |
|
|
75
|
+
|---------|-----|------------|-------------|
|
|
76
|
+
| List clusters | `wxcli video-mesh list-clusters-video-mesh` | GET /videoMesh/clusters | List all Video Mesh clusters in the org |
|
|
77
|
+
| Show cluster | `wxcli video-mesh show --cluster-id ID` | GET /videoMesh/clusters/{clusterId} | Get details for a single cluster |
|
|
78
|
+
|
|
79
|
+
### Key Parameters
|
|
80
|
+
|
|
81
|
+
#### `list-clusters-video-mesh`
|
|
82
|
+
|
|
83
|
+
| Option | Description |
|
|
84
|
+
|--------|-------------|
|
|
85
|
+
| `--org-id ORG_ID` | Organization ID (auto-injected from config) |
|
|
86
|
+
| `--output table\|json` | Output format (default: table) |
|
|
87
|
+
|
|
88
|
+
#### `show`
|
|
89
|
+
|
|
90
|
+
| Option | Required | Description |
|
|
91
|
+
|--------|:--------:|-------------|
|
|
92
|
+
| `--cluster-id ID` | Yes | The unique Video Mesh Cluster ID |
|
|
93
|
+
| `--org-id ORG_ID` | No | Organization ID (auto-injected from config) |
|
|
94
|
+
|
|
95
|
+
### Raw HTTP
|
|
96
|
+
|
|
97
|
+
```python
|
|
98
|
+
import requests
|
|
99
|
+
|
|
100
|
+
BASE = "https://webexapis.com/v1"
|
|
101
|
+
headers = {"Authorization": f"Bearer {token}"}
|
|
102
|
+
|
|
103
|
+
# List all Video Mesh clusters
|
|
104
|
+
resp = requests.get(f"{BASE}/videoMesh/clusters", headers=headers, params={"orgId": org_id})
|
|
105
|
+
clusters = resp.json().get("items", [])
|
|
106
|
+
# Each item: {"clusterId", "clusterName", "releaseChannel", ...}
|
|
107
|
+
|
|
108
|
+
# Get a single cluster
|
|
109
|
+
resp = requests.get(f"{BASE}/videoMesh/clusters/{cluster_id}", headers=headers, params={"orgId": org_id})
|
|
110
|
+
cluster = resp.json()
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## 3. Video Mesh: Availability
|
|
116
|
+
|
|
117
|
+
Monitor the availability of clusters and individual nodes over time.
|
|
118
|
+
|
|
119
|
+
### Commands
|
|
120
|
+
|
|
121
|
+
| Command | CLI | HTTP Method | What It Does |
|
|
122
|
+
|---------|-----|------------|-------------|
|
|
123
|
+
| List cluster availability | `wxcli video-mesh list-availability-clusters` | GET /videoMesh/clusters/availability | Availability for all clusters in the org |
|
|
124
|
+
| Show cluster availability | `wxcli video-mesh show-availability-clusters --cluster-id ID` | GET /videoMesh/clusters/availability/{clusterId} | Availability for a single cluster |
|
|
125
|
+
| List node availability | `wxcli video-mesh list-availability-nodes` | GET /videoMesh/nodes/availability | Availability for all nodes in the org |
|
|
126
|
+
| Show node availability | `wxcli video-mesh show-availability-nodes --node-id ID` | GET /videoMesh/nodes/availability/{nodeId} | Availability for a single node |
|
|
127
|
+
|
|
128
|
+
### Key Parameters (shared across availability commands)
|
|
129
|
+
|
|
130
|
+
| Option | Description |
|
|
131
|
+
|--------|-------------|
|
|
132
|
+
| `--from DATETIME` | Start of time range (ISO 8601). Required for analytics queries. |
|
|
133
|
+
| `--to DATETIME` | End of time range (ISO 8601). Required for analytics queries. |
|
|
134
|
+
| `--org-id ORG_ID` | Organization ID (auto-injected from config) |
|
|
135
|
+
| `--output table\|json` | Output format (default: table) |
|
|
136
|
+
|
|
137
|
+
### Raw HTTP
|
|
138
|
+
|
|
139
|
+
```python
|
|
140
|
+
BASE = "https://webexapis.com/v1"
|
|
141
|
+
|
|
142
|
+
# List cluster availability over a time range
|
|
143
|
+
params = {
|
|
144
|
+
"orgId": org_id,
|
|
145
|
+
"from": "2026-03-01T00:00:00Z",
|
|
146
|
+
"to": "2026-03-28T00:00:00Z"
|
|
147
|
+
}
|
|
148
|
+
resp = requests.get(f"{BASE}/videoMesh/clusters/availability", headers=headers, params=params)
|
|
149
|
+
data = resp.json().get("items", [])
|
|
150
|
+
# Each item contains: orgId, from, to, items[{clusterName, clusterId, availabilitySegments[...]}]
|
|
151
|
+
|
|
152
|
+
# Get availability for a single node
|
|
153
|
+
resp = requests.get(f"{BASE}/videoMesh/nodes/availability/{node_id}", headers=headers, params=params)
|
|
154
|
+
node_avail = resp.json()
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
## 4. Video Mesh: Utilization and Overflow
|
|
160
|
+
|
|
161
|
+
Monitor resource utilization across clusters and track when calls overflow to the cloud.
|
|
162
|
+
|
|
163
|
+
### Commands
|
|
164
|
+
|
|
165
|
+
| Command | CLI | HTTP Method | What It Does |
|
|
166
|
+
|---------|-----|------------|-------------|
|
|
167
|
+
| List utilization | `wxcli video-mesh list-utilization-video-mesh` | GET /videoMesh/utilization | Utilization for all clusters in the org |
|
|
168
|
+
| Cluster utilization | `wxcli video-mesh list-utilization-clusters` | GET /videoMesh/clusters/utilization | Detailed utilization for specific cluster |
|
|
169
|
+
| Cloud overflow | `wxcli video-mesh list-cloud-overflow` | GET /videoMesh/cloudOverflow | Overflow to cloud details |
|
|
170
|
+
|
|
171
|
+
### Key Parameters (shared across utilization and overflow commands)
|
|
172
|
+
|
|
173
|
+
| Option | Description |
|
|
174
|
+
|--------|-------------|
|
|
175
|
+
| `--from DATETIME` | Start of time range (ISO 8601). Required. |
|
|
176
|
+
| `--to DATETIME` | End of time range (ISO 8601). Required. |
|
|
177
|
+
| `--org-id ORG_ID` | Organization ID (auto-injected from config) |
|
|
178
|
+
| `--output table\|json` | Output format (default: table) |
|
|
179
|
+
|
|
180
|
+
#### `list-utilization-clusters` (additional)
|
|
181
|
+
|
|
182
|
+
| Option | Description |
|
|
183
|
+
|--------|-------------|
|
|
184
|
+
| `--cluster-id ID` | The unique Video Mesh Cluster ID |
|
|
185
|
+
|
|
186
|
+
### Raw HTTP
|
|
187
|
+
|
|
188
|
+
```python
|
|
189
|
+
BASE = "https://webexapis.com/v1"
|
|
190
|
+
|
|
191
|
+
# List utilization across all clusters
|
|
192
|
+
params = {"orgId": org_id, "from": "2026-03-01T00:00:00Z", "to": "2026-03-28T00:00:00Z"}
|
|
193
|
+
resp = requests.get(f"{BASE}/videoMesh/utilization", headers=headers, params=params)
|
|
194
|
+
utilization = resp.json().get("items", [])
|
|
195
|
+
# Response contains: timestamp, clusters[{utilizationMetrics: {avgCpu, activeCalls, activePrivateCalls, ...}}]
|
|
196
|
+
|
|
197
|
+
# Cloud overflow details
|
|
198
|
+
resp = requests.get(f"{BASE}/videoMesh/cloudOverflow", headers=headers, params=params)
|
|
199
|
+
overflow = resp.json().get("items", [])
|
|
200
|
+
# Response contains: timestamp, overflowDetails[{overflowReason, overflowCount, possibleRemediation}]
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
---
|
|
204
|
+
|
|
205
|
+
## 5. Video Mesh: Call Redirects and Client Distribution
|
|
206
|
+
|
|
207
|
+
Track call redirect patterns across clusters and analyze client type distribution.
|
|
208
|
+
|
|
209
|
+
### Commands
|
|
210
|
+
|
|
211
|
+
| Command | CLI | HTTP Method | What It Does |
|
|
212
|
+
|---------|-----|------------|-------------|
|
|
213
|
+
| List call redirects | `wxcli video-mesh list-call-redirects-video-mesh` | GET /videoMesh/callRedirects | Redirect details for all clusters |
|
|
214
|
+
| Cluster call redirects | `wxcli video-mesh list-call-redirects-clusters` | GET /videoMesh/clusters/callRedirects | Redirect details for a specific cluster |
|
|
215
|
+
| Client type distribution | `wxcli video-mesh list` | GET /videoMesh/clientTypeDistribution | Client types across all clusters |
|
|
216
|
+
| Cluster client distribution | `wxcli video-mesh list-clusters-client-type-distribution` | GET /videoMesh/clientTypeDistribution/clusters | Client types for a specific cluster |
|
|
217
|
+
|
|
218
|
+
### Key Parameters (shared across these commands)
|
|
219
|
+
|
|
220
|
+
| Option | Description |
|
|
221
|
+
|--------|-------------|
|
|
222
|
+
| `--from DATETIME` | Start of time range (ISO 8601). Required. |
|
|
223
|
+
| `--to DATETIME` | End of time range (ISO 8601). Required. |
|
|
224
|
+
| `--org-id ORG_ID` | Organization ID (auto-injected from config) |
|
|
225
|
+
| `--output table\|json` | Output format (default: table) |
|
|
226
|
+
|
|
227
|
+
#### Cluster-specific commands (additional)
|
|
228
|
+
|
|
229
|
+
| Option | Description |
|
|
230
|
+
|--------|-------------|
|
|
231
|
+
| `--cluster-id ID` | The unique Video Mesh Cluster ID |
|
|
232
|
+
|
|
233
|
+
### Raw HTTP
|
|
234
|
+
|
|
235
|
+
```python
|
|
236
|
+
BASE = "https://webexapis.com/v1"
|
|
237
|
+
|
|
238
|
+
# List call redirects across all clusters
|
|
239
|
+
params = {"orgId": org_id, "from": "2026-03-01T00:00:00Z", "to": "2026-03-28T00:00:00Z"}
|
|
240
|
+
resp = requests.get(f"{BASE}/videoMesh/callRedirects", headers=headers, params=params)
|
|
241
|
+
redirects = resp.json().get("items", [])
|
|
242
|
+
|
|
243
|
+
# Get client type distribution for a specific cluster
|
|
244
|
+
params["clusterId"] = cluster_id
|
|
245
|
+
resp = requests.get(f"{BASE}/videoMesh/clientTypeDistribution/clusters", headers=headers, params=params)
|
|
246
|
+
distribution = resp.json().get("items", [])
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
---
|
|
250
|
+
|
|
251
|
+
## 6. Video Mesh: Test Results
|
|
252
|
+
|
|
253
|
+
Periodic and on-demand test results for network connectivity, reachability, and media health monitoring across clusters and nodes. Test results are available at three levels: org-wide, per-cluster, and per-node.
|
|
254
|
+
|
|
255
|
+
### Commands
|
|
256
|
+
|
|
257
|
+
**Network Tests:**
|
|
258
|
+
|
|
259
|
+
| Command | CLI | HTTP Method | What It Does |
|
|
260
|
+
|---------|-----|------------|-------------|
|
|
261
|
+
| List network tests | `wxcli video-mesh list-network-test` | GET /videoMesh/testResults/networkTest | Network test results for all clusters |
|
|
262
|
+
| Cluster network tests | `wxcli video-mesh list-clusters-network-test` | GET /videoMesh/testResults/networkTest/clusters | Network test results for a cluster |
|
|
263
|
+
| Node network tests | `wxcli video-mesh list-nodes-network-test` | GET /videoMesh/testResults/networkTest/nodes | Network test results for a node |
|
|
264
|
+
|
|
265
|
+
**Reachability Tests (V2):**
|
|
266
|
+
|
|
267
|
+
| Command | CLI | HTTP Method | What It Does |
|
|
268
|
+
|---------|-----|------------|-------------|
|
|
269
|
+
| List reachability tests | `wxcli video-mesh list-reachability-test` | GET /videoMesh/testResults/reachabilityTest | Reachability results for all clusters |
|
|
270
|
+
| Cluster reachability tests | `wxcli video-mesh list-clusters-reachability-test` | GET /videoMesh/testResults/reachabilityTest/clusters | Reachability results for a cluster |
|
|
271
|
+
| Node reachability tests | `wxcli video-mesh list-nodes-reachability-test` | GET /videoMesh/testResults/reachabilityTest/nodes | Reachability results for a node |
|
|
272
|
+
|
|
273
|
+
**Media Health Monitor Tests (V2):**
|
|
274
|
+
|
|
275
|
+
| Command | CLI | HTTP Method | What It Does |
|
|
276
|
+
|---------|-----|------------|-------------|
|
|
277
|
+
| List media health tests | `wxcli video-mesh list-media-health-monitor-test` | GET /videoMesh/testResults/mediaHealthMonitorTest | Media health results for all clusters |
|
|
278
|
+
| Cluster media health tests | `wxcli video-mesh list-clusters-media-health-monitor-test` | GET /videoMesh/testResults/mediaHealthMonitorTest/clusters | Media health results for a cluster |
|
|
279
|
+
| Node media health tests | `wxcli video-mesh list-nodes-media-health-monitor-test` | GET /videoMesh/testResults/mediaHealthMonitorTest/nodes | Media health results for a node |
|
|
280
|
+
|
|
281
|
+
### Key Parameters
|
|
282
|
+
|
|
283
|
+
#### Org-wide test commands
|
|
284
|
+
|
|
285
|
+
| Option | Description |
|
|
286
|
+
|--------|-------------|
|
|
287
|
+
| `--org-id ORG_ID` | Organization ID (auto-injected from config) |
|
|
288
|
+
| `--output table\|json` | Output format (default: table) |
|
|
289
|
+
|
|
290
|
+
#### Cluster-level test commands (additional)
|
|
291
|
+
|
|
292
|
+
| Option | Description |
|
|
293
|
+
|--------|-------------|
|
|
294
|
+
| `--cluster-id ID` | The unique Video Mesh Cluster ID |
|
|
295
|
+
|
|
296
|
+
#### Node-level test commands (additional)
|
|
297
|
+
|
|
298
|
+
| Option | Description |
|
|
299
|
+
|--------|-------------|
|
|
300
|
+
| `--node-id ID` | The unique Video Mesh Node ID |
|
|
301
|
+
|
|
302
|
+
### Raw HTTP
|
|
303
|
+
|
|
304
|
+
```python
|
|
305
|
+
BASE = "https://webexapis.com/v1"
|
|
306
|
+
|
|
307
|
+
# List network test results for the org
|
|
308
|
+
resp = requests.get(f"{BASE}/videoMesh/testResults/networkTest", headers=headers,
|
|
309
|
+
params={"orgId": org_id})
|
|
310
|
+
results = resp.json().get("items", [])
|
|
311
|
+
|
|
312
|
+
# Get reachability test results for a specific cluster
|
|
313
|
+
resp = requests.get(f"{BASE}/videoMesh/testResults/reachabilityTest/clusters", headers=headers,
|
|
314
|
+
params={"orgId": org_id, "clusterId": cluster_id})
|
|
315
|
+
reach_results = resp.json().get("items", [])
|
|
316
|
+
|
|
317
|
+
# Get media health test results for a specific node
|
|
318
|
+
resp = requests.get(f"{BASE}/videoMesh/testResults/mediaHealthMonitorTest/nodes", headers=headers,
|
|
319
|
+
params={"orgId": org_id, "nodeId": node_id})
|
|
320
|
+
health_results = resp.json().get("items", [])
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
### V2 Changes (Reachability and Media Health)
|
|
324
|
+
|
|
325
|
+
The V2 endpoints for reachability and media health monitoring include two improvements over V1:
|
|
326
|
+
1. On-demand test results are returned alongside periodic test results.
|
|
327
|
+
2. The destination IP address of the destination cluster is now included in the JSON response.
|
|
328
|
+
|
|
329
|
+
---
|
|
330
|
+
|
|
331
|
+
## 7. Video Mesh: On-Demand Tests
|
|
332
|
+
|
|
333
|
+
Trigger diagnostic tests on specific nodes or clusters and retrieve results. On-demand tests are asynchronous -- you trigger them, then poll for status and results.
|
|
334
|
+
|
|
335
|
+
### Commands
|
|
336
|
+
|
|
337
|
+
| Command | CLI | HTTP Method | What It Does |
|
|
338
|
+
|---------|-----|------------|-------------|
|
|
339
|
+
| Trigger node test | `wxcli video-mesh create --node-id ID` | POST /videoMesh/triggerTest/nodes/{nodeId} | Trigger on-demand test for a node |
|
|
340
|
+
| Trigger cluster test | `wxcli video-mesh create-clusters --cluster-id ID` | POST /videoMesh/triggerTest/clusters/{clusterId} | Trigger on-demand test for a cluster |
|
|
341
|
+
| Get test results | `wxcli video-mesh list-test-results` | GET /videoMesh/testResults | Get triggered test results |
|
|
342
|
+
| Get test status | `wxcli video-mesh list-test-status` | GET /videoMesh/testStatus | Get triggered test status |
|
|
343
|
+
|
|
344
|
+
### Key Parameters
|
|
345
|
+
|
|
346
|
+
#### `create` (trigger node test)
|
|
347
|
+
|
|
348
|
+
| Option | Required | Description |
|
|
349
|
+
|--------|:--------:|-------------|
|
|
350
|
+
| `--node-id ID` | Yes | Unique ID of the Video Mesh node to test |
|
|
351
|
+
| `--org-id ORG_ID` | No | Organization ID (auto-injected from config) |
|
|
352
|
+
|
|
353
|
+
#### `create-clusters` (trigger cluster test)
|
|
354
|
+
|
|
355
|
+
| Option | Required | Description |
|
|
356
|
+
|--------|:--------:|-------------|
|
|
357
|
+
| `--cluster-id ID` | Yes | Unique ID of the Video Mesh cluster to test |
|
|
358
|
+
| `--org-id ORG_ID` | No | Organization ID (auto-injected from config) |
|
|
359
|
+
|
|
360
|
+
#### `list-test-results` and `list-test-status`
|
|
361
|
+
|
|
362
|
+
| Option | Description |
|
|
363
|
+
|--------|-------------|
|
|
364
|
+
| `--org-id ORG_ID` | Organization ID (auto-injected from config) |
|
|
365
|
+
| `--output table\|json` | Output format (default: table) |
|
|
366
|
+
|
|
367
|
+
### Workflow: Run an On-Demand Test
|
|
368
|
+
|
|
369
|
+
```bash
|
|
370
|
+
# 1. Trigger an on-demand test for a node
|
|
371
|
+
wxcli video-mesh create --node-id NODE_ID
|
|
372
|
+
|
|
373
|
+
# 2. Poll test status until complete
|
|
374
|
+
wxcli video-mesh list-test-status --output json
|
|
375
|
+
|
|
376
|
+
# 3. Get the results once complete
|
|
377
|
+
wxcli video-mesh list-test-results --output json
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
### Raw HTTP
|
|
381
|
+
|
|
382
|
+
```python
|
|
383
|
+
BASE = "https://webexapis.com/v1"
|
|
384
|
+
|
|
385
|
+
# Trigger on-demand test for a node
|
|
386
|
+
resp = requests.post(f"{BASE}/videoMesh/triggerTest/nodes/{node_id}", headers=headers,
|
|
387
|
+
params={"orgId": org_id})
|
|
388
|
+
|
|
389
|
+
# Trigger on-demand test for a cluster
|
|
390
|
+
resp = requests.post(f"{BASE}/videoMesh/triggerTest/clusters/{cluster_id}", headers=headers,
|
|
391
|
+
params={"orgId": org_id})
|
|
392
|
+
|
|
393
|
+
# Check test status
|
|
394
|
+
resp = requests.get(f"{BASE}/videoMesh/testStatus", headers=headers, params={"orgId": org_id})
|
|
395
|
+
status = resp.json()
|
|
396
|
+
|
|
397
|
+
# Get test results
|
|
398
|
+
resp = requests.get(f"{BASE}/videoMesh/testResults", headers=headers, params={"orgId": org_id})
|
|
399
|
+
results = resp.json()
|
|
400
|
+
```
|
|
401
|
+
|
|
402
|
+
---
|
|
403
|
+
|
|
404
|
+
## 8. Video Mesh: Event Thresholds
|
|
405
|
+
|
|
406
|
+
Configure alerting thresholds for Video Mesh events. These thresholds determine when notifications are triggered for cluster and node health events.
|
|
407
|
+
|
|
408
|
+
### Commands
|
|
409
|
+
|
|
410
|
+
| Command | CLI | HTTP Method | What It Does |
|
|
411
|
+
|---------|-----|------------|-------------|
|
|
412
|
+
| List thresholds | `wxcli video-mesh list-event-thresholds` | GET /videoMesh/eventThresholds | List all event threshold configurations |
|
|
413
|
+
| Show threshold | `wxcli video-mesh show-event-thresholds --event-threshold-id ID` | GET /videoMesh/eventThresholds/{eventThresholdId} | Get a specific threshold config |
|
|
414
|
+
| Update thresholds | `wxcli video-mesh update --json-body JSON` | PATCH /videoMesh/eventThresholds | Update threshold values (partial update) |
|
|
415
|
+
| Reset thresholds | `wxcli video-mesh create-reset` | POST /videoMesh/eventThresholds/reset | Reset all thresholds to defaults |
|
|
416
|
+
|
|
417
|
+
### Key Parameters
|
|
418
|
+
|
|
419
|
+
#### `list-event-thresholds`
|
|
420
|
+
|
|
421
|
+
| Option | Description |
|
|
422
|
+
|--------|-------------|
|
|
423
|
+
| `--org-id ORG_ID` | Organization ID (auto-injected from config) |
|
|
424
|
+
| `--output table\|json` | Output format (default: table) |
|
|
425
|
+
|
|
426
|
+
#### `show-event-thresholds`
|
|
427
|
+
|
|
428
|
+
| Option | Required | Description |
|
|
429
|
+
|--------|:--------:|-------------|
|
|
430
|
+
| `--event-threshold-id ID` | Yes | The unique event threshold ID |
|
|
431
|
+
| `--org-id ORG_ID` | No | Organization ID (auto-injected from config) |
|
|
432
|
+
|
|
433
|
+
#### `update` (PATCH)
|
|
434
|
+
|
|
435
|
+
This command requires `--json-body` because the request body contains nested objects:
|
|
436
|
+
|
|
437
|
+
```bash
|
|
438
|
+
wxcli video-mesh update --json-body '{
|
|
439
|
+
"eventThresholds": [
|
|
440
|
+
{
|
|
441
|
+
"eventThresholdId": "THRESHOLD_ID_1",
|
|
442
|
+
"thresholdConfig": {
|
|
443
|
+
"minThreshold": 80
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
]
|
|
447
|
+
}'
|
|
448
|
+
```
|
|
449
|
+
|
|
450
|
+
### Raw HTTP
|
|
451
|
+
|
|
452
|
+
```python
|
|
453
|
+
BASE = "https://webexapis.com/v1"
|
|
454
|
+
|
|
455
|
+
# List all event thresholds
|
|
456
|
+
resp = requests.get(f"{BASE}/videoMesh/eventThresholds", headers=headers, params={"orgId": org_id})
|
|
457
|
+
thresholds = resp.json()
|
|
458
|
+
# Response: {orgId, eventThresholds: [{entityId, eventScope, eventName, eventThresholdId, thresholdConfig: {minThreshold, defaultMinThreshold}}]}
|
|
459
|
+
|
|
460
|
+
# Update a threshold (PATCH - partial update)
|
|
461
|
+
body = {
|
|
462
|
+
"eventThresholds": [
|
|
463
|
+
{
|
|
464
|
+
"eventThresholdId": threshold_id,
|
|
465
|
+
"thresholdConfig": {"minThreshold": 80}
|
|
466
|
+
}
|
|
467
|
+
]
|
|
468
|
+
}
|
|
469
|
+
resp = requests.patch(f"{BASE}/videoMesh/eventThresholds", headers=headers, json=body,
|
|
470
|
+
params={"orgId": org_id})
|
|
471
|
+
result = resp.json()
|
|
472
|
+
# Response includes failedEventThresholdIds array for any that failed to update
|
|
473
|
+
|
|
474
|
+
# Reset all thresholds to defaults
|
|
475
|
+
resp = requests.post(f"{BASE}/videoMesh/eventThresholds/reset", headers=headers,
|
|
476
|
+
params={"orgId": org_id})
|
|
477
|
+
```
|
|
478
|
+
|
|
479
|
+
### Threshold Response Fields
|
|
480
|
+
|
|
481
|
+
| Field | Description |
|
|
482
|
+
|-------|-------------|
|
|
483
|
+
| `eventThresholdId` | Unique identifier for the threshold |
|
|
484
|
+
| `entityId` | The entity (cluster/node) this threshold applies to |
|
|
485
|
+
| `eventScope` | Scope of the event (e.g., cluster-level, node-level) |
|
|
486
|
+
| `eventName` | Name of the monitored event |
|
|
487
|
+
| `thresholdConfig.minThreshold` | Current threshold value |
|
|
488
|
+
| `thresholdConfig.defaultMinThreshold` | Factory default threshold value |
|
|
489
|
+
|
|
490
|
+
---
|
|
491
|
+
|
|
492
|
+
## 9. Meeting Participants
|
|
493
|
+
|
|
494
|
+
**CLI group:** `meeting-participants`
|
|
495
|
+
**API base:** `https://webexapis.com/v1/meetingParticipants`
|
|
496
|
+
|
|
497
|
+
Manage participants during a live meeting or query historical participant data from ended meetings. This API supports listing who joined, admitting from the lobby, muting/unmuting, expelling, and calling out to SIP devices to add them to the meeting.
|
|
498
|
+
|
|
499
|
+
### Commands
|
|
500
|
+
|
|
501
|
+
| Command | CLI | HTTP Method | What It Does |
|
|
502
|
+
|---------|-----|------------|-------------|
|
|
503
|
+
| List participants | `wxcli meeting-participants list --meeting-id ID` | GET /meetingParticipants | List participants for a meeting |
|
|
504
|
+
| Show participant | `wxcli meeting-participants show --participant-id ID` | GET /meetingParticipants/{participantId} | Get participant details |
|
|
505
|
+
| Update participant | `wxcli meeting-participants update --participant-id ID` | PUT /meetingParticipants/{participantId} | Mute, unmute, admit, or expel a participant |
|
|
506
|
+
| Query by email | `wxcli meeting-participants create --json-body JSON` | POST /meetingParticipants/query | Query participants by email addresses |
|
|
507
|
+
| Admit participants | `wxcli meeting-participants create-admit --json-body JSON` | POST /meetingParticipants/admit | Admit participants from the lobby |
|
|
508
|
+
| Call out SIP | `wxcli meeting-participants create-callout --json-body JSON` | POST /meetingParticipants/callout | Dial a SIP URI to add to meeting |
|
|
509
|
+
| Cancel callout | `wxcli meeting-participants create-cancel-callout --json-body JSON` | POST /meetingParticipants/cancelCallout | Cancel a pending SIP callout |
|
|
510
|
+
|
|
511
|
+
### Key Parameters
|
|
512
|
+
|
|
513
|
+
#### `list`
|
|
514
|
+
|
|
515
|
+
| Option | Description |
|
|
516
|
+
|--------|-------------|
|
|
517
|
+
| `--meeting-id ID` | The unique meeting identifier. Personal room meeting IDs are not supported. |
|
|
518
|
+
| `--breakout-session-id ID` | Filter to participants who joined a specific breakout session (ended meetings only) |
|
|
519
|
+
| `--meeting-start-time-from DATETIME` | Filter meetings starting after this time (ISO 8601, exclusive). Default: 1 month before `meetingStartTimeTo`. |
|
|
520
|
+
| `--meeting-start-time-to DATETIME` | Filter meetings starting before this time (ISO 8601, exclusive) |
|
|
521
|
+
| `--host-email EMAIL` | Admin-only: specify a host's email to list their meeting's participants |
|
|
522
|
+
| `--join-time-from DATETIME` | Participants who joined after this time (ISO 8601, inclusive). Default: 7 days before `joinTimeTo`. |
|
|
523
|
+
| `--join-time-to DATETIME` | Participants who joined before this time (ISO 8601, exclusive). Interval between `joinTimeFrom` and `joinTimeTo` must be within 90 days. |
|
|
524
|
+
| `--max N` | Max participants per page, up to 100 |
|
|
525
|
+
| `--output table\|json` | Output format (default: table) |
|
|
526
|
+
|
|
527
|
+
#### `update` (PUT)
|
|
528
|
+
|
|
529
|
+
| Option | Description |
|
|
530
|
+
|--------|-------------|
|
|
531
|
+
| `--participant-id ID` | The participant to update (path parameter) |
|
|
532
|
+
| `--muted true\|false` | Mute or unmute the participant |
|
|
533
|
+
| `--admit true\|false` | Admit the participant from the lobby |
|
|
534
|
+
| `--expel true\|false` | Remove the participant from the meeting |
|
|
535
|
+
|
|
536
|
+
#### `create` (Query by Email -- POST)
|
|
537
|
+
|
|
538
|
+
This command uses `--json-body` because the request body contains an array of emails:
|
|
539
|
+
|
|
540
|
+
```bash
|
|
541
|
+
wxcli meeting-participants create --meeting-id MEETING_ID --json-body '{
|
|
542
|
+
"emails": ["user1@example.com", "user2@example.com"],
|
|
543
|
+
"joinTimeFrom": "2026-03-01T00:00:00Z",
|
|
544
|
+
"joinTimeTo": "2026-03-28T00:00:00Z"
|
|
545
|
+
}'
|
|
546
|
+
```
|
|
547
|
+
|
|
548
|
+
#### `create-admit` (Admit from Lobby -- POST)
|
|
549
|
+
|
|
550
|
+
Admits up to 100 participants at once. Each `participantId` must share the same meeting prefix as `meetingId`.
|
|
551
|
+
|
|
552
|
+
```bash
|
|
553
|
+
wxcli meeting-participants create-admit --json-body '{
|
|
554
|
+
"items": [
|
|
555
|
+
{"participantId": "PARTICIPANT_ID_1"},
|
|
556
|
+
{"participantId": "PARTICIPANT_ID_2", "breakoutSessionId": "SESSION_ID"}
|
|
557
|
+
]
|
|
558
|
+
}'
|
|
559
|
+
```
|
|
560
|
+
|
|
561
|
+
#### `create-callout` (SIP Callout -- POST)
|
|
562
|
+
|
|
563
|
+
Dials a SIP address or phone number to add them to the meeting. Useful for bringing room devices into a meeting.
|
|
564
|
+
|
|
565
|
+
```bash
|
|
566
|
+
wxcli meeting-participants create-callout --json-body '{
|
|
567
|
+
"meetingId": "MEETING_ID",
|
|
568
|
+
"address": "roomdevice@example.com",
|
|
569
|
+
"addressType": "sipAddress",
|
|
570
|
+
"displayName": "Conference Room A"
|
|
571
|
+
}'
|
|
572
|
+
```
|
|
573
|
+
|
|
574
|
+
| Body Field | Description |
|
|
575
|
+
|------------|-------------|
|
|
576
|
+
| `meetingId` | The meeting to add the participant to |
|
|
577
|
+
| `meetingNumber` | Alternative: use meeting number instead of ID |
|
|
578
|
+
| `address` | SIP URI or phone number to dial |
|
|
579
|
+
| `addressType` | `sipAddress` (default) |
|
|
580
|
+
| `displayName` | Display name for the called participant |
|
|
581
|
+
| `invitationCorrelationId` | Optional correlation ID for tracking |
|
|
582
|
+
|
|
583
|
+
#### `create-cancel-callout` (Cancel Pending Callout -- POST)
|
|
584
|
+
|
|
585
|
+
```bash
|
|
586
|
+
wxcli meeting-participants create-cancel-callout --json-body '{
|
|
587
|
+
"participantId": "PARTICIPANT_ID"
|
|
588
|
+
}'
|
|
589
|
+
```
|
|
590
|
+
|
|
591
|
+
### Participant Response Fields
|
|
592
|
+
|
|
593
|
+
| Field | Description |
|
|
594
|
+
|-------|-------------|
|
|
595
|
+
| `id` | Unique participant identifier |
|
|
596
|
+
| `meetingId` | Meeting the participant is in |
|
|
597
|
+
| `hostEmail` | Email of the meeting host |
|
|
598
|
+
| `displayName` | Participant display name |
|
|
599
|
+
| `email` | Participant email |
|
|
600
|
+
| `orgId` | Participant's organization ID |
|
|
601
|
+
| `state` | Current state: `lobby`, `joined`, `end` |
|
|
602
|
+
| `muted` | Whether participant is muted |
|
|
603
|
+
| `host` | Whether participant is the host |
|
|
604
|
+
| `coHost` | Whether participant is a co-host |
|
|
605
|
+
| `invitee` | Whether participant was an invitee |
|
|
606
|
+
| `video` | Video state: `on`, `off` |
|
|
607
|
+
| `devices` | Array of devices used: `{joinedTime, leftTime, deviceType, audioType, callType, phoneNumber, correlationId, durationSecond}` |
|
|
608
|
+
|
|
609
|
+
### Raw HTTP
|
|
610
|
+
|
|
611
|
+
```python
|
|
612
|
+
BASE = "https://webexapis.com/v1"
|
|
613
|
+
|
|
614
|
+
# List participants for a meeting
|
|
615
|
+
params = {"meetingId": meeting_id, "max": 50}
|
|
616
|
+
resp = requests.get(f"{BASE}/meetingParticipants", headers=headers, params=params)
|
|
617
|
+
participants = resp.json().get("items", [])
|
|
618
|
+
|
|
619
|
+
# Get a specific participant
|
|
620
|
+
resp = requests.get(f"{BASE}/meetingParticipants/{participant_id}", headers=headers)
|
|
621
|
+
participant = resp.json()
|
|
622
|
+
|
|
623
|
+
# Mute a participant
|
|
624
|
+
body = {"muted": True}
|
|
625
|
+
resp = requests.put(f"{BASE}/meetingParticipants/{participant_id}", headers=headers, json=body)
|
|
626
|
+
|
|
627
|
+
# Expel a participant
|
|
628
|
+
body = {"expel": True}
|
|
629
|
+
resp = requests.put(f"{BASE}/meetingParticipants/{participant_id}", headers=headers, json=body)
|
|
630
|
+
|
|
631
|
+
# Admit participants from lobby
|
|
632
|
+
body = {"items": [{"participantId": p_id} for p_id in participant_ids]}
|
|
633
|
+
resp = requests.post(f"{BASE}/meetingParticipants/admit", headers=headers, json=body)
|
|
634
|
+
# Returns 204 No Content on success
|
|
635
|
+
|
|
636
|
+
# Call out to a SIP device
|
|
637
|
+
body = {
|
|
638
|
+
"meetingId": meeting_id,
|
|
639
|
+
"address": "roomdevice@example.com",
|
|
640
|
+
"addressType": "sipAddress",
|
|
641
|
+
"displayName": "Conference Room A"
|
|
642
|
+
}
|
|
643
|
+
resp = requests.post(f"{BASE}/meetingParticipants/callout", headers=headers, json=body)
|
|
644
|
+
# Response: {participantId, address, addressType, state: "pending", meetingId, ...}
|
|
645
|
+
|
|
646
|
+
# Cancel a pending callout
|
|
647
|
+
body = {"participantId": participant_id}
|
|
648
|
+
resp = requests.post(f"{BASE}/meetingParticipants/cancelCallout", headers=headers, json=body)
|
|
649
|
+
# Returns 204 No Content on success
|
|
650
|
+
```
|
|
651
|
+
|
|
652
|
+
---
|
|
653
|
+
|
|
654
|
+
## 10. Meeting Invitees
|
|
655
|
+
|
|
656
|
+
**CLI group:** `meeting-invitees`
|
|
657
|
+
**API base:** `https://webexapis.com/v1/meetingInvitees`
|
|
658
|
+
|
|
659
|
+
Manage who is invited to a meeting before it starts. Invitees are the pre-meeting invitation list -- distinct from participants, who are the people who actually join the meeting. Invitees can be regular attendees, co-hosts, or panelists (for webinars).
|
|
660
|
+
|
|
661
|
+
### Commands
|
|
662
|
+
|
|
663
|
+
| Command | CLI | HTTP Method | What It Does |
|
|
664
|
+
|---------|-----|------------|-------------|
|
|
665
|
+
| List invitees | `wxcli meeting-invitees list --meeting-id ID` | GET /meetingInvitees | List invitees for a meeting |
|
|
666
|
+
| Create invitee | `wxcli meeting-invitees create --meeting-id ID --email user@example.com` | POST /meetingInvitees | Invite a person to a meeting |
|
|
667
|
+
| Bulk insert | `wxcli meeting-invitees create-bulk-insert --json-body JSON` | POST /meetingInvitees/bulkInsert | Invite multiple people at once |
|
|
668
|
+
| Show invitee | `wxcli meeting-invitees show --meeting-invitee-id ID` | GET /meetingInvitees/{meetingInviteeId} | Get invitee details |
|
|
669
|
+
| Update invitee | `wxcli meeting-invitees update --meeting-invitee-id ID` | PUT /meetingInvitees/{meetingInviteeId} | Update invitee role (co-host, panelist) |
|
|
670
|
+
| Delete invitee | `wxcli meeting-invitees delete --meeting-invitee-id ID --force` | DELETE /meetingInvitees/{meetingInviteeId} | Remove an invitee |
|
|
671
|
+
|
|
672
|
+
### Key Parameters
|
|
673
|
+
|
|
674
|
+
#### `list`
|
|
675
|
+
|
|
676
|
+
| Option | Description |
|
|
677
|
+
|--------|-------------|
|
|
678
|
+
| `--meeting-id ID` | The meeting to list invitees for. Supports meeting series, scheduled meetings, and ended/ongoing instances. Personal room meeting IDs are not supported. |
|
|
679
|
+
| `--host-email EMAIL` | Admin-only: specify a host's email to list their meeting's invitees |
|
|
680
|
+
| `--panelist true\|false\|null` | Webinar filter: `true` = panelists only, `false` = attendees only, `null` (default) = both |
|
|
681
|
+
| `--max N` | Max invitees per page, up to 100 |
|
|
682
|
+
| `--output table\|json` | Output format (default: table) |
|
|
683
|
+
|
|
684
|
+
#### `create`
|
|
685
|
+
|
|
686
|
+
| Option | Required | Description |
|
|
687
|
+
|--------|:--------:|-------------|
|
|
688
|
+
| `--meeting-id ID` | Yes | The meeting to invite the person to |
|
|
689
|
+
| `--email EMAIL` | Yes | Email address of the invitee |
|
|
690
|
+
| `--display-name TEXT` | No | Display name for the invitee |
|
|
691
|
+
| `--co-host true\|false` | No | Grant co-host role |
|
|
692
|
+
| `--panelist true\|false` | No | Set as panelist (webinars only) |
|
|
693
|
+
| `--send-email true\|false` | No | Send invitation email (default: `true`) |
|
|
694
|
+
| `--host-email EMAIL` | No | Admin-only: specify host email |
|
|
695
|
+
|
|
696
|
+
#### `create-bulk-insert`
|
|
697
|
+
|
|
698
|
+
Requires `--json-body` because the request body contains an array of invitees:
|
|
699
|
+
|
|
700
|
+
```bash
|
|
701
|
+
wxcli meeting-invitees create-bulk-insert --json-body '{
|
|
702
|
+
"meetingId": "MEETING_ID",
|
|
703
|
+
"hostEmail": "host@example.com",
|
|
704
|
+
"items": [
|
|
705
|
+
{"email": "user1@example.com", "displayName": "User One", "coHost": false},
|
|
706
|
+
{"email": "user2@example.com", "displayName": "User Two", "coHost": true, "sendEmail": false},
|
|
707
|
+
{"email": "panelist@example.com", "panelist": true}
|
|
708
|
+
]
|
|
709
|
+
}'
|
|
710
|
+
```
|
|
711
|
+
|
|
712
|
+
#### `update`
|
|
713
|
+
|
|
714
|
+
| Option | Description |
|
|
715
|
+
|--------|-------------|
|
|
716
|
+
| `--meeting-invitee-id ID` | The invitee to update (path parameter) |
|
|
717
|
+
| `--email EMAIL` | Updated email address |
|
|
718
|
+
| `--display-name TEXT` | Updated display name |
|
|
719
|
+
| `--co-host true\|false` | Grant or revoke co-host role |
|
|
720
|
+
| `--panelist true\|false` | Set or remove panelist role (webinars) |
|
|
721
|
+
| `--send-email true\|false` | Send update notification email |
|
|
722
|
+
| `--host-email EMAIL` | Admin-only: specify host email |
|
|
723
|
+
|
|
724
|
+
### Invitee Response Fields
|
|
725
|
+
|
|
726
|
+
| Field | Description |
|
|
727
|
+
|-------|-------------|
|
|
728
|
+
| `id` | Unique invitee identifier |
|
|
729
|
+
| `meetingId` | Meeting the invitee is associated with |
|
|
730
|
+
| `email` | Invitee email address |
|
|
731
|
+
| `displayName` | Invitee display name |
|
|
732
|
+
| `coHost` | Whether invitee is a co-host |
|
|
733
|
+
| `panelist` | Whether invitee is a panelist (webinars) |
|
|
734
|
+
|
|
735
|
+
### Raw HTTP
|
|
736
|
+
|
|
737
|
+
```python
|
|
738
|
+
BASE = "https://webexapis.com/v1"
|
|
739
|
+
|
|
740
|
+
# List invitees for a meeting
|
|
741
|
+
params = {"meetingId": meeting_id, "max": 100}
|
|
742
|
+
resp = requests.get(f"{BASE}/meetingInvitees", headers=headers, params=params)
|
|
743
|
+
invitees = resp.json().get("items", [])
|
|
744
|
+
# Each item: {id, meetingId, email, displayName, coHost, panelist}
|
|
745
|
+
|
|
746
|
+
# Invite a person
|
|
747
|
+
body = {
|
|
748
|
+
"meetingId": meeting_id,
|
|
749
|
+
"email": "user@example.com",
|
|
750
|
+
"displayName": "Jane Doe",
|
|
751
|
+
"coHost": False,
|
|
752
|
+
"sendEmail": True
|
|
753
|
+
}
|
|
754
|
+
resp = requests.post(f"{BASE}/meetingInvitees", headers=headers, json=body)
|
|
755
|
+
invitee_id = resp.json().get("id")
|
|
756
|
+
|
|
757
|
+
# Bulk invite multiple people
|
|
758
|
+
body = {
|
|
759
|
+
"meetingId": meeting_id,
|
|
760
|
+
"items": [
|
|
761
|
+
{"email": "user1@example.com", "displayName": "User One"},
|
|
762
|
+
{"email": "user2@example.com", "coHost": True, "sendEmail": False}
|
|
763
|
+
]
|
|
764
|
+
}
|
|
765
|
+
resp = requests.post(f"{BASE}/meetingInvitees/bulkInsert", headers=headers, json=body)
|
|
766
|
+
created = resp.json().get("items", [])
|
|
767
|
+
|
|
768
|
+
# Update invitee to co-host
|
|
769
|
+
body = {"email": "user@example.com", "coHost": True, "sendEmail": False}
|
|
770
|
+
resp = requests.put(f"{BASE}/meetingInvitees/{invitee_id}", headers=headers, json=body)
|
|
771
|
+
|
|
772
|
+
# Delete invitee
|
|
773
|
+
resp = requests.delete(f"{BASE}/meetingInvitees/{invitee_id}", headers=headers)
|
|
774
|
+
```
|
|
775
|
+
|
|
776
|
+
---
|
|
777
|
+
|
|
778
|
+
## 11. Raw HTTP Endpoints
|
|
779
|
+
|
|
780
|
+
All 43 endpoints across the 3 CLI groups documented in this reference.
|
|
781
|
+
|
|
782
|
+
### Video Mesh (30 endpoints)
|
|
783
|
+
|
|
784
|
+
| Endpoint | Method | CLI Command | Category |
|
|
785
|
+
|----------|--------|------------|----------|
|
|
786
|
+
| `/videoMesh/clusters` | GET | `video-mesh list-clusters-video-mesh` | Clusters |
|
|
787
|
+
| `/videoMesh/clusters/{clusterId}` | GET | `video-mesh show` | Clusters |
|
|
788
|
+
| `/videoMesh/clusters/availability` | GET | `video-mesh list-availability-clusters` | Availability |
|
|
789
|
+
| `/videoMesh/clusters/availability/{clusterId}` | GET | `video-mesh show-availability-clusters` | Availability |
|
|
790
|
+
| `/videoMesh/nodes/availability` | GET | `video-mesh list-availability-nodes` | Availability |
|
|
791
|
+
| `/videoMesh/nodes/availability/{nodeId}` | GET | `video-mesh show-availability-nodes` | Availability |
|
|
792
|
+
| `/videoMesh/utilization` | GET | `video-mesh list-utilization-video-mesh` | Utilization |
|
|
793
|
+
| `/videoMesh/clusters/utilization` | GET | `video-mesh list-utilization-clusters` | Utilization |
|
|
794
|
+
| `/videoMesh/cloudOverflow` | GET | `video-mesh list-cloud-overflow` | Overflow |
|
|
795
|
+
| `/videoMesh/callRedirects` | GET | `video-mesh list-call-redirects-video-mesh` | Redirects |
|
|
796
|
+
| `/videoMesh/clusters/callRedirects` | GET | `video-mesh list-call-redirects-clusters` | Redirects |
|
|
797
|
+
| `/videoMesh/clientTypeDistribution` | GET | `video-mesh list` | Client Distribution |
|
|
798
|
+
| `/videoMesh/clientTypeDistribution/clusters` | GET | `video-mesh list-clusters-client-type-distribution` | Client Distribution |
|
|
799
|
+
| `/videoMesh/testResults/networkTest` | GET | `video-mesh list-network-test` | Test Results |
|
|
800
|
+
| `/videoMesh/testResults/networkTest/clusters` | GET | `video-mesh list-clusters-network-test` | Test Results |
|
|
801
|
+
| `/videoMesh/testResults/networkTest/nodes` | GET | `video-mesh list-nodes-network-test` | Test Results |
|
|
802
|
+
| `/videoMesh/testResults/reachabilityTest` | GET | `video-mesh list-reachability-test` | Test Results |
|
|
803
|
+
| `/videoMesh/testResults/reachabilityTest/clusters` | GET | `video-mesh list-clusters-reachability-test` | Test Results |
|
|
804
|
+
| `/videoMesh/testResults/reachabilityTest/nodes` | GET | `video-mesh list-nodes-reachability-test` | Test Results |
|
|
805
|
+
| `/videoMesh/testResults/mediaHealthMonitorTest` | GET | `video-mesh list-media-health-monitor-test` | Test Results |
|
|
806
|
+
| `/videoMesh/testResults/mediaHealthMonitorTest/clusters` | GET | `video-mesh list-clusters-media-health-monitor-test` | Test Results |
|
|
807
|
+
| `/videoMesh/testResults/mediaHealthMonitorTest/nodes` | GET | `video-mesh list-nodes-media-health-monitor-test` | Test Results |
|
|
808
|
+
| `/videoMesh/triggerTest/nodes/{nodeId}` | POST | `video-mesh create` | On-Demand Tests |
|
|
809
|
+
| `/videoMesh/triggerTest/clusters/{clusterId}` | POST | `video-mesh create-clusters` | On-Demand Tests |
|
|
810
|
+
| `/videoMesh/testResults` | GET | `video-mesh list-test-results` | On-Demand Tests |
|
|
811
|
+
| `/videoMesh/testStatus` | GET | `video-mesh list-test-status` | On-Demand Tests |
|
|
812
|
+
| `/videoMesh/eventThresholds` | GET | `video-mesh list-event-thresholds` | Event Thresholds |
|
|
813
|
+
| `/videoMesh/eventThresholds/{eventThresholdId}` | GET | `video-mesh show-event-thresholds` | Event Thresholds |
|
|
814
|
+
| `/videoMesh/eventThresholds` | PATCH | `video-mesh update` | Event Thresholds |
|
|
815
|
+
| `/videoMesh/eventThresholds/reset` | POST | `video-mesh create-reset` | Event Thresholds |
|
|
816
|
+
|
|
817
|
+
### Meeting Participants (7 endpoints)
|
|
818
|
+
|
|
819
|
+
| Endpoint | Method | CLI Command |
|
|
820
|
+
|----------|--------|------------|
|
|
821
|
+
| `/meetingParticipants` | GET | `meeting-participants list` |
|
|
822
|
+
| `/meetingParticipants/{participantId}` | GET | `meeting-participants show` |
|
|
823
|
+
| `/meetingParticipants/{participantId}` | PUT | `meeting-participants update` |
|
|
824
|
+
| `/meetingParticipants/query` | POST | `meeting-participants create` |
|
|
825
|
+
| `/meetingParticipants/admit` | POST | `meeting-participants create-admit` |
|
|
826
|
+
| `/meetingParticipants/callout` | POST | `meeting-participants create-callout` |
|
|
827
|
+
| `/meetingParticipants/cancelCallout` | POST | `meeting-participants create-cancel-callout` |
|
|
828
|
+
|
|
829
|
+
### Meeting Invitees (6 endpoints)
|
|
830
|
+
|
|
831
|
+
| Endpoint | Method | CLI Command |
|
|
832
|
+
|----------|--------|------------|
|
|
833
|
+
| `/meetingInvitees` | GET | `meeting-invitees list` |
|
|
834
|
+
| `/meetingInvitees` | POST | `meeting-invitees create` |
|
|
835
|
+
| `/meetingInvitees/bulkInsert` | POST | `meeting-invitees create-bulk-insert` |
|
|
836
|
+
| `/meetingInvitees/{meetingInviteeId}` | GET | `meeting-invitees show` |
|
|
837
|
+
| `/meetingInvitees/{meetingInviteeId}` | PUT | `meeting-invitees update` |
|
|
838
|
+
| `/meetingInvitees/{meetingInviteeId}` | DELETE | `meeting-invitees delete` |
|
|
839
|
+
|
|
840
|
+
---
|
|
841
|
+
|
|
842
|
+
## 12. Gotchas
|
|
843
|
+
|
|
844
|
+
### Video Mesh
|
|
845
|
+
|
|
846
|
+
1. **Video Mesh API is read-only for infrastructure.** You cannot create, register, or decommission clusters or nodes via the API. All provisioning is done through the Webex Control Hub UI. The API provides monitoring, analytics, and event threshold configuration only.
|
|
847
|
+
|
|
848
|
+
2. **All Video Mesh endpoints require an admin token with `spark-admin:video_mesh_read` scope.** User tokens and bot tokens will get 403 Forbidden.
|
|
849
|
+
|
|
850
|
+
3. **Time-range parameters (`from`, `to`) are required for most analytics endpoints.** Utilization, overflow, call redirects, and client distribution endpoints all require `from` and `to` in ISO 8601 format. Omitting them will result in an error or unexpected empty results.
|
|
851
|
+
|
|
852
|
+
4. **Event threshold `update` uses PATCH, not PUT.** This means partial update semantics -- you only need to send the thresholds you want to change. The response includes a `failedEventThresholdIds` array listing any threshold IDs that failed to update.
|
|
853
|
+
|
|
854
|
+
5. **`create-reset` resets all thresholds to factory defaults with no undo.** The only way to restore custom thresholds after a reset is to manually re-apply them via `update`.
|
|
855
|
+
|
|
856
|
+
6. **On-demand tests are asynchronous.** After triggering a test via `create` or `create-clusters`, you must poll `list-test-status` to check completion, then retrieve results via `list-test-results`. Tests may take several minutes to complete.
|
|
857
|
+
|
|
858
|
+
7. **The `list` command maps to client type distribution, not a general resource list.** `wxcli video-mesh list` returns client type distribution details (GET /videoMesh/clientTypeDistribution), which may be surprising. Use `list-clusters-video-mesh` to list clusters.
|
|
859
|
+
|
|
860
|
+
### Meeting Participants
|
|
861
|
+
|
|
862
|
+
8. **The `create` command is actually "Query by Email" (POST to /meetingParticipants/query).** Despite the CLI name suggesting creation, this command searches for participants by email address. The CLI name follows the generator's convention of mapping POST to `create`.
|
|
863
|
+
|
|
864
|
+
9. **`update` can mute, unmute, admit, or expel a participant during a live meeting.** Set `muted: true/false` to mute/unmute, `admit: true` to admit from lobby, or `expel: true` to remove. Only one action should be performed per call.
|
|
865
|
+
|
|
866
|
+
10. **`create-callout` dials a SIP URI to add a device to the meeting.** This is useful for bridging room devices (Webex Room Kit, SIP-registered phones) into a Webex meeting. The callout is asynchronous -- the response returns `state: "pending"` initially.
|
|
867
|
+
|
|
868
|
+
11. **`create-cancel-callout` cancels a pending SIP callout before the device answers.** Once the device has answered and joined the meeting, use `update` with `expel: true` instead.
|
|
869
|
+
|
|
870
|
+
12. **`create-admit` has a 100-item limit per request.** Each `participantId` in the `items` array must share the same meeting prefix as the `meetingId`.
|
|
871
|
+
|
|
872
|
+
13. **Personal room meeting IDs are not supported for the participant list endpoint.** Attempting to use a personal room meeting ID will return an error.
|
|
873
|
+
|
|
874
|
+
14. **The `joinTimeFrom`/`joinTimeTo` interval must be within 90 days.** Exceeding this range will result in a 400 error.
|
|
875
|
+
|
|
876
|
+
### Meeting Invitees
|
|
877
|
+
|
|
878
|
+
15. **Invitees are pre-meeting; participants are in-meeting.** These are separate API surfaces. Invitees represent who was invited (before the meeting). Participants represent who actually joined (during/after the meeting).
|
|
879
|
+
|
|
880
|
+
16. **`sendEmail` defaults to `true`.** When creating an invitee, the invitation email is sent automatically unless you explicitly set `sendEmail: false`. This is important for bulk operations where you may not want to send hundreds of emails.
|
|
881
|
+
|
|
882
|
+
17. **`create-bulk-insert` accepts multiple invitees at once** via the `items` array in the JSON body. Each item can have independent `coHost`, `panelist`, and `sendEmail` settings.
|
|
883
|
+
|
|
884
|
+
18. **The `panelist` filter on `list` is for webinars only.** For regular meetings, this parameter has no effect. Set to `true` for panelists, `false` for attendees, or omit for both.
|
|
885
|
+
|
|
886
|
+
19. **Invitee `update` uses PUT (full replacement), not PATCH.** You must include all fields you want to keep, not just the ones you are changing.
|
|
887
|
+
|
|
888
|
+
20. **Duplicate invitee creation returns 409 Conflict.** If the email address is already invited to the meeting, the API returns a 409 error rather than silently updating.
|
|
889
|
+
|
|
890
|
+
---
|
|
891
|
+
|
|
892
|
+
## 13. See Also
|
|
893
|
+
|
|
894
|
+
- [`meetings-core.md`](meetings-core.md) — Meeting CRUD, templates, controls, registrants, interpreters, breakouts, surveys
|
|
895
|
+
- [`meetings-content.md`](meetings-content.md) — Transcripts, captions, chats, summaries, meeting messages
|
|
896
|
+
- [`meetings-settings.md`](meetings-settings.md) — Preferences, session types, tracking codes, site settings, polls, Q&A, reports
|
|
897
|
+
- [`admin-hybrid.md`](admin-hybrid.md) -- Hybrid clusters and connectors (Video Mesh nodes are hybrid infrastructure)
|
|
898
|
+
- [`reporting-analytics.md`](reporting-analytics.md) -- Meeting quality analytics and CDR reporting
|
|
899
|
+
- [`authentication.md`](authentication.md) -- Token types, scopes, OAuth flows
|