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.
Files changed (413) hide show
  1. wxcli/__init__.py +4 -0
  2. wxcli/_playbook/.claude/agents/migration-advisor.md +239 -0
  3. wxcli/_playbook/.claude/agents/wxc-calling-builder.md +946 -0
  4. wxcli/_playbook/.claude/rules/cleanup.md +29 -0
  5. wxcli/_playbook/.claude/rules/cucm-migration.md +58 -0
  6. wxcli/_playbook/.claude/rules/org-health.md +14 -0
  7. wxcli/_playbook/.claude/settings.json +8 -0
  8. wxcli/_playbook/.claude/skills/audit-compliance/SKILL.md +515 -0
  9. wxcli/_playbook/.claude/skills/call-control/SKILL.md +747 -0
  10. wxcli/_playbook/.claude/skills/configure-features/SKILL.md +623 -0
  11. wxcli/_playbook/.claude/skills/configure-routing/SKILL.md +627 -0
  12. wxcli/_playbook/.claude/skills/contact-center/SKILL.md +1181 -0
  13. wxcli/_playbook/.claude/skills/cucm-migrate/SKILL.md +820 -0
  14. wxcli/_playbook/.claude/skills/customer-assist/SKILL.md +443 -0
  15. wxcli/_playbook/.claude/skills/device-platform/SKILL.md +407 -0
  16. wxcli/_playbook/.claude/skills/manage-call-settings/SKILL.md +757 -0
  17. wxcli/_playbook/.claude/skills/manage-devices/SKILL.md +790 -0
  18. wxcli/_playbook/.claude/skills/manage-identity/SKILL.md +638 -0
  19. wxcli/_playbook/.claude/skills/manage-licensing/SKILL.md +528 -0
  20. wxcli/_playbook/.claude/skills/manage-meetings/SKILL.md +708 -0
  21. wxcli/_playbook/.claude/skills/messaging-bots/SKILL.md +365 -0
  22. wxcli/_playbook/.claude/skills/messaging-spaces/SKILL.md +520 -0
  23. wxcli/_playbook/.claude/skills/org-health/SKILL.md +159 -0
  24. wxcli/_playbook/.claude/skills/provision-calling/SKILL.md +421 -0
  25. wxcli/_playbook/.claude/skills/query-live/SKILL.md +183 -0
  26. wxcli/_playbook/.claude/skills/query-live/domains/call-flow-trace.md +223 -0
  27. wxcli/_playbook/.claude/skills/query-live/domains/call-history.md +44 -0
  28. wxcli/_playbook/.claude/skills/query-live/domains/features.md +169 -0
  29. wxcli/_playbook/.claude/skills/query-live/domains/numbers.md +93 -0
  30. wxcli/_playbook/.claude/skills/query-live/domains/people-and-settings.md +146 -0
  31. wxcli/_playbook/.claude/skills/query-live/domains/routing.md +124 -0
  32. wxcli/_playbook/.claude/skills/reporting/SKILL.md +501 -0
  33. wxcli/_playbook/.claude/skills/reporting/references/cdr-recipes.md +1628 -0
  34. wxcli/_playbook/.claude/skills/reporting-cc/SKILL.md +251 -0
  35. wxcli/_playbook/.claude/skills/reporting-meetings/SKILL.md +290 -0
  36. wxcli/_playbook/.claude/skills/teardown/SKILL.md +214 -0
  37. wxcli/_playbook/.claude/skills/video-mesh/SKILL.md +379 -0
  38. wxcli/_playbook/.claude/skills/wxc-calling-debug/SKILL.md +475 -0
  39. wxcli/_playbook/CLAUDE.md +373 -0
  40. wxcli/_playbook/docs/reference/CLAUDE.md +25 -0
  41. wxcli/_playbook/docs/reference/admin-apps-data.md +643 -0
  42. wxcli/_playbook/docs/reference/admin-audit-security.md +322 -0
  43. wxcli/_playbook/docs/reference/admin-hybrid.md +383 -0
  44. wxcli/_playbook/docs/reference/admin-identity-scim.md +1007 -0
  45. wxcli/_playbook/docs/reference/admin-licensing.md +414 -0
  46. wxcli/_playbook/docs/reference/admin-org-management.md +586 -0
  47. wxcli/_playbook/docs/reference/admin-partner.md +357 -0
  48. wxcli/_playbook/docs/reference/archive/wxc-sdk-patterns.md +1229 -0
  49. wxcli/_playbook/docs/reference/archive/wxcadm-advanced.md +835 -0
  50. wxcli/_playbook/docs/reference/archive/wxcadm-core.md +743 -0
  51. wxcli/_playbook/docs/reference/archive/wxcadm-devices-workspaces.md +1305 -0
  52. wxcli/_playbook/docs/reference/archive/wxcadm-features.md +849 -0
  53. wxcli/_playbook/docs/reference/archive/wxcadm-locations.md +938 -0
  54. wxcli/_playbook/docs/reference/archive/wxcadm-person.md +1255 -0
  55. wxcli/_playbook/docs/reference/archive/wxcadm-routing.md +1262 -0
  56. wxcli/_playbook/docs/reference/authentication.md +965 -0
  57. wxcli/_playbook/docs/reference/call-control.md +1205 -0
  58. wxcli/_playbook/docs/reference/call-features-additional.md +2541 -0
  59. wxcli/_playbook/docs/reference/call-features-major.md +1320 -0
  60. wxcli/_playbook/docs/reference/call-routing.md +2304 -0
  61. wxcli/_playbook/docs/reference/contact-center-analytics.md +1049 -0
  62. wxcli/_playbook/docs/reference/contact-center-core.md +1614 -0
  63. wxcli/_playbook/docs/reference/contact-center-journey.md +457 -0
  64. wxcli/_playbook/docs/reference/contact-center-routing.md +1138 -0
  65. wxcli/_playbook/docs/reference/devices-core.md +1869 -0
  66. wxcli/_playbook/docs/reference/devices-dect.md +1150 -0
  67. wxcli/_playbook/docs/reference/devices-platform.md +467 -0
  68. wxcli/_playbook/docs/reference/devices-workspaces.md +1426 -0
  69. wxcli/_playbook/docs/reference/emergency-services.md +1122 -0
  70. wxcli/_playbook/docs/reference/location-calling-core.md +2037 -0
  71. wxcli/_playbook/docs/reference/location-calling-media.md +1334 -0
  72. wxcli/_playbook/docs/reference/location-recording-advanced.md +1482 -0
  73. wxcli/_playbook/docs/reference/meetings-content.md +473 -0
  74. wxcli/_playbook/docs/reference/meetings-core.md +903 -0
  75. wxcli/_playbook/docs/reference/meetings-infrastructure.md +899 -0
  76. wxcli/_playbook/docs/reference/meetings-settings.md +850 -0
  77. wxcli/_playbook/docs/reference/messaging-bots.md +1091 -0
  78. wxcli/_playbook/docs/reference/messaging-spaces.md +695 -0
  79. wxcli/_playbook/docs/reference/person-call-settings-behavior.md +1639 -0
  80. wxcli/_playbook/docs/reference/person-call-settings-handling.md +1394 -0
  81. wxcli/_playbook/docs/reference/person-call-settings-media.md +1898 -0
  82. wxcli/_playbook/docs/reference/person-call-settings-permissions.md +1329 -0
  83. wxcli/_playbook/docs/reference/provisioning.md +1366 -0
  84. wxcli/_playbook/docs/reference/reporting-analytics.md +1318 -0
  85. wxcli/_playbook/docs/reference/self-service-call-settings.md +1020 -0
  86. wxcli/_playbook/docs/reference/virtual-lines.md +1132 -0
  87. wxcli/_playbook/docs/reference/webhooks-events.md +1444 -0
  88. wxcli/_playbook/docs/reference/wxcadm-xsi-realtime.md +953 -0
  89. wxcli/_version.py +24 -0
  90. wxcli/auth.py +137 -0
  91. wxcli/commands/__init__.py +0 -0
  92. wxcli/commands/_registry.py +181 -0
  93. wxcli/commands/activation_email.py +103 -0
  94. wxcli/commands/admin_recordings.py +585 -0
  95. wxcli/commands/analytics.py +105 -0
  96. wxcli/commands/announcement_playlists.py +219 -0
  97. wxcli/commands/announcements.py +519 -0
  98. wxcli/commands/archive_users.py +36 -0
  99. wxcli/commands/attachment_actions.py +60 -0
  100. wxcli/commands/audit_events.py +83 -0
  101. wxcli/commands/authorizations.py +113 -0
  102. wxcli/commands/auto_attendant.py +642 -0
  103. wxcli/commands/broadworks_billing_reports.py +126 -0
  104. wxcli/commands/broadworks_enterprises.py +160 -0
  105. wxcli/commands/broadworks_subscribers.py +319 -0
  106. wxcli/commands/broadworks_workspaces.py +108 -0
  107. wxcli/commands/call_controls.py +1304 -0
  108. wxcli/commands/call_park.py +494 -0
  109. wxcli/commands/call_pickup.py +229 -0
  110. wxcli/commands/call_queue.py +1878 -0
  111. wxcli/commands/call_recording.py +707 -0
  112. wxcli/commands/call_routing.py +1610 -0
  113. wxcli/commands/call_settings_for_me_phase_5.py +212 -0
  114. wxcli/commands/caller_reputation.py +169 -0
  115. wxcli/commands/calling_service.py +305 -0
  116. wxcli/commands/cc_address_book.py +770 -0
  117. wxcli/commands/cc_agent_greetings.py +242 -0
  118. wxcli/commands/cc_agent_summaries.py +39 -0
  119. wxcli/commands/cc_agent_wellbeing.py +216 -0
  120. wxcli/commands/cc_agents.py +425 -0
  121. wxcli/commands/cc_ai_assistant.py +55 -0
  122. wxcli/commands/cc_ai_feature.py +294 -0
  123. wxcli/commands/cc_audio_files.py +149 -0
  124. wxcli/commands/cc_auto_csat.py +311 -0
  125. wxcli/commands/cc_aux_code.py +458 -0
  126. wxcli/commands/cc_business_hour.py +353 -0
  127. wxcli/commands/cc_call_monitoring.py +228 -0
  128. wxcli/commands/cc_callbacks.py +194 -0
  129. wxcli/commands/cc_campaign.py +212 -0
  130. wxcli/commands/cc_captures.py +39 -0
  131. wxcli/commands/cc_contact_list.py +169 -0
  132. wxcli/commands/cc_contact_number.py +295 -0
  133. wxcli/commands/cc_data_sources.py +235 -0
  134. wxcli/commands/cc_desktop_layout.py +380 -0
  135. wxcli/commands/cc_desktop_profile.py +322 -0
  136. wxcli/commands/cc_dial_number.py +511 -0
  137. wxcli/commands/cc_dial_plan.py +347 -0
  138. wxcli/commands/cc_dnc.py +101 -0
  139. wxcli/commands/cc_entry_point.py +545 -0
  140. wxcli/commands/cc_ewt.py +51 -0
  141. wxcli/commands/cc_flow.py +477 -0
  142. wxcli/commands/cc_global_vars.py +430 -0
  143. wxcli/commands/cc_holiday_list.py +335 -0
  144. wxcli/commands/cc_journey.py +1261 -0
  145. wxcli/commands/cc_legacy_flows.py +49 -0
  146. wxcli/commands/cc_multimedia_profile.py +436 -0
  147. wxcli/commands/cc_notification.py +51 -0
  148. wxcli/commands/cc_outdial_ani.py +604 -0
  149. wxcli/commands/cc_overrides.py +341 -0
  150. wxcli/commands/cc_queue.py +1083 -0
  151. wxcli/commands/cc_queue_stats.py +55 -0
  152. wxcli/commands/cc_realtime.py +51 -0
  153. wxcli/commands/cc_resource_collection.py +312 -0
  154. wxcli/commands/cc_search.py +46 -0
  155. wxcli/commands/cc_site.py +400 -0
  156. wxcli/commands/cc_skill.py +350 -0
  157. wxcli/commands/cc_skill_profile.py +289 -0
  158. wxcli/commands/cc_subscriptions.py +426 -0
  159. wxcli/commands/cc_summaries.py +130 -0
  160. wxcli/commands/cc_tasks.py +844 -0
  161. wxcli/commands/cc_team.py +325 -0
  162. wxcli/commands/cc_user_profiles.py +349 -0
  163. wxcli/commands/cc_users.py +701 -0
  164. wxcli/commands/cc_work_types.py +363 -0
  165. wxcli/commands/cdr.py +89 -0
  166. wxcli/commands/classifications.py +38 -0
  167. wxcli/commands/cleanup.py +1427 -0
  168. wxcli/commands/client_settings.py +72 -0
  169. wxcli/commands/conference.py +328 -0
  170. wxcli/commands/configure.py +72 -0
  171. wxcli/commands/converged_recordings.py +347 -0
  172. wxcli/commands/converged_recordings_export.py +310 -0
  173. wxcli/commands/cq_playlists.py +42 -0
  174. wxcli/commands/cucm.py +2794 -0
  175. wxcli/commands/cucm_config.py +129 -0
  176. wxcli/commands/customer_assist.py +373 -0
  177. wxcli/commands/data_sources.py +227 -0
  178. wxcli/commands/dect_devices.py +787 -0
  179. wxcli/commands/device_configurations.py +77 -0
  180. wxcli/commands/device_dynamic_settings.py +320 -0
  181. wxcli/commands/device_settings.py +1489 -0
  182. wxcli/commands/devices.py +280 -0
  183. wxcli/commands/domains.py +142 -0
  184. wxcli/commands/ecm.py +178 -0
  185. wxcli/commands/emergency_services.py +827 -0
  186. wxcli/commands/events.py +83 -0
  187. wxcli/commands/external_voicemail.py +52 -0
  188. wxcli/commands/groups.py +206 -0
  189. wxcli/commands/guest_management.py +76 -0
  190. wxcli/commands/hds.py +340 -0
  191. wxcli/commands/hot_desk.py +67 -0
  192. wxcli/commands/hot_desking_members.py +118 -0
  193. wxcli/commands/hot_desking_portal.py +124 -0
  194. wxcli/commands/hunt_group.py +577 -0
  195. wxcli/commands/hybrid_clusters.py +71 -0
  196. wxcli/commands/hybrid_connectors.py +67 -0
  197. wxcli/commands/identity_org.py +159 -0
  198. wxcli/commands/init_playbook.py +155 -0
  199. wxcli/commands/licenses.py +106 -0
  200. wxcli/commands/live_monitoring.py +40 -0
  201. wxcli/commands/location_call_handling.py +577 -0
  202. wxcli/commands/location_schedules.py +341 -0
  203. wxcli/commands/location_settings.py +1297 -0
  204. wxcli/commands/location_voicemail.py +494 -0
  205. wxcli/commands/locations.py +336 -0
  206. wxcli/commands/meeting_captions.py +110 -0
  207. wxcli/commands/meeting_chats.py +63 -0
  208. wxcli/commands/meeting_invitees.py +234 -0
  209. wxcli/commands/meeting_messages.py +28 -0
  210. wxcli/commands/meeting_participants.py +278 -0
  211. wxcli/commands/meeting_polls.py +111 -0
  212. wxcli/commands/meeting_preferences.py +515 -0
  213. wxcli/commands/meeting_qa.py +78 -0
  214. wxcli/commands/meeting_qualities.py +43 -0
  215. wxcli/commands/meeting_reports.py +101 -0
  216. wxcli/commands/meeting_session_types.py +105 -0
  217. wxcli/commands/meeting_site.py +57 -0
  218. wxcli/commands/meeting_slido.py +44 -0
  219. wxcli/commands/meeting_summaries.py +92 -0
  220. wxcli/commands/meeting_tracking_codes.py +233 -0
  221. wxcli/commands/meeting_transcripts.py +230 -0
  222. wxcli/commands/meetings.py +1997 -0
  223. wxcli/commands/memberships.py +164 -0
  224. wxcli/commands/messages.py +213 -0
  225. wxcli/commands/mode_management.py +244 -0
  226. wxcli/commands/my_call_settings.py +3577 -0
  227. wxcli/commands/numbers.py +405 -0
  228. wxcli/commands/operating_modes.py +410 -0
  229. wxcli/commands/org_contacts.py +284 -0
  230. wxcli/commands/org_health_cli.py +55 -0
  231. wxcli/commands/org_settings.py +71 -0
  232. wxcli/commands/organizations.py +83 -0
  233. wxcli/commands/paging_group.py +257 -0
  234. wxcli/commands/partner_admins.py +141 -0
  235. wxcli/commands/partner_reports.py +188 -0
  236. wxcli/commands/partner_tags.py +216 -0
  237. wxcli/commands/people.py +279 -0
  238. wxcli/commands/person_call_settings.py +71 -0
  239. wxcli/commands/pstn.py +280 -0
  240. wxcli/commands/recording_report.py +154 -0
  241. wxcli/commands/report_templates.py +38 -0
  242. wxcli/commands/reports.py +144 -0
  243. wxcli/commands/resource_group_memberships.py +160 -0
  244. wxcli/commands/resource_groups.py +67 -0
  245. wxcli/commands/roles.py +63 -0
  246. wxcli/commands/room_tabs.py +160 -0
  247. wxcli/commands/rooms.py +225 -0
  248. wxcli/commands/scim_bulk.py +46 -0
  249. wxcli/commands/scim_groups.py +246 -0
  250. wxcli/commands/scim_schemas.py +82 -0
  251. wxcli/commands/scim_users.py +283 -0
  252. wxcli/commands/security_audit.py +54 -0
  253. wxcli/commands/service_apps.py +51 -0
  254. wxcli/commands/single_number_reach.py +209 -0
  255. wxcli/commands/team_memberships.py +155 -0
  256. wxcli/commands/teams.py +153 -0
  257. wxcli/commands/ucm_profile.py +42 -0
  258. wxcli/commands/update.py +219 -0
  259. wxcli/commands/user_settings.py +5116 -0
  260. wxcli/commands/video_mesh.py +1090 -0
  261. wxcli/commands/virtual_extensions.py +502 -0
  262. wxcli/commands/virtual_line_settings.py +2072 -0
  263. wxcli/commands/webhooks.py +176 -0
  264. wxcli/commands/wholesale_billing_reports.py +147 -0
  265. wxcli/commands/wholesale_provisioning.py +523 -0
  266. wxcli/commands/workspace_locations.py +339 -0
  267. wxcli/commands/workspace_metrics.py +103 -0
  268. wxcli/commands/workspace_personalization.py +70 -0
  269. wxcli/commands/workspace_settings.py +3347 -0
  270. wxcli/commands/workspaces.py +279 -0
  271. wxcli/commands/xapi.py +114 -0
  272. wxcli/config.py +139 -0
  273. wxcli/errors.py +77 -0
  274. wxcli/main.py +210 -0
  275. wxcli/migration/CLAUDE.md +106 -0
  276. wxcli/migration/__init__.py +1 -0
  277. wxcli/migration/advisory/CLAUDE.md +196 -0
  278. wxcli/migration/advisory/__init__.py +46 -0
  279. wxcli/migration/advisory/advisor.py +107 -0
  280. wxcli/migration/advisory/advisory_patterns.py +2552 -0
  281. wxcli/migration/advisory/recommendation_rules.py +835 -0
  282. wxcli/migration/cucm/CLAUDE.md +74 -0
  283. wxcli/migration/cucm/__init__.py +5 -0
  284. wxcli/migration/cucm/connection.py +265 -0
  285. wxcli/migration/cucm/discovery.py +225 -0
  286. wxcli/migration/cucm/extractors/__init__.py +1 -0
  287. wxcli/migration/cucm/extractors/announcements.py +92 -0
  288. wxcli/migration/cucm/extractors/base.py +90 -0
  289. wxcli/migration/cucm/extractors/device_profiles.py +98 -0
  290. wxcli/migration/cucm/extractors/devices.py +193 -0
  291. wxcli/migration/cucm/extractors/e911.py +103 -0
  292. wxcli/migration/cucm/extractors/features.py +309 -0
  293. wxcli/migration/cucm/extractors/helpers.py +73 -0
  294. wxcli/migration/cucm/extractors/informational.py +295 -0
  295. wxcli/migration/cucm/extractors/locations.py +221 -0
  296. wxcli/migration/cucm/extractors/moh.py +100 -0
  297. wxcli/migration/cucm/extractors/remote_destinations.py +96 -0
  298. wxcli/migration/cucm/extractors/routing.py +493 -0
  299. wxcli/migration/cucm/extractors/shared_lines.py +146 -0
  300. wxcli/migration/cucm/extractors/templates.py +229 -0
  301. wxcli/migration/cucm/extractors/tier4.py +173 -0
  302. wxcli/migration/cucm/extractors/users.py +240 -0
  303. wxcli/migration/cucm/extractors/voicemail.py +243 -0
  304. wxcli/migration/cucm/extractors/workspaces.py +88 -0
  305. wxcli/migration/cucm/unity_connection.py +304 -0
  306. wxcli/migration/execute/CLAUDE.md +372 -0
  307. wxcli/migration/execute/__init__.py +303 -0
  308. wxcli/migration/execute/batch.py +277 -0
  309. wxcli/migration/execute/dependency.py +483 -0
  310. wxcli/migration/execute/engine.py +964 -0
  311. wxcli/migration/execute/handlers.py +2232 -0
  312. wxcli/migration/execute/planner.py +1939 -0
  313. wxcli/migration/execute/runtime.py +571 -0
  314. wxcli/migration/export/CLAUDE.md +49 -0
  315. wxcli/migration/export/__init__.py +8 -0
  316. wxcli/migration/export/csv_export.py +126 -0
  317. wxcli/migration/export/deployment_plan.py +479 -0
  318. wxcli/migration/export/json_export.py +60 -0
  319. wxcli/migration/models.py +941 -0
  320. wxcli/migration/phone_models.py +50 -0
  321. wxcli/migration/preflight/CLAUDE.md +52 -0
  322. wxcli/migration/preflight/__init__.py +89 -0
  323. wxcli/migration/preflight/checks.py +911 -0
  324. wxcli/migration/preflight/runner.py +293 -0
  325. wxcli/migration/rate_limiter.py +144 -0
  326. wxcli/migration/report/CLAUDE.md +245 -0
  327. wxcli/migration/report/__init__.py +7 -0
  328. wxcli/migration/report/appendix.py +2437 -0
  329. wxcli/migration/report/assembler.py +183 -0
  330. wxcli/migration/report/charts.py +263 -0
  331. wxcli/migration/report/executive.py +776 -0
  332. wxcli/migration/report/explainer.py +704 -0
  333. wxcli/migration/report/helpers.py +74 -0
  334. wxcli/migration/report/ingest.py +152 -0
  335. wxcli/migration/report/notice_templates.py +192 -0
  336. wxcli/migration/report/score.py +375 -0
  337. wxcli/migration/report/styles.py +1052 -0
  338. wxcli/migration/report/user_diff.py +1052 -0
  339. wxcli/migration/report/user_notice.py +425 -0
  340. wxcli/migration/state.py +139 -0
  341. wxcli/migration/store.py +860 -0
  342. wxcli/migration/transform/CLAUDE.md +107 -0
  343. wxcli/migration/transform/__init__.py +12 -0
  344. wxcli/migration/transform/analysis_pipeline.py +453 -0
  345. wxcli/migration/transform/analyzers/__init__.py +142 -0
  346. wxcli/migration/transform/analyzers/css_permission.py +189 -0
  347. wxcli/migration/transform/analyzers/css_routing.py +335 -0
  348. wxcli/migration/transform/analyzers/device_compatibility.py +122 -0
  349. wxcli/migration/transform/analyzers/dn_ambiguity.py +131 -0
  350. wxcli/migration/transform/analyzers/duplicate_user.py +221 -0
  351. wxcli/migration/transform/analyzers/extension_conflict.py +173 -0
  352. wxcli/migration/transform/analyzers/feature_approximation.py +227 -0
  353. wxcli/migration/transform/analyzers/layout_overflow.py +174 -0
  354. wxcli/migration/transform/analyzers/location_ambiguity.py +184 -0
  355. wxcli/migration/transform/analyzers/missing_data.py +300 -0
  356. wxcli/migration/transform/analyzers/selective_call_handling.py +394 -0
  357. wxcli/migration/transform/analyzers/shared_line.py +170 -0
  358. wxcli/migration/transform/analyzers/voicemail_compatibility.py +267 -0
  359. wxcli/migration/transform/analyzers/workspace_license.py +212 -0
  360. wxcli/migration/transform/cross_reference.py +1136 -0
  361. wxcli/migration/transform/cucm_pattern.py +246 -0
  362. wxcli/migration/transform/decisions.py +301 -0
  363. wxcli/migration/transform/e164.py +145 -0
  364. wxcli/migration/transform/engine.py +256 -0
  365. wxcli/migration/transform/mappers/CLAUDE.md +123 -0
  366. wxcli/migration/transform/mappers/__init__.py +76 -0
  367. wxcli/migration/transform/mappers/announcement_mapper.py +122 -0
  368. wxcli/migration/transform/mappers/base.py +190 -0
  369. wxcli/migration/transform/mappers/button_template_mapper.py +186 -0
  370. wxcli/migration/transform/mappers/call_forwarding_mapper.py +228 -0
  371. wxcli/migration/transform/mappers/call_settings_mapper.py +144 -0
  372. wxcli/migration/transform/mappers/css_mapper.py +868 -0
  373. wxcli/migration/transform/mappers/dect_mapper.py +367 -0
  374. wxcli/migration/transform/mappers/device_layout_mapper.py +289 -0
  375. wxcli/migration/transform/mappers/device_mapper.py +227 -0
  376. wxcli/migration/transform/mappers/device_profile_mapper.py +190 -0
  377. wxcli/migration/transform/mappers/device_settings_mapper.py +464 -0
  378. wxcli/migration/transform/mappers/e911_mapper.py +129 -0
  379. wxcli/migration/transform/mappers/ecbn_mapper.py +263 -0
  380. wxcli/migration/transform/mappers/executive_assistant_mapper.py +156 -0
  381. wxcli/migration/transform/mappers/feature_mapper.py +1179 -0
  382. wxcli/migration/transform/mappers/line_mapper.py +310 -0
  383. wxcli/migration/transform/mappers/location_mapper.py +235 -0
  384. wxcli/migration/transform/mappers/moh_mapper.py +114 -0
  385. wxcli/migration/transform/mappers/monitoring_mapper.py +221 -0
  386. wxcli/migration/transform/mappers/receptionist_mapper.py +245 -0
  387. wxcli/migration/transform/mappers/routing_mapper.py +821 -0
  388. wxcli/migration/transform/mappers/snr_mapper.py +201 -0
  389. wxcli/migration/transform/mappers/softkey_mapper.py +205 -0
  390. wxcli/migration/transform/mappers/user_mapper.py +264 -0
  391. wxcli/migration/transform/mappers/voicemail_group_mapper.py +286 -0
  392. wxcli/migration/transform/mappers/voicemail_mapper.py +514 -0
  393. wxcli/migration/transform/mappers/workspace_mapper.py +464 -0
  394. wxcli/migration/transform/normalizers.py +2008 -0
  395. wxcli/migration/transform/pattern_converter.py +106 -0
  396. wxcli/migration/transform/pipeline.py +271 -0
  397. wxcli/migration/transform/rules.py +255 -0
  398. wxcli/org_health/CLAUDE.md +63 -0
  399. wxcli/org_health/__init__.py +7 -0
  400. wxcli/org_health/analyze.py +93 -0
  401. wxcli/org_health/checks.py +458 -0
  402. wxcli/org_health/collector.py +62 -0
  403. wxcli/org_health/models.py +78 -0
  404. wxcli/org_health/report.py +300 -0
  405. wxcli/output.py +101 -0
  406. wxcli-1.2.0.dist-info/METADATA +505 -0
  407. wxcli-1.2.0.dist-info/RECORD +413 -0
  408. wxcli-1.2.0.dist-info/WHEEL +5 -0
  409. wxcli-1.2.0.dist-info/entry_points.txt +2 -0
  410. wxcli-1.2.0.dist-info/licenses/LICENSE +191 -0
  411. wxcli-1.2.0.dist-info/scm_file_list.json +751 -0
  412. wxcli-1.2.0.dist-info/scm_version.json +8 -0
  413. wxcli-1.2.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,414 @@
