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,223 @@
|
|
|
1
|
+
# Call Flow Trace Domain
|
|
2
|
+
|
|
3
|
+
**Covers:** "What happens when someone calls +1-512-555-1000?", call path tracing, schedule evaluation, routing chain visualization.
|
|
4
|
+
|
|
5
|
+
This is the most complex domain module. It traces the path a call takes through the routing chain, evaluating time-of-day schedules to show the specific path at a given moment.
|
|
6
|
+
|
|
7
|
+
## Question Patterns
|
|
8
|
+
|
|
9
|
+
| Pattern | Example |
|
|
10
|
+
|---------|---------|
|
|
11
|
+
| Simple trace | "What happens when someone calls +1-512-555-1000?" |
|
|
12
|
+
| Time-specific | "What happens if someone calls the main number at 7pm Saturday?" |
|
|
13
|
+
| Schedule check | "Is the Main auto attendant on business hours or after hours right now?" |
|
|
14
|
+
| Path comparison | "What's the difference between calling during business hours vs after hours?" |
|
|
15
|
+
| Resource trace | "Trace the call flow for the Sales hunt group" |
|
|
16
|
+
|
|
17
|
+
## Input Parsing
|
|
18
|
+
|
|
19
|
+
The user provides:
|
|
20
|
+
1. **A phone number** (e.g., "+1-512-555-1000") OR **a resource name** (e.g., "the Main auto attendant", "the Sales hunt group")
|
|
21
|
+
2. **An optional datetime** — if omitted, use current time in the resource's location timezone
|
|
22
|
+
|
|
23
|
+
**Natural language time expressions to support:**
|
|
24
|
+
- "right now" → current time
|
|
25
|
+
- "at 3am" → today at 3:00 AM in location timezone
|
|
26
|
+
- "at 7pm on Saturday" → next Saturday at 7:00 PM
|
|
27
|
+
- "on Christmas Day" → December 25 (use current year if ambiguous)
|
|
28
|
+
- "next Tuesday at noon" → next Tuesday at 12:00 PM
|
|
29
|
+
|
|
30
|
+
## Algorithm
|
|
31
|
+
|
|
32
|
+
### Step 1 — Resolve the entry point
|
|
33
|
+
|
|
34
|
+
**If user gave a phone number:**
|
|
35
|
+
```bash
|
|
36
|
+
wxcli numbers list --phone-number "+15125551000" -o json
|
|
37
|
+
```
|
|
38
|
+
Extract the `owner` object → get `type` and `id`. The `owner.type` tells you what the number is assigned to: PEOPLE, AUTO_ATTENDANT, CALL_QUEUE, HUNT_GROUP, VIRTUAL_LINE, PLACE (workspace), or BROADWORKS_ANYWHERE.
|
|
39
|
+
|
|
40
|
+
Also get the `location` from the number response — you'll need the location ID and timezone.
|
|
41
|
+
|
|
42
|
+
**If user gave a resource name:**
|
|
43
|
+
Search for the resource by name in the appropriate list command:
|
|
44
|
+
- "Main auto attendant" → `wxcli auto-attendant list --name "Main" -o json`
|
|
45
|
+
- "Sales hunt group" → `wxcli hunt-group list --name "Sales" -o json`
|
|
46
|
+
- "Support queue" → `wxcli call-queue list --name "Support" -o json`
|
|
47
|
+
- Person name → `wxcli people list --display-name "Jane Smith" -o json`
|
|
48
|
+
|
|
49
|
+
Extract the resource's `id` and `locationId` from the list response.
|
|
50
|
+
|
|
51
|
+
### Step 2 — Get the location timezone
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
wxcli locations show LOCATION_ID -o json
|
|
55
|
+
```
|
|
56
|
+
Extract `timeZone` (e.g., "America/Chicago"). Use this to evaluate schedules against the queried datetime.
|
|
57
|
+
|
|
58
|
+
### Step 3 — Walk the chain
|
|
59
|
+
|
|
60
|
+
Based on the entry point type, follow the appropriate path. **Maximum depth: 5 hops.** Track visited resources to detect loops.
|
|
61
|
+
|
|
62
|
+
#### Auto Attendant path
|
|
63
|
+
|
|
64
|
+
1. **Get AA detail:**
|
|
65
|
+
```bash
|
|
66
|
+
wxcli auto-attendant show LOCATION_ID AA_ID -o json
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
2. **Get the AA's schedule(s):**
|
|
70
|
+
The AA response includes `businessSchedule` and/or `holidaySchedule` references (with schedule `name` and `id`).
|
|
71
|
+
|
|
72
|
+
For each schedule reference:
|
|
73
|
+
```bash
|
|
74
|
+
wxcli location-schedules show LOCATION_ID TYPE SCHEDULE_ID -o json
|
|
75
|
+
```
|
|
76
|
+
Where TYPE is `businessHours` or `holidays`.
|
|
77
|
+
|
|
78
|
+
3. **Evaluate which schedule is active at the queried time:**
|
|
79
|
+
|
|
80
|
+
**Precedence:**
|
|
81
|
+
1. Check holiday schedule first — if the queried date matches a holiday entry, use the `holidaySchedule` action
|
|
82
|
+
2. Check business hours schedule — if the queried time falls within the defined business hours for that day of week, use the `businessHours` menu
|
|
83
|
+
3. Otherwise — use the `afterHours` menu
|
|
84
|
+
|
|
85
|
+
**Business hours evaluation:**
|
|
86
|
+
The schedule response includes per-day entries. Each day has `startTime` and `endTime` (24-hour format). Check if the queried time (converted to location timezone) falls within the range for the queried day of week.
|
|
87
|
+
|
|
88
|
+
Example schedule data:
|
|
89
|
+
```json
|
|
90
|
+
{
|
|
91
|
+
"type": "businessHours",
|
|
92
|
+
"events": [
|
|
93
|
+
{"name": "Monday", "startTime": "08:00", "endTime": "17:00"},
|
|
94
|
+
{"name": "Tuesday", "startTime": "08:00", "endTime": "17:00"},
|
|
95
|
+
...
|
|
96
|
+
]
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
If the day is Saturday/Sunday and no entry exists → after hours.
|
|
101
|
+
|
|
102
|
+
**Holiday evaluation:**
|
|
103
|
+
Check the holiday schedule's `events` for a date match. Holiday events may have `startDate`/`endDate` or specific dates with optional yearly recurrence.
|
|
104
|
+
|
|
105
|
+
4. **Report the active menu:**
|
|
106
|
+
Show the greeting message (if available) and the menu options. Each option maps a key press to a destination (transfer to another AA, HG, CQ, person, voicemail, etc.).
|
|
107
|
+
|
|
108
|
+
5. **Recurse:** For each destination that is another AA, CQ, or HG → follow that chain (increment hop count).
|
|
109
|
+
|
|
110
|
+
#### Hunt Group path
|
|
111
|
+
|
|
112
|
+
1. **Get HG detail:**
|
|
113
|
+
```bash
|
|
114
|
+
wxcli hunt-group show LOCATION_ID HG_ID -o json
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
2. **Report:**
|
|
118
|
+
```
|
|
119
|
+
→ Sales Hunt Group
|
|
120
|
+
Ring pattern: [SIMULTANEOUS|CIRCULAR|TOP_DOWN|WEIGHTED]
|
|
121
|
+
Members ([N]):
|
|
122
|
+
- Jane Smith (ext 2001)
|
|
123
|
+
- Bob Lee (ext 2002)
|
|
124
|
+
No-answer: After [timeout]s → [action/destination]
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
3. **If no-answer destination is another feature** (AA, CQ, voicemail group) → recurse.
|
|
128
|
+
|
|
129
|
+
#### Call Queue path
|
|
130
|
+
|
|
131
|
+
1. **Get CQ detail:**
|
|
132
|
+
```bash
|
|
133
|
+
wxcli call-queue show LOCATION_ID CQ_ID -o json
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
2. **Report:**
|
|
137
|
+
```
|
|
138
|
+
→ Support Call Queue
|
|
139
|
+
Routing: [Longest Idle|Circular|Top Down|Weighted|Simultaneous]
|
|
140
|
+
Agents ([N]):
|
|
141
|
+
- Agent 1 (ext XXXX)
|
|
142
|
+
- Agent 2 (ext XXXX)
|
|
143
|
+
Overflow: After [threshold]s/[max callers] → [destination]
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
3. **If overflow destination is another feature** → recurse.
|
|
147
|
+
|
|
148
|
+
#### Person path
|
|
149
|
+
|
|
150
|
+
1. **End of chain.** Report:
|
|
151
|
+
```
|
|
152
|
+
→ Jane Smith (ext 2001, Austin)
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
2. **Optionally check call forwarding:**
|
|
156
|
+
```bash
|
|
157
|
+
wxcli user-settings show-call-forwarding PERSON_ID -o json
|
|
158
|
+
```
|
|
159
|
+
If `noAnswer.enabled` is true, note:
|
|
160
|
+
```
|
|
161
|
+
If no answer after [rings] rings → forwards to [destination]
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
#### Workspace path
|
|
165
|
+
|
|
166
|
+
End of chain:
|
|
167
|
+
```
|
|
168
|
+
→ Conference Room A (workspace, Austin)
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### Step 4 — Format the output
|
|
172
|
+
|
|
173
|
+
Use the numbered-hop format:
|
|
174
|
+
|
|
175
|
+
```
|
|
176
|
+
Call to +1-512-555-1000 at 7:00 PM Saturday (CST):
|
|
177
|
+
|
|
178
|
+
1. → Main Auto Attendant (after-hours schedule active)
|
|
179
|
+
Greeting: "Thank you for calling Acme Corp. Our offices are closed."
|
|
180
|
+
Menu: Press 1 for Sales, Press 2 for Support, Press 0 for Operator
|
|
181
|
+
|
|
182
|
+
2. [Press 1] → Sales Call Queue
|
|
183
|
+
Routing: Longest idle agent
|
|
184
|
+
Agents: Jane Smith (ext 2001), Bob Lee (ext 2002), Maria Garcia (ext 2003)
|
|
185
|
+
Overflow: After 120 seconds → Sales Voicemail Group
|
|
186
|
+
|
|
187
|
+
3. [Overflow] → Sales Voicemail Group
|
|
188
|
+
Members: Jane Smith, Bob Lee
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
**For time-comparison queries** ("business hours vs after hours"), trace both paths and present side by side:
|
|
192
|
+
|
|
193
|
+
```
|
|
194
|
+
Call to +1-512-555-1000:
|
|
195
|
+
|
|
196
|
+
BUSINESS HOURS (Mon-Fri 8am-5pm CST):
|
|
197
|
+
1. → Main Auto Attendant (business hours)
|
|
198
|
+
Menu: Press 1 for Sales, Press 2 for Support, Press 0 for Operator
|
|
199
|
+
2. [Press 1] → Sales Hunt Group (4 members, simultaneous ring)
|
|
200
|
+
|
|
201
|
+
AFTER HOURS (evenings, weekends):
|
|
202
|
+
1. → Main Auto Attendant (after hours)
|
|
203
|
+
Greeting: "Our offices are closed."
|
|
204
|
+
Menu: Press 1 for urgent Sales, Press 0 for general voicemail
|
|
205
|
+
2. [Press 1] → Sales On-Call (1 member)
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
## Constraints
|
|
209
|
+
|
|
210
|
+
1. **Depth limit: 5 hops.** If the chain goes deeper, report what's been traced and note: "Call flow continues beyond 5 hops — check Control Hub for the full chain."
|
|
211
|
+
2. **No live agent state.** The tracer shows the *configured* path, not real-time availability. Note: "This shows the configured routing — actual behavior depends on agent availability at the time of the call."
|
|
212
|
+
3. **Missing schedule.** If an AA has no schedule assigned, report: "No schedule configured — default behavior applies (business hours menu active at all times)."
|
|
213
|
+
4. **Missing menu data.** AA menus may not be fully available via API. Report what's available; note gaps.
|
|
214
|
+
5. **Inbound only (v1).** This traces inbound call paths. For outbound routing through dial plans/trunks, suggest: "For outbound routing, try: 'What dial plan handles calls to +44...?' (uses the routing domain)."
|
|
215
|
+
6. **Loop detection.** Track visited resource IDs. If a chain references a resource already visited, report: "Loop detected — [resource] routes back to [earlier resource]." Stop recursion.
|
|
216
|
+
|
|
217
|
+
## Gotchas
|
|
218
|
+
|
|
219
|
+
1. **Schedule show needs THREE positional args.** `wxcli location-schedules show LOCATION_ID TYPE SCHEDULE_ID` — not just the schedule ID. The TYPE must be `businessHours` or `holidays`.
|
|
220
|
+
2. **Schedule list is location-scoped.** `wxcli location-schedules list LOCATION_ID -o json` — locationId is a required positional arg.
|
|
221
|
+
3. **AA menu key mappings.** The AA show response includes `businessHours` and `afterHours` objects with `actions` arrays. Each action has a `key` (0-9, #, *) and a `value` (transfer destination).
|
|
222
|
+
4. **Timezone handling.** Always convert the queried time to the location's timezone before evaluating schedules. A query at "7pm" from a user in EST targeting an AA in CST should evaluate at 6pm CST.
|
|
223
|
+
5. **Holiday recurrence.** Some holidays recur annually (Christmas, New Year's). Check the `recurrence` field in holiday events. If `recurAnnually: true`, match the month/day regardless of year.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Call History Domain
|
|
2
|
+
|
|
3
|
+
**Covers:** Recent call history, call volume, missed calls, busiest hours, voicemail-bound calls.
|
|
4
|
+
|
|
5
|
+
**This is a delegation module.** For call history and CDR questions, load the `reporting` skill and use its CDR recipe composition guide. The reporting skill has 75 pre-built recipes covering volume analysis, location breakdowns, hourly trends, agent performance, and threshold detection.
|
|
6
|
+
|
|
7
|
+
## When to Delegate
|
|
8
|
+
|
|
9
|
+
Any question about **past calls** or **call patterns** should use the reporting skill:
|
|
10
|
+
- "How many calls did we get yesterday?"
|
|
11
|
+
- "Show me missed calls from this morning"
|
|
12
|
+
- "What's our busiest hour for incoming calls?"
|
|
13
|
+
- "How many calls went to voicemail last week?"
|
|
14
|
+
- "What's our average call duration?"
|
|
15
|
+
- "Which agent handled the most calls?"
|
|
16
|
+
|
|
17
|
+
## How to Delegate
|
|
18
|
+
|
|
19
|
+
Load the reporting skill:
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
Skill: reporting
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
The reporting skill will:
|
|
26
|
+
1. Verify the token has `spark-admin:calling_cdr_read` scope
|
|
27
|
+
2. Check for cached CDR data at `/tmp/cdr-session.json`
|
|
28
|
+
3. Pull CDR data for the requested time range
|
|
29
|
+
4. Run the appropriate recipe or compose a custom query
|
|
30
|
+
5. Format the results
|
|
31
|
+
|
|
32
|
+
## Constraints to Communicate
|
|
33
|
+
|
|
34
|
+
When answering CDR-related questions, note these limits if relevant:
|
|
35
|
+
- **30-day retention window** — CDR data is only available for the last 30 days
|
|
36
|
+
- **12-hour max query window** — each API request covers at most 12 hours; the skill handles splitting automatically
|
|
37
|
+
- **~15 minute delay** — very recent calls (last 15 minutes) may not appear yet
|
|
38
|
+
|
|
39
|
+
## Not CDR — Handle Inline
|
|
40
|
+
|
|
41
|
+
These look like call history but are actually config queries handled by other domains:
|
|
42
|
+
- "Is call recording enabled for John?" → people-and-settings domain (wxcli user-settings show-call-recording)
|
|
43
|
+
- "What's the call queue overflow setting?" → features domain (wxcli call-queue show)
|
|
44
|
+
- "Show me the after-hours routing" → call-flow-trace domain
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
# Features Domain
|
|
2
|
+
|
|
3
|
+
**Covers:** Hunt groups, call queues, auto attendants, paging groups, call park, call pickup, voicemail groups.
|
|
4
|
+
|
|
5
|
+
## Question Patterns
|
|
6
|
+
|
|
7
|
+
| Pattern | Example |
|
|
8
|
+
|---------|---------|
|
|
9
|
+
| Membership | "Who's in the Sales hunt group?", "List agents in the Support queue" |
|
|
10
|
+
| Inventory | "How many call queues are at Denver?", "What auto attendants do we have?" |
|
|
11
|
+
| Configuration | "What's the ring pattern for Support HG?", "Show overflow for Main CQ" |
|
|
12
|
+
| Schedule | "Which auto attendants use the Holiday schedule?" |
|
|
13
|
+
| Cross-feature | "Which features are at the Austin location?" |
|
|
14
|
+
|
|
15
|
+
## Command Recipes
|
|
16
|
+
|
|
17
|
+
### Hunt Groups
|
|
18
|
+
|
|
19
|
+
**List all (org-wide or per-location):**
|
|
20
|
+
```bash
|
|
21
|
+
wxcli hunt-group list -o json
|
|
22
|
+
wxcli hunt-group list --location-id LOCATION_ID -o json
|
|
23
|
+
wxcli hunt-group list --name "Sales" -o json
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
**Show detail (requires BOTH locationId AND huntGroupId):**
|
|
27
|
+
```bash
|
|
28
|
+
wxcli hunt-group show LOCATION_ID HUNT_GROUP_ID -o json
|
|
29
|
+
```
|
|
30
|
+
Response includes: `agents` (members list), `callPolicies` (ring pattern: SIMULTANEOUS, CIRCULAR, TOP_DOWN, WEIGHTED), `noAnswer` action and settings.
|
|
31
|
+
|
|
32
|
+
### Call Queues
|
|
33
|
+
|
|
34
|
+
**List:**
|
|
35
|
+
```bash
|
|
36
|
+
wxcli call-queue list -o json
|
|
37
|
+
wxcli call-queue list --location-id LOCATION_ID -o json
|
|
38
|
+
wxcli call-queue list --has-cx-essentials true -o json
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
**Show detail (requires BOTH locationId AND queueId):**
|
|
42
|
+
```bash
|
|
43
|
+
wxcli call-queue show LOCATION_ID QUEUE_ID -o json
|
|
44
|
+
```
|
|
45
|
+
Response includes: `agents`, `callPolicies` (routing type), `queueSettings` (overflow threshold, wait treatment), `overflowSettings`.
|
|
46
|
+
|
|
47
|
+
### Auto Attendants
|
|
48
|
+
|
|
49
|
+
**List:**
|
|
50
|
+
```bash
|
|
51
|
+
wxcli auto-attendant list -o json
|
|
52
|
+
wxcli auto-attendant list --location-id LOCATION_ID -o json
|
|
53
|
+
wxcli auto-attendant list --name "Main" -o json
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
**Show detail (requires BOTH locationId AND autoAttendantId):**
|
|
57
|
+
```bash
|
|
58
|
+
wxcli auto-attendant show LOCATION_ID AA_ID -o json
|
|
59
|
+
```
|
|
60
|
+
Response includes: `businessHoursSchedule`, `holidaySchedule`, `businessHours` (menu config), `afterHours` (menu config), `extension`, `phoneNumber`.
|
|
61
|
+
|
|
62
|
+
### Paging Groups
|
|
63
|
+
|
|
64
|
+
**List:**
|
|
65
|
+
```bash
|
|
66
|
+
wxcli paging-group list -o json
|
|
67
|
+
wxcli paging-group list --location-id LOCATION_ID -o json
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
**Show detail (requires BOTH locationId AND pagingGroupId):**
|
|
71
|
+
```bash
|
|
72
|
+
wxcli paging-group show LOCATION_ID PAGING_GROUP_ID -o json
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Call Park (location-scoped list)
|
|
76
|
+
|
|
77
|
+
**List (locationId is REQUIRED positional arg):**
|
|
78
|
+
```bash
|
|
79
|
+
wxcli call-park list LOCATION_ID -o json
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
**Show detail:**
|
|
83
|
+
```bash
|
|
84
|
+
wxcli call-park show LOCATION_ID CALL_PARK_ID -o json
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### Call Pickup (location-scoped list)
|
|
88
|
+
|
|
89
|
+
**List (locationId is REQUIRED positional arg):**
|
|
90
|
+
```bash
|
|
91
|
+
wxcli call-pickup list LOCATION_ID -o json
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
**Show detail:**
|
|
95
|
+
```bash
|
|
96
|
+
wxcli call-pickup show LOCATION_ID CALL_PICKUP_ID -o json
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## Resolution Rules
|
|
100
|
+
|
|
101
|
+
**Finding a feature by name:**
|
|
102
|
+
1. List the feature type: e.g., `wxcli hunt-group list --name "Sales" -o json`
|
|
103
|
+
2. If the `--name` filter doesn't match, list all and search the JSON response
|
|
104
|
+
3. When showing detail, you MUST have both the `locationId` AND the feature's `id`
|
|
105
|
+
4. The list response includes both — extract them from the matching item
|
|
106
|
+
|
|
107
|
+
**Finding all features at a location:**
|
|
108
|
+
1. Resolve location name → ID
|
|
109
|
+
2. Run each feature list with `--location-id`:
|
|
110
|
+
```bash
|
|
111
|
+
wxcli hunt-group list --location-id LOC_ID -o json
|
|
112
|
+
wxcli call-queue list --location-id LOC_ID -o json
|
|
113
|
+
wxcli auto-attendant list --location-id LOC_ID -o json
|
|
114
|
+
wxcli paging-group list --location-id LOC_ID -o json
|
|
115
|
+
wxcli call-park list LOC_ID -o json
|
|
116
|
+
wxcli call-pickup list LOC_ID -o json
|
|
117
|
+
```
|
|
118
|
+
3. Note: call-park and call-pickup take locationId as positional arg, others as --location-id flag
|
|
119
|
+
|
|
120
|
+
## Response Guidance
|
|
121
|
+
|
|
122
|
+
**Membership query** ("Who's in the Sales hunt group?"):
|
|
123
|
+
```
|
|
124
|
+
Sales Hunt Group has 4 members:
|
|
125
|
+
- Jane Smith (ext 2001, Austin)
|
|
126
|
+
- Bob Lee (ext 2002, Austin)
|
|
127
|
+
- Maria Garcia (ext 2003, Denver)
|
|
128
|
+
- Tom Chen (ext 2004, Denver)
|
|
129
|
+
|
|
130
|
+
Ring pattern: Simultaneous
|
|
131
|
+
No-answer action: Forward to Sales voicemail after 20 seconds
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
**Inventory query** ("How many call queues at Denver?"):
|
|
135
|
+
```
|
|
136
|
+
Denver has 3 call queues:
|
|
137
|
+
- Support Queue (ext 5001, 8 agents)
|
|
138
|
+
- Sales Queue (ext 5002, 4 agents)
|
|
139
|
+
- Billing Queue (ext 5003, 3 agents)
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
**Configuration query** ("Show overflow for Main CQ"):
|
|
143
|
+
```
|
|
144
|
+
Main Call Queue overflow settings:
|
|
145
|
+
- Overflow after: 120 seconds in queue
|
|
146
|
+
- Overflow action: Transfer to Main Voicemail Group
|
|
147
|
+
- Max callers in queue: 25
|
|
148
|
+
- When queue is full: Play busy treatment
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
**Cross-feature inventory** ("What features are at Austin?"):
|
|
152
|
+
```
|
|
153
|
+
Austin has 12 call features:
|
|
154
|
+
- 3 auto attendants: Main Menu, Sales AA, Support AA
|
|
155
|
+
- 4 call queues: Sales, Support, Billing, General
|
|
156
|
+
- 2 hunt groups: Front Desk, Dispatch
|
|
157
|
+
- 1 paging group: Warehouse PA
|
|
158
|
+
- 1 call park: Lobby Park
|
|
159
|
+
- 1 call pickup: Front Desk Pickup
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
## Gotchas
|
|
163
|
+
|
|
164
|
+
1. **CX Essentials queues are hidden by default.** `wxcli call-queue list` does NOT show CX queues unless you pass `--has-cx-essentials true`. If a user asks about a queue you can't find, try: `wxcli call-queue list --has-cx-essentials true -o json`.
|
|
165
|
+
2. **Call park and call pickup have no org-wide list.** You must enumerate per-location. If the user asks "show all call parks" without specifying a location, list locations first, then query each.
|
|
166
|
+
3. **Feature show commands need TWO positional args.** `wxcli hunt-group show LOCATION_ID HG_ID` — not just the feature ID. Both IDs are in the list response.
|
|
167
|
+
4. **Voicemail groups are not yet in wxcli.** If asked about voicemail groups, note they can be managed in Control Hub under Calling → Features → Voicemail Groups.
|
|
168
|
+
5. **Hunt groups ignore member personal call forwarding.** HG calls route directly to the agent's device and bypass any personal call forwarding the member has configured. Only the hunt group's own no-answer/forwarding settings (feature-level) govern what happens when a member doesn't answer.
|
|
169
|
+
6. **DND on a hunt group member skips them, not their voicemail.** If a member has DND enabled, the hunt group skips that member and moves to the next — it does NOT send the call to the member's personal voicemail. The HG's no-answer action only triggers after all members are exhausted.
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# Numbers Domain
|
|
2
|
+
|
|
3
|
+
**Covers:** Phone number inventory, assignment status, available numbers, number lookups by person or location.
|
|
4
|
+
|
|
5
|
+
## Question Patterns
|
|
6
|
+
|
|
7
|
+
| Pattern | Example |
|
|
8
|
+
|---------|---------|
|
|
9
|
+
| Number inventory | "How many numbers do we have?", "Show me all numbers at Austin" |
|
|
10
|
+
| Assignment lookup | "What number is John Smith on?", "Who has +1-512-555-1000?" |
|
|
11
|
+
| Available numbers | "Which phone numbers aren't assigned?", "How many numbers are available at Denver?" |
|
|
12
|
+
| Number type query | "Show me all toll-free numbers", "Which numbers are DID vs extension?" |
|
|
13
|
+
|
|
14
|
+
## Command Recipes
|
|
15
|
+
|
|
16
|
+
### List all numbers (org-wide)
|
|
17
|
+
```bash
|
|
18
|
+
wxcli numbers list -o json
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
### List numbers at a location
|
|
22
|
+
```bash
|
|
23
|
+
wxcli numbers list --location-id LOCATION_ID -o json
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### List available (unassigned) numbers
|
|
27
|
+
```bash
|
|
28
|
+
wxcli numbers list --available true -o json
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### List numbers filtered by state
|
|
32
|
+
```bash
|
|
33
|
+
wxcli numbers list --state ACTIVE -o json
|
|
34
|
+
# States: ACTIVE, INACTIVE
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### Find a number by phone number
|
|
38
|
+
```bash
|
|
39
|
+
wxcli numbers list --phone-number "+15125551000" -o json
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### Find numbers by owner
|
|
43
|
+
```bash
|
|
44
|
+
wxcli numbers list --owner-id PERSON_ID -o json
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Resolution Rules
|
|
48
|
+
|
|
49
|
+
**Finding a person's number:**
|
|
50
|
+
1. `wxcli people list --display-name "John Smith" -o json` → get person ID
|
|
51
|
+
2. `wxcli numbers list --owner-id <personId> -o json` → get their number(s)
|
|
52
|
+
|
|
53
|
+
**Finding who has a number:**
|
|
54
|
+
1. `wxcli numbers list --phone-number "+15125551000" -o json` → check `owner` field
|
|
55
|
+
2. The `owner` object contains `type` (PEOPLE, AUTO_ATTENDANT, CALL_QUEUE, HUNT_GROUP, etc.) and `id`
|
|
56
|
+
3. If type is PEOPLE: `wxcli people show <ownerId> -o json` → get the person's name
|
|
57
|
+
|
|
58
|
+
**Finding a location's numbers:**
|
|
59
|
+
1. If user says a location name (not ID): `wxcli locations list -o json` → search by name → get location ID
|
|
60
|
+
2. `wxcli numbers list --location-id <locationId> -o json`
|
|
61
|
+
|
|
62
|
+
## Response Guidance
|
|
63
|
+
|
|
64
|
+
**Inventory query** ("Show me all numbers at Austin"):
|
|
65
|
+
Group by assignment status. Show counts.
|
|
66
|
+
```
|
|
67
|
+
Austin has 50 phone numbers:
|
|
68
|
+
- 38 assigned (32 to users, 3 to auto attendants, 2 to call queues, 1 to hunt group)
|
|
69
|
+
- 12 available
|
|
70
|
+
|
|
71
|
+
Number range: +1-512-555-1000 through +1-512-555-1049
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
**Lookup query** ("What number is John on?"):
|
|
75
|
+
```
|
|
76
|
+
John Smith has 1 number:
|
|
77
|
+
- +1-512-555-1023 (extension 1023, Austin location)
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
**Available query** ("Which numbers aren't assigned?"):
|
|
81
|
+
```
|
|
82
|
+
12 numbers are available at Austin:
|
|
83
|
+
- +1-512-555-1038
|
|
84
|
+
- +1-512-555-1039
|
|
85
|
+
... and 10 more
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## Gotchas
|
|
89
|
+
|
|
90
|
+
1. **Number list can be large.** For orgs with 1000+ numbers, encourage location-scoped queries: "That's a lot of numbers. Want me to check a specific location?"
|
|
91
|
+
2. **Owner field structure.** The `owner` object in the number response has `type`, `id`, `firstName`, `lastName`. Use firstName/lastName directly when available — avoids an extra API call.
|
|
92
|
+
3. **Main number flag.** Numbers with `mainNumber: true` are the location's main line. Note this in responses: "+1-512-555-1000 (main number for Austin)".
|
|
93
|
+
4. **Extension vs DID.** Numbers may be extension-only (no external DID). Check `phoneNumberType` field.
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
# People & Settings Domain
|
|
2
|
+
|
|
3
|
+
**Covers:** User lookups, call settings audits (voicemail, forwarding, DND, recording, caller ID, permissions, executive-assistant pairing).
|
|
4
|
+
|
|
5
|
+
## Question Patterns
|
|
6
|
+
|
|
7
|
+
| Pattern | Example |
|
|
8
|
+
|---------|---------|
|
|
9
|
+
| User lookup | "Show me users at Austin", "Find John Smith" |
|
|
10
|
+
| Setting check (single user) | "Does John have voicemail enabled?", "Show me Jane's call forwarding" |
|
|
11
|
+
| Setting audit (bulk) | "Which users at Austin don't have voicemail?", "Who has DND turned on?" |
|
|
12
|
+
| Recording audit | "Show me everyone whose calls are being recorded" |
|
|
13
|
+
| Executive-assistant | "Which users have executive-assistant pairing?" |
|
|
14
|
+
| Comparison | "What's different about John's settings vs Jane's?" |
|
|
15
|
+
|
|
16
|
+
## Command Recipes
|
|
17
|
+
|
|
18
|
+
### List users (org-wide or filtered)
|
|
19
|
+
```bash
|
|
20
|
+
wxcli people list -o json
|
|
21
|
+
wxcli people list --location-id LOCATION_ID -o json
|
|
22
|
+
wxcli people list --display-name "John Smith" -o json
|
|
23
|
+
wxcli people list --email "john@example.com" -o json
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### Show a specific user
|
|
27
|
+
```bash
|
|
28
|
+
wxcli people show PERSON_ID -o json
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### Voicemail settings
|
|
32
|
+
```bash
|
|
33
|
+
wxcli user-settings show-voicemail PERSON_ID -o json
|
|
34
|
+
```
|
|
35
|
+
Response includes: `enabled`, `sendBusyCalls`, `sendUnansweredCalls`, `emailCopyOfMessage`, `messageStorage`, `notifications`.
|
|
36
|
+
|
|
37
|
+
### Call forwarding settings
|
|
38
|
+
```bash
|
|
39
|
+
wxcli user-settings show-call-forwarding PERSON_ID -o json
|
|
40
|
+
```
|
|
41
|
+
Response includes 4 blocks: `always`, `busy`, `noAnswer`, `businessContinuity`. Each has `enabled` and `destination`.
|
|
42
|
+
|
|
43
|
+
### Call recording settings
|
|
44
|
+
```bash
|
|
45
|
+
wxcli user-settings show-call-recording PERSON_ID -o json
|
|
46
|
+
```
|
|
47
|
+
Response includes: `enabled`, `record` (Always/Never/Always with Pause/On Demand), `startStopAnnouncement`.
|
|
48
|
+
|
|
49
|
+
### Do Not Disturb
|
|
50
|
+
```bash
|
|
51
|
+
wxcli user-settings show-do-not-disturb PERSON_ID -o json
|
|
52
|
+
```
|
|
53
|
+
Response includes: `enabled`, `ringSplashEnabled`.
|
|
54
|
+
|
|
55
|
+
### Caller ID
|
|
56
|
+
```bash
|
|
57
|
+
wxcli user-settings show-caller-id PERSON_ID -o json
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### Executive-assistant pairing
|
|
61
|
+
```bash
|
|
62
|
+
wxcli user-settings show-executive-assistant PERSON_ID -o json
|
|
63
|
+
```
|
|
64
|
+
Response includes: `type` (UNASSIGNED, EXECUTIVE, or EXECUTIVE_ASSISTANT).
|
|
65
|
+
|
|
66
|
+
### Call intercept
|
|
67
|
+
```bash
|
|
68
|
+
wxcli user-settings show-intercept PERSON_ID -o json
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Barge-in
|
|
72
|
+
```bash
|
|
73
|
+
wxcli user-settings show-barge-in PERSON_ID -o json
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### Call waiting
|
|
77
|
+
```bash
|
|
78
|
+
wxcli user-settings show-call-waiting PERSON_ID -o json
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### Hoteling
|
|
82
|
+
```bash
|
|
83
|
+
wxcli user-settings show-hoteling PERSON_ID -o json
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## Resolution Rules
|
|
87
|
+
|
|
88
|
+
**Finding a person by name:**
|
|
89
|
+
1. `wxcli people list --display-name "John Smith" -o json`
|
|
90
|
+
2. If exact match → use it. If multiple → disambiguate by location/email.
|
|
91
|
+
3. If no results → try partial: `wxcli people list --display-name "John" -o json`
|
|
92
|
+
|
|
93
|
+
**Finding users at a location by name:**
|
|
94
|
+
1. `wxcli locations list -o json` → search for location name → get ID
|
|
95
|
+
2. `wxcli people list --location-id <locationId> -o json`
|
|
96
|
+
|
|
97
|
+
## Join Patterns
|
|
98
|
+
|
|
99
|
+
**Audit query** ("Which users at Austin don't have voicemail?"):
|
|
100
|
+
1. Resolve location name → ID: `wxcli locations list -o json`
|
|
101
|
+
2. List users at location: `wxcli people list --location-id <locationId> -o json`
|
|
102
|
+
3. For each user, fetch setting: `wxcli user-settings show-voicemail <personId> -o json`
|
|
103
|
+
4. Filter to matches (enabled=false or missing)
|
|
104
|
+
5. Format as audit table
|
|
105
|
+
|
|
106
|
+
**Comparison query** ("Compare John's settings vs Jane's"):
|
|
107
|
+
1. Resolve both names to person IDs
|
|
108
|
+
2. Fetch the same setting(s) for both
|
|
109
|
+
3. Present side-by-side with differences highlighted
|
|
110
|
+
|
|
111
|
+
## Response Guidance
|
|
112
|
+
|
|
113
|
+
**Single-user setting check:**
|
|
114
|
+
```
|
|
115
|
+
John Smith has voicemail enabled.
|
|
116
|
+
- Send busy calls to voicemail: Yes
|
|
117
|
+
- Send unanswered calls after 3 rings: Yes
|
|
118
|
+
- Email copy to: john.smith@acme.com
|
|
119
|
+
- Greeting: Custom
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
**Bulk audit:**
|
|
123
|
+
```
|
|
124
|
+
12 of 45 users at Austin don't have voicemail enabled:
|
|
125
|
+
- Alice Johnson (ext 3001)
|
|
126
|
+
- Brian Kim (ext 3002)
|
|
127
|
+
- Carol Davis (ext 3003)
|
|
128
|
+
... and 9 more
|
|
129
|
+
|
|
130
|
+
Note: I checked all 45 Webex Calling-licensed users at the Austin location.
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
**Executive-assistant pairing:**
|
|
134
|
+
```
|
|
135
|
+
3 executive-assistant pairings found:
|
|
136
|
+
- Jane Smith (Executive) ↔ Alice Johnson (Assistant)
|
|
137
|
+
- Bob Lee (Executive) ↔ Carol Davis (Assistant)
|
|
138
|
+
- Tom Chen (Executive) ↔ Maria Garcia (Assistant)
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
## Gotchas
|
|
142
|
+
|
|
143
|
+
1. **6 person settings are user-only (no admin path).** If a setting returns 404 with error 4008, it requires user-level OAuth. Report: "This setting can only be viewed by the user themselves, not by an admin."
|
|
144
|
+
2. **Two path families for person settings.** The CLI abstracts this — use `wxcli user-settings` commands and they route to the correct path. No need to worry about `/people/{id}/features/` vs `/telephony/config/people/{id}/`.
|
|
145
|
+
3. **Workspace settings differ from person settings.** Basic workspaces return 405 for most `/telephony/config/` settings. If a workspace query fails with 405, report: "This workspace has a Basic license — only DND and Music on Hold settings are available."
|
|
146
|
+
4. **Large org batching.** For orgs with 100+ users, batch settings checks and provide progress updates. Don't try to fetch all settings in a single burst.
|