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,643 @@
|
|
|
1
|
+
<!-- Updated by playbook session 2026-03-19 -->
|
|
2
|
+
|
|
3
|
+
# Admin: Apps, Data & Resources
|
|
4
|
+
|
|
5
|
+
Service apps, authorizations, user lifecycle operations, recordings management, data sources, and resource groups.
|
|
6
|
+
|
|
7
|
+
## Sources
|
|
8
|
+
|
|
9
|
+
- `specs/webex-admin.json` -- OpenAPI 3.0 spec (admin/org management APIs)
|
|
10
|
+
- [Webex Service App documentation](https://developer.webex.com/docs/service-apps)
|
|
11
|
+
- [Webex Data Sources API](https://developer.webex.com/docs/api/v1/data-sources)
|
|
12
|
+
- [Webex Resource Groups API](https://developer.webex.com/docs/api/v1/resource-groups)
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Table of Contents
|
|
17
|
+
|
|
18
|
+
1. [Service Apps & Authorizations](#1-service-apps--authorizations)
|
|
19
|
+
2. [User Lifecycle](#2-user-lifecycle)
|
|
20
|
+
3. [Recordings (Admin)](#3-recordings-admin)
|
|
21
|
+
4. [Data & Compliance](#4-data--compliance)
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Required Scopes
|
|
26
|
+
|
|
27
|
+
| Scope | Purpose |
|
|
28
|
+
|-------|---------|
|
|
29
|
+
| `spark:applications_token` | Create service app access tokens. The admin must have authorized the service app in Control Hub first. |
|
|
30
|
+
| `spark-admin:people_write` | Initiate bulk activation email resend jobs. |
|
|
31
|
+
| `spark-admin:people_read` | List authorizations, archive user lookup. |
|
|
32
|
+
| `spark-admin:datasource_read` | List and retrieve data sources and schemas. |
|
|
33
|
+
| `spark-admin:datasource_write` | Create, update, and delete data sources. |
|
|
34
|
+
| `spark-admin:resource_groups_read` | List resource groups and memberships. |
|
|
35
|
+
| `spark-admin:resource_group_memberships_write` | Update resource group memberships. |
|
|
36
|
+
| `spark-compliance:recordings_read` | List recordings as compliance officer. |
|
|
37
|
+
| `spark-admin:recordings_read` | List recordings as admin. |
|
|
38
|
+
| `spark-admin:recordings_write` | Delete, move to recycle bin, restore, purge recordings. |
|
|
39
|
+
| `spark-admin:classifications_read` | List space classifications. |
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## 1. Service Apps & Authorizations
|
|
44
|
+
|
|
45
|
+
### Overview
|
|
46
|
+
|
|
47
|
+
Service apps are machine-to-machine integrations that act on behalf of an organization without a user context. An admin authorizes the service app in Control Hub, then the app exchanges its credentials for a short-lived access token scoped to the target org.
|
|
48
|
+
|
|
49
|
+
> **Creating a service app?** There is no API for registration — it must be done manually. See [authentication.md → Creating & Registering a Service App](authentication.md#creating--registering-a-service-app) for the full step-by-step guide covering developer portal registration, Control Hub authorization, and token generation.
|
|
50
|
+
|
|
51
|
+
Authorizations track which OAuth integrations and service apps have been granted access to a user or organization. The `authorizations` group lets admins audit and revoke these grants.
|
|
52
|
+
|
|
53
|
+
### CLI Commands
|
|
54
|
+
|
|
55
|
+
#### service-apps
|
|
56
|
+
|
|
57
|
+
| Command | Description | Key Options |
|
|
58
|
+
|---------|-------------|-------------|
|
|
59
|
+
| `service-apps create` | Create a service app access token | `APPLICATION_ID` (arg), `--client-id`, `--client-secret`, `--target-org-id` (all required) |
|
|
60
|
+
|
|
61
|
+
#### authorizations
|
|
62
|
+
|
|
63
|
+
| Command | Description | Key Options |
|
|
64
|
+
|---------|-------------|-------------|
|
|
65
|
+
| `authorizations list` | List authorizations for a user | `--person-id`, `--person-email` |
|
|
66
|
+
| `authorizations show` | Get expiration status for the current token | (no required options) |
|
|
67
|
+
| `authorizations delete` | Delete all authorizations for a client ID in the org | `--client-id` (required), `--force` |
|
|
68
|
+
| `authorizations delete-authorizations` | Delete a specific authorization by ID | `AUTHORIZATION_ID` (arg), `--force` |
|
|
69
|
+
|
|
70
|
+
### CLI Examples
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
# Create a service app access token
|
|
74
|
+
wxcli service-apps create APP_ID_HERE \
|
|
75
|
+
--client-id "C1234567890abcdef" \
|
|
76
|
+
--client-secret "secret_here" \
|
|
77
|
+
--target-org-id "Y2lzY29zcGFyazovL3VzL09SR..."
|
|
78
|
+
|
|
79
|
+
# List authorizations for a specific user
|
|
80
|
+
wxcli authorizations list --person-email user@example.com
|
|
81
|
+
|
|
82
|
+
# Check token expiration status
|
|
83
|
+
wxcli authorizations show
|
|
84
|
+
|
|
85
|
+
# Revoke all authorizations for a client ID (destructive)
|
|
86
|
+
wxcli authorizations delete --client-id "C1234567890abcdef" --force
|
|
87
|
+
|
|
88
|
+
# Delete a specific authorization
|
|
89
|
+
wxcli authorizations delete-authorizations AUTH_ID_HERE --force
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Raw HTTP Fallback
|
|
93
|
+
|
|
94
|
+
#### Create Service App Token
|
|
95
|
+
|
|
96
|
+
```
|
|
97
|
+
POST https://webexapis.com/v1/applications/{applicationId}/token
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
curl -X POST "https://webexapis.com/v1/applications/{applicationId}/token" \
|
|
102
|
+
-H "Authorization: Bearer $TOKEN" \
|
|
103
|
+
-H "Content-Type: application/json" \
|
|
104
|
+
-d '{
|
|
105
|
+
"clientId": "C1234567890abcdef",
|
|
106
|
+
"clientSecret": "secret_here",
|
|
107
|
+
"targetOrgId": "Y2lzY29zcGFyazovL3VzL09SR..."
|
|
108
|
+
}'
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
#### List Authorizations
|
|
112
|
+
|
|
113
|
+
```
|
|
114
|
+
GET https://webexapis.com/v1/authorizations?personEmail=user@example.com
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
#### Delete Authorization by Client ID
|
|
118
|
+
|
|
119
|
+
```
|
|
120
|
+
DELETE https://webexapis.com/v1/authorizations?clientId=C1234567890abcdef
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
#### Get Token Expiration Status
|
|
124
|
+
|
|
125
|
+
```
|
|
126
|
+
GET https://webexapis.com/v1/authorizations/tokenStatus
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## 2. User Lifecycle
|
|
132
|
+
|
|
133
|
+
### Overview
|
|
134
|
+
|
|
135
|
+
These groups manage user onboarding (activation emails), offboarding (archive lookup), and temporary guest accounts for Webex spaces.
|
|
136
|
+
|
|
137
|
+
The activation email job is an asynchronous bulk operation: you initiate it, then poll for status and errors. Archive users retrieves data for users who have been removed from the org. Guest management creates temporary identities for external participants.
|
|
138
|
+
|
|
139
|
+
### CLI Commands
|
|
140
|
+
|
|
141
|
+
#### activation-email
|
|
142
|
+
|
|
143
|
+
| Command | Description | Key Options |
|
|
144
|
+
|---------|-------------|-------------|
|
|
145
|
+
| `activation-email create` | Initiate a bulk activation email resend job | `ORG_ID` (arg) |
|
|
146
|
+
| `activation-email list` | Get bulk job status | `ORG_ID` (arg), `JOB_ID` (arg) |
|
|
147
|
+
| `activation-email list-errors` | Get bulk job errors | `ORG_ID` (arg), `JOB_ID` (arg), `--max` |
|
|
148
|
+
|
|
149
|
+
#### archive-users
|
|
150
|
+
|
|
151
|
+
| Command | Description | Key Options |
|
|
152
|
+
|---------|-------------|-------------|
|
|
153
|
+
| `archive-users show` | Get archived user data | `ORG_ID` (arg), `USERUUID` (arg) |
|
|
154
|
+
|
|
155
|
+
#### guest-management
|
|
156
|
+
|
|
157
|
+
| Command | Description | Key Options |
|
|
158
|
+
|---------|-------------|-------------|
|
|
159
|
+
| `guest-management create` | Create a guest user | `--subject` (required), `--display-name` (required) |
|
|
160
|
+
| `guest-management list` | Get guest count for the org | (no required options) |
|
|
161
|
+
|
|
162
|
+
### CLI Examples
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
# Initiate bulk activation email resend
|
|
166
|
+
wxcli activation-email create "Y2lzY29zcGFyazovL3VzL09SR..."
|
|
167
|
+
|
|
168
|
+
# Poll for job status (use the jobId from the create response)
|
|
169
|
+
wxcli activation-email list "Y2lzY29zcGFyazovL3VzL09SR..." "JOB_ID_HERE"
|
|
170
|
+
|
|
171
|
+
# Check for errors in the job
|
|
172
|
+
wxcli activation-email list-errors "Y2lzY29zcGFyazovL3VzL09SR..." "JOB_ID_HERE"
|
|
173
|
+
|
|
174
|
+
# Look up an archived user
|
|
175
|
+
wxcli archive-users show "Y2lzY29zcGFyazovL3VzL09SR..." "USER_UUID_HERE"
|
|
176
|
+
|
|
177
|
+
# Create a guest
|
|
178
|
+
wxcli guest-management create \
|
|
179
|
+
--subject "ext-vendor-12345" \
|
|
180
|
+
--display-name "Jane Vendor"
|
|
181
|
+
|
|
182
|
+
# Get guest count
|
|
183
|
+
wxcli guest-management list
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### Async Job Pattern (activation-email)
|
|
187
|
+
|
|
188
|
+
The activation email workflow follows the standard Webex async job pattern:
|
|
189
|
+
|
|
190
|
+
1. **Initiate:** `activation-email create ORG_ID` returns a job ID.
|
|
191
|
+
2. **Poll:** `activation-email list ORG_ID JOB_ID` until status shows completion.
|
|
192
|
+
3. **Check errors:** `activation-email list-errors ORG_ID JOB_ID` to see which users failed.
|
|
193
|
+
|
|
194
|
+
This is the same pattern used by other bulk Webex operations (number management, user CSV import, etc.).
|
|
195
|
+
|
|
196
|
+
### Raw HTTP Fallback
|
|
197
|
+
|
|
198
|
+
#### Initiate Bulk Activation Email
|
|
199
|
+
|
|
200
|
+
```
|
|
201
|
+
POST https://webexapis.com/v1/orgs/{orgId}/sendActivationEmail
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
#### Get Job Status
|
|
205
|
+
|
|
206
|
+
```
|
|
207
|
+
GET https://webexapis.com/v1/orgs/{orgId}/sendActivationEmail/{jobId}
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
#### Get Job Errors
|
|
211
|
+
|
|
212
|
+
```
|
|
213
|
+
GET https://webexapis.com/v1/orgs/{orgId}/sendActivationEmail/{jobId}/errors
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
#### Get Archived User
|
|
217
|
+
|
|
218
|
+
```
|
|
219
|
+
GET https://webexapis.com/v1/orgs/{orgId}/archivedUsers/{useruuid}
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
#### Create Guest
|
|
223
|
+
|
|
224
|
+
```
|
|
225
|
+
POST https://webexapis.com/v1/guests
|
|
226
|
+
Content-Type: application/json
|
|
227
|
+
|
|
228
|
+
{
|
|
229
|
+
"subject": "ext-vendor-12345",
|
|
230
|
+
"displayName": "Jane Vendor"
|
|
231
|
+
}
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
#### Get Guest Count
|
|
235
|
+
|
|
236
|
+
```
|
|
237
|
+
GET https://webexapis.com/v1/guests/count
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
---
|
|
241
|
+
|
|
242
|
+
## 3. Recordings (Admin)
|
|
243
|
+
|
|
244
|
+
### Overview
|
|
245
|
+
|
|
246
|
+
The `admin-recordings` group provides org-wide recording management for administrators and compliance officers. This covers listing, viewing details, soft-deleting (moving to recycle bin), restoring, permanently purging, sharing, and working with group recordings.
|
|
247
|
+
|
|
248
|
+
**Important distinction:** Both `admin-recordings` (admin spec) and `recordings` (calling spec) operate on the Webex recordings API. Use `admin-recordings` for org-wide admin and compliance operations: admin-scoped listing across all users, recycle bin management (move/restore/purge), and compliance officer access. Use `recordings` for user-scoped recording access. See [reporting-analytics.md](reporting-analytics.md) for CDR and call recording report details.
|
|
249
|
+
|
|
250
|
+
### CLI Commands
|
|
251
|
+
|
|
252
|
+
#### Listing & Details
|
|
253
|
+
|
|
254
|
+
| Command | Description | Key Options |
|
|
255
|
+
|---------|-------------|-------------|
|
|
256
|
+
| `admin-recordings list` | List recordings (user scope) | `--from`, `--to`, `--meeting-id`, `--host-email`, `--site-url`, `--topic`, `--format` (MP4/ARF), `--service-type`, `--status` (available/deleted/purged) |
|
|
257
|
+
| `admin-recordings list-recordings-admin` | List recordings for an admin or compliance officer | `--from`, `--to`, `--meeting-id`, `--site-url`, `--topic`, `--format`, `--service-type`, `--status` |
|
|
258
|
+
| `admin-recordings show` | Get recording details | `RECORDING_ID` (arg), `--host-email` |
|
|
259
|
+
| `admin-recordings list-recordings-group` | List group recordings | `--person-id`, `--from`, `--to`, `--site-url`, `--topic`, `--format`, `--service-type` |
|
|
260
|
+
| `admin-recordings show-recordings` | Get group recording details | `RECORDING_ID` (arg), `--person-id` |
|
|
261
|
+
|
|
262
|
+
#### Lifecycle Management
|
|
263
|
+
|
|
264
|
+
| Command | Description | Key Options |
|
|
265
|
+
|---------|-------------|-------------|
|
|
266
|
+
| `admin-recordings create` | Move recordings into the recycle bin (soft-delete) | `--host-email`, `--site-url`, `--json-body` |
|
|
267
|
+
| `admin-recordings create-restore` | Restore recordings from recycle bin | `--host-email`, `--restore-all/--no-restore-all`, `--site-url`, `--json-body` |
|
|
268
|
+
| `admin-recordings create-purge` | Permanently purge recordings from recycle bin | `--host-email`, `--purge-all/--no-purge-all`, `--site-url`, `--json-body` |
|
|
269
|
+
| `admin-recordings delete` | Delete a recording by admin (hard delete) | `RECORDING_ID` (arg), `--force` |
|
|
270
|
+
| `admin-recordings delete-recordings` | Delete a recording (with host-email context) | `RECORDING_ID` (arg), `--host-email`, `--force` |
|
|
271
|
+
|
|
272
|
+
#### Sharing
|
|
273
|
+
|
|
274
|
+
| Command | Description | Key Options |
|
|
275
|
+
|---------|-------------|-------------|
|
|
276
|
+
| `admin-recordings create-access-list-recordings` | Share a recording by ID | `RECORDING_ID` (arg), `--host-email`, `--send-email/--no-send-email`, `--json-body` |
|
|
277
|
+
| `admin-recordings create-access-list-recordings-1` | Share a recording by link | `--host-email`, `--web-share-link`, `--send-email/--no-send-email`, `--json-body` |
|
|
278
|
+
|
|
279
|
+
### CLI Examples
|
|
280
|
+
|
|
281
|
+
```bash
|
|
282
|
+
# List all recordings for compliance (admin-scoped, last 30 days)
|
|
283
|
+
wxcli admin-recordings list-recordings-admin \
|
|
284
|
+
--from "2026-02-17T00:00:00Z" \
|
|
285
|
+
--to "2026-03-19T00:00:00Z" \
|
|
286
|
+
--status available
|
|
287
|
+
|
|
288
|
+
# List recordings for a specific host
|
|
289
|
+
wxcli admin-recordings list --host-email user@example.com
|
|
290
|
+
|
|
291
|
+
# Get recording details
|
|
292
|
+
wxcli admin-recordings show RECORDING_ID_HERE
|
|
293
|
+
|
|
294
|
+
# Soft-delete recordings to recycle bin (requires JSON body with recording IDs)
|
|
295
|
+
wxcli admin-recordings create \
|
|
296
|
+
--host-email user@example.com \
|
|
297
|
+
--json-body '{"recordingIds": ["rec_id_1", "rec_id_2"]}'
|
|
298
|
+
|
|
299
|
+
# Restore all recordings from recycle bin for a host
|
|
300
|
+
wxcli admin-recordings create-restore \
|
|
301
|
+
--host-email user@example.com \
|
|
302
|
+
--restore-all
|
|
303
|
+
|
|
304
|
+
# Permanently purge all recycle bin recordings for a host
|
|
305
|
+
wxcli admin-recordings create-purge \
|
|
306
|
+
--host-email user@example.com \
|
|
307
|
+
--purge-all
|
|
308
|
+
|
|
309
|
+
# Hard-delete a specific recording (admin)
|
|
310
|
+
wxcli admin-recordings delete RECORDING_ID_HERE --force
|
|
311
|
+
|
|
312
|
+
# Share a recording with email notification
|
|
313
|
+
wxcli admin-recordings create-access-list-recordings RECORDING_ID_HERE \
|
|
314
|
+
--host-email host@example.com \
|
|
315
|
+
--send-email \
|
|
316
|
+
--json-body '{"accessList": [{"email": "recipient@example.com", "displayName": "Recipient"}]}'
|
|
317
|
+
|
|
318
|
+
# List group recordings for a person
|
|
319
|
+
wxcli admin-recordings list-recordings-group --person-id PERSON_ID_HERE
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
### Recording Lifecycle States
|
|
323
|
+
|
|
324
|
+
Recordings move through three states:
|
|
325
|
+
|
|
326
|
+
| State | Description | Recoverable? |
|
|
327
|
+
|-------|-------------|--------------|
|
|
328
|
+
| `available` | Active, accessible recording | N/A |
|
|
329
|
+
| `deleted` | In the recycle bin (soft-deleted) | Yes, via `create-restore` |
|
|
330
|
+
| `purged` | Permanently deleted from recycle bin | No |
|
|
331
|
+
|
|
332
|
+
Use `--status` on list commands to filter by state.
|
|
333
|
+
|
|
334
|
+
### Raw HTTP Fallback
|
|
335
|
+
|
|
336
|
+
#### List Recordings (Admin/Compliance)
|
|
337
|
+
|
|
338
|
+
```
|
|
339
|
+
GET https://webexapis.com/v1/admin/recordings?from=2026-02-17T00:00:00Z&to=2026-03-19T00:00:00Z&status=available
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
#### Move to Recycle Bin
|
|
343
|
+
|
|
344
|
+
```
|
|
345
|
+
POST https://webexapis.com/v1/recordings/softDelete
|
|
346
|
+
Content-Type: application/json
|
|
347
|
+
|
|
348
|
+
{
|
|
349
|
+
"hostEmail": "user@example.com",
|
|
350
|
+
"recordingIds": ["rec_id_1", "rec_id_2"]
|
|
351
|
+
}
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
#### Restore from Recycle Bin
|
|
355
|
+
|
|
356
|
+
```
|
|
357
|
+
POST https://webexapis.com/v1/recordings/restore
|
|
358
|
+
Content-Type: application/json
|
|
359
|
+
|
|
360
|
+
{
|
|
361
|
+
"hostEmail": "user@example.com",
|
|
362
|
+
"restoreAll": true
|
|
363
|
+
}
|
|
364
|
+
```
|
|
365
|
+
|
|
366
|
+
#### Purge from Recycle Bin
|
|
367
|
+
|
|
368
|
+
```
|
|
369
|
+
POST https://webexapis.com/v1/recordings/purge
|
|
370
|
+
Content-Type: application/json
|
|
371
|
+
|
|
372
|
+
{
|
|
373
|
+
"hostEmail": "user@example.com",
|
|
374
|
+
"purgeAll": true
|
|
375
|
+
}
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
#### Delete Recording (Admin)
|
|
379
|
+
|
|
380
|
+
```
|
|
381
|
+
DELETE https://webexapis.com/v1/admin/recordings/{recordingId}
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
#### Share a Recording
|
|
385
|
+
|
|
386
|
+
```
|
|
387
|
+
POST https://webexapis.com/v1/recordings/{recordingId}/accessList
|
|
388
|
+
Content-Type: application/json
|
|
389
|
+
|
|
390
|
+
{
|
|
391
|
+
"hostEmail": "host@example.com",
|
|
392
|
+
"sendEmail": true,
|
|
393
|
+
"accessList": [{"email": "recipient@example.com", "displayName": "Recipient"}]
|
|
394
|
+
}
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
#### Share by Link
|
|
398
|
+
|
|
399
|
+
```
|
|
400
|
+
POST https://webexapis.com/v1/recordings/shareLink
|
|
401
|
+
Content-Type: application/json
|
|
402
|
+
|
|
403
|
+
{
|
|
404
|
+
"webShareLink": "https://site.webex.com/...",
|
|
405
|
+
"sendEmail": true
|
|
406
|
+
}
|
|
407
|
+
```
|
|
408
|
+
|
|
409
|
+
---
|
|
410
|
+
|
|
411
|
+
## 4. Data & Compliance
|
|
412
|
+
|
|
413
|
+
### Overview
|
|
414
|
+
|
|
415
|
+
This section covers data exchange infrastructure (data sources), content classification (space classifications), hybrid services resource allocation (resource groups and memberships), and report template discovery.
|
|
416
|
+
|
|
417
|
+
Data sources define endpoints where Webex sends data via JWT-authenticated webhooks. Resource groups control how hybrid services (calendar, calling, messaging) are distributed across on-premises connector clusters. Classifications label Webex spaces for data loss prevention (DLP) policy enforcement.
|
|
418
|
+
|
|
419
|
+
### CLI Commands
|
|
420
|
+
|
|
421
|
+
#### data-sources
|
|
422
|
+
|
|
423
|
+
| Command | Description | Key Options |
|
|
424
|
+
|---------|-------------|-------------|
|
|
425
|
+
| `data-sources create` | Register a new data source | `--audience`, `--nonce`, `--schema-id`, `--subject`, `--token-lifetime-minutes`, `--url` |
|
|
426
|
+
| `data-sources list` | List all data sources | (no required options) |
|
|
427
|
+
| `data-sources list-schemas` | List available data source schemas | (no required options) |
|
|
428
|
+
| `data-sources show` | Get details of a specific schema | `SCHEMA_ID` (arg) |
|
|
429
|
+
| `data-sources show-data-sources` | Get details of a specific data source | `DATA_SOURCE_ID` (arg) |
|
|
430
|
+
| `data-sources update` | Update a data source | `DATA_SOURCE_ID` (arg), `--audience`, `--nonce`, `--schema-id`, `--subject`, `--token-lifetime-minutes`, `--url`, `--status`, `--error-message` |
|
|
431
|
+
| `data-sources delete` | Delete a data source | `DATA_SOURCE_ID` (arg), `--force` |
|
|
432
|
+
|
|
433
|
+
#### classifications
|
|
434
|
+
|
|
435
|
+
| Command | Description | Key Options |
|
|
436
|
+
|---------|-------------|-------------|
|
|
437
|
+
| `classifications list` | List space classifications for the org | (no required options) |
|
|
438
|
+
|
|
439
|
+
#### resource-groups
|
|
440
|
+
|
|
441
|
+
| Command | Description | Key Options |
|
|
442
|
+
|---------|-------------|-------------|
|
|
443
|
+
| `resource-groups list` | List resource groups | (no required options) |
|
|
444
|
+
| `resource-groups show` | Get resource group details | `RESOURCE_GROUP_ID` (arg) |
|
|
445
|
+
|
|
446
|
+
#### resource-group-memberships
|
|
447
|
+
|
|
448
|
+
| Command | Description | Key Options |
|
|
449
|
+
|---------|-------------|-------------|
|
|
450
|
+
| `resource-group-memberships list` | List memberships | `--license-id`, `--person-id`, `--person-org-id`, `--status` (pending/activated/error) |
|
|
451
|
+
| `resource-group-memberships list-v2` | List memberships (v2, with type filter) | `--license-id`, `--id`, `--status`, `--type` (User/Workspace) |
|
|
452
|
+
| `resource-group-memberships show` | Get membership details | `RESOURCE_GROUP_MEMBERSHIP_ID` (arg) |
|
|
453
|
+
| `resource-group-memberships update` | Update a membership | `RESOURCE_GROUP_MEMBERSHIP_ID` (arg), `--resource-group-id`, `--license-id`, `--person-id`, `--person-org-id`, `--status` |
|
|
454
|
+
|
|
455
|
+
#### report-templates
|
|
456
|
+
|
|
457
|
+
| Command | Description | Key Options |
|
|
458
|
+
|---------|-------------|-------------|
|
|
459
|
+
| `report-templates show` | List available report templates | (no required options) |
|
|
460
|
+
|
|
461
|
+
### CLI Examples
|
|
462
|
+
|
|
463
|
+
```bash
|
|
464
|
+
# List available data source schemas
|
|
465
|
+
wxcli data-sources list-schemas
|
|
466
|
+
|
|
467
|
+
# Register a new data source
|
|
468
|
+
wxcli data-sources create \
|
|
469
|
+
--schema-id "SCHEMA_ID_HERE" \
|
|
470
|
+
--url "https://myapp.example.com/webhook" \
|
|
471
|
+
--audience "my-app" \
|
|
472
|
+
--subject "data-feed" \
|
|
473
|
+
--nonce "unique-nonce-value" \
|
|
474
|
+
--token-lifetime-minutes "60"
|
|
475
|
+
|
|
476
|
+
# List all registered data sources
|
|
477
|
+
wxcli data-sources list
|
|
478
|
+
|
|
479
|
+
# Get data source details
|
|
480
|
+
wxcli data-sources show-data-sources DS_ID_HERE
|
|
481
|
+
|
|
482
|
+
# Update a data source (disable it)
|
|
483
|
+
wxcli data-sources update DS_ID_HERE --status "disabled" --error-message "Maintenance window"
|
|
484
|
+
|
|
485
|
+
# Delete a data source
|
|
486
|
+
wxcli data-sources delete DS_ID_HERE --force
|
|
487
|
+
|
|
488
|
+
# List space classifications
|
|
489
|
+
wxcli classifications list
|
|
490
|
+
|
|
491
|
+
# List resource groups
|
|
492
|
+
wxcli resource-groups list
|
|
493
|
+
|
|
494
|
+
# Get resource group details
|
|
495
|
+
wxcli resource-groups show RG_ID_HERE
|
|
496
|
+
|
|
497
|
+
# List resource group memberships filtered by status
|
|
498
|
+
wxcli resource-group-memberships list --status activated
|
|
499
|
+
|
|
500
|
+
# List v2 memberships filtered by type
|
|
501
|
+
wxcli resource-group-memberships list-v2 --type User --status activated
|
|
502
|
+
|
|
503
|
+
# Move a user to a different resource group
|
|
504
|
+
wxcli resource-group-memberships update MEMBERSHIP_ID_HERE \
|
|
505
|
+
--resource-group-id "NEW_RG_ID" \
|
|
506
|
+
--status activated
|
|
507
|
+
|
|
508
|
+
# List available report templates
|
|
509
|
+
wxcli report-templates show
|
|
510
|
+
```
|
|
511
|
+
|
|
512
|
+
### Data Source Registration Flow
|
|
513
|
+
|
|
514
|
+
1. **Discover schemas:** `data-sources list-schemas` to find the schema ID for the data type you want (e.g., CDR events, compliance events).
|
|
515
|
+
2. **Register:** `data-sources create` with the schema ID, your webhook URL, and JWT parameters.
|
|
516
|
+
3. **Verify:** `data-sources show-data-sources DS_ID` to confirm registration and check status.
|
|
517
|
+
4. **Maintain:** `data-sources update DS_ID --status disabled` to pause, or `data-sources delete DS_ID` to remove.
|
|
518
|
+
|
|
519
|
+
### Resource Group Assignment Flow
|
|
520
|
+
|
|
521
|
+
Resource groups are used in hybrid services deployments to control which on-premises cluster handles which users:
|
|
522
|
+
|
|
523
|
+
1. **List groups:** `resource-groups list` to see available clusters.
|
|
524
|
+
2. **Check memberships:** `resource-group-memberships list --license-id LICENSE_ID` to see current assignments.
|
|
525
|
+
3. **Reassign:** `resource-group-memberships update MEMBERSHIP_ID --resource-group-id NEW_GROUP_ID` to move a user to a different cluster.
|
|
526
|
+
|
|
527
|
+
### Raw HTTP Fallback
|
|
528
|
+
|
|
529
|
+
#### Data Sources
|
|
530
|
+
|
|
531
|
+
```
|
|
532
|
+
# List schemas
|
|
533
|
+
GET https://webexapis.com/v1/dataSources/schemas
|
|
534
|
+
|
|
535
|
+
# Get schema details
|
|
536
|
+
GET https://webexapis.com/v1/dataSources/schemas/{schemaId}
|
|
537
|
+
|
|
538
|
+
# List all data sources
|
|
539
|
+
GET https://webexapis.com/v1/dataSources
|
|
540
|
+
|
|
541
|
+
# Get data source details
|
|
542
|
+
GET https://webexapis.com/v1/dataSources/{dataSourceId}
|
|
543
|
+
|
|
544
|
+
# Register data source
|
|
545
|
+
POST https://webexapis.com/v1/dataSources
|
|
546
|
+
Content-Type: application/json
|
|
547
|
+
|
|
548
|
+
{
|
|
549
|
+
"schemaId": "schema_id",
|
|
550
|
+
"url": "https://myapp.example.com/webhook",
|
|
551
|
+
"audience": "my-app",
|
|
552
|
+
"subject": "data-feed",
|
|
553
|
+
"nonce": "unique-nonce-value",
|
|
554
|
+
"tokenLifetimeMinutes": 60
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
# Update data source
|
|
558
|
+
PUT https://webexapis.com/v1/dataSources/{dataSourceId}
|
|
559
|
+
|
|
560
|
+
# Delete data source
|
|
561
|
+
DELETE https://webexapis.com/v1/dataSources/{dataSourceId}
|
|
562
|
+
```
|
|
563
|
+
|
|
564
|
+
#### Classifications
|
|
565
|
+
|
|
566
|
+
```
|
|
567
|
+
GET https://webexapis.com/v1/classifications
|
|
568
|
+
```
|
|
569
|
+
|
|
570
|
+
#### Resource Groups
|
|
571
|
+
|
|
572
|
+
```
|
|
573
|
+
# List resource groups
|
|
574
|
+
GET https://webexapis.com/v1/resourceGroups
|
|
575
|
+
|
|
576
|
+
# Get resource group details
|
|
577
|
+
GET https://webexapis.com/v1/resourceGroups/{resourceGroupId}
|
|
578
|
+
```
|
|
579
|
+
|
|
580
|
+
#### Resource Group Memberships
|
|
581
|
+
|
|
582
|
+
```
|
|
583
|
+
# List memberships
|
|
584
|
+
GET https://webexapis.com/v1/resourceGroup/memberships?status=activated
|
|
585
|
+
|
|
586
|
+
# List memberships v2
|
|
587
|
+
GET https://webexapis.com/v1/resourceGroup/memberships/v2?type=User&status=activated
|
|
588
|
+
|
|
589
|
+
# Get membership details
|
|
590
|
+
GET https://webexapis.com/v1/resourceGroup/memberships/{resourceGroupMembershipId}
|
|
591
|
+
|
|
592
|
+
# Update membership
|
|
593
|
+
PUT https://webexapis.com/v1/resourceGroup/memberships/{resourceGroupMembershipId}
|
|
594
|
+
Content-Type: application/json
|
|
595
|
+
|
|
596
|
+
{
|
|
597
|
+
"resourceGroupId": "new_group_id",
|
|
598
|
+
"licenseId": "license_id",
|
|
599
|
+
"personId": "person_id",
|
|
600
|
+
"personOrgId": "org_id",
|
|
601
|
+
"status": "activated"
|
|
602
|
+
}
|
|
603
|
+
```
|
|
604
|
+
|
|
605
|
+
#### Report Templates
|
|
606
|
+
|
|
607
|
+
```
|
|
608
|
+
GET https://webexapis.com/v1/report/templates
|
|
609
|
+
```
|
|
610
|
+
|
|
611
|
+
For calling-specific report creation and download, see [reporting-analytics.md](reporting-analytics.md).
|
|
612
|
+
|
|
613
|
+
---
|
|
614
|
+
|
|
615
|
+
## Gotchas
|
|
616
|
+
|
|
617
|
+
1. **`activation-email create` is an async job.** The response returns a job ID, not immediate confirmation. You must poll with `activation-email list` until the job completes, then check `activation-email list-errors` for failures. There is no webhook notification for job completion.
|
|
618
|
+
|
|
619
|
+
2. **`authorizations delete` is destructive and org-wide.** It revokes ALL authorizations for the given client ID across the entire organization. There is no undo. Always use `authorizations list` first to understand the blast radius before deleting.
|
|
620
|
+
|
|
621
|
+
3. **Service app tokens are short-lived.** The token returned by `service-apps create` expires quickly (typically minutes, not hours). Your automation must handle token refresh by calling `service-apps create` again before expiration. The admin must have pre-authorized the service app in Control Hub -- the CLI cannot perform that step.
|
|
622
|
+
|
|
623
|
+
4. **Client secret and refresh token are shown only once.** When registering a service app on developer.webex.com, the client secret is displayed only at creation time. Similarly, when generating tokens after admin authorization, the refresh token is shown only once. Copy both immediately and store securely. If lost, you must regenerate credentials (client secret) or re-authorize and generate new tokens (refresh token).
|
|
624
|
+
|
|
625
|
+
5. **`admin-recordings create` is a soft-delete, not a true create.** Despite the command name (`create` maps to POST), this moves recordings into the recycle bin. It does not create a recording. The `--json-body` must include the `recordingIds` array. Similarly, `create-restore` and `create-purge` are POST operations that restore from or permanently delete the recycle bin.
|
|
626
|
+
|
|
627
|
+
6. **Two delete commands for recordings.** `admin-recordings delete` (admin hard-delete by recording ID) vs `admin-recordings delete-recordings` (delete with host-email context). The former is admin-only; the latter can specify a host email for user-context deletion.
|
|
628
|
+
|
|
629
|
+
7. **`report-templates show` actually lists templates.** The command is named `show` (maps to GET on a list endpoint) but returns all available report templates, not a single template. Use this to discover template IDs, then use `reports` commands from the calling spec to create and download reports.
|
|
630
|
+
|
|
631
|
+
8. **Data source `--token-lifetime-minutes` controls JWT expiry.** The token Webex creates for authenticating to your webhook URL expires after this many minutes. Set it long enough to avoid gaps in data delivery, but short enough for security. Must be refreshed before expiration by updating the data source.
|
|
632
|
+
|
|
633
|
+
9. **Resource group memberships v1 vs v2.** `list-v2` adds the `--type` filter (User/Workspace) and `--id` filter that v1 lacks. Prefer `list-v2` for new implementations.
|
|
634
|
+
|
|
635
|
+
10. **`admin-recordings list` vs `list-recordings-admin`.** Both list recordings, but `list` is user-scoped (uses `--host-email`) while `list-recordings-admin` is admin/compliance-scoped (searches across all users in the org without requiring a host email).
|
|
636
|
+
|
|
637
|
+
---
|
|
638
|
+
|
|
639
|
+
## See Also
|
|
640
|
+
|
|
641
|
+
- **[reporting-analytics.md](reporting-analytics.md)** -- CDR, report creation/download, call quality metrics, and queue/AA statistics. The `report-templates show` command here discovers template IDs; use `reports` commands from that doc to create and download reports.
|
|
642
|
+
- **[authentication.md](authentication.md)** -- OAuth flows, service app authorization, token scopes. Service apps require admin pre-authorization in Control Hub before `service-apps create` can issue tokens.
|
|
643
|
+
- **[webhooks-events.md](webhooks-events.md)** -- Webhook event subscriptions. Data sources are a different mechanism (JWT-authenticated push to your endpoint) but serve a similar purpose of delivering Webex data to external systems.
|