Skip to main content
RapidDev - Software Development Agency
bubble-tutorial

How to Add Voice Chat to a Bubble App

Voice chat in Bubble requires integrating a WebRTC-based service like Daily.co, Agora, or Twilio because Bubble does not have native audio calling. You embed the voice client in an HTML element or use a Bubble plugin, generate room tokens via the API Connector, and manage call states through workflows. This tutorial covers service setup, embedding, call management, and handling permissions.

What you'll learn

  • How to choose and set up a WebRTC voice service for Bubble
  • How to embed a voice client in a Bubble HTML element
  • How to generate room tokens and manage call state
  • How to handle microphone permissions and audio controls
Book a free consultation
4.9Clutch rating
600+Happy partners
17+Countries served
190+Team members
Beginner6 min read25-30 minAll Bubble plans (third-party voice service required)March 2026RapidDev Engineering Team
TL;DR

Voice chat in Bubble requires integrating a WebRTC-based service like Daily.co, Agora, or Twilio because Bubble does not have native audio calling. You embed the voice client in an HTML element or use a Bubble plugin, generate room tokens via the API Connector, and manage call states through workflows. This tutorial covers service setup, embedding, call management, and handling permissions.

Overview: Voice Chat in Bubble

This tutorial shows you how to add real-time voice calling to your Bubble app. Since Bubble has no built-in audio calling, you will integrate a third-party WebRTC service. The guide covers choosing a service, embedding the voice client, managing call creation and joining via workflows, and handling browser microphone permissions.

Prerequisites

  • A Bubble app with user authentication
  • An account with a WebRTC service (Daily.co, Agora, or Twilio)
  • API Connector plugin installed
  • Basic understanding of HTML elements in Bubble

Step-by-step guide

1

Choose and configure a WebRTC voice service

Choose a voice service based on your needs. Daily.co is the easiest to integrate with Bubble — it provides an embeddable iframe that handles all WebRTC complexity. Agora offers more customization but requires more JavaScript. Twilio is enterprise-grade but most complex. Sign up for Daily.co, create an account, and get your API key from the dashboard. Store the API key in your Bubble app's API Connector as a private parameter.

Pro tip: Daily.co offers 10,000 free participant minutes per month, making it ideal for MVP and early-stage apps.

Expected result: You have a WebRTC service account configured with an API key stored securely in Bubble.

2

Create rooms via the API Connector

In the API Connector, set up a call to Daily.co's room creation endpoint. Configure a POST call to https://api.daily.co/v1/rooms with your API key in the Authorization header (Bearer token). The request body should include room properties like name, privacy (public or private), and expiry time. Set this call as an 'Action' type so you can trigger it from workflows. Initialize the call with sample data.

Daily.co room creation (JSON)
1{
2 "name": "room-{{unique_id}}",
3 "privacy": "private",
4 "properties": {
5 "exp": 1711699200,
6 "max_participants": 10,
7 "enable_chat": false
8 }
9}

Expected result: An API Connector action creates voice chat rooms on demand and returns the room URL.

3

Embed the voice client in an HTML element

On your call page, add an HTML element sized to the area where you want the voice controls. For Daily.co, embed their prebuilt UI iframe. Use Bubble's 'Insert dynamic data' to pass the room URL into the iframe src. The prebuilt UI includes mute/unmute, leave call, and participant list. Style the HTML element to match your app's design with CSS inside the element.

Daily.co embed iframe
1<iframe
2 id="voice-call"
3 src="https://your-domain.daily.co/room-name"
4 allow="microphone; camera; autoplay; display-capture"
5 style="width:100%;height:400px;border:none;border-radius:12px;"
6></iframe>

Expected result: A voice chat interface appears in the HTML element with built-in controls for mute, unmute, and leave.

4

Build call initiation and joining workflows

Create a 'Start Call' button workflow: Step 1 — call the room creation API to generate a new room. Step 2 — store the room URL in a 'Call' Data Type record linked to the conversation or group. Step 3 — redirect both users to the call page with the room URL as a parameter. For the recipient, send a notification (push, email, or in-app) with a 'Join Call' link that opens the call page with the same room URL.

Expected result: Users can initiate calls that create rooms and notify recipients, who can join with one click.

5

Handle microphone permissions and call states

