37 lines
2.1 KiB
Markdown
37 lines
2.1 KiB
Markdown
# ops/connectwise — ConnectWise PSA skills & tools
|
||
|
||
Published from VistaNet's Hermes fleet skill set (`~/.hermes/skills`).
|
||
|
||
**Credentials are NOT embedded.** Scripts resolve CW API auth from
|
||
`~/.secrets/connectwise` (a KV file) or `CW_*` environment variables.
|
||
Required keys:
|
||
|
||
```
|
||
CW_COMPANY_ID=VNI
|
||
CW_PUBLIC_KEY=...
|
||
CW_PRIVATE_KEY=...
|
||
CW_CLIENT_ID=<uuid from CW Developer Network>
|
||
```
|
||
|
||
Note: the fleet stores the public key with a leading `+`
|
||
(`CW_PUBLIC_KEY=+...`); the loaders normalize it (`lstrip("+")` / `++` collapse)
|
||
before building the `companyid+publickey:privatekey` Basic auth string.
|
||
A `clientId` header is always required — 401 with a valid Basic auth means the
|
||
client ID is missing or disabled.
|
||
|
||
| Directory | Purpose | Scripts |
|
||
|---|---|---|
|
||
| `connectwise/` | CW API core: schedule entries, ticket create/notes, board & status IDs, env-var auth | `connectwise_api.py`, `cw_company_ticket_audit.py`, `cw_week_schedule_plan.py` |
|
||
| `connectwise-msp/` | Deep PSA reference: auth format, `cwendpoints.json` (full API spec), ticket fetching, time notes | `cw_api.py` (workhorse: `cw_request()`), reads `~/.secrets/connectwise` |
|
||
| `connectwise-reporting/` | Cross-company reporting recipes (server-side filtering traps, raw API auth) | `top-companies-by-hours.py`, `fetch-customer-time-entries.py` |
|
||
| `connectwise-n8n-automation/` | CW × n8n automation patterns | — (docs) |
|
||
| `connectwise-open-tickets-robust/` | Robust open-ticket fetching (handles empty/stale API results) | `schedule_cert_renewals.py` |
|
||
| `connectwise-open-tickets-report/` | Open-ticket report generator | `generate_open_tickets.py` |
|
||
| `connectwise-psa-reporting/` | Raw API reporting quirks + API reference | — (docs) |
|
||
| `cw-triage-workflow/` | ConnectWise triage workflow for n8n triage builds | — (docs) |
|
||
|
||
Sanitization applied on publish: hardcoded `client id`, public key, and private
|
||
key literals were replaced with `_load_cw_client_id()` / `_load_creds()` loaders
|
||
and `<PLACEHOLDER>` text in the reference docs. Run scripts with system Python
|
||
(`/usr/bin/python3` on the fleet host) — the Hermes-bundled 3.14 runtime lacks
|
||
`requests`. |