LLOQU
ProductPricingBlogDocsLogin

On this page

What you'll buildStep 1 — Get your Twilio credentialsStep 2 — Create an Alloqui projectStep 3 — Install the dialerStep 4 — Drop in the componentStep 5 — Make a callReacting to call eventsThemingWhere to go next
All articles
ReactTwilioGetting Started

Add a Phone Dialer to Your React App in 5 Minutes

A step-by-step guide to making your first browser call with Alloqui: enter your Twilio credentials, grab a project key, and drop one React component into your app.

AadarshAug 10, 20266 min read
On this page
What you'll buildStep 1 — Get your Twilio credentialsStep 2 — Create an Alloqui projectStep 3 — Install the dialerStep 4 — Drop in the componentStep 5 — Make a callReacting to call eventsThemingWhere to go next
Back to all articles
LLOQUAlloqui

Product

  • Features
  • Pricing
  • Blog

Developers

  • Documentation
  • @alloqui/dialer on npm

Company

  • Contact

Legal

  • Privacy
  • Terms

© 2026 Alloqui

What you'll build

By the end of this guide you will have a working phone dialer in your React app that makes real outbound calls — dial pad, call timer, mute, and DTMF included. No backend code, no webhook configuration, no TwiML.

You need three things:

  • A Twilio account with a phone number (trial accounts work)
  • An Alloqui account (free tier is fine)
  • A React 18+ app

Step 1 — Get your Twilio credentials

From the Twilio Console, copy two values off the dashboard:

  • Account SID — starts with AC...
  • Auth Token

If you do not have a phone number yet, buy one under Phone Numbers → Manage → Buy a number (about $1/month; trial accounts get one free).

That is all you need from Twilio. Alloqui creates the API keys and TwiML app for you in the next step.

Step 2 — Create an Alloqui project

  1. Sign in at alloqui.dev.
  2. Create a project and choose Twilio as the provider.
  3. Paste your Account SID, Auth Token, and phone number.

When you save, Alloqui validates the credentials and auto-configures everything on the Twilio side: a TwiML app for browser calling, an API key pair for token generation, and webhook URLs on your number. Your credentials are stored encrypted with AES-256-GCM.

  1. Copy your project key from the project page — it looks like al_live_abc123...

Step 3 — Install the dialer

pnpm add @alloqui/dialer

(or npm install / yarn add, as you prefer.)

Step 4 — Drop in the component

import { Dialer } from "@alloqui/dialer";

export function SupportPage() {
  return (
    <div>
      <h1>Call us</h1>
      <Dialer projectKey="al_live_abc123" />
    </div>
  );
}

That single component handles the full call lifecycle: it fetches a short-lived access token from Alloqui, initializes the Twilio Voice SDK in the browser, requests microphone permission, and renders the dial pad and in-call controls.

Step 5 — Make a call

Run your app, type a number in E.164 format (like +15550123456), and hit call.

Behind the scenes:

  1. The component asks Alloqui for a token; Alloqui decrypts your Twilio credentials and mints a short-lived JWT.
  2. The browser connects to Twilio directly over WebRTC — audio never passes through Alloqui's servers.
  3. Call events (ringing, connected, ended) stream back to the component over a WebSocket, so the UI always reflects the real call state.

Reacting to call events

The component accepts event hooks if you want to log calls or update your own UI:

<Dialer
  projectKey="al_live_abc123"
  onCallStarted={(call) => console.log("dialing", call.to)}
  onCallConnected={(call) => console.log("connected", call.id)}
  onCallEnded={(call) => console.log("ended after", call.durationSeconds, "s")}
/>

Theming

The dialer is styled with CSS variables, so matching your product is a stylesheet away:

.alloqui-dialer {
  --alloqui-accent: #e5484d;
  --alloqui-radius: 12px;
}

Where to go next

  • Free tier limits: 50 outbound calls/day, 15-minute max duration, 1 concurrent call — enough for an MVP.
  • Inbound calls, transfer, and recording are one toggle away on Pro ($15/month flat — never per-minute).
  • Prefer Plivo over Twilio? The same component works unchanged — just create the project with Plivo credentials instead.

Full API reference lives in the documentation.