1
+ # Admin: Licensing
2
+
3
+ License inventory, assignment, usage auditing, and reclamation for Webex organizations.
4
+
5
+ ## Sources
6
+
7
+ - OpenAPI spec: `specs/webex-admin.json` — Licenses tag (3 endpoints)
8
+ - OpenAPI spec: `specs/webex-cloud-calling.json` — Licenses tag (calling-focused subset)
9
+ - [Webex Licenses API Reference](https://developer.webex.com/docs/api/v1/licenses)
10
+
11
+ ---
12
+
13
+ ## Table of Contents
14
+
15
+ 1. [License Types](#license-types)
16
+ 2. [Required Scopes](#required-scopes)
17
+ 3. [CLI Command Groups](#cli-command-groups)
18
+ 4. [1. licenses-api (Admin Spec)](#1-licenses-api-admin-spec)
19
+ 5. [2. licenses (Calling Spec)](#2-licenses-calling-spec)
20
+ 6. [Raw HTTP Fallback](#raw-http-fallback)
21
+ 7. [License Assignment Error Codes](#license-assignment-error-codes)
22
+ 8. [Recipes](#recipes)
23
+ 9. [Gotchas](#gotchas)
24
+ 10. [See Also](#see-also)
25
+
26
+ ---
27
+
28
+ ## License Types
29
+
30
+ Webex organizations contain a mix of license types. Common ones relevant to calling deployments:
31
+
32
+ | License Name Pattern | Purpose |
33
+ |----------------------|---------|
34
+ | Webex Calling - Professional | Full calling features: extension, DID, voicemail, call forwarding, device support |
35
+ | Webex Calling - Standard | Basic calling with limited features (no voicemail, restricted forwarding) |
36
+ | Webex Calling - Common Area | For shared devices (lobby phones, break rooms) |
37
+ | Customer Assist (formerly CX Essentials) | Contact center agent capabilities on top of Calling Professional |
38
+ | Webex Attendant Console | Receptionist console (requires Calling Professional as prerequisite) |
39
+ | Webex Meetings | Meeting host licenses (various tiers) |
40
+ | Webex Messaging | Messaging/spaces licenses (free and paid tiers) |
41
+
42
+ License names vary by subscription and are not standardized strings. Always match by substring (e.g., `"calling"` in the name) rather than exact string comparison.
43
+
44
+ ---
45
+
46
+ ## Required Scopes
47
+
48
+ | Scope | Purpose |
49
+ |-------|---------|
50
+ | Admin token (full or read-only admin) | List and view license inventory |
51
+ | Admin token (full admin) | Assign/remove licenses via PATCH |
52
+
53
+ The Licenses API does not document explicit OAuth scopes. A standard admin token (from Control Hub admin login or service app with admin grant) provides access. Read-only admins can list and view but cannot assign.
54
+
55
+ ---
56
+
57
+ ## CLI Command Groups
58
+
59
+ Two CLI groups cover licensing. Use the one that fits your workflow:
60
+
61
+ | Group | Spec | Commands | Best For |
62
+ |-------|------|----------|----------|
63
+ | `licenses-api` | admin | 3 (list, show, update) | Full license management: inventory, assignment, removal |
64
+ | `licenses` | calling | 2 (list, show) | Quick calling-license audit with `--calling-only` filter |
65
+
66
+ **When to use which:**
67
+ - Use `licenses-api` when you need to assign or remove licenses, see assigned users, or work with non-calling licenses (Meetings, Messaging).
68
+ - Use `licenses` when you just need a quick view of calling license counts. It wraps the SDK and supports `--calling-only` for filtering.
69
+
70
+ ---
71
+
72
+ ## 1. licenses-api (Admin Spec)
73
+
74
+ Full license management: list all org licenses, view details with assigned users, and assign/remove licenses.
75
+
76
+ ### Commands
77
+
78
+ | Command | Method | Endpoint | Description |
79
+ |---------|--------|----------|-------------|
80
+ | `licenses-api list` | GET | `/v1/licenses` | List all licenses in the org |
81
+ | `licenses-api show` | GET | `/v1/licenses/{licenseId}` | Get license details (optionally with assigned users) |
82
+ | `licenses-api update` | PATCH | `/v1/licenses/users` | Assign or remove licenses for a user |
83
+
84
+ ### licenses-api list
85
+
86
+ List all licenses in the organization with total and consumed unit counts.
87
+
88
+ ```bash
89
+ # List all licenses (table format)
90
+ wxcli licenses-api list
91
+
92
+ # JSON output for scripting
93
+ wxcli licenses-api list -o json
94
+
95
+ # With pagination
96
+ wxcli licenses-api list --limit 10 --offset 0
97
+ ```
98
+
99
+ **Table columns:** ID, Name, Total Units, Consumed.
100
+
101
+ ### licenses-api show
102
+
103
+ Get details for a specific license. Use `--include-assigned-to user` to see which users hold this license.
104
+
105
+ ```bash
106
+ # Basic license details
107
+ wxcli licenses-api show "Y2lzY29zcGFyazov..."
108
+
109
+ # Include list of assigned users
110
+ wxcli licenses-api show "Y2lzY29zcGFyazov..." --include-assigned-to user
111
+
112
+ # Paginate assigned users (max 300 per page)
113
+ wxcli licenses-api show "Y2lzY29zcGFyazov..." --include-assigned-to user --limit 100
114
+ ```
115
+
116
+ **Response fields:** id, name, totalUnits, consumedUnits, consumedByUsers, consumedByWorkspaces, subscriptionId, siteUrl, siteType, and (if requested) a `users` array with id, type, displayName, email.
117
+
118
+ ### licenses-api update
119
+
120
+ Assign or remove licenses for a user. This is a PATCH to `/v1/licenses/users`. The body requires `--json-body` for the full `licenses` array structure.
121
+
122
+ **Identify the user** with `--email` or `--person-id` (at least one required).
123
+
124
+ ```bash
125
+ # Add a non-calling license (Meetings, Messaging, etc.)
126
+ wxcli licenses-api update --email "user@example.com" --json-body '{
127
+ "email": "user@example.com",
128
+ "licenses": [
129
+ {"id": "LICENSE_ID_HERE", "operation": "add"}
130
+ ]
131
+ }'
132
+
133
+ # Add a Calling Professional license (requires location + phone/extension)
134
+ wxcli licenses-api update --email "user@example.com" --json-body '{
135
+ "email": "user@example.com",
136
+ "licenses": [
137
+ {
138
+ "id": "CALLING_PRO_LICENSE_ID",
139
+ "operation": "add",
140
+ "properties": {
141
+ "locationId": "LOCATION_ID",
142
+ "phoneNumber": "+14085267209",
143
+ "extension": "133"
144
+ }
145
+ }
146
+ ]
147
+ }'
148
+
149
+ # Remove a license
150
+ wxcli licenses-api update --email "user@example.com" --json-body '{
151
+ "email": "user@example.com",
152
+ "licenses": [
153
+ {"id": "LICENSE_ID_HERE", "operation": "remove"}
154
+ ]
155
+ }'
156
+
157
+ # Add and remove in one call
158
+ wxcli licenses-api update --email "user@example.com" --json-body '{
159
+ "email": "user@example.com",
160
+ "licenses": [
161
+ {"id": "NEW_LICENSE_ID", "operation": "add"},
162
+ {"id": "OLD_LICENSE_ID", "operation": "remove"}
163
+ ]
164
+ }'
165
+ ```
166
+
167
+ ### PATCH Body Schema
168
+
169
+ ```json
170
+ {
171
+ "email": "string (required, or use personId)",
172
+ "personId": "string (required, or use email)",
173
+ "orgId": "string (optional, defaults to token org)",
174
+ "licenses": [
175
+ {
176
+ "id": "string (required) — license ID from licenses-api list",
177
+ "operation": "add | remove (default: add)",
178
+ "properties": {
179
+ "locationId": "string — required for Calling licenses if no phoneNumber",
180
+ "phoneNumber": "string — required for Calling licenses if no extension",
181
+ "extension": "string — Calling extension"
182
+ }
183
+ }
184
+ ],
185
+ "siteUrls": [
186
+ {
187
+ "siteUrl": "string — Webex Meetings site URL",
188
+ "accountType": "attendee",
189
+ "operation": "add | remove"
190
+ }
191
+ ]
192
+ }
193
+ ```
194
+
195
+ **Calling license properties rules:**
196
+ - For Calling license assignment, either `phoneNumber` or `extension` is required in `properties`.
197
+ - If `phoneNumber` is not provided, `locationId` is mandatory.
198
+ - Non-calling licenses (Meetings, Messaging) do not need `properties`.
199
+
200
+ > **Gotcha — Calling licenses require `properties`.** Unlike Meetings or Messaging licenses, Calling license assignment must include `properties` with at least `phoneNumber` or `extension`. If you omit `phoneNumber`, you must provide `locationId`. Error code 400411 indicates missing properties.
201
+
202
+ > **Gotcha — `licenses-api update` confirms "Updated" even on no-op.** If the user already has the license, the CLI prints "Updated." without error. Always verify the actual state with `licenses-api show` after assignment.
203
+
204
+ > **Gotcha — Attendant Console has a prerequisite.** You must assign Calling Professional before assigning Attendant Console. Error code 400408 is returned if the prerequisite is missing.
205
+
206
+ ---
207
+
208
+ ## 2. licenses (Calling Spec)
209
+
210
+ SDK-wrapped license listing with a `--calling-only` convenience filter.
211
+
212
+ ### Commands
213
+
214
+ | Command | Method | Description |
215
+ |---------|--------|-------------|
216
+ | `licenses list` | SDK `api.licenses.list()` | List licenses with optional calling filter |
217
+ | `licenses show` | SDK `api.licenses.details()` | Show a single license |
218
+
219
+ ```bash
220
+ # All licenses
221
+ wxcli licenses list
222
+
223
+ # Only calling-related licenses
224
+ wxcli licenses list --calling-only
225
+
226
+ # JSON output
227
+ wxcli licenses list --calling-only -o json
228
+
229
+ # Show one license
230
+ wxcli licenses show "Y2lzY29zcGFyazov..."
231
+ ```
232
+
233
+ **Table columns:** ID, Name, Total, Consumed.
234
+
235
+ > **Gotcha — The `--calling-only` filter uses substring matching.** It filters for `"calling"` in the license name (case-insensitive). This may miss licenses with non-standard naming, or include unexpected matches.
236
+
237
+ ---
238
+
239
+ ## Raw HTTP Fallback
240
+
241
+ ### List Licenses
242
+
243
+ ```
244
+ GET https://webexapis.com/v1/licenses
245
+ Authorization: Bearer {admin_token}
246
+ ```
247
+
248
+ Optional query parameter: `orgId` (list licenses for a specific org).
249
+
250
+ ### Get License Details
251
+
252
+ ```
253
+ GET https://webexapis.com/v1/licenses/{licenseId}?includeAssignedTo=user&limit=300
254
+ Authorization: Bearer {admin_token}
255
+ ```
256
+
257
+ ### Assign Licenses
258
+
259
+ ```
260
+ PATCH https://webexapis.com/v1/licenses/users
261
+ Authorization: Bearer {admin_token}
262
+ Content-Type: application/json
263
+
264
+ {
265
+ "email": "user@example.com",
266
+ "licenses": [
267
+ {
268
+ "id": "LICENSE_ID",
269
+ "operation": "add",
270
+ "properties": {
271
+ "locationId": "LOCATION_ID",
272
+ "phoneNumber": "+14085267209",
273
+ "extension": "133"
274
+ }
275
+ }
276
+ ]
277
+ }
278
+ ```
279
+
280
+ **Response codes:**
281
+ - `200` — All licenses assigned successfully.
282
+ - `206` — Partial success. Compare returned `licenses` array against requested to find failures.
283
+ - `400` — Assignment failed. Check error codes (see Error Codes section below).
284
+
285
+ ---
286
+
287
+ ## License Assignment Error Codes
288
+
289
+ The PATCH endpoint returns specific error codes for assignment failures:
290
+
291
+ | Error Code | Meaning |
292
+ |------------|---------|
293
+ | 400000 | License ID not recognized |
294
+ | 400112 | Cannot downgrade Calling Professional to Standard |
295
+ | 400404 | Cannot have both Calling Professional and Standard simultaneously |
296
+ | 400406 | Cannot have both Calling Standard and Attendant Console |
297
+ | 400407 | Cannot have both Calling Standard and Customer Assist |
298
+ | 400408 | Attendant Console requires Calling Professional as prerequisite |
299
+ | 400410 | Cannot downgrade Customer Assist to Calling Standard |
300
+ | 400411 | Calling license missing required `properties` (locationId/phoneNumber/extension) |
301
+ | 400413 | Exclusive license conflict (only one from a set can be assigned) |
302
+ | 700003 | Free messaging license required before paid messaging |
303
+ | 700004 | Free meeting license required before paid meeting |
304
+ | 700005 | Free messaging license required for meeting license |
305
+ | 700006 | Screen Share license is implicitly assigned and cannot be removed |
306
+
307
+ ---
308
+
309
+ ## Recipes
310
+
311
+ ### Audit License Usage
312
+
313
+ List all licenses and check consumed vs. total to identify overallocation or available capacity.
314
+
315
+ ```bash
316
+ # Quick table view
317
+ wxcli licenses-api list
318
+
319
+ # Script-friendly: extract calling licenses with availability
320
+ wxcli licenses-api list -o json | python3.11 -c "
321
+ import json, sys
322
+ data = json.load(sys.stdin)
323
+ for lic in data:
324
+ avail = lic.get('totalUnits', 0) - lic.get('consumedUnits', 0)
325
+ print(f\"{lic['name']}: {lic.get('consumedUnits', 0)}/{lic.get('totalUnits', 0)} (available: {avail})\")
326
+ "
327
+ ```
328
+
329
+ ### Find Users Assigned to a Specific License
330
+
331
+ ```bash
332
+ # Get the license ID first
333
+ wxcli licenses-api list -o json
334
+
335
+ # Then show assigned users for that license
336
+ wxcli licenses-api show "LICENSE_ID" --include-assigned-to user -o json
337
+ ```
338
+
339
+ ### Bulk License Assignment Workflow
340
+
341
+ 1. List available licenses to get the correct license ID:
342
+ ```bash
343
+ wxcli licenses-api list -o json
344
+ ```
345
+
346
+ 2. Get user person IDs from the people API:
347
+ ```bash
348
+ wxcli people list --email "user@example.com" -o json
349
+ ```
350
+
351
+ 3. Assign the license:
352
+ ```bash
353
+ wxcli licenses-api update --json-body '{
354
+ "email": "user@example.com",
355
+ "licenses": [
356
+ {
357
+ "id": "CALLING_PRO_LICENSE_ID",
358
+ "operation": "add",
359
+ "properties": {
360
+ "locationId": "LOCATION_ID",
361
+ "extension": "200"
362
+ }
363
+ }
364
+ ]
365
+ }'
366
+ ```
367
+
368
+ 4. Verify assignment:
369
+ ```bash
370
+ wxcli licenses-api show "CALLING_PRO_LICENSE_ID" --include-assigned-to user -o json
371
+ ```
372
+
373
+ ### Reclaim Unused Licenses
374
+
375
+ Find users who hold a license but may no longer need it (e.g., inactive users), then remove the license.
376
+
377
+ ```bash
378
+ # Step 1: List users assigned to a calling license
379
+ wxcli licenses-api show "CALLING_LICENSE_ID" --include-assigned-to user -o json
380
+
381
+ # Step 2: Cross-reference with people list to check status
382
+ wxcli people list -o json
383
+
384
+ # Step 3: Remove license from specific user
385
+ wxcli licenses-api update --json-body '{
386
+ "email": "departing.user@example.com",
387
+ "licenses": [
388
+ {"id": "CALLING_LICENSE_ID", "operation": "remove"}
389
+ ]
390
+ }'
391
+ ```
392
+
393
+ ---
394
+
395
+ ## Gotchas
396
+
397
+ 1. **License IDs are org-specific base64-encoded strings.** They differ between organizations and subscriptions. Never hardcode license IDs -- always look them up with `licenses-api list` first.
398
+
399
+ 2. **Removing a Calling license is destructive.** When you remove a Webex Calling Professional license from a user, ALL their calling configuration is deleted: extension, phone number, call forwarding rules, voicemail settings, monitoring lists, and device associations. There is no undo. Always document the user's settings before removing a calling license.
400
+
401
+ 3. **206 Partial Content is not an error.** The PATCH endpoint can return HTTP 206 when some licenses in the request succeeded but others failed. Always compare the returned `licenses` array against what you requested to identify which ones failed.
402
+
403
+ 4. **License conflicts are strictly enforced.** A user cannot hold both Calling Professional and Calling Standard, or Calling Standard and Customer Assist. The API returns specific 400-level error codes for each conflict type (see Error Codes table above).
404
+
405
+ ---
406
+
407
+ ## See Also
408
+
409
+ - [provisioning.md](provisioning.md) — User creation and calling license assignment during initial provisioning
410
+ - [person-call-settings-behavior.md](person-call-settings-behavior.md) — Calling behavior settings that depend on having a calling license
411
+ - [reporting-analytics.md](reporting-analytics.md) — License usage trends via report templates
412
+ - [virtual-lines.md](virtual-lines.md) — Virtual line licensing
413
+
414
+ For calling license assignment during user provisioning, see [provisioning.md](provisioning.md) and the `provision-calling` skill.