Work

Case study

Zoom Wallboard Inside the Dialer

Real-time Zoom Contact Center availability inside the dialer — no second license, no tab-switching

Result:
Dialer agents see which Zoom agents are free for a warm transfer without leaving the dialer; a companion Chrome extension picks the transfer target in one click.
Stack:
Python, FastAPI, Google Cloud Run, Docker, HTML, CSS, JavaScript
Published:
Updated:

Context

The contact center I work in runs two platforms at once: a predictive dialer for outbound calls and Zoom Contact Center for warm transfers.

The manual problem

When an agent had a live prospect ready to transfer, they had to switch to Zoom, find someone available, switch back and attempt the transfer — seconds of friction in a handoff that’s already under time pressure. Showing Zoom availability inside the dialer couldn’t mean buying every dialer agent a second license.

What I built

  • Proof first. Before writing real code, I loaded a public web page inside the dialer’s embedded-website feature to confirm the iframe route worked on a closed platform.
  • The wallboard. A FastAPI backend polls Zoom Contact Center’s availability API every few seconds; a static HTML page shows color-coded agent cards that match Zoom’s own look. It runs on Google Cloud Run and loads inside the dialer.
  • Auth inside an iframe. Headers can’t be set on a cross-origin embed, so requests authenticate with a token in the URL, validated server-side on every request.
  • Per-campaign views. Each campaign gets its own URL from one JSON config file, set once by an operations manager — no code change to add a campaign.
  • One-click transfers. A companion Chrome extension lets an agent click a “Ready” card to select that person in the dialer’s transfer dropdown.

Result

Transfer availability is visible where agents already work, at no per-seat license cost beyond one small backend container. Per-agent filtering is documented and deferred: the dialer’s variable-substitution field arrived empty inside the iframe, which I confirmed from live request logs rather than documentation.

Tech notes

Python, FastAPI, Docker, Google Cloud Run, plain HTML/CSS; the transfer helper is a Manifest V3 Chrome extension. Deployed end to end in an afternoon. The code is internal to the contact center.

Doing something like this by hand in your own contact center? See how a fixed-scope project works.

Related writing

How to Integrate Convoso with Zoom Contact Center