In-app voice. Three lines of code.
Native iOS. Native Android.
Drop the BBBVoice client into your existing app. Native audio session, real WebRTC via Twilio's native SDKs, a 1-hour server-minted token. Your customer talks to your AI agent without leaving your app.
Both SDKs are in the repo today, foundation-drop status, stable public API.
Wraps Twilio Voice native SDKs · DEK-encrypted token mint · Per-call attribution
iOS
iOS 15+ · Swift Package
.package(url: "https://github.com/MoayadAlobaidi/Foundry.git", from: "1.0.0"),
// targets: [.target(name: "App", dependencies: ["BBBVoice"])], import BBBVoice
import SwiftUI
@StateObject var client = BBBVoiceClient(
tenantId: "<your-tenant-uuid>")
Button("Talk to support") {
Task { try? await client.startCall(language: .ar) }
} Android
Android 7.0+ (API 24) · Gradle library
dependencies {
implementation("ae.blackbit:voice:1.0.0")
} val client = BBBVoiceClient(this, tenantId = "<your-tenant-uuid>")
lifecycleScope.launch {
client.startCall(Language.AR, VoiceChoice.FEMALE)
} The thin layer between your app and the agent.
Your app integrates the SDK; the SDK handles every fiddly thing about voice that you don't want to own — audio session config, WebRTC plumbing, token rotation, per-call attribution, audit.
Native audio
AVAudioSession on iOS, AudioManager on Android. Real WebRTC via the Twilio Voice native SDKs — not a webview wrapper.
Encrypted token mint
Your app never sees a long-lived secret. The SDK fetches a 1h Twilio JWT from bbb-voice on each call — server-issued, rate-limited per IP.
Per-call attribution
Every in-app call records platform, sdk_version, device_model, network type to public.mobile_sdk_sessions. Visible in your console runs feed alongside web calls.
16 languages, 4 Arabic dialects
Same language coverage as the web widget. Auto-detection on first turn or pass an explicit Language enum.
Visitor continuity
Persisted visitor_id (UserDefaults / SharedPreferences) gives multi-call history per install, with 30-day rotation policy (Tier 6.9.1).
Audit-logged
Every call lands in your tenant audit log. CSV export available per-tenant for GDPR Art. 15 / PDPL Art. 14 data-subject requests.
Your app never sees a long-lived secret.
The SDK only ever holds a short-lived (1-hour) call-grant JWT minted by your BBB tenant. No Twilio credentials ship in your binary. If the JWT leaks, the blast radius is one hour and rate-limited per IP.
Your app calls POST /v1/calls/browser/mobile-access-token
Sends tenantId + platform + sdk_version + visitor_id
bbb-voice mints Twilio Voice JWT (1h TTL)
Identity tagged mobile-{ios|android}-{visitor}
SDK opens WebRTC PeerConnection via Twilio SDK
Audio frames flow; transcript indexed in your tenant
Call ends INSERT INTO mobile_sdk_sessions
Per-call attribution: platform, device_model, jitter, etc.
Foundation drop. Stable API. Polish ships next.
We deliberately ship the SDK with a stable public surface so you can integrate today. The polish below ships in 6.6.1 (Q3 2026) without breaking anything you've already wired.
Tier 6.6.1 · Q3 2026
- ○ iOS CallKit handoff for backgrounded calls
- ○ Android ConnectionService equivalent
- ○ PushKit (iOS) / Firebase Cloud Messaging (Android) for inbound calls
- ○ Pre-built UI components: BBBCallButton, BBBCallPanel
- ○ Bluetooth headset routing helper + AirPods latency tuning preset
Tier 7+ · 2027
- ○ React Native bindings (TypeScript thin wrapper)
- ○ Flutter plugin (community-driven, BBB-supported)
- ○ On-device wake-word + handoff to BBB voice on cue
Two things to add to your app.
iOS Info.plist
<key>NSMicrophoneUsageDescription</key>
<string>To talk to the AI agent.</string> Plus enable Background Modes → "Audio, AirPlay, and Picture in Picture" if you want calls to keep running when the user backgrounds your app.
Android — runtime permission
ActivityCompat.requestPermissions(
activity,
arrayOf(Manifest.permission.RECORD_AUDIO),
REQ_MIC
)
The library's manifest already declares
RECORD_AUDIO;
you just request it at runtime on Android 6.0+.
Want to wire it into your app?
Either grab the SDK from the GitHub repo today, or book a 20-min call and we'll pair on the integration with your eng team.