Files

37 lines
2.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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`.