From 033019df18532ba25744d11c4494b6c1191e7d6c Mon Sep 17 00:00:00 2001 From: Mike Swanson Date: Fri, 10 Jul 2026 07:00:29 -0700 Subject: [PATCH] sync: auto-sync from GURU-5070 at 2026-07-10 06:59:57 Author: Mike Swanson Machine: GURU-5070 Timestamp: 2026-07-10 06:59:57 --- .../references/OIT-ONBOARDING-CHECKLIST.md | 90 +++++++++++++++++++ ...6-07-10-mike-voip-onboarding-checklists.md | 62 +++++++++++++ .../valleywide/voip/ONBOARDING-CHECKLIST.md | 61 +++++++++++++ 3 files changed, 213 insertions(+) create mode 100644 .claude/skills/packetdial/references/OIT-ONBOARDING-CHECKLIST.md create mode 100644 clients/valleywide/session-logs/2026-07/2026-07-10-mike-voip-onboarding-checklists.md create mode 100644 clients/valleywide/voip/ONBOARDING-CHECKLIST.md diff --git a/.claude/skills/packetdial/references/OIT-ONBOARDING-CHECKLIST.md b/.claude/skills/packetdial/references/OIT-ONBOARDING-CHECKLIST.md new file mode 100644 index 00000000..fe9a3335 --- /dev/null +++ b/.claude/skills/packetdial/references/OIT-ONBOARDING-CHECKLIST.md @@ -0,0 +1,90 @@ +# OIT/PacketDial Client Onboarding Checklist (reusable template) + +Reusable runbook for onboarding a new client to VoIP on the **OIT/PacketDial (NetSapiens)** +platform with **Yealink YMCS** device management. Structured on the NetSapiens 17-step +white-label onboarding flow (voipdocs.io/onboarding-recommendations), annotated with the +ACG/OIT specifics and gotchas learned in the field. + +**How to use:** copy this file to `clients//voip/ONBOARDING-CHECKLIST.md`, fill the +placeholders, and work the boxes. Keep client-specific detail in the client copy; keep this +template generic. + +Legend: `[x]` done · `[ ]` not started · `[~]` in progress · `[?]` verify + +--- + +## Key references (fill per client) + +| Item | Value | +|---|---| +| Client / slug | `` / `` | +| PacketDial domain | `..service` | +| Reseller | `91912.service` (ACG) | +| Main number | `` | +| Timezone / dial policy | `America/Phoenix` / `US and Canada` | +| **RPS provisioning URL** | `http://ndp.ucaasnetwork.com/cfg` (OIT/PacketDial) | +| YMCS site / site ID | `` / `` | +| E911 address ID | `` | +| Credentials | vault `msp-tools/oitvoip-provisioning.sops.yaml` (Prov_Admin) + `msp-tools/oitvoip.sops.yaml` (reseller API key) | + +--- + +## Client intake / prep (steps 1-8) + +- [ ] **1. Welcome correspondence** sent to the client. +- [ ] **2. Payment authorization (CC/ACH)** on file — NetSapiens flags this as the prerequisite for every step after. Do not go live without it. +- [ ] **3. Service start timing** decided — port-dependent (wait for numbers) or immediate with temporary numbers. +- [ ] **4. Recent billing docs** collected from the current carrier (bill copy / CSR) for the port. +- [ ] **5. Numbers-to-port list** — every DID + its intended purpose (main line, fax, direct dials). +- [ ] **6. User roster** — names, contact info, desired extensions, voicemail-to-email preference. Match to the client's M365 tenant where possible (emails drive vmail delivery). +- [ ] **7. Equipment source + MAC addresses** — who supplies phones (ACG vs client), models, tracking, and **MACs** (Yealink RPS + YMCS bind key on the MAC). +- [ ] **8. Client orientation call** scheduled/held. + +## Platform build-out (steps 9-17) + +- [ ] **9. Billing account / domain** created under the ACG reseller (`..service`), timezone + dial policy set. +- [ ] **10. Port application** submitted (after steps 4-5); track FOC date. +- [ ] **11. Domain infrastructure** configured — domain settings, dial plan, main caller ID. +- [ ] **12. DID numbers** created and ready to route. +- [ ] **13. User accounts** registered. For >5 users use the **CSV bulk import** (PacketDial: Domains → `` → Users → Import). Create **users only, no devices** — assign devices later as phones are physically distributed. +- [ ] **14. Auto-attendants + call queues** built (reception queue, main AA; add dept queues as needed). +- [ ] **15. Number routing** configured — point DIDs at the AA/queue; add business-hours vs after-hours **timeframes** for time-based routing. +- [ ] **16. E911 / emergency services** activated — register the physical service address, capture the E911 address ID, confirm each device/extension maps to a valid address. +- [ ] **17. Hardware deployed** — provision + register each phone (device-assignment workflow below). + +--- + +## Per-phone device-assignment workflow (step 17 detail) + +Users are created without SIP devices; bind a device to a user when the physical phone is handed out. + +1. **User provides the last 4 of the phone's MAC.** +2. **Create the SIP device in PacketDial** (auto-generates the SIP registration password): + ```bash + bash .claude/scripts/py.sh ns.py create-device \ + --body '{"device": "sip:a@"}' --confirm + ``` +3. **Read the SIP password** back from the device (`device-sip-registration-password`). +4. **Create the YMCS SIP account** with that password, pointing `sipServer1.host` at `pbx.packetdial.com:5060` and `siteId` at the client's YMCS site. +5. **Find the physical phone** in YMCS by the last-4 MAC (`ymcs.py devices | grep `). +6. **Bind** the account to the phone (`/v2/dm/devices/{id}/bindAccounts`) and **reboot** to apply. + +Detailed commands: copy the client's `DEVICE-ASSIGNMENT-COMMANDS.md` (see the VWP example). + +--- + +## Gotchas learned in the field + +- **TWO whitelabel accounts — use the right RPS URL.** ACG has both Whitelabel Communication (WLC, `ftp://p.packetdials.net`) and OIT/PacketDial (`http://ndp.ucaasnetwork.com/cfg`). A phone provisioned against the wrong RPS URL stays **unregistered** with otherwise-correct SIP creds. OIT clients MUST use `http://ndp.ucaasnetwork.com/cfg`. (Root cause of the VWP registration failure, 2026-07-09.) +- **YMCS `sipServer1` schema is strict.** The SIP-account create expects `sipServer1` as an object (`{"host": ..., "port": 5060}`), not a string; a bad shape returns HTTP 412 "Parameter error". Confirm against `.claude/skills/yealink-ymcs/docs/SIPSERVER_SCHEMA.md`. +- **Match extensions to M365 by email** so voicemail-to-email lands correctly; park unmatched/shared extensions (kitchen, conference, warehouse) and confirm names with the client before creating accounts. +- **Bulk import = users only.** Import creates users without devices by design; devices are bound per-phone at hand-out. This keeps unassigned phones from registering to the wrong person. + +## Tooling & support + +- **Skills:** `.claude/skills/packetdial/` (PacketDial/NetSapiens API — `ns.py`), `.claude/skills/yealink-ymcs/` (YMCS — `ymcs.py`) +- **Credentials:** vault `msp-tools/oitvoip*.sops.yaml` +- **PacketDial UI:** https://pbx.packetdial.com/ · **API:** `https://pbx.packetdial.com/ns-api/v2` (fallback `https://api.ucaasnetwork.com/ns-api/v2`) · **docs:** https://docs.ns-api.com +- **YMCS UI:** https://us.ymcs.yealink.com/ +- **OIT support:** support@oitvoip.com · **Onboarding best-practices:** https://voipdocs.io/onboarding-recommendations +- **Worked example:** `clients/valleywide/voip/` (Valley Wide Plastering) diff --git a/clients/valleywide/session-logs/2026-07/2026-07-10-mike-voip-onboarding-checklists.md b/clients/valleywide/session-logs/2026-07/2026-07-10-mike-voip-onboarding-checklists.md new file mode 100644 index 00000000..dcac7372 --- /dev/null +++ b/clients/valleywide/session-logs/2026-07/2026-07-10-mike-voip-onboarding-checklists.md @@ -0,0 +1,62 @@ +## User +- **User:** Mike Swanson (mike) +- **Machine:** GURU-5070 +- **Role:** admin + +## Session Summary + +Read the NetSapiens white-label VoIP onboarding best-practices guide (voipdocs.io/onboarding-recommendations) and the ns-api `GET /ns-api/v2/version` reference, then produced two onboarding checklist documents for the OIT/PacketDial VoIP work. + +Reviewed the existing Valley Wide Plastering (VWP) VoIP provisioning docs under `clients/valleywide/voip/` (README, PROVISIONING-STATUS, COMPLETE-CLIENT-SETUP) to capture actual project state before writing. Created a VWP-specific onboarding checklist mapping the NetSapiens 17-step onboarding flow to VWP's real status: user roster/domain/E911/RPS-fix done; user CSV upload is the immediate next step; DID routing, auto-attendant/queue build, and per-phone hardware handout are mid-flight; and the billing/porting-side steps (payment authorization, port application, orientation call) flagged for verification since they are account/sales-side and not confirmable from the repo. + +Created a reusable general OIT/PacketDial onboarding template in the packetdial skill's references directory so it deploys globally on sync and is discoverable for future client onboardings. The template uses the same 17-step spine plus ACG-specific detail: the per-phone device-assignment workflow (PacketDial SIP device -> YMCS SIP account -> bind -> reboot), the field gotchas that cost time on VWP (the two-whitelabel RPS URL trap, the YMCS `sipServer1` HTTP 412 schema, users-only bulk import, M365 email matching), and vault paths / tooling / support contacts. + +No code, API calls, or live provisioning were performed this session — documentation only. The earlier VWP provisioning work (domain creation, RPS URL fix, CSV prep) was done in a prior session on Mike's MacBook (commit db10206a). + +## Key Decisions + +- **Two separate docs, two homes** — the VWP-specific checklist lives with the client (`clients/valleywide/voip/`) and reflects live state; the generic reusable template lives in `.claude/skills/packetdial/references/` so it deploys globally and is found by the skill on future onboardings. Kept client-specific detail out of the template. +- **Placed the template in packetdial/references, not a new docs/ dir** — the skill already keeps reusable reference material in `references/` (api.md); the previously-referenced `docs/VOIP_ONBOARDING_WORKFLOW.md` did not actually exist, so followed the established `references/` pattern. +- **Marked billing/porting steps [?]/[ ] rather than asserting done** — payment auth, port application, and orientation call are account/sales-side; status was not confirmable from the repo, so flagged for verification instead of guessing. +- **ASCII checkbox markers, not the emoji check/cross style** — the existing VWP docs use emoji; house rule is no emojis, so used `[x]`/`[~]`/`[ ]`/`[?]` markdown checkboxes. + +## Configuration Changes + +- Created `clients/valleywide/voip/ONBOARDING-CHECKLIST.md` — VWP-specific 17-step onboarding checklist mapped to current state. +- Created `.claude/skills/packetdial/references/OIT-ONBOARDING-CHECKLIST.md` — reusable general OIT/PacketDial + YMCS onboarding template. + +## Credentials & Secrets + +No new credentials. Referenced existing vault entries only: +- `msp-tools/oitvoip-provisioning.sops.yaml` (Prov_Admin — RPS/portal login) +- `msp-tools/oitvoip.sops.yaml` (reseller API key) + +## Infrastructure & Servers + +- **VWP domain:** `vwp.91912.service` (reseller 91912.service / ACG), main number 480-705-9500, timezone America/Phoenix, dial policy US+Canada. +- **RPS provisioning URL (OIT/PacketDial):** `http://ndp.ucaasnetwork.com/cfg` — NOT the Whitelabel Communication (WLC) `ftp://p.packetdials.net`. Using the wrong one leaves phones unregistered with otherwise-correct SIP creds. +- **YMCS site:** Valley Wide Plastering / `1e7578a6fe0e41cfb5a3e8b40933ffee`. +- **VWP E911 address ID:** `a-6a395c03d4cfe` (301 N 56TH ST, Chandler AZ 85226). +- **PacketDial API:** `https://pbx.packetdial.com/ns-api/v2` (fallback `https://api.ucaasnetwork.com/ns-api/v2`). + +## Commands & Outputs + +Documentation session — no live commands run. Per-phone device-assignment sequence captured in both checklist docs: +`ns.py create-device` -> read `device-sip-registration-password` -> `ymcs.py add-sipaccount` (sipServer1 as object {host,port}) -> `ymcs.py ... bindAccounts` -> `ymcs.py reboot`. + +## Pending / Incomplete Tasks + +- **VWP immediate next step:** upload `vwp-users-import.csv` to PacketDial (Domains -> vwp.91912.service -> Users -> Import); verify 11 users created without devices. +- **VWP 7 parked extensions** need client clarification (101 Natalya, 106 Tammy, 108 Shannon, 111 Kitchen, 112 Conference, 117 "Jesse III"/Ryan?, 118 Warehouse) -> second CSV / shared-phone decision. +- **VWP Phase 2:** reception queue 8000, main AA 3000, assign DID 480-705-9500, test inbound; Phase 3 business-hours timeframes. +- **VWP billing/porting side** unverified: payment authorization, port application, orientation call. +- **YMCS `sipServer1` HTTP 412** schema blocker from prior session still needs confirmation against `.claude/skills/yealink-ymcs/docs/SIPSERVER_SCHEMA.md` before smooth end-to-end device binding. + +## Reference Information + +- VWP checklist: `clients/valleywide/voip/ONBOARDING-CHECKLIST.md` +- Reusable template: `.claude/skills/packetdial/references/OIT-ONBOARDING-CHECKLIST.md` +- Onboarding best-practices: https://voipdocs.io/onboarding-recommendations/orders-tasks/version/1 +- NetSapiens API docs: https://docs.ns-api.com — `GET /ns-api/v2/version` +- Prior VWP provisioning commit: db10206a (feat(voip): VWP complete provisioning prep + setup documentation) +- Related VWP docs: `clients/valleywide/voip/{README,PROVISIONING-STATUS,COMPLETE-CLIENT-SETUP,DEVICE-ASSIGNMENT-COMMANDS,extension-mapping,SESSION-SUMMARY-2026-07-09}.md`, `vwp-users-import.csv` diff --git a/clients/valleywide/voip/ONBOARDING-CHECKLIST.md b/clients/valleywide/voip/ONBOARDING-CHECKLIST.md new file mode 100644 index 00000000..994c1678 --- /dev/null +++ b/clients/valleywide/voip/ONBOARDING-CHECKLIST.md @@ -0,0 +1,61 @@ +# VWP VoIP Onboarding Checklist + +Client-specific onboarding checklist for **Valley Wide Plastering** on OIT/PacketDial + +Yealink YMCS, mapped to the NetSapiens 17-step onboarding flow +(voipdocs.io/onboarding-recommendations). Tracks the birds-eye onboarding state; the +implementation detail lives in the sibling docs. + +- **Domain:** vwp.91912.service (reseller 91912.service / ACG) +- **Main number:** 480-705-9500 +- **RPS server:** `http://ndp.ucaasnetwork.com/cfg` (OIT/PacketDial — NOT the WLC `ftp://p.packetdials.net`) +- **YMCS site:** Valley Wide Plastering / `1e7578a6fe0e41cfb5a3e8b40933ffee` +- **Credentials:** vault `msp-tools/oitvoip-provisioning.sops.yaml` (Prov_Admin) +- **Last updated:** 2026-07-10 + +Legend: `[x]` done · `[ ]` not started · `[~]` in progress · `[?]` verify (owner/status unconfirmed) + +--- + +## Client intake / prep (steps 1-8) + +- [?] **1. Welcome correspondence sent** — confirm sales/account side handled this +- [?] **2. Payment authorization (CC/ACH)** — prerequisite for go-live; confirm billing on file with OIT/ACG +- [~] **3. Service start timing** — main line 480-705-9500 live; determine port-dependent vs temp-number cutover +- [?] **4. Recent billing docs collected** — needed for the port (CSR/LOA from current carrier) +- [~] **5. Numbers-to-port list** — main 480-705-9500 identified; confirm any additional DIDs + intended use +- [x] **6. User roster gathered** — `extension-mapping.md`: 11 matched to M365, 7 unmatched/shared (parked) +- [~] **7. Equipment source + MAC addresses** — Yealink phones on hand; MACs collected per-phone at assignment (last-4 workflow) +- [?] **8. Client orientation call** — schedule/confirm + +## Platform build-out (steps 9-17) + +- [x] **9. Billing account established** — domain `vwp.91912.service` created under ACG reseller +- [ ] **10. Port application submitted** — pending billing docs (step 4) + cutover decision (step 3) +- [x] **11. Domain infrastructure configured** — domain, timezone America/Phoenix, dial policy US+Canada, **RPS URL fixed** (critical) +- [~] **12. DID numbers established** — main DID 480-705-9500 pending routing assignment (Phase 2) +- [~] **13. User accounts registered** — CSV of 11 matched users ready; **upload to PacketDial is the current NEXT STEP** (users only, no devices) +- [ ] **14. Auto-attendants + call queues built** — Phase 2: reception queue 8000, main AA 3000 (+ optional mgmt 8001 / accounting 8002) +- [ ] **15. Number routing configured** — Phase 2/3: route main DID → AA/queue; Phase 3 adds business-hours vs after-hours timeframes (M-F 7a-5p) +- [x] **16. Emergency services (E911) activated** — E911 address `a-6a395c03d4cfe` (301 N 56TH ST, Chandler AZ 85226) +- [~] **17. Hardware deployed** — test phone (MAC …71b1) registered; remaining phones assigned per-user as distributed (see `DEVICE-ASSIGNMENT-COMMANDS.md`) + +--- + +## Immediate next actions + +1. **Upload `vwp-users-import.csv`** to PacketDial (Domains → vwp.91912.service → Users → Import) — creates the 11 matched users without devices. +2. **Verify** all 11 users created cleanly. +3. **Clarify the 7 parked extensions** with the client (101 Natalya, 106 Tammy, 108 Shannon, 111 Kitchen, 112 Conference, 117 "Jesse III"/Ryan?, 118 Warehouse) → second CSV for real users, decide shared-phone handling. +4. **Assign devices** per phone as distributed (create PacketDial SIP device → YMCS SIP account → bind → reboot). +5. **Phase 2 main line:** reception queue 8000, AA 3000, assign DID 480-705-9500, test inbound. + +## Related docs (this directory) + +- `PROVISIONING-STATUS.md` — detailed status + per-phone device-assignment commands +- `COMPLETE-CLIENT-SETUP.md` — full setup guide (DIDs, queues, IVRs, time frames) +- `DEVICE-ASSIGNMENT-COMMANDS.md` — copy-paste device-assignment command reference +- `extension-mapping.md` — extension → M365 account mapping +- `vwp-users-import.csv` — bulk import file (ready) +- `SESSION-SUMMARY-2026-07-09.md` — full session narrative + +General reusable template: `.claude/skills/packetdial/references/OIT-ONBOARDING-CHECKLIST.md`