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,467 @@
|
|
|
1
|
+
# Device Platform Management (RoomOS Configurations, Personalization, xAPI)
|
|
2
|
+
|
|
3
|
+
## Sources
|
|
4
|
+
|
|
5
|
+
- wxc_sdk v1.30.0
|
|
6
|
+
- OpenAPI spec: specs/webex-device.json
|
|
7
|
+
- developer.webex.com Device Platform APIs
|
|
8
|
+
|
|
9
|
+
This document covers three Webex APIs that manage **device software** on cloud-registered RoomOS devices: configuration key management, workspace personalization, and xAPI command execution / status queries.
|
|
10
|
+
|
|
11
|
+
These APIs operate on the software layer of a device that is already provisioned and cloud-registered. They do not create, delete, or activate devices — that is a separate concern.
|
|
12
|
+
|
|
13
|
+
> **For phone provisioning, activation codes, MAC registration, DECT networks, and telephony device settings** see [devices-core.md](devices-core.md).
|
|
14
|
+
>
|
|
15
|
+
> **For workspace creation and workspace call settings** see [devices-workspaces.md](devices-workspaces.md).
|
|
16
|
+
>
|
|
17
|
+
> **For DECT base stations and handsets** see [devices-dect.md](devices-dect.md).
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Prerequisites
|
|
22
|
+
|
|
23
|
+
Before using any of the three APIs documented here, you need:
|
|
24
|
+
|
|
25
|
+
1. **A working auth token.** Verify with `wxcli whoami`. Token type (admin, user, service app) affects which scopes are available — see the Scopes section below.
|
|
26
|
+
|
|
27
|
+
2. **At least one cloud-registered RoomOS device** (for device-configurations and xAPI). This means a Cisco Room, Board, or Desk series device registered to Webex cloud. MPP phones do not support device-configurations key management or xAPI.
|
|
28
|
+
|
|
29
|
+
3. **At least one workspace with a device** (for workspace-personalization). The workspace must already exist and have a device assigned to it.
|
|
30
|
+
|
|
31
|
+
4. **A device ID.** All three APIs require a device ID. To find one:
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
wxcli devices list --output json
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
This returns all devices in the org. Filter for the device you need and capture its `id` field. See [devices-core.md](devices-core.md) for details on device listing and filtering.
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Scopes
|
|
42
|
+
|
|
43
|
+
| API | Read Scope | Write Scope |
|
|
44
|
+
|-----|-----------|-------------|
|
|
45
|
+
| Device Configurations | `spark-admin:devices_read` | `spark-admin:devices_write` |
|
|
46
|
+
| Workspace Personalization | `spark-admin:workspaces_read` | `spark-admin:workspaces_write` |
|
|
47
|
+
| xAPI Status | `spark:xapi_statuses` | — |
|
|
48
|
+
| xAPI Commands | — | `spark:xapi_commands` |
|
|
49
|
+
|
|
50
|
+
**Key distinction:** Device Configurations and Workspace Personalization use admin-level scopes (`spark-admin:`). xAPI uses user-level scopes (`spark:`). A token may have one set but not the other.
|
|
51
|
+
|
|
52
|
+
For full xAPI access (both status queries and command execution), ensure your token has both `spark:xapi_statuses` and `spark:xapi_commands`. The official Webex API documentation specifically requires these scopes and does not mention `spark-admin:devices_read/write` as a substitute.
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## 1. Device Configurations
|
|
57
|
+
|
|
58
|
+
### What It Does
|
|
59
|
+
|
|
60
|
+
The Device Configurations API reads and writes RoomOS configuration keys on a specific device. Configuration keys follow a hierarchical dot-notation namespace — `Audio.Ultrasound.MaxVolume`, `Conference.MaxReceiveCallRate`, `Video.Input.Connector[1].Name`, and so on. Each key has a current value, a source (default vs. configured), and editability rules.
|
|
61
|
+
|
|
62
|
+
Changes are applied via JSON Patch operations (`replace` to set a value, `remove` to revert to the schema default). The API supports filtering by key name, wildcard patterns, and index ranges.
|
|
63
|
+
|
|
64
|
+
This API targets RoomOS devices only (Room, Board, Desk series). MPP phones do not expose configuration keys through this interface.
|
|
65
|
+
|
|
66
|
+
### CLI Commands
|
|
67
|
+
|
|
68
|
+
**List / read configurations:**
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
wxcli device-configurations show --device-id DEVICE_ID
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
With key filtering:
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
wxcli device-configurations show --device-id DEVICE_ID --key "Audio.Ultrasound.*"
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
| Flag | Required | Description |
|
|
81
|
+
|------|----------|-------------|
|
|
82
|
+
| `--device-id` | Yes | The device to read configurations from |
|
|
83
|
+
| `--key` | No | Filter expression — absolute key, wildcard, or range (see Key Filtering below) |
|
|
84
|
+
| `--output` / `-o` | No | Output format: `table` or `json` (default: `json`) |
|
|
85
|
+
| `--debug` | No | Print debug info |
|
|
86
|
+
|
|
87
|
+
**Update configurations:**
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
wxcli device-configurations update --device-id DEVICE_ID \
|
|
91
|
+
--json-body '[{"op": "replace", "path": "Audio.Ultrasound.MaxVolume/sources/configured/value", "value": 70}]'
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
| Flag | Required | Description |
|
|
95
|
+
|------|----------|-------------|
|
|
96
|
+
| `--device-id` | Yes | The device to update configurations on |
|
|
97
|
+
| `--json-body` | Yes (effectively) | Full JSON Patch array — see note below |
|
|
98
|
+
| `--op` | No | **Non-functional** — see warning below |
|
|
99
|
+
| `--path` | No | **Non-functional** — see warning below |
|
|
100
|
+
| `--debug` | No | Print debug info |
|
|
101
|
+
|
|
102
|
+
> **WARNING:** The `--op` and `--path` flags exist on the `update` command but do NOT produce a valid JSON Patch array. They build a flat object `{"op": "...", "path": "..."}` instead of the required array `[{"op": "...", "path": "..."}]`, and provide no way to set a `value` field. **Always use `--json-body` for update operations.**
|
|
103
|
+
|
|
104
|
+
### Key Filtering
|
|
105
|
+
|
|
106
|
+
The `--key` flag on the `show` command accepts several filter formats:
|
|
107
|
+
|
|
108
|
+
| Format | Example | Behavior |
|
|
109
|
+
|--------|---------|----------|
|
|
110
|
+
| Absolute key | `"Conference.MaxReceiveCallRate"` | Returns one specific configuration |
|
|
111
|
+
| Wildcard | `"Audio.Ultrasound.*"` | Returns all keys matching the pattern |
|
|
112
|
+
| Range | `"FacilityService.Service[1..3].Name"` | Returns keys for indices 1 through 3 |
|
|
113
|
+
|
|
114
|
+
Square brackets in filter expressions must be URL-encoded (`%5B` / `%5D`) when using raw HTTP. The CLI handles this encoding automatically.
|
|
115
|
+
|
|
116
|
+
### Configuration Update Pattern
|
|
117
|
+
|
|
118
|
+
Updates use JSON Patch operations. The body is a JSON array of patch operations:
|
|
119
|
+
|
|
120
|
+
**Set a value (replace):**
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
wxcli device-configurations update --device-id DEVICE_ID \
|
|
124
|
+
--json-body '[{"op": "replace", "path": "Audio.Ultrasound.MaxVolume/sources/configured/value", "value": 70}]'
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
**Revert to default (remove):**
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
wxcli device-configurations update --device-id DEVICE_ID \
|
|
131
|
+
--json-body '[{"op": "remove", "path": "Audio.Ultrasound.MaxVolume/sources/configured/value"}]'
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
**Multiple operations in one request:**
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
wxcli device-configurations update --device-id DEVICE_ID \
|
|
138
|
+
--json-body '[
|
|
139
|
+
{"op": "replace", "path": "Audio.Ultrasound.MaxVolume/sources/configured/value", "value": 70},
|
|
140
|
+
{"op": "replace", "path": "Conference.MaxReceiveCallRate/sources/configured/value", "value": 6000}
|
|
141
|
+
]'
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
The `op` field accepts two values:
|
|
145
|
+
- `replace` — set the key to a specific value
|
|
146
|
+
- `remove` — clear the configured value and revert to the schema default
|
|
147
|
+
|
|
148
|
+
The `path` field must end in `/sources/configured/value`. The portion before that suffix is the configuration key name using dot-notation (e.g., `Audio.Ultrasound.MaxVolume`).
|
|
149
|
+
|
|
150
|
+
### Raw HTTP
|
|
151
|
+
|
|
152
|
+
**Read configurations:**
|
|
153
|
+
|
|
154
|
+
```
|
|
155
|
+
GET https://webexapis.com/v1/deviceConfigurations?deviceId={deviceId}
|
|
156
|
+
GET https://webexapis.com/v1/deviceConfigurations?deviceId={deviceId}&key=Audio.*
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
**Update configurations:**
|
|
160
|
+
|
|
161
|
+
```
|
|
162
|
+
PATCH https://webexapis.com/v1/deviceConfigurations?deviceId={deviceId}
|
|
163
|
+
Content-Type: application/json-patch+json
|
|
164
|
+
|
|
165
|
+
[
|
|
166
|
+
{
|
|
167
|
+
"op": "replace",
|
|
168
|
+
"path": "Audio.Ultrasound.MaxVolume/sources/configured/value",
|
|
169
|
+
"value": 70
|
|
170
|
+
}
|
|
171
|
+
]
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
Note the content type: `application/json-patch+json`, not `application/json`. The CLI handles this automatically. Raw HTTP callers must set the header correctly or the request will fail.
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
## 2. Workspace Personalization
|
|
179
|
+
|
|
180
|
+
### What It Does
|
|
181
|
+
|
|
182
|
+
Workspace Personalization temporarily personalizes a shared workspace device for a specific user. When personalized, the user's speed dials, favorites, and call history appear on the workspace device. This is useful for hot-desk-like scenarios on RoomOS collaboration devices (Room, Board, Desk series).
|
|
183
|
+
|
|
184
|
+
Personalization is an **asynchronous operation**. The `create` command initiates personalization and returns immediately. You must poll the task endpoint with `show` to determine when personalization is complete.
|
|
185
|
+
|
|
186
|
+
### CLI Commands
|
|
187
|
+
|
|
188
|
+
**Personalize a workspace for a user:**
|
|
189
|
+
|
|
190
|
+
```bash
|
|
191
|
+
wxcli workspace-personalization create WORKSPACE_ID --email user@example.com
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
| Flag / Argument | Required | Description |
|
|
195
|
+
|-----------------|----------|-------------|
|
|
196
|
+
| `WORKSPACE_ID` (positional) | Yes | The workspace to personalize |
|
|
197
|
+
| `--email` | Yes | Email address of the user whose preferences to apply |
|
|
198
|
+
| `--json-body` | No | Full JSON body (overrides `--email`) |
|
|
199
|
+
| `--debug` | No | Print debug info |
|
|
200
|
+
|
|
201
|
+
**Check personalization task status:**
|
|
202
|
+
|
|
203
|
+
```bash
|
|
204
|
+
wxcli workspace-personalization show WORKSPACE_ID
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
| Flag / Argument | Required | Description |
|
|
208
|
+
|-----------------|----------|-------------|
|
|
209
|
+
| `WORKSPACE_ID` (positional) | Yes | The workspace to check |
|
|
210
|
+
| `--output` / `-o` | No | Output format: `table` or `json` (default: `json`) |
|
|
211
|
+
| `--debug` | No | Print debug info |
|
|
212
|
+
|
|
213
|
+
### Workflow
|
|
214
|
+
|
|
215
|
+
1. **Get a workspace ID** (if you don't have one):
|
|
216
|
+
```bash
|
|
217
|
+
wxcli workspaces list --output json
|
|
218
|
+
```
|
|
219
|
+
If the workspace doesn't exist yet, create it first — see [devices-workspaces.md](devices-workspaces.md).
|
|
220
|
+
|
|
221
|
+
2. **Personalize the workspace:**
|
|
222
|
+
```bash
|
|
223
|
+
wxcli workspace-personalization create WORKSPACE_ID --email user@example.com
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
3. **Poll for completion** (personalization takes approximately 30 seconds):
|
|
227
|
+
```bash
|
|
228
|
+
wxcli workspace-personalization show WORKSPACE_ID
|
|
229
|
+
```
|
|
230
|
+
- Success: `{ "success": true }`
|
|
231
|
+
- Failure: `{ "success": false, "errorDescription": "..." }`
|
|
232
|
+
|
|
233
|
+
4. **Common failure:** `"Device is offline"` — the workspace device must be powered on, online, and registered to Webex cloud.
|
|
234
|
+
|
|
235
|
+
### Relationship to Hot Desking
|
|
236
|
+
|
|
237
|
+
Hot desking and workspace personalization both let a user temporarily use a shared device. They are **not the same mechanism**:
|
|
238
|
+
|
|
239
|
+
| Feature | Hot Desking | Workspace Personalization |
|
|
240
|
+
|---------|------------|--------------------------|
|
|
241
|
+
| Device type | MPP phones | RoomOS devices (Room, Board, Desk) |
|
|
242
|
+
| Mechanism | Voice portal login or app-based | API-driven user binding |
|
|
243
|
+
| Managed by | `manage-devices` skill / telephony settings | `device-platform` skill / personalization API |
|
|
244
|
+
| Scope | Calling features only | User preferences (speed dials, favorites, call history) |
|
|
245
|
+
|
|
246
|
+
### Raw HTTP
|
|
247
|
+
|
|
248
|
+
**Personalize a workspace:**
|
|
249
|
+
|
|
250
|
+
```
|
|
251
|
+
POST https://webexapis.com/v1/workspaces/{workspaceId}/personalize
|
|
252
|
+
Content-Type: application/json
|
|
253
|
+
|
|
254
|
+
{
|
|
255
|
+
"email": "user@example.com"
|
|
256
|
+
}
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
**Check personalization task status:**
|
|
260
|
+
|
|
261
|
+
```
|
|
262
|
+
GET https://webexapis.com/v1/workspaces/{workspaceId}/personalizationTask
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
---
|
|
266
|
+
|
|
267
|
+
## 3. xAPI (Device Command Execution & Status Queries)
|
|
268
|
+
|
|
269
|
+
### What It Does
|
|
270
|
+
|
|
271
|
+
The xAPI interface lets you execute commands on RoomOS devices and query their real-time status. This is the same xAPI available on the device's local interface, but accessed through the Webex cloud — enabling remote programmatic control of devices anywhere in the org.
|
|
272
|
+
|
|
273
|
+
Use cases include:
|
|
274
|
+
- Room booking and digital signage integrations
|
|
275
|
+
- Remote volume, standby, and display control
|
|
276
|
+
- Real-time room analytics (people count, call state)
|
|
277
|
+
- Custom automations triggered by events or schedules
|
|
278
|
+
|
|
279
|
+
xAPI works **only with RoomOS devices** (Room, Board, Desk series). MPP phones do not support xAPI. The device must be online and cloud-registered for commands to reach it.
|
|
280
|
+
|
|
281
|
+
### CLI Commands
|
|
282
|
+
|
|
283
|
+
**Query device status:**
|
|
284
|
+
|
|
285
|
+
```bash
|
|
286
|
+
wxcli xapi show --device-id DEVICE_ID --name "Audio.Volume"
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
| Flag | Required | Description |
|
|
290
|
+
|------|----------|-------------|
|
|
291
|
+
| `--device-id` | Yes | The RoomOS device to query |
|
|
292
|
+
| `--name` | Yes | Status expression(s) — comma-separated, max 10 per request |
|
|
293
|
+
| `--output` / `-o` | No | Output format: `table` or `json` (default: `json`) |
|
|
294
|
+
| `--debug` | No | Print debug info |
|
|
295
|
+
|
|
296
|
+
**Execute a command (no arguments):**
|
|
297
|
+
|
|
298
|
+
```bash
|
|
299
|
+
wxcli xapi create Standby.Activate --device-id DEVICE_ID
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
When no `--json-body` is provided, the CLI automatically populates `deviceId` in the request body from the `--device-id` flag. This works for commands that take no arguments.
|
|
303
|
+
|
|
304
|
+
**Execute a command (with arguments):**
|
|
305
|
+
|
|
306
|
+
```bash
|
|
307
|
+
wxcli xapi create Audio.Volume.Set --device-id DEVICE_ID \
|
|
308
|
+
--json-body '{"deviceId": "DEVICE_ID", "arguments": {"Level": 50}}'
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
| Flag / Argument | Required | Description |
|
|
312
|
+
|-----------------|----------|-------------|
|
|
313
|
+
| `COMMAND_NAME` (positional) | Yes | xAPI command name in dot-notation (e.g., `Audio.Volume.Set`) |
|
|
314
|
+
| `--device-id` | Yes | The RoomOS device to send the command to |
|
|
315
|
+
| `--json-body` | No | Full JSON body with arguments — see note below |
|
|
316
|
+
| `--debug` | No | Print debug info |
|
|
317
|
+
|
|
318
|
+
> **IMPORTANT:** When using `--json-body`, the CLI does NOT auto-inject `--device-id` into the body. You must include `"deviceId"` in the JSON body yourself. Without `--json-body`, the CLI auto-populates `deviceId` from `--device-id` (works for no-argument commands like `Standby.Activate`).
|
|
319
|
+
|
|
320
|
+
### Status Queries
|
|
321
|
+
|
|
322
|
+
The `show` command queries real-time status values from a device. The `--name` flag accepts dot-notation status path expressions.
|
|
323
|
+
|
|
324
|
+
**Single status query:**
|
|
325
|
+
|
|
326
|
+
```bash
|
|
327
|
+
wxcli xapi show --device-id DEVICE_ID --name "Audio.Volume"
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
**Multiple status queries (comma-separated, max 10):**
|
|
331
|
+
|
|
332
|
+
```bash
|
|
333
|
+
wxcli xapi show --device-id DEVICE_ID --name "Audio.Volume,SystemUnit.State.NumberOfActiveCalls"
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
#### Common Status Queries
|
|
337
|
+
|
|
338
|
+
| Status Path | Returns |
|
|
339
|
+
|-------------|---------|
|
|
340
|
+
| `Audio.Volume` | Current volume level |
|
|
341
|
+
| `SystemUnit.State.NumberOfActiveCalls` | Active call count |
|
|
342
|
+
| `Network[1].IPv4.Address` | Device IP address |
|
|
343
|
+
| `RoomAnalytics.PeopleCount.Current` | Number of people detected in the room |
|
|
344
|
+
| `Peripherals.ConnectedDevice[*].Name` | Connected peripheral device names |
|
|
345
|
+
| `Standby.State` | Whether device is in standby or active |
|
|
346
|
+
| `SystemUnit.Software.DisplayName` | Current firmware version |
|
|
347
|
+
| `SystemUnit.ProductId` | Device model identifier |
|
|
348
|
+
|
|
349
|
+
### Command Execution
|
|
350
|
+
|
|
351
|
+
Commands are sent via the `create` subcommand. The positional argument is the xAPI command name in dot-notation. Arguments to the command are passed via `--json-body`.
|
|
352
|
+
|
|
353
|
+
**No-argument command (deviceId auto-populated):**
|
|
354
|
+
|
|
355
|
+
```bash
|
|
356
|
+
wxcli xapi create Standby.Activate --device-id DEVICE_ID
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
**Command with arguments (deviceId must be in body):**
|
|
360
|
+
|
|
361
|
+
```bash
|
|
362
|
+
wxcli xapi create Audio.Volume.Set --device-id DEVICE_ID \
|
|
363
|
+
--json-body '{"deviceId": "DEVICE_ID", "arguments": {"Level": 50}}'
|
|
364
|
+
```
|
|
365
|
+
|
|
366
|
+
```bash
|
|
367
|
+
wxcli xapi create Call.Dial --device-id DEVICE_ID \
|
|
368
|
+
--json-body '{"deviceId": "DEVICE_ID", "arguments": {"Number": "user@example.com"}}'
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
```bash
|
|
372
|
+
wxcli xapi create UserInterface.Message.Alert.Display --device-id DEVICE_ID \
|
|
373
|
+
--json-body '{"deviceId": "DEVICE_ID", "arguments": {"Title": "Notice", "Text": "Meeting starts in 5 minutes", "Duration": 30}}'
|
|
374
|
+
```
|
|
375
|
+
|
|
376
|
+
#### Common xAPI Commands
|
|
377
|
+
|
|
378
|
+
| Command | Arguments | Use Case |
|
|
379
|
+
|---------|-----------|----------|
|
|
380
|
+
| `Audio.Volume.Set` | `Level` (0-100) | Set volume |
|
|
381
|
+
| `Audio.Volume.Mute` | — | Mute microphone |
|
|
382
|
+
| `Audio.Volume.Unmute` | — | Unmute microphone |
|
|
383
|
+
| `Call.Dial` | `Number` | Initiate a call |
|
|
384
|
+
| `Call.Disconnect` | `CallId` | End a call |
|
|
385
|
+
| `Standby.Activate` | — | Put device in standby |
|
|
386
|
+
| `Standby.Deactivate` | — | Wake device from standby |
|
|
387
|
+
| `Bookings.List` | `Days`, `Offset` | Get calendar bookings |
|
|
388
|
+
| `Message.Send` | `Text` | Display on-screen message |
|
|
389
|
+
| `UserInterface.Message.Alert.Display` | `Title`, `Text`, `Duration` | Show alert popup on screen |
|
|
390
|
+
|
|
391
|
+
This table is representative, not exhaustive. The full xAPI command namespace is documented by Cisco at [roomos.cisco.com/xapi](https://roomos.cisco.com/xapi).
|
|
392
|
+
|
|
393
|
+
### xAPI Command Reference
|
|
394
|
+
|
|
395
|
+
The cloud xAPI interface exposed by the Webex API mirrors the local xAPI available on RoomOS devices. Any command or status path documented in Cisco's RoomOS xAPI reference can be used through the CLI.
|
|
396
|
+
|
|
397
|
+
- **Full xAPI namespace:** [roomos.cisco.com/xapi](https://roomos.cisco.com/xapi)
|
|
398
|
+
- **Device Developers Guide:** [developer.webex.com](https://developer.webex.com) (xAPI section)
|
|
399
|
+
|
|
400
|
+
### Raw HTTP
|
|
401
|
+
|
|
402
|
+
**Query status:**
|
|
403
|
+
|
|
404
|
+
```
|
|
405
|
+
GET https://webexapis.com/v1/xapi/status?deviceId={deviceId}&name=Audio.Volume
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
**Execute a command:**
|
|
409
|
+
|
|
410
|
+
```
|
|
411
|
+
POST https://webexapis.com/v1/xapi/command/Audio.Volume.Set
|
|
412
|
+
Content-Type: application/json
|
|
413
|
+
|
|
414
|
+
{
|
|
415
|
+
"deviceId": "DEVICE_ID",
|
|
416
|
+
"arguments": {
|
|
417
|
+
"Level": 50
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
```
|
|
421
|
+
|
|
422
|
+
**Execute a no-argument command:**
|
|
423
|
+
|
|
424
|
+
```
|
|
425
|
+
POST https://webexapis.com/v1/xapi/command/Standby.Activate
|
|
426
|
+
Content-Type: application/json
|
|
427
|
+
|
|
428
|
+
{
|
|
429
|
+
"deviceId": "DEVICE_ID"
|
|
430
|
+
}
|
|
431
|
+
```
|
|
432
|
+
|
|
433
|
+
---
|
|
434
|
+
|
|
435
|
+
## Gotchas
|
|
436
|
+
|
|
437
|
+
1. **xAPI only works with RoomOS devices.** Room, Board, and Desk series devices support xAPI. MPP phones do not. If you need to manage MPP phone settings, use the telephony device settings API — see [devices-core.md](devices-core.md).
|
|
438
|
+
|
|
439
|
+
2. **Device must be online and cloud-registered.** xAPI commands and device configuration reads/writes require the device to be reachable through Webex cloud. Offline devices will return errors or fail silently.
|
|
440
|
+
|
|
441
|
+
3. **Device Configurations PATCH requires `application/json-patch+json`.** The content type for configuration updates is `application/json-patch+json`, not `application/json`. The CLI sets this automatically. Raw HTTP callers must set the `Content-Type` header correctly or the request will be rejected.
|
|
442
|
+
|
|
443
|
+
4. **xAPI `--name` accepts comma-separated expressions, max 10 per request.** If you need more than 10 status values, make multiple requests.
|
|
444
|
+
|
|
445
|
+
5. **Workspace personalization is asynchronous.** The `create` command returns immediately. Always poll with `show` until the task reports `success: true` or `success: false`. Do not assume instant completion — typical completion time is approximately 30 seconds.
|
|
446
|
+
|
|
447
|
+
6. **xAPI scopes are user-level, not admin-level.** xAPI status queries need `spark:xapi_statuses` and command execution needs `spark:xapi_commands`. These are `spark:` scopes (user-level), not `spark-admin:` scopes. The official Webex API documentation does not indicate that `spark-admin:devices_read/write` can substitute for these scopes. Ensure your token explicitly includes the `spark:xapi_*` scopes for xAPI operations.
|
|
448
|
+
|
|
449
|
+
7. **Configuration key paths use different separators in different contexts.** The key filter (for reading) uses dot-notation: `Audio.Ultrasound.MaxVolume`. The update path field uses dots for the key portion but forward slashes for the path suffix: `Audio.Ultrasound.MaxVolume/sources/configured/value`. Do not mix them up.
|
|
450
|
+
|
|
451
|
+
8. **The `device-configurations update` command's `--op` and `--path` flags are non-functional.** They produce a flat JSON object instead of the required JSON Patch array, and provide no way to set a value. Always use `--json-body` for configuration updates.
|
|
452
|
+
|
|
453
|
+
9. **xAPI `create` with `--json-body` does not auto-inject deviceId.** When you pass `--json-body`, the CLI uses the JSON body as-is without injecting the `--device-id` value. You must include `"deviceId"` in your JSON body manually. Without `--json-body`, the CLI correctly populates `deviceId` from `--device-id`.
|
|
454
|
+
|
|
455
|
+
10. **Device configuration schema is device-reported and firmware-dependent.** The set of available config keys is not static — each device reports its own schema when it registers with Webex cloud. Newer PhoneOS/RoomOS firmware versions may expose keys that older versions do not. Offline or `offline_expired` devices retain a stale schema. A key visible in Control Hub's UI may not appear in the Device Configurations API if the device's firmware hasn't been updated to a version that includes it in the reported schema.
|
|
456
|
+
|
|
457
|
+
11. **Per-line ringtone (`Lines.Line[N].CallFeatureSettings.Ringtone`) is available on PhoneOS 4.1+.** On PhoneOS 3.5.1 and 3.6.1 the key does not appear in the Device Configurations API schema — only `Lines.Line[N].CallFeatureSettings.MissedCallNotification` is present on those versions. On PhoneOS 4.1.1 (build 20260318), the `Ringtone` key is present and writable for all 16 line positions. Value space is `"No Ring"` or `"1"` through `"13"`. Set per-line ringtones with a single multi-operation PATCH: `[{"op": "replace", "path": "Lines.Line[1].CallFeatureSettings.Ringtone/sources/configured/value", "value": "2"}, ...]`. Revert a line to default with `"op": "remove"`.
|
|
458
|
+
12. **Static device settings API and dynamic settings API are separate surfaces.** Static (`/telephony/config/devices/{id}/settings`) uses JSON objects under `customizations.mpp`. Dynamic (`/telephony/config/devices/{id}/dynamicSettings`) uses tag-based addressing (`%ENABLE_BLUETOOTH%`). Do not mix them — use static API for standard MPP/PhoneOS settings.
|
|
459
|
+
|
|
460
|
+
---
|
|
461
|
+
|
|
462
|
+
## See Also
|
|
463
|
+
|
|
464
|
+
- [devices-core.md](devices-core.md) — Device CRUD, activation codes, MAC provisioning, telephony device settings
|
|
465
|
+
- [devices-dect.md](devices-dect.md) — DECT networks, base stations, handsets
|
|
466
|
+
- [devices-workspaces.md](devices-workspaces.md) — Workspace creation, workspace call settings, workspace locations
|
|
467
|
+
- [authentication.md](authentication.md) — Token types, scopes, OAuth flows
|