# 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.*