- name
- pp-3cx-xapi
- description
- Every 3CX Configuration API (XAPI) object in one Go binary, with a local mirror of your whole PBX, offline search, config diffing, and cross-entity auditing no 3CX tool has. Trigger phrases: `audit my 3cx config`, `what changed on the pbx`, `provision 3cx extensions`, `queue sla report 3cx`, `trace extension 214`, `use 3cx-xapi`, `run 3cx-xapi`.
- author
- license
- Apache-2.0
- argument-hint
- <command> [args] | install cli|mcp
- allowed-tools
- Read Bash
- metadata
- {"openclaw":{"requires":{"bins":"[Truncated]"},"install":["[Truncated]"]}}
<!-- GENERATED FILE — DO NOT EDIT.
This file is a verbatim mirror of library/social-and-messaging/3cx-xapi/SKILL.md,
regenerated post-merge by tools/generate-skills/. Hand-edits here are
silently overwritten on the next regen. Edit the library/ source instead.
See the repository agent guide, section "Generated artifacts: registry.json, cli-skills/". -->
# 3CX — Printing Press CLI
## Prerequisites: Install the CLI
This skill drives the `3cx-xapi-pp-cli` binary. **You must verify the CLI is installed before invoking any command from this skill.** If it is missing, install it first:
1. Install via the Printing Press installer. It defaults binaries to `$HOME/.local/bin` on macOS/Linux and `%LOCALAPPDATA%\Programs\PrintingPress\bin` on Windows:
```bash
npx -y @mvanhorn/printing-press-library install 3cx-xapi --cli-only
```
2. Verify: `3cx-xapi-pp-cli --version`
3. Ensure the reported install directory is on `$PATH` for the agent/runtime that will invoke this skill.
If the `npx` install fails (no Node, offline, etc.), fall back to a direct Go install (requires Go 1.26.4 or newer). This installs into `$GOPATH/bin` (default `$HOME/go/bin`), so add that directory to `$PATH` instead:
```bash
go install github.com/mvanhorn/printing-press-library/library/social-and-messaging/3cx-xapi/cmd/3cx-xapi-pp-cli@latest
```
If `--version` reports "command not found" after install, the runtime cannot see the binary directory on `$PATH`. Do not proceed with skill commands until verification succeeds.
Covers the full 3CX V20+ Configuration API: users, groups, ring groups, queues, IVRs, trunks, DIDs, in/outbound rules, reporting, backups, security, and integrations. Beyond CRUD, it mirrors the entire config graph into local SQLite so you can search it offline, diff it over time, audit it for dangling references, roll up queue and agent performance, and trace exactly what routes to an extension.
## When to Use This CLI
Use this CLI to manage and reason about a 3CX V20+ phone system from scripts or an agent: provisioning extensions in bulk, auditing the config graph for broken routing, diffing config over time, rolling up queue and agent performance, and tracing how calls reach an extension. It is ideal when you want offline, queryable, agent-native access to a PBX whose web console is slow and siloed.
## Anti-triggers
Do not use this CLI for:
- Do not use this CLI for real-time call control (answer, transfer, or originate a live call); that is the separate 3CX Call Control API, not the Configuration API.
- Do not use it to place or receive calls or as a softphone.
- Do not use it for end-user voicemail playback or webclient chat; it manages configuration and reporting, not the user-facing client.
## Unique Capabilities
These capabilities aren't available in any other tool for this API.
### Config graph intelligence
- **`audit`** — Flag every ring group, queue, inbound/outbound rule, and IVR destination that points at a deleted, disabled, or non-existent extension or DID.
_Reach for this to catch broken call routing before users do, surfacing dangling references the 3CX console cannot detect._
```bash
3cx-xapi-pp-cli audit --agent
```
- **`diff`** — Capture the full PBX config to a local snapshot, then show exactly what changed between two points in time or two tenants.
_Reach for this for change management, proving what changed, when, and by how much across the whole config._
```bash
3cx-xapi-pp-cli diff yesterday now --agent
```
- **`posture`** — Consolidate blocklist, blacklisted numbers, anti-hacking settings, firewall state, failed-auth events, and the admin audit log into one attack-surface report.
_Reach for this for a one-shot security review instead of hunting across Security and Logs screens._
```bash
3cx-xapi-pp-cli posture --agent
```
- **`trace`** — For one extension, show every inbound rule, ring group, queue, DID, and forwarding profile that routes to it.
_Reach for this to answer why an extension is not ringing by seeing every path that reaches it._
```bash
3cx-xapi-pp-cli trace 214 --agent
```
### Bulk operations
- **`provision`** — Idempotently create extensions and users from a CSV, assigning groups and roles, with a dry-run plan and typed exit codes.
_Reach for this to onboard a whole tenant in one command instead of clicking the web console per extension._
```bash
3cx-xapi-pp-cli provision --file users.csv --dry-run
```
### Contact-centre analytics
- **`qrollup`** — One cross-queue table joining queue performance, agent-in-queue stats, abandoned calls, and SLA breaches over a time window.
_Reach for this to compare queues and weeks at a glance instead of opening one slow report screen per queue._
```bash
3cx-xapi-pp-cli qrollup --since 7d --agent
```
### Local state that compounds
- **`search`** — Instant full-text search across the mirrored config graph (users, groups, ring groups, queues, trunks, DIDs, contacts) by number, name, email, or extension.
_Reach for this when you know a number or name and need the object fast, across every entity type at once._
```bash
3cx-xapi-pp-cli search reception --type users --data-source local --agent
```
- **`changed`** — A single time-windowed feed merging activity log, event log, active calls, and system status into the state of the PBX now or since a given time.
_Reach for this as the first command when triaging something wrong right now on a PBX._
```bash
3cx-xapi-pp-cli changed --since 2h --agent
```
## Command Reference
**active-calls** — Manage active calls
- `3cx-xapi-pp-cli active-calls` — Get entities from ActiveCalls
**active-calls-id** — Manage active calls id
- `3cx-xapi-pp-cli active-calls-id <Id>` — Invoke action DropCall
**activity-log** — Manage activity log
- `3cx-xapi-pp-cli activity-log get-filter` — Invoke function GetFilter
- `3cx-xapi-pp-cli activity-log get-logs` — Invoke function GetLogs
- `3cx-xapi-pp-cli activity-log purge-logs` — Invoke action PurgeLogs
**aisettings** — Manage aisettings
- `3cx-xapi-pp-cli aisettings add-vector-store-files` — Invoke action AddVectorStoreFiles
- `3cx-xapi-pp-cli aisettings create-vector-store` — Invoke action CreateVectorStore
- `3cx-xapi-pp-cli aisettings delete-open-ai-file` — Invoke action DeleteOpenAiFile
- `3cx-xapi-pp-cli aisettings delete-vector-store` — Invoke action DeleteVectorStore
- `3cx-xapi-pp-cli aisettings delete-vector-store-file` — Invoke action DeleteVectorStoreFile
- `3cx-xapi-pp-cli aisettings get` — Get AISettings
- `3cx-xapi-pp-cli aisettings get-airesources` — Invoke function GetAIResources
- `3cx-xapi-pp-cli aisettings get-aitemplate-contents` — Invoke function GetAITemplateContents
- `3cx-xapi-pp-cli aisettings get-vector-store` — Invoke function GetVectorStore
- `3cx-xapi-pp-cli aisettings get-vector-store-files` — Invoke function GetVectorStoreFiles
- `3cx-xapi-pp-cli aisettings get-vector-stores` — Invoke function GetVectorStores
- `3cx-xapi-pp-cli aisettings update` — Update AISettings
- `3cx-xapi-pp-cli aisettings update-vector-store` — Invoke action UpdateVectorStore
**amazon-integration-settings** — Manage amazon integration settings
- `3cx-xapi-pp-cli amazon-integration-settings generate-iam-policy-file` — Invoke function GenerateIamPolicyFile
- `3cx-xapi-pp-cli amazon-integration-settings get` — Get AmazonIntegrationSettings
- `3cx-xapi-pp-cli amazon-integration-settings update` — Update AmazonIntegrationSettings
**anti-hacking-settings** — Manage anti hacking settings
- `3cx-xapi-pp-cli anti-hacking-settings get` — Get AntiHackingSettings
- `3cx-xapi-pp-cli anti-hacking-settings update` — Update AntiHackingSettings
**backups** — Manage backups
- `3cx-xapi-pp-cli backups backup` — Invoke action Backup
- `3cx-xapi-pp-cli backups get-can-create` — Invoke function GetCanCreateBackup
- `3cx-xapi-pp-cli backups get-failover-scripts` — Invoke function GetFailoverScripts
- `3cx-xapi-pp-cli backups get-failover-settings` — Invoke function GetBackupFailoverSettings
- `3cx-xapi-pp-cli backups get-local-size` — Invoke function GetLocalBackupSize
- `3cx-xapi-pp-cli backups get-repository-settings` — Invoke function GetBackupRepositorySettings
- `3cx-xapi-pp-cli backups get-restore-settings` — Invoke function GetRestoreSettings
- `3cx-xapi-pp-cli backups get-settings` — Invoke function GetBackupSettings
- `3cx-xapi-pp-cli backups list` — Get entities from Backups
- `3cx-xapi-pp-cli backups purge-local` — Invoke action PurgeLocalBackups
- `3cx-xapi-pp-cli backups set-failover-settings` — Invoke action SetBackupFailoverSettings
- `3cx-xapi-pp-cli backups set-repository-settings` — Invoke action SetBackupRepositorySettings
- `3cx-xapi-pp-cli backups set-restore-settings` — Invoke action SetRestoreSettings
- `3cx-xapi-pp-cli backups set-settings` — Invoke action SetBackupSettings
**backups-file-name** — Manage backups file name
- `3cx-xapi-pp-cli backups-file-name delete-backups` — Delete entity from Backups
- `3cx-xapi-pp-cli backups-file-name get-backup-extras` — Invoke function GetBackupExtras
- `3cx-xapi-pp-cli backups-file-name restore` — Invoke action Restore
**black-list-numbers** — Manage black list numbers
- `3cx-xapi-pp-cli black-list-numbers bulk-numbers-delete` — Invoke action BulkNumbersDelete
- `3cx-xapi-pp-cli black-list-numbers create` — Add new entity to BlackListNumbers
- `3cx-xapi-pp-cli black-list-numbers list` — Get entities from BlackListNumbers
**black-list-numbers-id** — Manage black list numbers id
- `3cx-xapi-pp-cli black-list-numbers-id delete-black-list-number` — Delete entity from BlackListNumbers
- `3cx-xapi-pp-cli black-list-numbers-id get-black-list-number` — Get entity from BlackListNumbers by key
- `3cx-xapi-pp-cli black-list-numbers-id update-black-list-number` — Update entity in BlackListNumbers
**blocklist** — Manage blocklist
- `3cx-xapi-pp-cli blocklist bulk-ips-delete` — Invoke action BulkIpsDelete
- `3cx-xapi-pp-cli blocklist create-addr` — Add new entity to Blocklist
- `3cx-xapi-pp-cli blocklist list-addr` — Get entities from Blocklist
**blocklist-id** — Manage blocklist id
- `3cx-xapi-pp-cli blocklist-id delete-blocklist-addr` — Delete entity from Blocklist
- `3cx-xapi-pp-cli blocklist-id get-blocklist-addr` — Get entity from Blocklist by key
- `3cx-xapi-pp-cli blocklist-id update-blocklist-addr` — Update entity in Blocklist
**call-cost-settings** — Manage call cost settings
- `3cx-xapi-pp-cli call-cost-settings export-call-costs` — Invoke function ExportCallCosts
- `3cx-xapi-pp-cli call-cost-settings list` — Get entities from CallCostSettings
- `3cx-xapi-pp-cli call-cost-settings update-cost` — Invoke action UpdateCost
**call-flow-apps** — Manage call flow apps
- `3cx-xapi-pp-cli call-flow-apps create` — Add new entity to CallFlowApps
- `3cx-xapi-pp-cli call-flow-apps list` — Get entities from CallFlowApps
**call-flow-apps-id** — Manage call flow apps id
- `3cx-xapi-pp-cli call-flow-apps-id delete-call-flow-app` — Delete entity from CallFlowApps
- `3cx-xapi-pp-cli call-flow-apps-id delete-file` — Invoke action DeleteFile
- `3cx-xapi-pp-cli call-flow-apps-id get-call-flow-app` — Get entity from CallFlowApps by key
- `3cx-xapi-pp-cli call-flow-apps-id get-files` — Invoke function GetFiles
- `3cx-xapi-pp-cli call-flow-apps-id update-call-flow-app` — Update entity in CallFlowApps
**call-flow-scripts** — Manage call flow scripts
- `3cx-xapi-pp-cli call-flow-scripts` — Get entities from CallFlowScripts
**call-history-view** — Manage call history view
- `3cx-xapi-pp-cli call-history-view download-call-history` — Invoke function DownloadCallHistory
- `3cx-xapi-pp-cli call-history-view list` — Get entities from CallHistoryView
**call-parking-settings** — Manage call parking settings
- `3cx-xapi-pp-cli call-parking-settings get` — Get CallParkingSettings
- `3cx-xapi-pp-cli call-parking-settings update` — Update CallParkingSettings
**call-types-settings** — Manage call types settings
- `3cx-xapi-pp-cli call-types-settings get` — Get CallTypesSettings
- `3cx-xapi-pp-cli call-types-settings update` — Update CallTypesSettings
**cdrsettings** — Manage cdrsettings
- `3cx-xapi-pp-cli cdrsettings get` — Get CDRSettings
- `3cx-xapi-pp-cli cdrsettings update` — Update CDRSettings
**chat-history-view** — Manage chat history view
- `3cx-xapi-pp-cli chat-history-view download-chat-history` — Invoke function DownloadChatHistory
- `3cx-xapi-pp-cli chat-history-view list` — Get entities from ChatHistoryView
**chat-log-settings** — Manage chat log settings
- `3cx-xapi-pp-cli chat-log-settings get` — Get ChatLogSettings
- `3cx-xapi-pp-cli chat-log-settings update` — Update ChatLogSettings
**chat-messages-history-view** — Manage chat messages history view
- `3cx-xapi-pp-cli chat-messages-history-view download-chat-messages-history` — Invoke function DownloadChatMessagesHistory
- `3cx-xapi-pp-cli chat-messages-history-view list` — Get entities from ChatMessagesHistoryView
**codecs-settings** — Manage codecs settings
- `3cx-xapi-pp-cli codecs-settings get` — Get CodecsSettings
- `3cx-xapi-pp-cli codecs-settings update` — Update CodecsSettings
**conference-settings** — Manage conference settings
- `3cx-xapi-pp-cli conference-settings delete-api-key` — Invoke action DeleteApiKey
- `3cx-xapi-pp-cli conference-settings generate-api-key` — Invoke function GenerateApiKey
- `3cx-xapi-pp-cli conference-settings get` — Get ConferenceSettings
- `3cx-xapi-pp-cli conference-settings get-mcurequest-status` — Invoke function GetMCURequestStatus
- `3cx-xapi-pp-cli conference-settings get-mcurow` — Invoke function GetMCURow
- `3cx-xapi-pp-cli conference-settings get-mcurows` — Invoke function GetMCURows
- `3cx-xapi-pp-cli conference-settings get-onboard-mcu-data` — Invoke function GetOnboardMcuData
- `3cx-xapi-pp-cli conference-settings get-onboard-meetings` — Invoke function GetOnboardMeetings
- `3cx-xapi-pp-cli conference-settings get-web-meeting-zones` — Invoke function GetWebMeetingZones
- `3cx-xapi-pp-cli conference-settings update` — Update ConferenceSettings
- `3cx-xapi-pp-cli conference-settings update-mcurequest-status` — Invoke action UpdateMCURequestStatus
**console-restrictions** — Manage console restrictions
- `3cx-xapi-pp-cli console-restrictions get` — Get ConsoleRestrictions
- `3cx-xapi-pp-cli console-restrictions update` — Update ConsoleRestrictions
**contacts** — Manage contacts
- `3cx-xapi-pp-cli contacts create` — Add new entity to Contacts
- `3cx-xapi-pp-cli contacts create-by-number` — Invoke action CreateContactByNumber
- `3cx-xapi-pp-cli contacts delete-by-id` — Invoke action DeleteContactsById
- `3cx-xapi-pp-cli contacts delete-by-type` — Invoke action DeleteContactsByType
- `3cx-xapi-pp-cli contacts delete-department-by-type` — Invoke action DeleteDepartmentContactsByType
- `3cx-xapi-pp-cli contacts delete-personal-by-type` — Invoke action DeletePersonalContactsByType
- `3cx-xapi-pp-cli contacts get-by-number` — Invoke function GetContactsByNumber
- `3cx-xapi-pp-cli contacts get-dir-search-settings` — Invoke function GetDirSearchSettings
- `3cx-xapi-pp-cli contacts list` — Get entities from Contacts
- `3cx-xapi-pp-cli contacts set-dir-search-settings` — Invoke action SetDirSearchSettings
**contacts-id** — Manage contacts id
- `3cx-xapi-pp-cli contacts-id delete-contact` — Delete entity from Contacts
- `3cx-xapi-pp-cli contacts-id get-contact` — Get entity from Contacts by key
- `3cx-xapi-pp-cli contacts-id update-contact` — Update entity in Contacts
**countries** — Manage countries
- `3cx-xapi-pp-cli countries` — Get entities from Countries
**country-codes** — Manage country codes
- `3cx-xapi-pp-cli country-codes get` — Get CountryCodes
- `3cx-xapi-pp-cli country-codes update` — Update CountryCodes
**crm-integration** — Manage crm integration
- `3cx-xapi-pp-cli crm-integration delete-crm-contacts` — Invoke action DeleteCrmContacts
- `3cx-xapi-pp-cli crm-integration get` — Get CrmIntegration
- `3cx-xapi-pp-cli crm-integration get-crm-template-source` — Invoke function GetCrmTemplateSource
- `3cx-xapi-pp-cli crm-integration get-oauth` — Invoke function GetOAuth
- `3cx-xapi-pp-cli crm-integration set-oauth-state` — Invoke action SetOAuthState
- `3cx-xapi-pp-cli crm-integration test` — Invoke action Test
- `3cx-xapi-pp-cli crm-integration update` — Update CrmIntegration
**crm-templates** — Manage crm templates
- `3cx-xapi-pp-cli crm-templates` — Invoke function GeCrmtTemplates
**crm-templates-name** — Manage crm templates name
- `3cx-xapi-pp-cli crm-templates-name delete-crm-template` — Delete entity from CrmTemplates
- `3cx-xapi-pp-cli crm-templates-name get-crm-template` — Get entity from CrmTemplates by key
**custom-prompts** — Manage custom prompts
- `3cx-xapi-pp-cli custom-prompts list` — Get entities from CustomPrompts
- `3cx-xapi-pp-cli custom-prompts make-call-record` — Invoke action MakeCallRecordCustomPrompt
Auf GitHub ansehen