The browser will prompt for microphone permission when the voice client loads. Add a message on the call page explaining that microphone access is required. Track call state in your database: create a 'Call' Data Type with fields for room_url, participants (list of Users), status (ringing/active/ended), and start_time. Update status to 'active' when both users join and 'ended' when the last user leaves. Use a 'Do when condition is true' event to detect when the call iframe is removed or the user navigates away.

Expected result: Call state is tracked in the database, and users see clear prompts for microphone permissions.

Complete working example

Workflow summary
1VOICE CHAT WORKFLOW SUMMARY
2================================
3
4SERVICE: Daily.co (or Agora / Twilio)
5API KEY: stored in API Connector (private)
6
7DATA TYPE: Call
8 room_url (text), participants (list of Users)
9 status (text: ringing/active/ended)
10 start_time (date), end_time (date)
11 conversation (Conversation)
12
13START CALL WORKFLOW:
14 Step 1: API Connector create Daily.co room
15 Step 2: Create Call record (room_url, status = ringing)
16 Step 3: Notify recipient (in-app or push)
17 Step 4: Navigate to call page with room_url
18
19CALL PAGE:
20 HTML element: Daily.co iframe
21 src = room URL from page parameter
22 allow = microphone, camera, autoplay
23 Microphone permission prompt displayed
24
25JOIN CALL WORKFLOW:
26 Step 1: Navigate to call page with room_url
27 Step 2: Update Call status = 'active'
28 Step 3: Add Current User to participants list
29
30END CALL:
31 Step 1: User clicks leave or navigates away
32 Step 2: Update Call status = 'ended'
33 Step 3: Set end_time = Current date/time

Common mistakes when adding Voice Chat to a Bubble App

Why it's a problem: Exposing the voice service API key in client-side code

How to avoid: Use the API Connector with private parameters and create rooms through backend workflows or actions

Why it's a problem: Not handling microphone permission denial

How to avoid: Add a visible message explaining microphone requirements and provide a troubleshooting link for enabling permissions

Why it's a problem: Creating rooms without expiration times

How to avoid: Set an expiration time on every room (e.g., 2 hours from creation) so they auto-delete

Best practices

  • Use a service with a prebuilt UI (Daily.co) for fastest integration
  • Store API keys securely as private parameters in the API Connector
  • Set room expiration times to auto-clean unused rooms
  • Track call history in your database for analytics and user experience
  • Add clear microphone permission prompts before loading the voice client
  • Test on multiple browsers — Safari has stricter autoplay and WebRTC policies
  • Provide a fallback phone number option for users with browser compatibility issues

Still stuck?

Copy one of these prompts to get a personalized, step-by-step explanation.

ChatGPT Prompt

I want to add voice calling to my Bubble.io messaging app using Daily.co. How do I create rooms via API, embed the voice client, and manage call states between two users?

Bubble Prompt

Add a voice chat feature to my messaging app. Use Daily.co for the voice service. Create a Start Call button that generates a room, embeds the voice client in an HTML element, and notifies the other user to join.

Frequently asked questions

Which voice service is easiest to integrate with Bubble?

Daily.co is the easiest because it provides an embeddable iframe with a prebuilt UI — no custom JavaScript required. Just embed the iframe in an HTML element with the room URL.

How much does voice chat cost?

Daily.co offers 10,000 free participant minutes per month. Beyond that, pricing starts at $0.004/minute. For a small app, costs are typically under $20/month.

Can I add video alongside voice?

Yes. Daily.co and Agora both support video and voice simultaneously. The same iframe embed supports both — just add 'camera' to the allow attribute.

Does voice chat work on mobile browsers?

Yes, WebRTC voice works on mobile Chrome and Safari. iOS Safari requires user interaction before allowing microphone access, so the user must tap a button to join the call.

Can RapidDev help integrate voice and video calling into my Bubble app?

Yes. RapidDev can integrate voice and video calling services, build custom call interfaces, and implement features like call recording and transcription in your Bubble app.

RapidDev

Talk to an Expert

Our team has built 600+ apps. Get personalized help with your project.

Book a free consultation

Need help with your project?

Our experts have built 600+ apps and can accelerate your development. Book a free consultation — no strings attached.

Book a free consultation

We put the rapid in RapidDev

Need a dedicated strategic tech and growth partner? Discover what RapidDev can do for your business! Book a call with our team to schedule a free, no-obligation consultation. We'll discuss your project and provide a custom quote at no cost.