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>
281 lines
12 KiB
Markdown
281 lines
12 KiB
Markdown
# 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 1–4, headset, speaker, mute, MWI cadence/color (**Line 1 Green** = registered) |
|
||
| **Ext 1–4 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 1–4)
|
||
|
||
| Field | Ext 1 (782) | Ext 2–4 |
|
||
|-------|-------------|---------|
|
||
| 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** | 1–3 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.*
|