Session log: BG Builders billing fix + OITVOIP API research
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -332,6 +332,76 @@ Added `feedback_python_windows.md` to `.claude/memory/`: use `py` not `python3`,
|
||||
|
||||
---
|
||||
|
||||
---
|
||||
|
||||
## Update: 15:40 — BG Builders Billing + OITVOIP API Research
|
||||
|
||||
### BG Builders — Ticket #109212872
|
||||
|
||||
**Ticket:** Remote - Set brother printer up on wifi
|
||||
**Customer:** BG Builders (Shelly Dooley) — shelly@bgbuildersllc.com | (480) 495-4511
|
||||
**Customer ID:** 32622062
|
||||
|
||||
**Resolution:** Cleared ARP cache on the Verizon router at BG Builders. Shelly confirmed printer working.
|
||||
|
||||
**Billing:**
|
||||
- 30 min Labor - Remote Business (product_id 1190473)
|
||||
- Timer entry ID: 38717330
|
||||
- Invoice #67431 (ID: 1649993619) — $0.00 (BG Builders is on prepaid block hours — correct behavior)
|
||||
- Line item: "Business Remote Service - Applied 0.5 Prepay Hours"
|
||||
- Ticket status: Invoiced
|
||||
|
||||
**Issues encountered + resolutions:**
|
||||
1. Duplicate comment posted — two "Resolution" comments at 15:09:02 and 15:09:11. DELETE endpoint (`/tickets/{id}/comments/{id}` and `/ticket_comments/{id}`) both return 404. **Must be deleted manually in Syncro GUI.**
|
||||
2. Timer entry didn't show via `ticket_timers?ticket_id=` API query (returns all timers globally, not filtered by ticket). Screenshot from Winter confirmed it IS on the ticket.
|
||||
3. Invoice created blank — `POST /invoices` does NOT auto-convert timer entries like the GUI. Deleted blank invoice #67430, recreated #67431, manually added line item via `POST /invoices/{id}/line_items`.
|
||||
4. "Not Charged" + $0.00 is correct for block hours customers.
|
||||
|
||||
**Syncro API finding to document:** `POST /invoices` does not auto-pull timer entries. Must manually `POST /invoices/{id}/line_items` after creating invoice.
|
||||
|
||||
---
|
||||
|
||||
### OITVOIP / NetSapiens API Research
|
||||
|
||||
**Context:** OIT VOIP (Darwin Escaro) pointed to https://voipdocs.io/oitvoip-access-platform-apis. Goal: integrate with ClaudeTools + Syncro + build provisioning tool.
|
||||
|
||||
**Server:**
|
||||
- Portal: https://pbx.packetdial.com
|
||||
- API base: `https://pbx.packetdial.com/ns-api/v2`
|
||||
- Version: 44.4.7 | Host: portal2-phx.ucaas.network
|
||||
- Platform: NetSapiens SNAPsolution v44.4
|
||||
|
||||
**Docs:**
|
||||
- https://docs.ns-api.com/ (login required for full detail)
|
||||
- Live OpenAPI spec: `https://pbx.packetdial.com/ns-api/webroot/openapi/openapi.json`
|
||||
- Live Swagger UI: `https://pbx.packetdial.com/ns-api/openapi`
|
||||
- Dev sandbox: https://ns-api.com/
|
||||
|
||||
**Auth:**
|
||||
- API Key (preferred M2M): `nsr_` prefix = reseller scope, `Authorization: Bearer nsr_<key>`
|
||||
- OAuth 2.0: client_id + client_secret + portal creds → `POST /ns-api/oauth2/token`
|
||||
- JWT: auto-returned from OAuth on v44+
|
||||
|
||||
**Credentials:** None created yet.
|
||||
- Next: check pbx.packetdial.com portal for Admin > API Keys, OR reply to Darwin for OAuth client credentials
|
||||
- Reseller name: unknown — confirm from portal
|
||||
|
||||
**Planned provisioning flow:**
|
||||
1. `POST /domains` → create domain (auto-generates dial plan)
|
||||
2. `POST /domains/{domain}/users` → users + extensions
|
||||
3. `POST /domains/{domain}/devices` → SIP devices
|
||||
4. `POST /domains/{domain}/users/{user}/phonenumbers` → DIDs
|
||||
5. Log back to Syncro ticket
|
||||
|
||||
**Pending:**
|
||||
- [ ] Log into pbx.packetdial.com → check for API Keys section
|
||||
- [ ] If no self-service: reply to Darwin for reseller-scoped OAuth credentials
|
||||
- [ ] Store in SOPS vault: `msp-tools/oitvoip.sops.yaml`
|
||||
- [ ] Confirm reseller name
|
||||
- [ ] Design provisioning tool spec + Syncro integration
|
||||
|
||||
---
|
||||
|
||||
## Key Infrastructure Reference
|
||||
|
||||
| Resource | Details |
|
||||
|
||||
Reference in New Issue
Block a user