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,623 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: configure-features
|
|
3
|
+
description: |
|
|
4
|
+
Create, modify, or delete Webex Calling call features using wxcli CLI commands: Auto Attendants, Call Queues,
|
|
5
|
+
Hunt Groups, Paging Groups, Call Park, Call Pickup, Voicemail Groups, and Calling schedules
|
|
6
|
+
(business hours, holidays). Guides the user from prerequisites through creation, modification,
|
|
7
|
+
deletion, and verification.
|
|
8
|
+
Use for: create, update, delete, remove, list, or troubleshoot any Calling call feature.
|
|
9
|
+
NOT for: Contact Center queues/teams/flows (use contact-center skill), Customer Assist/CX Essentials
|
|
10
|
+
(use customer-assist skill), or per-person call settings (use manage-call-settings skill).
|
|
11
|
+
allowed-tools: Read, Grep, Glob, Bash
|
|
12
|
+
argument-hint: [feature-type]
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
<!-- Updated by playbook session 2026-03-18 -->
|
|
16
|
+
|
|
17
|
+
# Configure Call Features Workflow
|
|
18
|
+
|
|
19
|
+
**Checkpoint — do NOT proceed until you can answer these:**
|
|
20
|
+
1. What is the argument order for location-scoped feature deletes? (Answer: `--force LOCATION_ID FEATURE_ID` — location comes FIRST, not second.)
|
|
21
|
+
2. How do you list CX Essentials call queues? (Answer: `wxcli call-queue list --has-cx-essentials true` — they are hidden from the default list.)
|
|
22
|
+
|
|
23
|
+
If you cannot answer both, you skipped reading this skill. Go back and read it.
|
|
24
|
+
|
|
25
|
+
## Step 1: Load references
|
|
26
|
+
|
|
27
|
+
1. Read `docs/reference/call-features-major.md` for AA, CQ, HG data models and API signatures
|
|
28
|
+
2. Read `docs/reference/call-features-additional.md` for Paging, Call Park, Call Pickup, VM Groups, CX Essentials
|
|
29
|
+
|
|
30
|
+
**Mandatory --help verification:** Before constructing any wxcli command, run `wxcli <group> --help` to verify the subcommand exists, then `wxcli <group> <subcommand> --help` to verify the exact flags (e.g. `wxcli call-queue create --help` reveals the kebab-cased flags like `--has-cx-essentials` and the `--json-body` shape you cannot guess from training data). Do NOT rely on examples in this skill or reference docs — the CLI is auto-generated and flag names may differ from what documentation suggests.
|
|
31
|
+
|
|
32
|
+
## Step 2: Verify auth token
|
|
33
|
+
|
|
34
|
+
Before any API calls, confirm the user has a working auth token:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
wxcli whoami
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
If this fails, stop and resolve authentication first (`wxcli configure`). Required scopes:
|
|
41
|
+
- **Read**: `spark-admin:telephony_config_read`
|
|
42
|
+
- **Write**: `spark-admin:telephony_config_write`
|
|
43
|
+
|
|
44
|
+
## Step 3: Identify which feature(s) to configure
|
|
45
|
+
|
|
46
|
+
Ask the user which feature they want to create. Present this decision matrix if they are unsure:
|
|
47
|
+
|
|
48
|
+
| Need | Feature |
|
|
49
|
+
|------|---------|
|
|
50
|
+
| IVR menu with key-press routing ("Press 1 for Sales...") | **Auto Attendant** |
|
|
51
|
+
| Hold callers in queue until an agent is free | **Call Queue** |
|
|
52
|
+
| Ring a group of agents directly (no queue hold) | **Hunt Group** |
|
|
53
|
+
| One-way broadcast announcements to phones | **Paging Group** |
|
|
54
|
+
| Park a call on an extension for someone else to pick up | **Call Park** |
|
|
55
|
+
| Let team members answer each other's ringing phones | **Call Pickup** |
|
|
56
|
+
| Shared voicemail box for a team or feature | **Voicemail Group** |
|
|
57
|
+
| Screen pop, recording, wrap-up, supervisors on a CQ | **Customer Assist** (use `customer-assist` skill) |
|
|
58
|
+
|
|
59
|
+
## Step 4: Check prerequisites
|
|
60
|
+
|
|
61
|
+
Before creating any feature, verify these exist:
|
|
62
|
+
|
|
63
|
+
### 4a. Location exists and is calling-enabled
|
|
64
|
+
|
|
65
|
+
All features are location-scoped. Confirm the target location:
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
wxcli locations list --output json
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Scan the output for the target location name and capture the `location_id`. Then confirm calling is enabled on it — calling features cannot be created at a location where calling is disabled:
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
wxcli location-settings list-1
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
The target location must appear in this output. If it does not, calling is not enabled there — run the provision-calling skill to enable it before proceeding.
|
|
78
|
+
|
|
79
|
+
If no location matches the name at all, the user must create one first (see provision-calling skill).
|
|
80
|
+
|
|
81
|
+
### 4b. Users/agents exist (for features that need members)
|
|
82
|
+
|
|
83
|
+
For CQ, HG, Paging, Call Park, Call Pickup -- confirm the people who will be agents/members:
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
wxcli users list --calling-data true --output json
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
To filter by location:
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
wxcli users list --calling-data true --location-id LOCATION_ID --output json
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### 4c. Phone numbers available (for features that need a number)
|
|
96
|
+
|
|
97
|
+
For AA, CQ, HG, Paging, VM Groups -- check available numbers at the location:
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
wxcli numbers list --location-id LOCATION_ID --output json
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### 4d. Feature-specific prerequisites — verify before creating
|
|
104
|
+
|
|
105
|
+
**Run the verification command for each prerequisite before creating the feature.** Missing prerequisites cause 400 errors that waste an API call and require diagnosis.
|
|
106
|
+
|
|
107
|
+
#### Auto Attendant
|
|
108
|
+
|
|
109
|
+
| Prerequisite | Verification | If missing |
|
|
110
|
+
|-------------|-------------|-----------|
|
|
111
|
+
| Business hours schedule | `wxcli location-schedules list LOCATION_ID -o json` — look for a schedule with `type: businessHours` | Create one first: `wxcli location-schedules create LOCATION_ID --name "Business Hours" --type businessHours --json-body '{...}'` |
|
|
112
|
+
| Holiday schedule (optional) | Same command — look for `type: holidays` | Create if needed for holiday service routing |
|
|
113
|
+
| Custom greetings | Cannot be verified via API | Upload via Control Hub (API upload not supported) |
|
|
114
|
+
|
|
115
|
+
#### Call Queue
|
|
116
|
+
|
|
117
|
+
| Prerequisite | Verification | If missing |
|
|
118
|
+
|-------------|-------------|-----------|
|
|
119
|
+
| Agents have Professional license | `wxcli users list -o json` — for each agent, check license type. OR `wxcli licenses list -o json` and cross-reference | Assign Professional license via `manage-licensing` skill before adding as agent |
|
|
120
|
+
| CX Essentials license (for CX queues) | Same license check — look for CX Essentials license | Assign via `manage-licensing` skill. Without it, error 28018 on any CX operation |
|
|
121
|
+
| `callPolicies` in create body (CX queues) | N/A — CX queues require `callPolicies` in the `--json-body` at creation time | Include `"callPolicies": {...}` in the create body. See `customer-assist` skill for format |
|
|
122
|
+
|
|
123
|
+
#### Hunt Group
|
|
124
|
+
|
|
125
|
+
No additional prerequisites beyond location + agents. Can be created with zero agents.
|
|
126
|
+
|
|
127
|
+
#### Paging Group
|
|
128
|
+
|
|
129
|
+
| Prerequisite | Verification | If missing |
|
|
130
|
+
|-------------|-------------|-----------|
|
|
131
|
+
| Originators/targets exist | `wxcli users list --calling-data true -o json` | Originators and targets are added via `wxcli paging-group update` AFTER creation (not in the create call) |
|
|
132
|
+
|
|
133
|
+
#### Call Park
|
|
134
|
+
|
|
135
|
+
| Prerequisite | Verification | If missing |
|
|
136
|
+
|-------------|-------------|-----------|
|
|
137
|
+
| Hunt group exists (for recall) | `wxcli hunt-group list --location-id LOCATION_ID -o json` | Create the hunt group first, then configure call park recall to reference it |
|
|
138
|
+
|
|
139
|
+
#### Call Pickup
|
|
140
|
+
|
|
141
|
+
| Prerequisite | Verification | If missing |
|
|
142
|
+
|-------------|-------------|-----------|
|
|
143
|
+
| Users not already in another pickup group | `wxcli call-pickup list LOCATION_ID -o json` — check member lists for the target user | Remove user from existing group before adding to new one |
|
|
144
|
+
|
|
145
|
+
#### Voicemail Group
|
|
146
|
+
|
|
147
|
+
| Prerequisite | Verification | If missing |
|
|
148
|
+
|-------------|-------------|-----------|
|
|
149
|
+
| Extension available | `wxcli numbers list --location-id LOCATION_ID -o json` | Choose an unused extension |
|
|
150
|
+
| Passcode format | N/A — validate locally | 6+ digits, no repeating sequences (e.g., `111111` is rejected). Use a pattern like `740384` |
|
|
151
|
+
|
|
152
|
+
#### Customer Assist (CX Essentials)
|
|
153
|
+
|
|
154
|
+
| Prerequisite | Verification | If missing |
|
|
155
|
+
|-------------|-------------|-----------|
|
|
156
|
+
| Call queue exists | `wxcli call-queue list --location-id LOCATION_ID -o json` | Create the queue first in this skill, then switch to `customer-assist` skill |
|
|
157
|
+
| Queue is CX-enabled | `wxcli call-queue list --has-cx-essentials true -o json` | CX queues are hidden from default list. If queue doesn't appear, it wasn't created as a CX queue |
|
|
158
|
+
|
|
159
|
+
## Step 5: Gather configuration and present deployment plan -- [SHOW BEFORE EXECUTING]
|
|
160
|
+
|
|
161
|
+
Based on the selected feature, collect the required parameters from the user. **Always present the plan before executing.**
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
### Auto Attendant
|
|
166
|
+
|
|
167
|
+
Collect from user:
|
|
168
|
+
|
|
169
|
+
| Parameter | Required | Notes |
|
|
170
|
+
|-----------|:--------:|-------|
|
|
171
|
+
| Name | Yes | Unique name for the AA |
|
|
172
|
+
| Phone number or extension | Yes (one of) | Use `wxcli numbers list` to find candidates |
|
|
173
|
+
| Business hours schedule | Yes | Must already exist at org/location level |
|
|
174
|
+
| Holiday schedule | No | Optional |
|
|
175
|
+
| Business hours menu | Yes | Key-press actions (see key config below) |
|
|
176
|
+
| After hours menu | Yes | Key-press actions |
|
|
177
|
+
| Extension dialing | No | `ENTERPRISE` (default) or `GROUP` |
|
|
178
|
+
| Name dialing | No | `ENTERPRISE` (default) or `GROUP` |
|
|
179
|
+
|
|
180
|
+
**Key-press actions** -- for each menu, define up to 12 keys (`0`-`9`, `*`, `#`):
|
|
181
|
+
|
|
182
|
+
| Action | Description |
|
|
183
|
+
|--------|-------------|
|
|
184
|
+
| `TRANSFER_WITHOUT_PROMPT` | Transfer immediately to a number/extension |
|
|
185
|
+
| `TRANSFER_WITH_PROMPT` | Play prompt then transfer |
|
|
186
|
+
| `TRANSFER_TO_OPERATOR` | Transfer to operator |
|
|
187
|
+
| `NAME_DIALING` | Dial-by-name directory |
|
|
188
|
+
| `EXTENSION_DIALING` | Dial-by-extension |
|
|
189
|
+
| `REPEAT_MENU` | Replay the menu |
|
|
190
|
+
| `EXIT` | Disconnect |
|
|
191
|
+
| `TRANSFER_TO_MAILBOX` | Transfer to voicemail |
|
|
192
|
+
| `RETURN_TO_PREVIOUS_MENU` | Go back one level |
|
|
193
|
+
| `PLAY_ANNOUNCEMENT` | Play an announcement |
|
|
194
|
+
|
|
195
|
+
**CLI command:**
|
|
196
|
+
|
|
197
|
+
> **NOTE:** The CLI automatically provides default menus (key 0 = EXIT, extension dialing enabled, DEFAULT greeting) so the create command succeeds without specifying menu details. To customize menus with specific key-press actions, use `wxcli auto-attendant update` after creation.
|
|
198
|
+
|
|
199
|
+
```bash
|
|
200
|
+
wxcli auto-attendant create LOCATION_ID \
|
|
201
|
+
--name "Main Menu" \
|
|
202
|
+
--extension 1000 \
|
|
203
|
+
--business-schedule "Business Hours"
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
Optional flags: `--phone-number`, `--holiday-schedule`, `--disabled`.
|
|
207
|
+
|
|
208
|
+
---
|
|
209
|
+
|
|
210
|
+
### Call Queue
|
|
211
|
+
|
|
212
|
+
Collect from user:
|
|
213
|
+
|
|
214
|
+
| Parameter | Required | Notes |
|
|
215
|
+
|-----------|:--------:|-------|
|
|
216
|
+
| Name | Yes | Unique name |
|
|
217
|
+
| Phone number or extension | Yes (one of) | |
|
|
218
|
+
| Routing policy | Yes | `CIRCULAR`, `REGULAR`, `SIMULTANEOUS` (max 50 agents), `UNIFORM`, `WEIGHTED` (max 100 agents) |
|
|
219
|
+
| Routing type | No | `PRIORITY_BASED` (default) or `SKILL_BASED` |
|
|
220
|
+
| Agents | Yes | List of person IDs (people, workspaces, or virtual lines) |
|
|
221
|
+
| Queue size | Yes | Max calls in queue before overflow triggers |
|
|
222
|
+
| Overflow action | No | `PERFORM_BUSY_TREATMENT`, `TRANSFER_TO_PHONE_NUMBER`, `PLAY_RINGING_UNTIL_CALLER_HANGS_UP` |
|
|
223
|
+
| Overflow transfer number | If overflow=transfer | Destination number |
|
|
224
|
+
| Call bounce settings | No | `max_rings` (default 5), `agent_unavailable_enabled` |
|
|
225
|
+
| Agent join/unjoin enabled | No | Let agents toggle themselves in/out |
|
|
226
|
+
|
|
227
|
+
**Announcement chain** (all optional, configure as needed):
|
|
228
|
+
|
|
229
|
+
1. **Welcome message** -- first thing callers hear; can be mandatory even when agent is available
|
|
230
|
+
2. **Wait message** -- estimated wait time or queue position
|
|
231
|
+
3. **Comfort message** -- periodic message (promotions, info); interval 10-600 seconds
|
|
232
|
+
4. **Comfort message bypass** -- short comfort for quickly-answered calls
|
|
233
|
+
5. **Music on hold** -- normal + alternate source
|
|
234
|
+
6. **Whisper message** -- plays to agent before connection (identifies which queue)
|
|
235
|
+
|
|
236
|
+
**CLI command:**
|
|
237
|
+
|
|
238
|
+
> **NOTE:** The API may accept call queue creates without `callPolicies` for non-CX queues (using server-side defaults), but the spec marks it required. For CX Essentials queues, `callPolicies` is strictly required — pass via `--json-body`. Agents are added after creation.
|
|
239
|
+
|
|
240
|
+
```bash
|
|
241
|
+
wxcli call-queue create LOCATION_ID \
|
|
242
|
+
--name "Support Queue" \
|
|
243
|
+
--extension 2000
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
Optional flags: `--phone-number`.
|
|
247
|
+
|
|
248
|
+
To add agents after creation, use the update command with `--json-body`:
|
|
249
|
+
|
|
250
|
+
```bash
|
|
251
|
+
wxcli call-queue update LOCATION_ID QUEUE_ID --json-body '{"agents": [{"id": "AGENT_PERSON_ID"}]}'
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
To find available agents for a location:
|
|
255
|
+
|
|
256
|
+
```bash
|
|
257
|
+
wxcli call-queue list-available-agents-queues LOCATION_ID --output json
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
> **WARNING (CQ Update):** The CLI `update` command uses partial objects to avoid the `callingLineIdPolicy=CUSTOM` 400 error. Only changed fields are sent:
|
|
261
|
+
> ```bash
|
|
262
|
+
> wxcli call-queue update LOCATION_ID QUEUE_ID --name "New Name"
|
|
263
|
+
> ```
|
|
264
|
+
|
|
265
|
+
---
|
|
266
|
+
|
|
267
|
+
### Hunt Group
|
|
268
|
+
|
|
269
|
+
Collect from user:
|
|
270
|
+
|
|
271
|
+
| Parameter | Required | Notes |
|
|
272
|
+
|-----------|:--------:|-------|
|
|
273
|
+
| Name | Yes | Unique name |
|
|
274
|
+
| Phone number or extension | Yes (one of) | |
|
|
275
|
+
| Ring pattern (policy) | No | `CIRCULAR` (default), `REGULAR`, `SIMULTANEOUS` (max 50), `UNIFORM`, `WEIGHTED` (max 100) |
|
|
276
|
+
| Members | No | Can create with zero agents and add later |
|
|
277
|
+
| No-answer behavior | No | Advance to next agent, forward after N rings, forward destination |
|
|
278
|
+
| Busy redirect | No | Where to send calls when all agents busy |
|
|
279
|
+
| Business continuity redirect | No | Fallback when phone system is disconnected |
|
|
280
|
+
|
|
281
|
+
**Key difference from Call Queue:** Hunt groups ring agents directly -- no queue hold, no announcements chain, no agent join/unjoin.
|
|
282
|
+
|
|
283
|
+
**CLI command (simple — uses CLI defaults for callPolicies):**
|
|
284
|
+
|
|
285
|
+
```bash
|
|
286
|
+
wxcli hunt-group create LOCATION_ID \
|
|
287
|
+
--name "Sales Team" \
|
|
288
|
+
--extension 3000 \
|
|
289
|
+
--enabled
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
> **NOTE:** The CLI auto-injects a default `callPolicies` (CIRCULAR policy, advance to next agent after 3 rings, no forwarding) when not provided. This covers simple creates. For custom policies, use `--json-body`.
|
|
293
|
+
|
|
294
|
+
**CLI command (full control — custom policy and no-answer behavior):**
|
|
295
|
+
|
|
296
|
+
```bash
|
|
297
|
+
wxcli hunt-group create LOCATION_ID --json-body '{
|
|
298
|
+
"name": "Sales Team",
|
|
299
|
+
"extension": "3000",
|
|
300
|
+
"enabled": true,
|
|
301
|
+
"callPolicies": {
|
|
302
|
+
"policy": "REGULAR",
|
|
303
|
+
"noAnswer": {
|
|
304
|
+
"nextAgentEnabled": true,
|
|
305
|
+
"nextAgentRings": 3,
|
|
306
|
+
"forwardEnabled": false,
|
|
307
|
+
"numberOfRings": 15,
|
|
308
|
+
"destinationVoicemailEnabled": false
|
|
309
|
+
}
|
|
310
|
+
},
|
|
311
|
+
"agents": [{"id": "AGENT_PERSON_ID"}]
|
|
312
|
+
}'
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
**callPolicies structure (required by API):**
|
|
316
|
+
|
|
317
|
+
| Field | Required | Notes |
|
|
318
|
+
|-------|:--------:|-------|
|
|
319
|
+
| `policy` | Yes | `CIRCULAR`, `REGULAR`, `SIMULTANEOUS` (max 50 agents), `UNIFORM`, `WEIGHTED` (max 100 agents) |
|
|
320
|
+
| `noAnswer.nextAgentEnabled` | Yes | Advance to next agent after rings |
|
|
321
|
+
| `noAnswer.nextAgentRings` | Yes | Rings before advancing (when nextAgentEnabled) |
|
|
322
|
+
| `noAnswer.forwardEnabled` | Yes | Forward unanswered calls to destination |
|
|
323
|
+
| `noAnswer.numberOfRings` | Yes | Rings before forwarding (when forwardEnabled) |
|
|
324
|
+
| `noAnswer.destinationVoicemailEnabled` | Yes | Send to destination's voicemail |
|
|
325
|
+
| `noAnswer.destination` | No | Forward-to number (required when forwardEnabled=true) |
|
|
326
|
+
| `waitingEnabled` | No | false = "advance when busy" |
|
|
327
|
+
| `groupBusyEnabled` | No | Set hunt group status to busy |
|
|
328
|
+
| `busyRedirect.enabled` | No | Divert calls when all agents busy |
|
|
329
|
+
| `busyRedirect.destination` | No | Busy redirect number |
|
|
330
|
+
| `businessContinuityRedirect.enabled` | No | Fallback when phones disconnected |
|
|
331
|
+
| `businessContinuityRedirect.destination` | No | Business continuity number |
|
|
332
|
+
|
|
333
|
+
**CUCM migration mapping:** Map `CanonicalHuntGroup.policy` → `callPolicies.policy`, and `CanonicalHuntGroup.no_answer_rings` → `callPolicies.noAnswer.nextAgentRings`.
|
|
334
|
+
|
|
335
|
+
Optional flags: `--phone-number`.
|
|
336
|
+
|
|
337
|
+
To add agents after creation, use the update command with `--json-body`:
|
|
338
|
+
|
|
339
|
+
```bash
|
|
340
|
+
wxcli hunt-group update LOCATION_ID HG_ID --json-body '{"agents": [{"id": "AGENT_PERSON_ID"}]}'
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
---
|
|
344
|
+
|
|
345
|
+
### Paging Group
|
|
346
|
+
|
|
347
|
+
Collect from user:
|
|
348
|
+
|
|
349
|
+
| Parameter | Required | Notes |
|
|
350
|
+
|-----------|:--------:|-------|
|
|
351
|
+
| Name | Yes | Max 30 chars |
|
|
352
|
+
| Phone number or extension | Yes (one of) | |
|
|
353
|
+
| Originators | No | People/workspaces who can initiate pages |
|
|
354
|
+
| Targets | No | People/workspaces/virtual lines who receive pages (up to 75) |
|
|
355
|
+
| Originator caller ID enabled | Yes if originators set | Shows originator's caller ID on target phones |
|
|
356
|
+
|
|
357
|
+
**CLI command:**
|
|
358
|
+
|
|
359
|
+
```bash
|
|
360
|
+
wxcli paging-group create LOCATION_ID \
|
|
361
|
+
--name "Warehouse Page" \
|
|
362
|
+
--extension 8100
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
Optional flags: `--disabled`.
|
|
366
|
+
|
|
367
|
+
To list existing paging groups:
|
|
368
|
+
|
|
369
|
+
```bash
|
|
370
|
+
wxcli paging-group list --location-id LOCATION_ID --output json
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
> **NOTE:** Originator and target assignment requires `wxcli paging-group update` after creation. The CLI create command creates the group with name, extension, and enabled status.
|
|
374
|
+
|
|
375
|
+
---
|
|
376
|
+
|
|
377
|
+
### Call Park
|
|
378
|
+
|
|
379
|
+
Collect from user:
|
|
380
|
+
|
|
381
|
+
| Parameter | Required | Notes |
|
|
382
|
+
|-----------|:--------:|-------|
|
|
383
|
+
| Name | Yes | Max 80 chars |
|
|
384
|
+
| Agents | No | People/workspaces eligible to receive parked calls |
|
|
385
|
+
| Call Park Extensions | No | Dedicated park extensions (create these first) |
|
|
386
|
+
| Park on agents enabled | No | Whether calls can be parked directly on agents |
|
|
387
|
+
| Recall behavior | No | `ALERT_PARKING_USER_ONLY` (default), `ALERT_PARKING_USER_FIRST_THEN_HUNT_GROUP`, `ALERT_HUNT_GROUP_ONLY` |
|
|
388
|
+
| Recall hunt group | If recall uses HG | Must be an existing hunt group at the location |
|
|
389
|
+
|
|
390
|
+
**CLI command:**
|
|
391
|
+
|
|
392
|
+
> **NOTE:** The CLI automatically provides the required `recall` field (defaults to `parking_user_only`), so the create succeeds with just a name.
|
|
393
|
+
|
|
394
|
+
```bash
|
|
395
|
+
wxcli call-park create LOCATION_ID --name "Lobby Park"
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
Note: `LOCATION_ID` is a positional argument for call-park commands.
|
|
399
|
+
|
|
400
|
+
To list call park groups:
|
|
401
|
+
|
|
402
|
+
```bash
|
|
403
|
+
wxcli call-park list LOCATION_ID --output json
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
**Gotcha:** Call Park ID changes when name is modified. Always re-fetch after a name change.
|
|
407
|
+
|
|
408
|
+
---
|
|
409
|
+
|
|
410
|
+
### Call Pickup
|
|
411
|
+
|
|
412
|
+
Collect from user:
|
|
413
|
+
|
|
414
|
+
| Parameter | Required | Notes |
|
|
415
|
+
|-----------|:--------:|-------|
|
|
416
|
+
| Name | Yes | Max 80 chars |
|
|
417
|
+
| Members | No | People, workspaces, virtual lines |
|
|
418
|
+
| Notification type | No | `NONE`, `AUDIO_ONLY`, `VISUAL_ONLY`, `AUDIO_AND_VISUAL` |
|
|
419
|
+
| Notification delay (seconds) | No | Time before notification fires |
|
|
420
|
+
|
|
421
|
+
**Constraint:** A user can only belong to one call pickup group at a time.
|
|
422
|
+
|
|
423
|
+
**CLI command:**
|
|
424
|
+
|
|
425
|
+
```bash
|
|
426
|
+
wxcli call-pickup create LOCATION_ID --name "Front Desk Pickup"
|
|
427
|
+
```
|
|
428
|
+
|
|
429
|
+
Note: `LOCATION_ID` is a positional argument for call-pickup commands.
|
|
430
|
+
|
|
431
|
+
To list call pickup groups:
|
|
432
|
+
|
|
433
|
+
```bash
|
|
434
|
+
wxcli call-pickup list LOCATION_ID --output json
|
|
435
|
+
```
|
|
436
|
+
|
|
437
|
+
**Gotcha:** Call Pickup ID changes when name is modified. Always re-fetch after a name change.
|
|
438
|
+
|
|
439
|
+
---
|
|
440
|
+
|
|
441
|
+
### Voicemail Group
|
|
442
|
+
|
|
443
|
+
Collect from user:
|
|
444
|
+
|
|
445
|
+
| Parameter | Required | Notes |
|
|
446
|
+
|-----------|:--------:|-------|
|
|
447
|
+
| Name | Yes | Group name |
|
|
448
|
+
| Extension | Yes | Required on create |
|
|
449
|
+
| Passcode | Yes | Access passcode (6+ digits, no repeating) |
|
|
450
|
+
| Phone number | No | Optional external number |
|
|
451
|
+
| Language code | No | Default `en_us` |
|
|
452
|
+
|
|
453
|
+
**CLI command:**
|
|
454
|
+
|
|
455
|
+
> **NOTE:** The CLI handles the known `VoicemailGroupDetail.for_create()` SDK bug (missing `by_alias=True`) internally. It uses `model_dump(by_alias=True)` and raw HTTP under the hood, so the command just works.
|
|
456
|
+
|
|
457
|
+
```bash
|
|
458
|
+
wxcli location-voicemail create LOCATION_ID \
|
|
459
|
+
--name "Support VM" \
|
|
460
|
+
--extension 8200 \
|
|
461
|
+
--passcode 740384 \
|
|
462
|
+
--language-code en_us
|
|
463
|
+
```
|
|
464
|
+
|
|
465
|
+
Optional flags: `--phone-number`, `--first-name`, `--last-name`.
|
|
466
|
+
|
|
467
|
+
---
|
|
468
|
+
|
|
469
|
+
### CX Essentials (Customer Assist)
|
|
470
|
+
|
|
471
|
+
Customer Assist (formerly CX Essentials) has its own dedicated skill with full coverage of screen pop, wrap-up reasons, queue call recording, supervisors, and available agents.
|
|
472
|
+
|
|
473
|
+
> **Use the `customer-assist` skill** for all Customer Assist configuration.
|
|
474
|
+
|
|
475
|
+
The call queue itself is still created here (see Call Queue section above). Once the queue exists, switch to the `customer-assist` skill to configure Customer Assist features on it.
|
|
476
|
+
|
|
477
|
+
---
|
|
478
|
+
|
|
479
|
+
### Deployment Plan Template
|
|
480
|
+
|
|
481
|
+
Before executing any commands, present the full plan to the user:
|
|
482
|
+
|
|
483
|
+
```
|
|
484
|
+
DEPLOYMENT PLAN
|
|
485
|
+
===============
|
|
486
|
+
Feature: [type]
|
|
487
|
+
Location: [name] ([location_id])
|
|
488
|
+
Name: [feature_name]
|
|
489
|
+
Phone/Extension: [number or extension]
|
|
490
|
+
|
|
491
|
+
Configuration:
|
|
492
|
+
[Feature-specific settings listed here]
|
|
493
|
+
|
|
494
|
+
Members/Agents:
|
|
495
|
+
- [Person 1] ([person_id])
|
|
496
|
+
- [Person 2] ([person_id])
|
|
497
|
+
|
|
498
|
+
Prerequisites verified:
|
|
499
|
+
✓ Location exists
|
|
500
|
+
✓ [N] agents found
|
|
501
|
+
✓ Phone number/extension available
|
|
502
|
+
✓ [Feature-specific prereqs]
|
|
503
|
+
|
|
504
|
+
Commands to execute:
|
|
505
|
+
wxcli [feature] create ...
|
|
506
|
+
wxcli [feature] update ... --json-body '{"agents": [...]}' (if applicable)
|
|
507
|
+
|
|
508
|
+
Proceed? (yes/no)
|
|
509
|
+
```
|
|
510
|
+
|
|
511
|
+
**Wait for user confirmation before executing.**
|
|
512
|
+
|
|
513
|
+
## Step 6: Execute via wxcli
|
|
514
|
+
|
|
515
|
+
Run the creation command. If the feature requires multiple steps (e.g., agents added after CQ/HG creation), execute them in order.
|
|
516
|
+
|
|
517
|
+
Handle errors explicitly:
|
|
518
|
+
|
|
519
|
+
**Generic errors:**
|
|
520
|
+
- **401/403**: Token expired or insufficient scopes — run `wxcli configure` to re-authenticate. Required scope: `spark-admin:telephony_config_write`.
|
|
521
|
+
- **409**: Name or extension conflict — ask user for alternate name/extension.
|
|
522
|
+
- **400**: Validation error — read the error message and fix the parameter.
|
|
523
|
+
|
|
524
|
+
**Feature-specific errors:**
|
|
525
|
+
- **400 on AA create (schedule reference):** The business hours schedule doesn't exist or the schedule ID is wrong. Verify with `wxcli location-schedules list LOCATION_ID -o json`.
|
|
526
|
+
- **400 on CQ create (missing callPolicies):** CX Essentials queues require `callPolicies` in the create body. Add via `--json-body`.
|
|
527
|
+
- **400 on CQ update (callingLineIdPolicy=CUSTOM):** Sending the full queue object on update triggers this. Use individual flags (`--name`, `--extension`) instead of `--json-body` with the full object. The CLI handles partial updates automatically.
|
|
528
|
+
- **28018 on CX operations:** "CX Essentials is not enabled for this Call center" — the queue isn't a CX queue. Must pass `--has-cx-essentials true` on list commands and create with `callPolicies`.
|
|
529
|
+
- **400 on VM Group create (passcode):** Passcode doesn't meet requirements: 6+ digits, no repeating sequences, no common patterns.
|
|
530
|
+
- **ID changed after rename (Call Park, Call Pickup):** These features generate new IDs when renamed. Always re-fetch the list after a rename: `wxcli call-park list LOCATION_ID -o json`.
|
|
531
|
+
|
|
532
|
+
## Step 7: Verify creation
|
|
533
|
+
|
|
534
|
+
After creation, fetch the details back and confirm:
|
|
535
|
+
|
|
536
|
+
```bash
|
|
537
|
+
# Example for auto attendant
|
|
538
|
+
wxcli auto-attendant show LOCATION_ID AA_ID --output json
|
|
539
|
+
|
|
540
|
+
# Example for call queue
|
|
541
|
+
wxcli call-queue show LOCATION_ID QUEUE_ID --output json
|
|
542
|
+
|
|
543
|
+
# Example for hunt group
|
|
544
|
+
wxcli hunt-group show LOCATION_ID HG_ID --output json
|
|
545
|
+
|
|
546
|
+
# Example for paging
|
|
547
|
+
wxcli paging-group show LOCATION_ID PAGING_ID --output json
|
|
548
|
+
|
|
549
|
+
# Example for call park
|
|
550
|
+
wxcli call-park show LOCATION_ID CALLPARK_ID --output json
|
|
551
|
+
|
|
552
|
+
# Example for call pickup
|
|
553
|
+
wxcli call-pickup show LOCATION_ID PICKUP_ID --output json
|
|
554
|
+
|
|
555
|
+
# Example for voicemail group
|
|
556
|
+
wxcli location-voicemail show-voicemail-groups LOCATION_ID VMG_ID --output json
|
|
557
|
+
```
|
|
558
|
+
|
|
559
|
+
## Step 8: Report results
|
|
560
|
+
|
|
561
|
+
Present the creation results:
|
|
562
|
+
|
|
563
|
+
```
|
|
564
|
+
FEATURE CREATED
|
|
565
|
+
===============
|
|
566
|
+
Type: [feature_type]
|
|
567
|
+
Name: [name]
|
|
568
|
+
ID: [feature_id]
|
|
569
|
+
Location: [location_name]
|
|
570
|
+
Extension: [extension]
|
|
571
|
+
Phone Number: [phone_number or "None assigned"]
|
|
572
|
+
Agents/Members: [count]
|
|
573
|
+
|
|
574
|
+
Next steps:
|
|
575
|
+
- [Feature-specific next steps, e.g., "Upload custom greeting via Control Hub"]
|
|
576
|
+
- [e.g., "Configure holiday service on the queue policy"]
|
|
577
|
+
- [e.g., "Add agents to the hunt group"]
|
|
578
|
+
```
|
|
579
|
+
|
|
580
|
+
---
|
|
581
|
+
|
|
582
|
+
## Critical Rules
|
|
583
|
+
|
|
584
|
+
1. **Always verify location exists** before creating any feature. Every feature is location-scoped.
|
|
585
|
+
2. **Always show the deployment plan** (Step 5) and wait for user confirmation before executing.
|
|
586
|
+
3. **Agent/member assignment requires valid person IDs.** Use `wxcli users list --calling-data true` or the feature-specific `available-agents` subcommand to find them.
|
|
587
|
+
4. **Phone number vs. extension** -- at least one is required for AA, CQ, HG, Paging, VM Groups. Use `wxcli numbers list --location-id LOCATION_ID` to find unassigned numbers.
|
|
588
|
+
5. **Audio file upload is not supported via API** -- custom greetings for AA and CQ must be uploaded through Webex Control Hub.
|
|
589
|
+
6. **Call Park and Call Pickup IDs change on name modification.** Always re-fetch after renaming.
|
|
590
|
+
7. **CQ routing policy limits** -- `SIMULTANEOUS` max 50 agents; `WEIGHTED` max 100 agents; `CIRCULAR`/`REGULAR`/`UNIFORM` max 1,000 agents.
|
|
591
|
+
8. **Paging Group: originators require update** -- the CLI create command does not accept originator/target lists; use `wxcli paging-group update` after creation.
|
|
592
|
+
9. **Call Pickup one-group-per-user constraint** -- a user can only belong to one pickup group.
|
|
593
|
+
10. **Customer Assist (CX Essentials) has its own skill.** Use the `customer-assist` skill for screen pop, wrap-up, queue recording, and supervisor configuration. Call queue creation stays in this skill.
|
|
594
|
+
11. **Hunt Group holiday/night service** uses forwarding rules (schedule-based), not a dedicated policy API like Call Queues have.
|
|
595
|
+
12. **Voicemail Group passcode is required** on create -- the CLI enforces this via `--passcode` (required option).
|
|
596
|
+
13. **AA create: menus are auto-populated by the CLI.** The CLI provides default menus (key 0 = EXIT, extension dialing enabled) so the create command succeeds. Customize menus via `wxcli auto-attendant update` after creation.
|
|
597
|
+
14. **CQ update uses partial objects.** The CLI `update` command avoids the `callingLineIdPolicy=CUSTOM` 400 error by sending only changed fields.
|
|
598
|
+
15. **VM Group SDK bug is handled by the CLI.** The `wxcli location-voicemail create` command works around the `by_alias=True` bug internally.
|
|
599
|
+
16. **Before deleting, check for cross-feature references.** Some features are referenced by others and deleting them silently breaks the dependent feature:
|
|
600
|
+
- Hunt Groups may be referenced by Call Park recall configuration. Check: `wxcli call-park list LOCATION_ID -o json` and inspect `recall.huntGroupId`.
|
|
601
|
+
- Auto Attendants may be referenced by Call Queues (overflow destination) or other AAs (key-press routing). Check overflow settings on any CQ at the location.
|
|
602
|
+
- Call Queues may be referenced by AAs as overflow targets.
|
|
603
|
+
Run the relevant checks before executing any delete.
|
|
604
|
+
|
|
605
|
+
17. **Location-scoped deletes take LOCATION_ID as the FIRST argument** — `wxcli hunt-group delete --force LOCATION_ID HG_ID`, not `wxcli hunt-group delete --force HG_ID`. This applies to all location-scoped features: hunt-group, auto-attendant, call-queue, paging-group, call-park, call-pickup, location-voicemail, location-schedules.
|
|
606
|
+
17. **Always use `--force` for programmatic deletes** — Without `--force`, delete commands prompt `[y/N]` which blocks non-interactive execution.
|
|
607
|
+
18. **Agent/member format differs by feature type.** Hunt Groups and Call Queues take `agents` as `[{"id": "person_id"}]` (array of objects). Call Pickups take `agents` as `["person_id"]` (plain string array). Paging Groups take `targets`/`originators` as plain string arrays. Using the wrong format returns 400 "Invalid field value". Always check `docs/reference/call-features-additional.md` if unsure.
|
|
608
|
+
19. **Call Parks and Call Pickups require location for listing.** `wxcli call-park list` and `wxcli call-pickup list` without a location argument return empty. Must pass `LOCATION_ID` as first positional arg: `wxcli call-park list LOCATION_ID -o json`.
|
|
609
|
+
20. **Cross-skill handoffs:**
|
|
610
|
+
- CX Essentials configuration → `customer-assist` skill (screen pop, wrap-up, recording, supervisors)
|
|
611
|
+
- Person/workspace call settings → `manage-call-settings` skill (voicemail, forwarding, DND, etc.)
|
|
612
|
+
- Routing (trunks, dial plans, PSTN) → `configure-routing` skill
|
|
613
|
+
- Device provisioning → `manage-devices` skill
|
|
614
|
+
- Location teardown → `provision-calling` skill (Operation D: Teardown)
|
|
615
|
+
|
|
616
|
+
---
|
|
617
|
+
|
|
618
|
+
## Context Compaction Recovery
|
|
619
|
+
|
|
620
|
+
If context compacts mid-execution, recover by:
|
|
621
|
+
1. Read the deployment plan from `docs/plans/` to recover what was planned
|
|
622
|
+
2. Check what's already been created: run the relevant `list` commands
|
|
623
|
+
3. Resume from the first incomplete step
|