HEX
Server: Apache/2.4.46 (Win64) OpenSSL/1.1.1j PHP/8.4.25
System: Windows NT DESKTOP-4TAV2RJ 10.0 build 19045 (Windows 10) AMD64
User: fred (0)
PHP: 8.4.25
Disabled: NONE
Upload Files
File: C:/Users/fred/.codex/.tmp/plugins/plugins/zoom/skills/phone/references/forum-top-questions.md
---
title: "Forum-Derived Top Questions (Phone)"
---

# Forum-Derived Top Questions (Phone)

Use this as a checklist of the most common recent Developer Forum asks for Zoom Phone integrations.

## Fast Routing Questions (Ask First)

- Integration surface: Smart Embed, Phone REST API, webhooks, or URI launch (`zoomphonecall://`, `zoomphonesms://`).
- App/auth type: Server-to-Server OAuth vs user OAuth, and who the token is acting as.
- Account posture: Zoom Phone license assigned, user enabled, admin permissions, site/queue scope.
- Exact failure: HTTP status + Zoom `code`/`message` + endpoint/event name + sample payload.
- Correlation IDs available: `call_id`, `call_history_uuid`, `call_element_id`, recording ID.

## Smart Embed Sign-In or Calling Fails

Common asks:
- Smart Embed shows login but never completes.
- Widget loads, but outbound/inbound calling does not work.
- `zp-make-call`/search-and-match behaviors are inconsistent.

Answer pattern:
- Confirm approved Smart Embed domain matches the real runtime origin exactly.
- Confirm `origin` parameter is domain-level where required and not path-mismatched.
- Verify Zoom client sign-in state and account licensing prerequisites.
- Add strict `postMessage` origin handling and validate event init sequence.

## `call_logs` to `call_history` Migration Gaps

Common asks:
- Missing fields after migrating to `call_history`.
- Existing call analytics pipelines break after deprecation migration.

Answer pattern:
- Treat migration as a schema migration, not a drop-in endpoint swap.
- Build a mapping layer from legacy fields to current call history/call element fields.
- Persist both legacy and new IDs during transition for reconciliation.
- Update downstream reports that assumed removed fields.

## Recording and Download URL Auth Errors

Common asks:
- `download_url` returns 401/403.
- `Invalid access token, does not contain scopes` on recordings/transcripts.

Answer pattern:
- Generate a fresh token from the app that owns the needed scopes.
- Re-authorize after scope changes; verify token scope set, not just app config.
- Handle redirects while preserving auth headers where needed.
- Keep a fallback retry path for temporary scope/permission regressions.

## "Zoom Phone Has Not Been Enabled" (`2013`/`2031`)

Common asks:
- Token works for some APIs/users but Phone endpoints return not enabled.

Answer pattern:
- Verify `account_id` is present in S2S token request and token is from expected account.
- Verify target users actually have Zoom Phone entitlement.
- Verify caller/admin context has permission for account-level Phone resources.
- Re-test with one known-good licensed admin and one known-good licensed user.

## Webhooks: Missing Events or Duplicates

Common asks:
- Expected call events not received.
- Missed-call events delivered more than once.

Answer pattern:
- Acknowledge webhooks quickly with `200`/`204` and process asynchronously.
- Implement idempotency keyed by event ID/call identifiers.
- Expect retries and occasional ordering variance.
- Validate event subscription scope and verify webhook logs before blaming delivery.

## Correlating Calls Across APIs and Events

Common asks:
- Hard to tie recordings, call path/history, and webhook events to one interaction.

Answer pattern:
- Persist all call identifiers emitted at each lifecycle phase.
- Build a correlation table keyed by your internal interaction ID.
- Do not rely on a single identifier across all endpoints.

## Pagination and Incomplete Result Sets

Common asks:
- `/phone/users` or call list endpoints appear to miss records.

Answer pattern:
- Always iterate `next_page_token` until exhausted.
- Keep query filters stable between page requests.
- Add dedupe + page-audit logging to detect loops or repeated pages.