Ways to embed a softphone in your app — an honest comparison

You want your agents to make and receive calls inside your own website or app. As of mid-2026 there are four ways to get there, and they differ enormously in effort, per-agent cost, and whether an AI coding assistant can do the install for you.

The landscape at a glance

Product Finished drop-in widget? Per-agent vendor seat + login? Key / auth model AI-assistant install (MCP · llms.txt · CLI)
Dialerr Embed Yes — one script tag No — your backend signs agents in with a minted token Publishable pk_ + secret sk_, per-domain allowlist, short-lived tokens (Stripe-style) MCP server that provisions keys · install-grade llms.txt · CLI with browser device-flow
RingCentral Embeddable Yes — script tag / iframe Yes — each agent needs a paid RingCentral seat and signs into RC inside the widget Developer-app Client ID registration None found for the widget
Zoom Phone Smart Embed Yes — iframe/snippet Yes — Zoom Phone license per user + Zoom sign-in Domain allowlist managed in the Zoom admin console None found
Aircall Everywhere / JustCall Dialer SDK Partially — npm/iframe SDK embedding the vendor's phone app Yes — per-agent vendor subscription Vendor account login JustCall has an MCP for API actions (needs pre-existing keys); not for widget install
Twilio / Telnyx / Vonage / Plivo Voice SDKs No — JS SDKs; you build the UI, token server, and lifecycle yourself No (your own auth) You design and operate it Twilio & Telnyx have strong MCP/llms.txt for their APIs — they still hand you an SDK, not a widget
SignalWire call widget Yes, but visitor-facing (click-to-call into call flows/AI agents) — Static c2c_ tokens Not for widget install
Bitcall (Bit Dialer) Yes — one-line script tag Configured with SIP credentials per user API key in the page config Has llms.txt (docs answers); no MCP, no CLI, no device flow
HubSpot Calling SDK / Salesforce Open CTI The inverse: frameworks for telephony vendors to embed into the CRM — not for adding calling to your own product. (Salesforce has announced Open CTI's retirement.)

Comparison reflects public docs and product pages reviewed in July 2026. Vendors change — check their current docs. If we got something wrong, tell us: support@dialerr.com.

The three questions that actually decide it

1. Widget or SDK?

CPaaS SDKs (Twilio Voice JS, Telnyx WebRTC, Vonage) give you a Device object and no UI. You build the dialer interface, a token-vending server, device lifecycle, and edge cases — typically weeks of engineering before an agent makes their first call. A finished widget (Dialerr, RingCentral Embeddable, Zoom Smart Embed) works the day you paste it.

2. Who pays for — and logs into — each seat?

This is the structural difference people miss. With RingCentral, Zoom, Aircall, or JustCall embeds, every agent needs that vendor's paid seat and must sign into the vendor's account inside the widget — you're embedding their phone system, wearing their login. With Dialerr, your backend mints a short-lived token for whichever of your agents is signed into your app; the widget just works. No second login, no per-seat vendor account coupling.

3. Can an AI assistant install it?

In 2026 a lot of installs are done by Claude, Cursor, or Copilot. Cautious assistants refuse unfamiliar CLIs and won't paste live secrets into commands — so how a vendor packages install matters. Telephony vendors now ship MCP servers, but every one we reviewed exposes API actions (send SMS, buy numbers) and assumes you already have keys. Dialerr's MCP is the only one we found that provisions the key itself — the assistant requests it, the human approves once in a browser, and the widget gets installed with nothing sensitive ever touching a command line. The same flow powers npx @dialerr/cli add, and dialerr.com/llms.txt is a complete install document, not a doc index.

When Dialerr is not the right pick

Try the one-line install

The widget on the overview page is live. Install options — script tag, npx @dialerr/cli add, npm i @dialerr/embed, or claude mcp add dialerr -- npx -y @dialerr/mcp — are in the docs.

See it live →