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,214 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: teardown
|
|
3
|
+
description: |
|
|
4
|
+
Tear down Webex Calling resources in dependency-safe order. Covers single-location
|
|
5
|
+
teardown, multi-location bulk cleanup, migration test cleanup, and org reset.
|
|
6
|
+
Use for: delete, remove, clean up, tear down, reset, decommission.
|
|
7
|
+
NOT for: creating/provisioning resources (use provision-calling skill) or
|
|
8
|
+
license reclamation without resource deletion (use manage-licensing skill).
|
|
9
|
+
argument-hint: [scope — e.g. "DP-HQ-Phones", "all GlobalTech locations", "entire org"]
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Teardown Skill
|
|
13
|
+
|
|
14
|
+
Delete Webex Calling resources in the correct dependency order. Use `wxcli cleanup` for automated batch teardown, or follow the manual procedure below.
|
|
15
|
+
|
|
16
|
+
## Step 1: Load references
|
|
17
|
+
|
|
18
|
+
1. Read `.claude/rules/cleanup.md` for all cleanup flags, 13-layer deletion order, and known behaviors
|
|
19
|
+
2. For manual teardown (not using `wxcli cleanup`): Read `docs/reference/call-routing.md` (routing delete semantics) and `docs/reference/devices-core.md` (device delete flow)
|
|
20
|
+
|
|
21
|
+
**Mandatory --help verification:** Before constructing any manual delete command, run `wxcli <group> --help` to verify the delete subcommand name exists, then `wxcli <group> <subcommand> --help` to verify the exact flags. Do NOT guess delete command names — routing deletes use PLURAL names (`delete-route-groups`, not `delete-route-group`). Feature deletes use `--force LOCATION_ID FEATURE_ID` argument order.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
**Checkpoint — do NOT proceed until you can answer these:**
|
|
26
|
+
1. What resource type must be deleted BEFORE disable-calling can succeed on a location? (Answer: workspaces)
|
|
27
|
+
2. What is the correct argument order for location-scoped feature deletes? (Answer: `--force LOCATION_ID FEATURE_ID` — location comes FIRST)
|
|
28
|
+
3. Do routing delete commands use singular or plural names? (Answer: plural — `delete-route-groups` not `delete-route-group`)
|
|
29
|
+
|
|
30
|
+
If you cannot answer all three, you skipped reading this skill. Go back and read it.
|
|
31
|
+
|
|
32
|
+
## Preferred: `wxcli cleanup` (automated)
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
# Dry-run first — shows what would be deleted
|
|
36
|
+
wxcli cleanup run --scope "Location Name" --dry-run
|
|
37
|
+
|
|
38
|
+
# Delete all resources at specific locations (--include-users deletes users at scoped locations)
|
|
39
|
+
wxcli cleanup run --scope "DP-HQ-Phones,DP-Branch-Phones" --include-users --exclude-user-domains "wbx.ai" --force
|
|
40
|
+
|
|
41
|
+
# Delete everything in the org
|
|
42
|
+
wxcli cleanup run --all --include-users --include-locations --force
|
|
43
|
+
|
|
44
|
+
# Delete users but keep admin accounts by domain
|
|
45
|
+
wxcli cleanup run --all --include-users --exclude-user-domains "wbx.ai,corp.com" --force
|
|
46
|
+
|
|
47
|
+
# Control parallelism
|
|
48
|
+
wxcli cleanup run --scope "GlobalTech*" --max-concurrent 10 --force
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
`wxcli cleanup` handles the full dependency DAG automatically: inventories all resources, deletes in the correct 13-layer order (including phone number removal before location deletion), and parallelizes within each layer.
|
|
52
|
+
|
|
53
|
+
**Key behaviors:**
|
|
54
|
+
- **Phone numbers** are removed automatically before location deletion (batched in groups of 5, main numbers skipped). Numbers assigned to a location block location deletion with 409.
|
|
55
|
+
- **Location deletion cannot be completed via API.** The public API cannot disable Webex Calling on a location — the telephony detach endpoint returns 404 in most orgs. `wxcli cleanup --include-locations` will remove all resources AT the location (features, routing, devices, users, numbers) but the location itself will remain calling-enabled and 409 on delete. **The operator must finish location deletion in Control Hub** (Locations → select location → disable Webex Calling → delete). Always tell the user this upfront when `--include-locations` is requested.
|
|
56
|
+
- **`--include-users` is location-scoped when `--scope` is set.** With `--scope`, only users at the specified locations are deleted. With `--all`, all org users are in scope. In both cases, **always use `--exclude-user-domains`** to protect admin and service accounts (e.g., `--exclude-user-domains "wbx.ai,company.com"`).
|
|
57
|
+
|
|
58
|
+
**Always dry-run first** for any scope larger than a single location.
|
|
59
|
+
|
|
60
|
+
### What `wxcli cleanup` deletes by default (no flags)
|
|
61
|
+
|
|
62
|
+
With just `--scope` and `--force`, cleanup deletes: dial plans, route lists, route groups, translation patterns, trunks, call features (HG/CQ/AA/paging/park/pickup), operating modes, schedules, virtual lines, **devices**, **workspaces**, and phone numbers. It does NOT delete users or locations unless `--include-users` / `--include-locations` is passed.
|
|
63
|
+
|
|
64
|
+
**Selective teardown (features/routing only, keep devices + users + location):**
|
|
65
|
+
Do NOT use `wxcli cleanup` — it has no `--exclude-devices` flag and will delete devices and workspaces. Use the manual procedure (Step 2 below), deleting only Layers 1-2 (features + routing).
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## Manual Teardown Procedure
|
|
70
|
+
|
|
71
|
+
Use when `wxcli cleanup` is unavailable or you need fine-grained control.
|
|
72
|
+
|
|
73
|
+
### Step 1: Enumerate ALL resources upfront
|
|
74
|
+
|
|
75
|
+
Run ALL of these checks before deleting anything. Collect the full inventory.
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
LOC=<LOCATION_ID>
|
|
79
|
+
|
|
80
|
+
# Layer 1: Features
|
|
81
|
+
wxcli hunt-group list --location-id $LOC -o json 2>&1
|
|
82
|
+
wxcli call-queue list --location-id $LOC -o json 2>&1
|
|
83
|
+
wxcli call-queue list --location-id $LOC --has-cx-essentials true -o json 2>&1
|
|
84
|
+
wxcli auto-attendant list --location-id $LOC -o json 2>&1
|
|
85
|
+
wxcli paging-group list --location-id $LOC -o json 2>&1
|
|
86
|
+
# Call parks and pickups REQUIRE location as positional arg — org-wide list returns EMPTY
|
|
87
|
+
wxcli call-park list $LOC -o json 2>&1
|
|
88
|
+
wxcli call-pickup list $LOC -o json 2>&1
|
|
89
|
+
wxcli location-voicemail list $LOC -o json 2>&1
|
|
90
|
+
|
|
91
|
+
# Layer 2: Routing (org-wide — filter by location in output)
|
|
92
|
+
wxcli call-routing list -o json 2>&1 # dial plans
|
|
93
|
+
wxcli call-routing list-route-lists -o json 2>&1 # route lists
|
|
94
|
+
wxcli call-routing list-route-groups -o json 2>&1 # check which reference trunks in this location
|
|
95
|
+
wxcli call-routing list-trunks -o json 2>&1 # filter by location in output
|
|
96
|
+
|
|
97
|
+
# Layer 3: Supporting resources
|
|
98
|
+
wxcli virtual-extensions list --location-id $LOC -o json 2>&1
|
|
99
|
+
wxcli location-schedules list $LOC -o json 2>&1
|
|
100
|
+
wxcli operating-modes list --location-id $LOC -o json 2>&1
|
|
101
|
+
|
|
102
|
+
# Layer 4: Users
|
|
103
|
+
wxcli users list --location-id $LOC -o json 2>&1
|
|
104
|
+
|
|
105
|
+
# Layer 5: Workspaces (no --location-id flag — filter client-side by locationId)
|
|
106
|
+
wxcli workspaces list -o json 2>&1
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Present the full inventory to the user before proceeding.
|
|
110
|
+
|
|
111
|
+
### Step 2: Delete in dependency order
|
|
112
|
+
|
|
113
|
+
Delete **layer by layer, top to bottom**. Resources within the same layer have no interdependencies and can be deleted in parallel.
|
|
114
|
+
|
|
115
|
+
#### Layer 1: Features
|
|
116
|
+
```bash
|
|
117
|
+
wxcli hunt-group delete --force $LOC <HG_ID>
|
|
118
|
+
wxcli call-queue delete --force $LOC <CQ_ID>
|
|
119
|
+
wxcli auto-attendant delete --force $LOC <AA_ID>
|
|
120
|
+
wxcli call-park delete --force $LOC <PARK_ID>
|
|
121
|
+
wxcli call-pickup delete --force $LOC <PICKUP_ID>
|
|
122
|
+
wxcli paging-group delete --force $LOC <PG_ID>
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
#### Layer 2: Routing (reverse creation order)
|
|
126
|
+
```bash
|
|
127
|
+
# Dial plans first, then route lists, then route groups, then trunks
|
|
128
|
+
wxcli call-routing delete --force <DP_ID>
|
|
129
|
+
wxcli call-routing delete-route-lists --force <RL_ID>
|
|
130
|
+
wxcli call-routing delete-route-groups --force <RG_ID>
|
|
131
|
+
wxcli call-routing delete-translation-patterns-call-routing --force <TP_ID>
|
|
132
|
+
wxcli call-routing delete-trunks --force <TRUNK_ID>
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
#### Layer 3: Supporting resources
|
|
136
|
+
```bash
|
|
137
|
+
wxcli virtual-extensions delete --force <VE_ID>
|
|
138
|
+
wxcli location-schedules delete --force $LOC <TYPE> <SCHEDULE_ID>
|
|
139
|
+
wxcli operating-modes delete --force <OM_ID>
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
#### Layer 4: Users
|
|
143
|
+
```bash
|
|
144
|
+
wxcli users delete --force <USER_ID>
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
#### Layer 5: Workspaces
|
|
148
|
+
```bash
|
|
149
|
+
# Must delete workspaces BEFORE disabling calling on the location
|
|
150
|
+
wxcli workspaces delete --force <WORKSPACE_ID>
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
#### Layer 6: Phone Numbers
|
|
154
|
+
```bash
|
|
155
|
+
# Remove phone numbers BEFORE location deletion — numbers block location delete with 409
|
|
156
|
+
# List numbers for the location
|
|
157
|
+
wxcli numbers list --location-id $LOC -o json
|
|
158
|
+
# Delete numbers (API accepts max 5 per request, main number cannot be removed)
|
|
159
|
+
# Use wxcli numbers delete $LOC or raw API:
|
|
160
|
+
# DELETE /telephony/config/locations/{LOC}/numbers body: {"phoneNumbers": ["+1..."]}
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
#### Layer 7: Locations
|
|
164
|
+
```bash
|
|
165
|
+
# The API CANNOT disable Webex Calling on a location. After clearing all
|
|
166
|
+
# dependencies above, the location will still 409 on delete because it
|
|
167
|
+
# remains calling-enabled. Attempt the delete — it may work in rare cases:
|
|
168
|
+
wxcli location-settings safe-delete-check $LOC
|
|
169
|
+
wxcli locations delete --force $LOC
|
|
170
|
+
# If 409: tell the user to finish in Control Hub (disable calling → delete).
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### Step 3: Handle 409 on location delete
|
|
174
|
+
|
|
175
|
+
If `locations delete` returns 409 "being referenced", check these in order:
|
|
176
|
+
|
|
177
|
+
1. **Phone numbers still assigned** — `wxcli numbers list --location-id $LOC -o json`. Remove non-main numbers before location delete. `wxcli cleanup` handles this automatically (Layer 12).
|
|
178
|
+
2. **CX Essentials queues** hidden from default `call-queue list` — need `--has-cx-essentials true`
|
|
179
|
+
3. **Call parks / pickups** not found — `call-park list` and `call-pickup list` without `$LOC` as first positional arg return empty
|
|
180
|
+
4. **Virtual lines** — discoverable via `wxcli numbers list -o json` (owner.type == VIRTUAL_LINE), not always via `virtual-extensions list`
|
|
181
|
+
5. **Workspaces** still assigned — workspaces API has no location filter, must filter client-side by `locationId` field
|
|
182
|
+
6. **Operating modes** referencing deleted schedules
|
|
183
|
+
7. **Calling-enabled location (most common cause)** — the public API cannot disable Webex Calling on a location. Even with all visible dependencies gone, the location remains calling-enabled and 409s on delete. The telephony detach endpoint (`DELETE /telephony/config/locations/{id}`) returns 404 in most orgs. **This is not fixable via CLI/API — the operator must disable Webex Calling in Control Hub** (Locations → select → disable calling → delete).
|
|
184
|
+
8. **Ghost/stale locations** — locations returning 404 on sub-resource queries may still be deletable. Attempt deletion regardless.
|
|
185
|
+
|
|
186
|
+
### Rule: never hand-roll polling loops
|
|
187
|
+
|
|
188
|
+
When a 409 persists after the built-in 90s wait (or any other "wait and retry" situation in teardown), follow these rules strictly. Violating them causes silent Bash-tool timeouts mid-loop and unrecoverable partial state.
|
|
189
|
+
|
|
190
|
+
1. **Do NOT** write external Python or bash polling loops with `time.sleep` / `sleep` inside a single Bash tool call. The Bash tool has a ~10-minute hard timeout; long loops die silently with no useful output.
|
|
191
|
+
2. **Do** re-invoke `wxcli cleanup run` (with the same `--scope` / flags). It is **idempotent** — safe to repeat — and resumes cleanup from wherever it left off. This is the preferred recovery path for 409s.
|
|
192
|
+
3. If bespoke per-location retry is truly required, split it into **discrete Bash tool calls** — one call per location per attempt (or per round) — with a short `sleep` **between** tool calls, not inside them. Each call returns control to the parent before the next wait begins.
|
|
193
|
+
4. Cap any necessary hand-written retry script at **≤3 minutes wall time**. Beyond that, exit the script and let the parent re-dispatch — do not stretch a single Bash call toward the 10-minute ceiling.
|
|
194
|
+
5. If `cleanup run` exits with remaining 409s, **report them in the task summary and stop**. Do not loop silently. The operator (or parent agent) decides whether to re-invoke.
|
|
195
|
+
|
|
196
|
+
### Gotcha: CCP-integrated PSTN backend gate (dCloud / Cisco Calling Plan orgs)
|
|
197
|
+
|
|
198
|
+
When the target org uses **Cisco Calling Plan** (CCP-integrated PSTN), number deletion fails with `ERR.V.TRM.TMN60004` ("DELETE number is supported only for non-integrated CCP") — these numbers are managed via the PSTN portal, not the API. After trunk/route-group/feature/user teardown, **location delete then 409s with "being referenced"** for hours even though there are no locally visible dependencies. Webex's internal PSTN backend is async-releasing trunk references and typically clears in **1-4 hours** in dCloud/CCP orgs. No API action can speed this up.
|
|
199
|
+
|
|
200
|
+
`wxcli cleanup run` now detects the explicit number-delete signature and short-circuits those number removals:
|
|
201
|
+
- **Number delete:** skipped with a `[number=<ext/e164>] skipped — CCP-integrated, managed via PSTN portal` log line, not counted as a failure.
|
|
202
|
+
- **Location delete:** do **not** infer CCP solely from a generic `409 "being referenced"` response. Generic 409s can also mean preserved users, voice portal state, or the fact that the location is still calling-enabled and must be finished in Control Hub.
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
## Critical Rules
|
|
207
|
+
|
|
208
|
+
1. **Always use `--force`** — skip interactive confirmation for programmatic deletes
|
|
209
|
+
2. **Location-scoped feature deletes take LOCATION_ID FIRST** — `wxcli hunt-group delete --force LOCATION_ID HG_ID`, not `HG_ID LOCATION_ID`
|
|
210
|
+
3. **Routing delete commands use PLURAL names** — `delete-route-groups` not `delete-route-group`, `delete-trunks` not `delete-trunk`
|
|
211
|
+
4. **Workspaces block location deletion** — delete all workspaces at a location BEFORE running disable-calling
|
|
212
|
+
5. **Do not promise API disable-calling** — use CLI/API to remove visible blockers, but warn that final delete of a calling-enabled location may still require Control Hub
|
|
213
|
+
6. **Enumerate before deleting** — never start deleting without a full inventory; hidden resources (CX queues, call parks, workspaces) will block location delete
|
|
214
|
+
7. **Multi-location teardown** — repeat the procedure per location, or use `wxcli cleanup run --scope "Loc1,Loc2"` for automation
|
|
@@ -0,0 +1,379 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: video-mesh
|
|
3
|
+
description: |
|
|
4
|
+
Monitor and configure Webex Video Mesh clusters, nodes, availability,
|
|
5
|
+
utilization, reachability, and event thresholds using wxcli CLI commands.
|
|
6
|
+
Guides the user from prerequisites through execution and verification.
|
|
7
|
+
allowed-tools: Read, Grep, Glob, Bash
|
|
8
|
+
argument-hint: [mesh-operation]
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
<!-- Created by playbook session 2026-03-28 -->
|
|
12
|
+
|
|
13
|
+
# Video Mesh Workflow
|
|
14
|
+
|
|
15
|
+
**Checkpoint — do NOT proceed until you can answer these:**
|
|
16
|
+
1. What is the command to list all Video Mesh clusters? (Answer: `wxcli video-mesh list-clusters-video-mesh` — not `wxcli video-mesh list`, which shows client type distribution.)
|
|
17
|
+
2. How do you trigger an on-demand test for a single node? (Answer: `wxcli video-mesh create NODE_ID` — not `create-clusters`, which targets a cluster.)
|
|
18
|
+
|
|
19
|
+
If you cannot answer both, you skipped reading this skill. Go back and read it.
|
|
20
|
+
|
|
21
|
+
## Step 1: Load references
|
|
22
|
+
|
|
23
|
+
1. Read `docs/reference/meetings-infrastructure.md` for Video Mesh clusters, nodes, availability, utilization, reachability, health monitoring, and event thresholds
|
|
24
|
+
|
|
25
|
+
**Mandatory --help verification:** Before constructing any wxcli command, run `wxcli <group> --help` to verify the subcommand exists, then `wxcli <group> <subcommand> --help` to verify the exact flags (e.g. `wxcli video-mesh --help` to list subcommands, then drill into the specific one). Do NOT rely on examples in this skill or reference docs — the CLI is auto-generated and flag names may differ from what documentation suggests.
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Step 2: Verify auth token
|
|
30
|
+
|
|
31
|
+
Before any API calls, confirm the user has a working auth token:
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
wxcli whoami
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
If this fails, stop and resolve authentication first (`wxcli configure`).
|
|
38
|
+
|
|
39
|
+
**Required scopes:**
|
|
40
|
+
- **Read**: `spark-admin:video_mesh_read`
|
|
41
|
+
- **Write**: `spark-admin:video_mesh_write` (for threshold configuration and on-demand tests)
|
|
42
|
+
|
|
43
|
+
**Token type:** Admin token required. User tokens will return 403.
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## Step 3: Identify the operation type
|
|
48
|
+
|
|
49
|
+
Ask the user what they want to accomplish. Present this decision matrix if they are unsure:
|
|
50
|
+
|
|
51
|
+
| User Wants To | Operation | CLI Commands |
|
|
52
|
+
|--------------|-----------|-------------|
|
|
53
|
+
| List all clusters | Cluster inventory | `video-mesh list-clusters-video-mesh` |
|
|
54
|
+
| Get cluster details | Cluster inspection | `video-mesh show CLUSTER_ID` |
|
|
55
|
+
| Check cluster health/availability | Availability monitoring | `video-mesh list-availability-clusters`, `video-mesh show-availability-clusters CLUSTER_ID` |
|
|
56
|
+
| Check node health/availability | Node monitoring | `video-mesh list-availability-nodes`, `video-mesh show-availability-nodes NODE_ID` |
|
|
57
|
+
| View cluster utilization stats | Utilization analysis | `video-mesh list-utilization-video-mesh`, `video-mesh list-utilization-clusters CLUSTER_ID` |
|
|
58
|
+
| Run reachability tests | Connectivity verification | `video-mesh list-reachability-test`, `video-mesh list-clusters-reachability-test CLUSTER_ID`, `video-mesh list-nodes-reachability-test NODE_ID` |
|
|
59
|
+
| View media health results | Media quality monitoring | `video-mesh list-media-health-monitor-test`, `video-mesh list-clusters-media-health-monitor-test CLUSTER_ID`, `video-mesh list-nodes-media-health-monitor-test NODE_ID` |
|
|
60
|
+
| Run network tests | Network diagnostics | `video-mesh list-network-test`, `video-mesh list-clusters-network-test CLUSTER_ID`, `video-mesh list-nodes-network-test NODE_ID` |
|
|
61
|
+
| Trigger on-demand test (node) | Manual testing | `video-mesh create NODE_ID` |
|
|
62
|
+
| Trigger on-demand test (cluster) | Manual testing | `video-mesh create-clusters CLUSTER_ID` |
|
|
63
|
+
| Check triggered test status/results | Test follow-up | `video-mesh list-test-status`, `video-mesh list-test-results` |
|
|
64
|
+
| View cloud overflow stats | Overflow analysis | `video-mesh list-cloud-overflow` |
|
|
65
|
+
| View call redirect details | Redirect analysis | `video-mesh list-call-redirects-video-mesh`, `video-mesh list-call-redirects-clusters CLUSTER_ID` |
|
|
66
|
+
| View client type distribution | Client analytics | `video-mesh list`, `video-mesh list-clusters-client-type-distribution CLUSTER_ID` |
|
|
67
|
+
| View/update event thresholds | Threshold configuration | `video-mesh list-event-thresholds`, `video-mesh show-event-thresholds THRESHOLD_ID`, `video-mesh update THRESHOLD_ID` |
|
|
68
|
+
| Reset event thresholds to defaults | Threshold reset | `video-mesh create-reset` |
|
|
69
|
+
| Not Video Mesh? | For meetings → `manage-meetings` skill. For call features → `configure-features` skill. | — |
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## Step 4: Check prerequisites
|
|
74
|
+
|
|
75
|
+
### 4a. Admin token with Video Mesh scopes
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
wxcli whoami
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Verify the output shows admin-level access. If Video Mesh commands return 403, the token is missing `spark-admin:video_mesh_read` or `spark-admin:video_mesh_write` scopes.
|
|
82
|
+
|
|
83
|
+
### 4b. Video Mesh deployed
|
|
84
|
+
|
|
85
|
+
Verify the org has Video Mesh clusters registered:
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
wxcli video-mesh list-clusters-video-mesh --output json
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
If this returns empty, Video Mesh is not deployed in this org. Video Mesh requires on-premises nodes registered to the Webex cloud. This skill cannot deploy Video Mesh — that is a network infrastructure task done via the Video Mesh Node OVA.
|
|
92
|
+
|
|
93
|
+
### 4c. Cluster and node IDs
|
|
94
|
+
|
|
95
|
+
For most operations, you need a cluster ID or node ID. Get them from the cluster list:
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
# List clusters (get cluster IDs)
|
|
99
|
+
wxcli video-mesh list-clusters-video-mesh --output json
|
|
100
|
+
|
|
101
|
+
# Get cluster details (includes node IDs)
|
|
102
|
+
wxcli video-mesh show CLUSTER_ID --output json
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## Step 5: Gather configuration and present deployment plan — [SHOW BEFORE EXECUTING]
|
|
108
|
+
|
|
109
|
+
Most Video Mesh operations are read-only queries. For write operations (threshold configuration, on-demand tests), present the plan before executing.
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
### Monitoring Queries (Read-Only)
|
|
114
|
+
|
|
115
|
+
For read-only operations, present a brief query plan:
|
|
116
|
+
|
|
117
|
+
```
|
|
118
|
+
QUERY PLAN
|
|
119
|
+
==========
|
|
120
|
+
Operation: [type — e.g., "Check availability for all clusters over last 7 days"]
|
|
121
|
+
Scope: [all clusters / specific cluster / specific node]
|
|
122
|
+
Time Range: [if applicable]
|
|
123
|
+
|
|
124
|
+
Commands to execute:
|
|
125
|
+
1. wxcli video-mesh list-availability --from ... --to ... --output json
|
|
126
|
+
|
|
127
|
+
Proceed? (yes/no)
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
### Cluster Health Check (Comprehensive)
|
|
133
|
+
|
|
134
|
+
For a comprehensive health check of a cluster:
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
# 1. Cluster details
|
|
138
|
+
wxcli video-mesh show CLUSTER_ID --output json
|
|
139
|
+
|
|
140
|
+
# 2. Availability
|
|
141
|
+
wxcli video-mesh show CLUSTER_ID --output json
|
|
142
|
+
|
|
143
|
+
# 3. Utilization
|
|
144
|
+
wxcli video-mesh list-utilization-clusters CLUSTER_ID --output json
|
|
145
|
+
|
|
146
|
+
# 4. Reachability
|
|
147
|
+
wxcli video-mesh list-clusters-reachability-test CLUSTER_ID --output json
|
|
148
|
+
|
|
149
|
+
# 5. Media health
|
|
150
|
+
wxcli video-mesh list-clusters-media-health-monitor-test CLUSTER_ID --output json
|
|
151
|
+
|
|
152
|
+
# 6. Network test results
|
|
153
|
+
wxcli video-mesh list-clusters-network-test CLUSTER_ID --output json
|
|
154
|
+
|
|
155
|
+
# 7. Call redirects (overflow)
|
|
156
|
+
wxcli video-mesh list-call-redirects-clusters CLUSTER_ID --output json
|
|
157
|
+
|
|
158
|
+
# 8. Client type distribution
|
|
159
|
+
wxcli video-mesh list-clusters-client-type-distribution CLUSTER_ID --output json
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
### Node Health Check
|
|
165
|
+
|
|
166
|
+
For a single node:
|
|
167
|
+
|
|
168
|
+
```bash
|
|
169
|
+
# Node availability
|
|
170
|
+
wxcli video-mesh show-availability NODE_ID --output json
|
|
171
|
+
|
|
172
|
+
# Node reachability
|
|
173
|
+
wxcli video-mesh list-nodes-reachability-test NODE_ID --output json
|
|
174
|
+
|
|
175
|
+
# Node media health
|
|
176
|
+
wxcli video-mesh list-nodes-media-health-monitor-test NODE_ID --output json
|
|
177
|
+
|
|
178
|
+
# Node network test
|
|
179
|
+
wxcli video-mesh list-nodes-network-test NODE_ID --output json
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
### On-Demand Tests
|
|
185
|
+
|
|
186
|
+
```bash
|
|
187
|
+
# Trigger test for a specific node
|
|
188
|
+
wxcli video-mesh create NODE_ID
|
|
189
|
+
|
|
190
|
+
# Trigger test for all nodes in a cluster
|
|
191
|
+
wxcli video-mesh create CLUSTER_ID
|
|
192
|
+
|
|
193
|
+
# Check test status
|
|
194
|
+
wxcli video-mesh list-test-status --output json
|
|
195
|
+
|
|
196
|
+
# Get test results
|
|
197
|
+
wxcli video-mesh list-test-results --output json
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
### Event Threshold Configuration
|
|
203
|
+
|
|
204
|
+
Collect from user:
|
|
205
|
+
|
|
206
|
+
| Parameter | Required | Notes |
|
|
207
|
+
|-----------|:--------:|-------|
|
|
208
|
+
| Threshold ID | Yes | Get from `list-event-thresholds` |
|
|
209
|
+
| New threshold value | Yes | Depends on threshold type |
|
|
210
|
+
|
|
211
|
+
```bash
|
|
212
|
+
# List current thresholds
|
|
213
|
+
wxcli video-mesh list-event-thresholds --output json
|
|
214
|
+
|
|
215
|
+
# Get a specific threshold
|
|
216
|
+
wxcli video-mesh show-event-thresholds THRESHOLD_ID --output json
|
|
217
|
+
|
|
218
|
+
# Update a threshold
|
|
219
|
+
wxcli video-mesh update THRESHOLD_ID --json-body '{"value": 80}'
|
|
220
|
+
|
|
221
|
+
# Reset all thresholds to defaults
|
|
222
|
+
wxcli video-mesh create-reset
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
---
|
|
226
|
+
|
|
227
|
+
### Overflow and Redirect Analysis
|
|
228
|
+
|
|
229
|
+
```bash
|
|
230
|
+
# List cloud overflow details
|
|
231
|
+
wxcli video-mesh list-cloud-overflow --output json
|
|
232
|
+
|
|
233
|
+
# List call redirect details (org-wide)
|
|
234
|
+
wxcli video-mesh list-call-redirects-video-mesh --output json
|
|
235
|
+
|
|
236
|
+
# Get redirect details for a specific cluster
|
|
237
|
+
wxcli video-mesh list-call-redirects-clusters CLUSTER_ID --output json
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
---
|
|
241
|
+
|
|
242
|
+
### Deployment Plan Template (Write Operations)
|
|
243
|
+
|
|
244
|
+
For write operations (threshold updates, on-demand tests):
|
|
245
|
+
|
|
246
|
+
```
|
|
247
|
+
DEPLOYMENT PLAN
|
|
248
|
+
===============
|
|
249
|
+
Operation: [type — e.g., "Update CPU utilization threshold to 80%"]
|
|
250
|
+
Target: [threshold ID / node ID / cluster ID]
|
|
251
|
+
|
|
252
|
+
Current State:
|
|
253
|
+
[Current threshold value / current test status]
|
|
254
|
+
|
|
255
|
+
Changes:
|
|
256
|
+
[What will be changed]
|
|
257
|
+
|
|
258
|
+
Commands to execute:
|
|
259
|
+
1. wxcli video-mesh update THRESHOLD_ID --json-body '{"value": 80}'
|
|
260
|
+
|
|
261
|
+
Proceed? (yes/no)
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
**Wait for user confirmation before executing write operations.**
|
|
265
|
+
|
|
266
|
+
---
|
|
267
|
+
|
|
268
|
+
## Step 6: Execute via wxcli
|
|
269
|
+
|
|
270
|
+
Run the commands in plan order.
|
|
271
|
+
|
|
272
|
+
Handle errors explicitly:
|
|
273
|
+
|
|
274
|
+
- **401/403**: Token expired or insufficient scopes — run `wxcli configure` to re-authenticate. Required scope: `spark-admin:video_mesh_read` (read) or `spark-admin:video_mesh_write` (write).
|
|
275
|
+
- **404**: Cluster or node not found — verify the ID with `wxcli video-mesh list-clusters-video-mesh`.
|
|
276
|
+
- **400**: Validation error — read the error message and fix the parameter (e.g., invalid threshold value).
|
|
277
|
+
- **Empty results on availability/utilization queries:** The time range may be too narrow or the cluster may be newly deployed. Try expanding the time range.
|
|
278
|
+
|
|
279
|
+
---
|
|
280
|
+
|
|
281
|
+
## Step 7: Verify
|
|
282
|
+
|
|
283
|
+
After write operations, verify the change took effect:
|
|
284
|
+
|
|
285
|
+
```bash
|
|
286
|
+
# Verify threshold update
|
|
287
|
+
wxcli video-mesh show-event-thresholds THRESHOLD_ID --output json
|
|
288
|
+
|
|
289
|
+
# Verify on-demand test was triggered
|
|
290
|
+
wxcli video-mesh list-test-status --output json
|
|
291
|
+
|
|
292
|
+
# Verify test completed and get results
|
|
293
|
+
wxcli video-mesh list-test-results --output json
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
For read-only operations, verification is inherent — the query results are the verification.
|
|
297
|
+
|
|
298
|
+
---
|
|
299
|
+
|
|
300
|
+
## Step 8: Report results
|
|
301
|
+
|
|
302
|
+
Present the operation results:
|
|
303
|
+
|
|
304
|
+
### For monitoring queries:
|
|
305
|
+
|
|
306
|
+
```
|
|
307
|
+
VIDEO MESH STATUS
|
|
308
|
+
=================
|
|
309
|
+
Clusters: [N]
|
|
310
|
+
Total Nodes: [N]
|
|
311
|
+
|
|
312
|
+
Cluster: [cluster_name]
|
|
313
|
+
ID: [cluster_id]
|
|
314
|
+
Nodes: [N]
|
|
315
|
+
Availability: [percentage]
|
|
316
|
+
Utilization: [percentage]
|
|
317
|
+
Reachability: [pass/fail]
|
|
318
|
+
Media Health: [pass/fail]
|
|
319
|
+
Cloud Overflow: [count] calls redirected
|
|
320
|
+
|
|
321
|
+
[Repeat for each cluster]
|
|
322
|
+
|
|
323
|
+
Issues Found:
|
|
324
|
+
- [e.g., "Node X reachability test failed"]
|
|
325
|
+
- [e.g., "Cluster Y utilization at 92% (above threshold)"]
|
|
326
|
+
|
|
327
|
+
Recommendations:
|
|
328
|
+
- [e.g., "Investigate node X network connectivity"]
|
|
329
|
+
- [e.g., "Consider adding nodes to cluster Y"]
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
### For write operations:
|
|
333
|
+
|
|
334
|
+
```
|
|
335
|
+
OPERATION COMPLETE
|
|
336
|
+
==================
|
|
337
|
+
Operation: [type]
|
|
338
|
+
Status: Success
|
|
339
|
+
|
|
340
|
+
Changes Applied:
|
|
341
|
+
- [e.g., "CPU threshold updated from 70% to 80%"]
|
|
342
|
+
- [e.g., "On-demand test triggered for node X"]
|
|
343
|
+
|
|
344
|
+
Next steps:
|
|
345
|
+
- [e.g., "Monitor test results: wxcli video-mesh list-test-results"]
|
|
346
|
+
- [e.g., "Check cluster health in 5 minutes after test completes"]
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
---
|
|
350
|
+
|
|
351
|
+
## Critical Rules
|
|
352
|
+
|
|
353
|
+
1. **Always verify admin token and Video Mesh scopes** before any operation. User tokens return 403 for all Video Mesh endpoints.
|
|
354
|
+
2. **Always show the deployment plan** (Step 5) and wait for user confirmation before executing write operations (threshold changes, on-demand tests).
|
|
355
|
+
3. **`video-mesh list` is NOT the cluster list command.** `list` shows client type distribution. Use `list-clusters-video-mesh` to list clusters.
|
|
356
|
+
4. **On-demand tests are `create` (node) and `create-clusters` (cluster).** The command names follow the generator pattern where POST endpoints become `create`.
|
|
357
|
+
5. **Threshold reset (`create-reset`) resets ALL thresholds** to factory defaults. This is a destructive operation — confirm with the user before executing.
|
|
358
|
+
6. **Video Mesh is read-heavy.** Most operations are monitoring queries. Only threshold configuration and on-demand test triggers are write operations.
|
|
359
|
+
7. **Time-range queries default to recent data.** If availability/utilization commands return empty, the time range may need to be specified with `--from` and `--to` flags (where supported).
|
|
360
|
+
8. **Node IDs come from cluster details.** You cannot list all nodes directly — get them from `wxcli video-mesh show CLUSTER_ID --output json` which includes the node list.
|
|
361
|
+
9. **Cross-skill handoffs:**
|
|
362
|
+
- Meeting scheduling/management → `manage-meetings` skill
|
|
363
|
+
- CDR and call quality reports → `reporting` skill
|
|
364
|
+
- Network infrastructure/PSTN → `configure-routing` skill
|
|
365
|
+
|
|
366
|
+
---
|
|
367
|
+
|
|
368
|
+
## Context Compaction Recovery
|
|
369
|
+
|
|
370
|
+
If context compacts mid-execution, recover by:
|
|
371
|
+
1. List clusters to recover the environment state:
|
|
372
|
+
```bash
|
|
373
|
+
wxcli video-mesh list-clusters-video-mesh --output json
|
|
374
|
+
```
|
|
375
|
+
2. Check if any on-demand tests are pending:
|
|
376
|
+
```bash
|
|
377
|
+
wxcli video-mesh list-test-status --output json
|
|
378
|
+
```
|
|
379
|
+
3. Resume from the first incomplete step in the plan
|