collabSupport/docs/mpp-phone-data-inventory.md
jmcqueen f7953b8eb5 Add MPP desk phone diagnostics follow-up to /phonestatus via relay.
Wire CP-78xx probe discovery, relay phone-probe commands, and a chat follow-up message so store desk phones get registration, switch, and provisioning detail alongside DECT and WAN diagnostics.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-28 18:01:01 -04:00

281 lines
12 KiB
Markdown
Raw 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.

# MPP Phone Probe — Data Inventory
Reference catalog for Cisco CP-78xx phones on Webex Calling (WxC MPP firmware).
Validated against lab store **782** (`10.43.206.157`, CP-7841-3PCC, MAC `CC98914F6799`).
Use this document to decide what to surface in `/phonestatus`, tickets, and diagnostics.
---
## How data flows
```
Webex Control Hub Phone HTTPS (via DC relay agent)
───────────────── ────────────────────────────────
collectPhoneStatus() → GET /Status.json ← primary (parsed today)
MAC, name, IP GET /Download%20Status.json ← fetched, not parsed
product, webexId GET /ns.json ← fetched, not parsed
GET /basic/System.json ← fetched, not parsed
GET /admin/* ← login HTML (no password)
```
**Auth:** No credentials required for JSON endpoints when **Web Server** is enabled
(Settings → Security → Web Access). Webex does not provide per-phone admin passwords.
**Typical probe time:** ~11s for 8 sequential GETs through the relay (store 782).
**CLI:**
```bash
node scripts/probePhone.js probe 782 --ip 10.43.206.157
node scripts/probePhone.js raw 782 --ip 10.43.206.157 --save-dir tests/fixtures/mpp/
```
---
## Source A — Webex inventory (before probe)
From `collectPhoneStatus()` / `discoverDeskPhones()`. Used to find phones and match MAC ↔ IP.
| Field | Example (782) | Notes |
|-------|---------------|-------|
| `mac` | `CC98914F6799` | Normalized to colon format in probe target |
| `name` | `Store 00782 CP-7841` | Display name in Control Hub |
| `product` | `Cisco 7841` | Used to classify MPP vs room/DECT |
| `ip` | `10.43.206.157` | From Meraki or Webex `ipAddress` |
| `webexId` | device UUID | Cross-reference to Control Hub |
| `source` | `meraki` / `webex` | Where IP came from |
| `capabilities` | `["xapi"]` | Present on WxC phones; not a probe blocker |
**Not available from Webex alone:** live registration state, firmware load name, switch port,
provisioning history, SIP registrar IP.
---
## Source B — `/Status.json` (~12 KB)
Phone web UI: **Info → Status**. Primary source — fully parsed into `parsed` + `verdict`.
### Structured fields extracted today (`parseStatusJson`)
| Group | Fields | Example (782) |
|-------|--------|---------------|
| **Device** | product, mac, firmware, serial, hostname | CP-7841-3PCC, cc:98:91:4f:67:99 |
| **Network** | ipv4, netmask, gateway, dns1, dns2, vlan, connectionType, ipStatus | 10.43.206.157, VLAN 4095, DHCP, OK |
| **Registration** | `registration` (Ext 1), `lines[]` per extension | Registered → 150.253.156.211 |
| **SIP counters** | messagesSent, messagesRecv | 82 / 81 |
| **Reboot history** | last 5 reasons + timestamps | Provisioning, Upgrade, Cloud Triggered |
| **Health verdict** | `healthy`, `warnings[]`, `info[]` | healthy: true |
### All sections in raw `Status.json` (~93 populated fields on 782)
| Section | Useful for | Key fields |
|---------|------------|------------|
| **System Information** | Identity | Host Name, Primary NTP (`ntp.broadcloudpbx.net`) |
| **IPv4 Information** | Network triage | IP Status, DHCP/Static, IP, mask, gateway, DNS |
| **IPv6 Information** | IPv6 rollout | Usually empty/initializing on store LAN |
| **Reboot History** | "Why did it reboot?" | 5 entries: Provisioning / Upgrade / Cloud Triggered + timestamp |
| **VPN Status** | VPN phones | VPN Connected, client address (No on 782) |
| **Product Information** | Inventory match | Product, Serial, VID, MAC, Software/Hardware version, Client Cert, **WxC** auth type |
| **Phone Status** | Uptime & health | Current time, **Elapsed Time**, SIP byte/packet counters, **Operational VLAN**, **SW/PC Port** link, Upgrade Status |
| **Dot1x Authentication** | 802.1X stores | Transaction status (Authenticated), Protocol |
| **LED Status** | Visual state | Line 14, headset, speaker, mute, MWI cadence/color (**Line 1 Green** = registered) |
| **Ext 14 Status** | **Core voice health** | Registration State, Last Registration At/IP, Next Registration In Seconds, MWI, Hoteling, Extended Function |
| **Paging Status** | Overhead paging | Multicast Rx/Tx packets |
| **XML Streaming Status** | Cisco XML apps | Streaming Rx packets |
| **TR-069 Status** | Remote mgmt | Feature disabled on WxC MPP |
| **PRT Status** | Problem report tool | Generation/upload status (usually empty) |
### Per-extension detail (Ext 14)
| Field | Ext 1 (782) | Ext 24 |
|-------|-------------|---------|
| Registration State | **Registered** | Not Registered |
| Last Registration At | timestamp | — |
| Last Registration IP | 150.253.156.211 | — |
| Next Registration In Seconds | ~70 | — |
| Message Waiting | No | No |
| Hoteling State | Disabled | Disabled |
---
## Source C — `/Download%20Status.json` (~3 KB)
Phone web UI: **Info → Download Status**. Fetched in probe; **not parsed** into `parsed` today.
| Section | Fields | Example (782) |
|---------|--------|---------------|
| **Firmware Upgrade Status** | 13 history entries | `[date][https://binaries.webex.com/.../sip78xx....loads]Upgrade Succeeded.` |
| **Transition Authorization Status** | WxC migration | `migration-service-a.wbx2.com` — Authorization Succeeded |
| **Provisioning Status** | Resync history | `[https://cisco.sipflash.com:443/*]Resync Succeeded.` |
| **Custom CA Status** | Custom CA provisioning | Empty |
| **MIC Cert Refresh Status** | Certificate renewal | **MIC Cert Download Failed** — file not found (candidate warning) |
**Good for:** "Did provisioning/firmware succeed recently?" without Control Hub.
---
## Source D — `/ns.json` (~9 KB)
Phone web UI: **Info → Network Statistics**. Fetched in probe; **not parsed** today.
| Section | Useful fields | Example (782) |
|---------|---------------|---------------|
| **Ethernet Information** | Tx/Rx frames, broadcasts, multicasts, unicasts | ~2M frames each direction |
| **Network Port Information** | Error counters, frame size histogram | All zeros (clean link) |
| **LLDP/CDP neighbors** | **Switch hostname, port, mgmt IP** | **SW00782R**, Port 45, 10.229.105.251 |
| **Port speed** | Link speed/duplex | 100M Full |
| **Access Port Information** | PC port stats | All zeros (PC port disabled) |
**Good for:** "Which switch port is this phone on?" — often more useful than Webex for physical troubleshooting.
---
## Source E — `/basic/System.json` (~8 KB)
Phone web UI: **Settings → System** (configuration, not live status). Fetched; **not parsed** today.
Would replace broken `cfgParsed` from `/admin/cfg.xml`.
| Section | Fields | Example (782) |
|---------|--------|---------------|
| **System Configuration** | Enable Web Server, Survivability Test Mode | Web Server: **Yes** |
| **Network Settings** | IP Mode (Dual), IPv4/IPv6 DHCP vs static | DHCP |
| **HTTP Proxy** | Proxy Mode, WPAD, PAC URL, host/port, auth | **Off** |
| **802.1X Authentication** | Certificate Select | Manufacturing installed |
| **Optional Network** | Host Name, Domain (editable) | Empty |
| **VPN Settings** | Server, username, connect on boot | Empty |
**Good for:** Confirming web server enabled, proxy misconfig, 802.1X cert source.
---
## Source F — Legacy XML paths (not useful on WxC MPP)
| Path | What you get | Auth |
|------|--------------|------|
| `/admin/status.xml` | Admin **login HTML** (HTTP 200, not XML) | Admin password |
| `/admin/cfg.xml` | Admin **login HTML** | Admin password |
| `/status.xml` | **403 Forbidden** redirect page | Admin Access required |
`cfgParsed: {}` and `cfg: web=?` in CLI output are expected without admin credentials.
---
## Source G — Explore-only (not in default probe)
| Path | Purpose |
|------|---------|
| `/Debug%20Info.json` | Debug bundle metadata |
| `/basic/init.json` | SPA tab/layout definitions |
| `/admin/advanced` | Legacy admin HTML |
```bash
node scripts/testMppPhone.js --explore --ip 10.x.x.x
```
---
## Probe response shape (today)
| Output key | Content |
|------------|---------|
| `parsed` | Structured data from `/Status.json` |
| `verdict` | Health summary (`healthy`, `warnings`, `info`) |
| `summary` | HTTP probe stats (ok paths, bytes, timing) |
| `statusJson` | Raw JSON string (in raw/API responses) |
| `probes[]` | Per-path status, size, snippet/body (raw mode) |
| `cfgParsed` | Empty unless real `/admin/cfg.xml` XML |
| `downloadStatusJson` | Truncated in summary probe; full in raw mode |
---
## Suggested tiers for product decisions
### Tier 1 — Likely want in `/phonestatus` or tickets
| Signal | Source | Why |
|--------|--------|-----|
| Registration state | Status.json Ext 1 | #1 voice issue |
| Last registration IP | Status.json | Confirms WxC registrar |
| Product + MAC + IP | Status + Webex | Identity |
| Firmware version | Status.json | Upgrade troubleshooting |
| Uptime / elapsed time | Status.json | Recent reboot? |
| Latest reboot reason | Status.json | Provisioning vs power vs cloud |
| Switch + port | **ns.json** (not parsed yet) | Physical layer |
| VLAN | Status.json | Voice VLAN verification |
| Healthy / warnings | `verdict` | Single pass/fail |
### Tier 2 — Useful for deeper triage
| Signal | Source |
|--------|--------|
| Last provisioning resync | Download Status.json |
| Last firmware upgrade URL + result | Download Status.json |
| WxC transition auth history | Download Status.json |
| SIP message/byte counters | Status.json |
| Link speed/duplex | Status.json + ns.json |
| 802.1X status | Status.json |
| Web server / proxy config | System.json |
| LED state (line 1 green) | Status.json |
| MWI / hoteling | Status.json Ext 1 |
| MIC cert refresh failures | Download Status.json |
### Tier 3 — Debug / rarely needed
| Signal | Source |
|--------|--------|
| Full Ethernet error counters | ns.json |
| IPv6 details | Status.json |
| TR-069 / XML streaming / paging pkt counts | Status.json |
| All 4 extension slots | Status.json |
| Raw probe bodies | `probePhone.js raw` |
| Debug Info.json | explore mode |
---
## Gaps — not available without admin password
- SIP proxy, registrar, line DN, display name (in `/admin/cfg.xml` or line config JSON)
- Phone reboot/resync commands (`/admin/reboot`, `/admin/resync` — mutating, intentionally separate)
- Admin-only configuration changes
Webex Control Hub has user/number assignment; phone web UI has line config behind admin login.
---
## Lab snapshot — store 782
| Item | Value |
|------|-------|
| Product | CP-7841-3PCC |
| MAC | CC98914F6799 |
| IP / VLAN | 10.43.206.157 / 4095 |
| Firmware | sip78xx.12-0-7MPP0501-20260317-aa82ce7433.loads |
| Registration | Registered → 150.253.156.211 |
| Uptime | ~22 days |
| Switch | SW00782R Port 45 (10.229.105.251) |
| Last reboot | Provisioning 07/28/2026 15:29 |
| Last resync | cisco.sipflash.com 07/28/2026 15:30 |
| MIC cert | Download failed (not renewed) |
---
## Implementation notes
**Highest-value unparsed additions:**
1. `/Download%20Status.json` — provisioning/firmware history, MIC cert warnings
2. `/ns.json` — switch port / LLDP neighbor
3. `/basic/System.json` — web server / proxy / 802.1X config (replaces cfg.xml path)
**Code references:**
- Probe paths: `integrations/cisco-mpp-phone/probes.js`
- Status.json parser: `integrations/cisco-mpp-phone/statusJson.js`
- Discovery: `services/phoneDiscovery.js`
- Capture API: `services/phoneStatus/capturePhoneProbe.js`
- Fixture: `tests/fixtures/mpp/status-782-live.json`
---
*Last validated: 2026-07-28 against live probe of 10.43.206.157 via relay.*