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,365 @@
1
+ ---
2
+ name: messaging-bots
3
+ description: |
4
+ Build Webex bots and automated workflows: send notifications, create interactive
5
+ adaptive card flows, set up webhooks, embed room tabs, and bridge calling + messaging.
6
+ Guides from bot setup through card recipe selection, webhook configuration, and verification.
7
+ NOT for: managing spaces/teams/memberships (use messaging-spaces skill) or
8
+ telephony webhooks/call events (use call-control skill).
9
+ allowed-tools: Read, Grep, Glob, Bash
10
+ argument-hint: [bot-task-type]
11
+ ---
12
+
13
+ # Messaging Bots Workflow
14
+
15
+ **Checkpoint — do NOT proceed until you can answer these:**
16
+ 1. What token does a bot use to send messages? (Answer: The bot's own access token from developer.webex.com — not an admin token. Each bot has a unique, non-expiring token generated at creation.)
17
+ 2. How does a bot receive user interactions with adaptive cards? (Answer: Via `attachmentActions` webhook — the bot registers a webhook for `attachmentActions` resource with `created` event, then receives the card submission data.)
18
+
19
+ If you cannot answer both, you skipped reading this skill. Go back and read it.
20
+
21
+ ## Step 1: Load references
22
+
23
+ 1. Read `docs/reference/messaging-bots.md` for bot patterns, card recipes, attachment actions, room tabs
24
+ 2. Read `docs/reference/webhooks-events.md` for webhook CRUD, messaging event payloads, bot webhook patterns (sections 4b and 6b)
25
+
26
+ **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 messages create --help` and `wxcli webhooks create --help`). 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.
27
+
28
+ ## Step 2: Verify auth token
29
+
30
+ Before any API calls, confirm the user has a working auth token:
31
+
32
+ ```bash
33
+ wxcli whoami
34
+ ```
35
+
36
+ If this fails, stop and resolve authentication first (`wxcli configure`).
37
+
38
+ ### Token type detection
39
+
40
+ The `/people/me` response includes a `type` field:
41
+
42
+ | Token Type | `type` field | Suitable For |
43
+ |-----------|-------------|-------------|
44
+ | Bot | `bot` | Sending messages, receiving webhooks, card interactions |
45
+ | User | `person` | Testing, room tabs (requires moderator), all bot operations |
46
+ | Admin (personal) | `person` | CAN post to spaces if admin is a member — same as user token with elevated scopes |
47
+ | Service App | `appuser` | NOT suitable for sending messages — service app tokens cannot post to spaces |
48
+
49
+ ### Bot token scopes (fixed, cannot be expanded)
50
+
51
+ - `spark:messages_read` / `spark:messages_write` — read and send messages
52
+ - `spark:rooms_read` — list and read space details
53
+ - `spark:memberships_read` — list space members
54
+ - `spark:kms` — E2E encryption key management
55
+
56
+ **Warning:** If the user has a service app token and wants to send messages, they need to switch to a bot or user token. Service app tokens get 403 on message creation. Personal admin tokens (which are user tokens with elevated scopes) CAN post to spaces if the admin is a member of the space.
57
+
58
+ ### Scope verification
59
+
60
+ After identifying the token type, verify the token has the scopes required for the user's task:
61
+
62
+ | Task Type | Required Scopes |
63
+ |-----------|----------------|
64
+ | Send notification | `spark:messages_write`, `spark:rooms_read` |
65
+ | Card interaction | `spark:messages_write`, `spark:rooms_read` + webhook callback URL |
66
+ | Webhook setup | `spark:messages_read` or `spark:rooms_read` (depends on resource) |
67
+ | Room tab | `spark:rooms_read`, `spark:rooms_write` (user token only) |
68
+ | Cross-domain (calling + messaging) | `spark:messages_write` + `spark:calls_read` (may need two tokens) |
69
+
70
+ **How to check:** Run `wxcli whoami` to confirm identity. `wxcli whoami` does not support `--output json` — it displays a formatted summary. For detailed token inspection, use `wxcli people show-me --output json`. Bot tokens have a fixed scope set (see above). For user/admin tokens, the scopes depend on the OAuth grant.
71
+
72
+ **If scopes are missing:**
73
+ - **Bot token:** Bot scopes are fixed at creation time. If the bot lacks a required scope, the user must create a new bot with the correct scopes at developer.webex.com.
74
+ - **User token:** The user must re-authorize with the required scopes in their OAuth flow.
75
+ - **Cross-domain:** If the task needs both messaging and calling scopes, the user likely needs two tokens — a bot token for messaging and a user/admin token for calling webhooks.
76
+
77
+ ## Step 3: Identify task type
78
+
79
+ Ask the user what they want to build. Present this decision matrix if they are unsure:
80
+
81
+ | User Wants To | Task Type | Prerequisites |
82
+ |--------------|-----------|---------------|
83
+ | Send alerts/notifications to a space | **Send notification** | Bot/user token + bot is member of target space |
84
+ | Build an interactive card flow (approve/reject, forms) | **Card interaction** | Bot token + webhook callback URL + target space |
85
+ | Subscribe to messaging events | **Webhook setup** | Bot/user token + publicly accessible HTTPS webhook URL |
86
+ | Embed a web app in a space's tab bar | **Room tab** | User token (moderator) — NOT bot token |
87
+ | Bridge calling events to messaging | **Cross-domain** | Bot token + calling webhook + target space |
88
+
89
+ ## Step 4: Check prerequisites
90
+
91
+ Before executing, verify these are in place:
92
+
93
+ ### 4a. Bot token configured
94
+
95
+ ```bash
96
+ wxcli whoami
97
+ ```
98
+
99
+ If the response shows a bot display name and `type: bot`, the token is configured. If not:
100
+
101
+ ```bash
102
+ wxcli configure
103
+ # Enter the bot's access token (from developer.webex.com → My Apps → Bot)
104
+ ```
105
+
106
+ ### 4b. Bot is a member of the target space
107
+
108
+ ```bash
109
+ wxcli memberships list --room-id ROOM_ID --output json
110
+ ```
111
+
112
+ Look for the bot's person ID in the membership list. If the bot is NOT a member, a **user** must add it:
113
+
114
+ ```bash
115
+ wxcli memberships create --room-id ROOM_ID --person-email bot-name@webex.bot
116
+ ```
117
+
118
+ **Critical:** Bots cannot add themselves to spaces. A user must invite the bot.
119
+
120
+ ### 4c. Webhook callback URL available (for interactive bots)
121
+
122
+ The user must have a publicly accessible HTTPS endpoint to receive webhook events. Options:
123
+ - **Development:** ngrok (`ngrok http 8080` → use the HTTPS URL)
124
+ - **Production:** Cloud function (AWS Lambda, Google Cloud Functions), any HTTPS server
125
+
126
+ Ask: "Do you have a webhook callback URL? If not, we can set up notifications only (no interactive cards)."
127
+
128
+ ### 4d. Target space exists
129
+
130
+ ```bash
131
+ wxcli rooms show ROOM_ID --output json
132
+ ```
133
+
134
+ If the space doesn't exist, create one:
135
+
136
+ ```bash
137
+ wxcli rooms create --title "Bot Space"
138
+ ```
139
+
140
+ Then add the bot to the new space (see 4b).
141
+
142
+ ### 4e. Select card recipe (if applicable)
143
+
144
+ If the user's task involves sending rich messages or interactive cards, guide them to the right recipe:
145
+
146
+ | Use Case | Recipe | Interactive? |
147
+ |----------|--------|-------------|
148
+ | "Alert when X happens" | **Notification** — TextBlock + FactSet + Action.OpenUrl | No |
149
+ | "Get approval for X" | **Approval Flow** — FactSet + Action.Submit ×2 (Approve/Reject) | Yes |
150
+ | "Collect information from users" | **Form/Survey** — Input.Text + Input.ChoiceSet + Action.Submit | Yes |
151
+ | "Show status of X" | **Status Dashboard** — ColumnSet + styled TextBlocks | No |
152
+ | "Alert on-call engineer" | **Incident Alert** — Attention style + Action.Submit (Acknowledge) | Yes |
153
+ | "Let user pick from options" | **Dropdown Menu** — Input.ChoiceSet + Action.Submit | Yes |
154
+
155
+ #### After recipe selection
156
+
157
+ 1. Load the complete JSON payload from `docs/reference/messaging-bots.md` Section 3
158
+ 2. Customize placeholder values: room ID, field names, button labels, URLs
159
+ 3. Build the `wxcli messages create --json-body '...'` command
160
+ 4. **If the recipe is interactive** (uses Action.Submit): also set up webhooks (Step 6) and explain the attachment action response flow
161
+
162
+ #### Sending the card
163
+
164
+ ```bash
165
+ wxcli messages create --json-body '{
166
+ "roomId": "ROOM_ID",
167
+ "text": "Fallback text for clients that cannot render cards",
168
+ "attachments": [{
169
+ "contentType": "application/vnd.microsoft.card.adaptive",
170
+ "content": { ... customized card payload ... }
171
+ }]
172
+ }'
173
+ ```
174
+
175
+ **Critical:** The `text` field is REQUIRED even when sending a card. It's the fallback for email notifications and clients that can't render adaptive cards.
176
+
177
+ ## Step 5: Build and present deployment plan [SHOW BEFORE EXECUTING]
178
+
179
+ Before executing any commands, compile a deployment plan and present it to the user for approval.
180
+
181
+ The plan must include:
182
+
183
+ 1. **Task summary** — what we are building (task type from Step 3, card recipe from Step 4e if applicable)
184
+ 2. **Token type** — bot / user / admin, and any scope gaps identified in Step 2
185
+ 3. **Target space** — space name and ID
186
+ 4. **Commands to execute** — the exact `wxcli` commands in execution order:
187
+ - Message/card creation commands
188
+ - Webhook creation commands (if interactive)
189
+ - Room tab commands (if applicable)
190
+ - Cross-domain calling webhook commands (if applicable)
191
+ 5. **Verification steps** — what we will check after execution
192
+ 6. **Risks or warnings** — scope gaps, rate limiting concerns, cross-domain token requirements
193
+
194
+ **Present the plan and wait for user approval before proceeding to Step 6.**
195
+
196
+ ## Step 6: Execute via wxcli
197
+
198
+ After the user approves the deployment plan, execute the commands:
199
+
200
+ ### 6a. Set up webhooks (if applicable)
201
+
202
+ For interactive bots that need to receive events:
203
+
204
+ **Create webhook for messages (so bot can "hear"):**
205
+
206
+ ```bash
207
+ wxcli webhooks create \
208
+ --name "Bot Messages" \
209
+ --target-url "https://your-bot.com/webhook" \
210
+ --resource messages \
211
+ --event created
212
+ ```
213
+
214
+ **Create webhook for card responses (if using adaptive cards with Action.Submit):**
215
+
216
+ ```bash
217
+ wxcli webhooks create \
218
+ --name "Bot Card Responses" \
219
+ --target-url "https://your-bot.com/webhook" \
220
+ --resource attachmentActions \
221
+ --event created
222
+ ```
223
+
224
+ **Verify webhooks are active:**
225
+
226
+ ```bash
227
+ wxcli webhooks list --output json
228
+ ```
229
+
230
+ Check that both webhooks show `"status": "active"`.
231
+
232
+ ### 6b. Send messages and cards
233
+
234
+ Execute the message/card creation commands from the deployment plan. For cards, use the customized JSON payload built in Step 4e.
235
+
236
+ ### 6c. The bot interaction loop
237
+
238
+ **Messages:**
239
+ 1. User sends message mentioning @bot → webhook fires with message metadata (NO text for bot tokens)
240
+ 2. Bot calls `wxcli messages show MESSAGE_ID` to get the actual message text
241
+ 3. Bot processes and responds: `wxcli messages create --room-id ROOM_ID --text "Response"`
242
+
243
+ **Card responses:**
244
+ 1. User clicks Action.Submit on a card → webhook fires with action metadata
245
+ 2. Bot calls `wxcli attachment-actions show ACTION_ID` to get the user's input values
246
+ 3. Bot processes inputs and responds
247
+
248
+ For full webhook CRUD, HMAC verification, auto-deactivation handling, and advanced filtering, see `docs/reference/webhooks-events.md`.
249
+
250
+ ### 6d. Cross-domain dispatch (if applicable)
251
+
252
+ When the user's objective involves both Webex Calling and Messaging:
253
+
254
+ 1. **Identify the calling component** — e.g., "monitor call queue overflow", "detect voicemail", "analyze CDR"
255
+ 2. **Identify the messaging component** — e.g., "post alert to ops space", "send notification card", "create incident space"
256
+ 3. **Load the appropriate calling skill** for the calling component:
257
+ - Queue/feature monitoring → read `configure-features` skill
258
+ - Call control/webhooks → read `call-control` skill
259
+ - CDR/reporting → read `reporting` skill
260
+ 4. **Use this skill** for the messaging component (card selection, webhook setup, message sending)
261
+
262
+ The cross-domain recipes in `docs/reference/messaging-bots.md` Section 7 provide the glue patterns:
263
+ - **Queue Alert → Space:** telephony_calls webhook → detect threshold → send incident card to ops space
264
+ - **Voicemail → Notification:** telephony_mwi webhook → send notification card to user's 1:1 space
265
+ - **Incident Response:** detect issue → create space → add responders → post diagnostics card
266
+
267
+ **Important:** Calling webhooks require `spark:calls_read` scope, which is separate from bot messaging scopes. The user may need two different tokens (bot token for messaging, user/admin token for calling webhooks) or a user token that has both scope sets.
268
+
269
+ ## Step 7: Verify
270
+
271
+ ### For notification bots (no interaction)
272
+
273
+ 1. Send a test message:
274
+ ```bash
275
+ wxcli messages create --room-id ROOM_ID --text "Test notification from bot"
276
+ ```
277
+ 2. Verify the message appears in the Webex App
278
+ 3. Send a test card (if applicable):
279
+ ```bash
280
+ wxcli messages create --json-body '{ ... card payload ... }'
281
+ ```
282
+ 4. Verify the card renders correctly in the Webex App
283
+
284
+ ### For interactive bots
285
+
286
+ 1. Send a card with Action.Submit buttons
287
+ 2. Click a button in the Webex App
288
+ 3. Verify the webhook received the attachment action event (user must check their webhook endpoint)
289
+ 4. Retrieve the action to confirm input capture:
290
+ ```bash
291
+ wxcli attachment-actions show ACTION_ID --output json
292
+ ```
293
+ 5. Verify the `inputs` field contains the expected key-value pairs
294
+
295
+ ### For room tabs
296
+
297
+ ```bash
298
+ wxcli room-tabs create --room-id ROOM_ID --content-url "https://your-app.com/dashboard" --display-name "Dashboard"
299
+ wxcli room-tabs list --room-id ROOM_ID --output json
300
+ ```
301
+
302
+ Verify the tab appears in the space's tab bar in the Webex App.
303
+
304
+ ## Step 8: Report results
305
+
306
+ ```
307
+ BOT DEPLOYMENT COMPLETE
308
+ Task type: [notification / card interaction / webhook setup / room tab / cross-domain]
309
+ Token type: [bot / user]
310
+
311
+ Resources created:
312
+ - Webhooks: [count] ([names])
313
+ - Cards sent: [count] to [space name]
314
+ - Room tabs: [count]
315
+
316
+ Verification:
317
+ - Messages delivered: [✓/✗]
318
+ - Cards rendered: [✓/✗]
319
+ - Webhooks active: [✓/✗]
320
+ - Card responses captured: [✓/✗] (if interactive)
321
+
322
+ Next steps:
323
+ - [Context-specific follow-up, e.g., "Implement webhook handler at your callback URL"]
324
+ - [Additional cards or spaces to configure]
325
+ ```
326
+
327
+ Wait for user confirmation before proceeding to any additional steps.
328
+
329
+ ## Critical Rules
330
+
331
+ These are non-negotiable. Violating them causes silent failures or broken bot behavior.
332
+
333
+ 1. **Always verify bot is a member** of the target space before sending messages. Sending to a space the bot isn't in returns 403.
334
+
335
+ 2. **Bot tokens cannot add themselves to spaces.** A user must invite the bot. Don't attempt `wxcli memberships create` with a bot token to add the bot itself.
336
+
337
+ 3. **Adaptive cards REQUIRE the `text` field** as fallback. Never send a card without `text` — email notifications and older clients won't show anything.
338
+
339
+ 4. **Card payloads must be under 4KB.** Cards exceeding this silently fail to render. If a card is too large, split into multiple messages or simplify the layout.
340
+
341
+ 5. **`Action.Execute` (Adaptive Cards 1.4+) is NOT supported** by Webex. Use `Action.Submit` instead. Cards with Action.Execute will render but the button won't work.
342
+
343
+ 6. **Webhook `targetUrl` must be publicly accessible HTTPS.** No HTTP, no localhost (unless tunneled via ngrok or similar). Webhooks to unreachable URLs silently fail.
344
+
345
+ 7. **Bot `messages` webhooks do NOT include message text.** This is a Webex security measure. The bot must call `wxcli messages show MESSAGE_ID` to get the actual content. This is THE standard bot pattern — don't skip it.
346
+
347
+ 8. **Webhooks auto-deactivate after repeated delivery failures.** If the callback URL returns errors, Webex sets the webhook to `inactive`. Reactivate with `wxcli webhooks update WEBHOOK_ID --status active`. Monitor webhook status periodically.
348
+
349
+ 9. **Cross-domain calling webhooks need `spark:calls_read` scope.** This is separate from bot messaging scopes. A bot token doesn't have this scope — the user may need a separate user token for calling webhooks.
350
+
351
+ 10. **Room tabs require a moderator-level user token, NOT a bot token.** Bot tokens get 403 on room tab operations. Always use a user token for tab management.
352
+
353
+ 11. **Rate limiting:** Add `sleep 1` between rapid message sends or webhook creates. Webex messaging APIs enforce rate limits (~5 requests/second for bots). Exceeding the limit returns 429.
354
+
355
+ ## Context Compaction Recovery
356
+
357
+ If context compacts during a session:
358
+
359
+ 1. Read `docs/plans/` to find the current deployment plan
360
+ 2. Check what webhooks exist: `wxcli webhooks list --output json`
361
+ 3. Check what messages were sent (if tracking IDs in the plan)
362
+ 4. Resume from the next pending step
363
+ 5. Tell the user:
364
+
365
+ > "I recovered from a context reset. Based on your deployment plan at [path], we've completed steps 1-N and need to resume at step N+1: [description]. Ready to continue?"