Android Telecom Framework + AI Voice Agents: ConnectionService and CallsManager (2026)
By Sagar Shankaran, Founder of CallSphere
Self-managed ConnectionService is the Android-blessed path for AI voice agents. Here is how to ship it with WebRTC, FCM, and the new Core-Telecom Jetpack CallsManager.
Key takeaways
Android's Telecom framework is the equivalent of CallKit, but with two layers: the legacy ConnectionService and the modern Core-Telecom Jetpack CallsManager. AI voice agents in 2026 should target the latter and let it wrap the former for older devices.
Background
Android's Telecom framework manages calls system-wide and routes audio through the same pipeline used by the dialer app. A "self-managed" ConnectionService lets a third-party app advertise calls without taking over the dialer UI — exactly what an AI voice agent app needs. In November 2023 Google released the Core-Telecom Jetpack library, which introduces a new `CallsManager` class that obsoletes ConnectionService for new code while wrapping it on Android 8.0+.
In 2026, AI voice agent apps should write against `CallsManager`. It interoperates with system telephony, with other standalone calling apps, and with the new "stream call audio to your tablet" feature Google is rolling out across the device family.
Architecture
```mermaid flowchart LR Server[Voice Agent Backend] -- FCM high-priority --> FCM[(Firebase FCM)] FCM --> App[Android App] App -- addCall --> CallsManager[Core-Telecom CallsManager] CallsManager -- CallControlScope --> WebRTC[WebRTC PeerConnection] WebRTC -- DTLS-SRTP --> Gateway[Pion Go gateway 1.23] Gateway -- NATS --> Pod[6-container agent pod] ```
Hear it before you finish reading
Talk to a live CallSphere AI voice agent in your browser — 60 seconds, no signup.
CallSphere implementation
CallSphere's Android client matches the iOS architecture across the same six verticals:
- Real Estate (OneRoof) — Inbound calls land on the Pion Go gateway 1.23 → NATS → 6-container pod (CRM, MLS, calendar, SMS, audit, transcript). The Android app uses self-managed CallsManager + WebRTC. See /industries/real-estate.
- Healthcare — Same Android stack, OpenAI Realtime backend, full HIPAA + SOC 2 controls. See /industries/healthcare.
- /demo browser path — Plain Chrome on Android also works without Telecom framework. Try it at /demo.
Explore a live demo and compare current plans to find the right fit for your business.
Build steps with code
```kotlin // 1. Build a CallsManager and register capabilities val callsManager = CallsManager(context) callsManager.registerAppWithTelecom( capabilities = CallsManager.CAPABILITY_BASELINE or CallsManager.CAPABILITY_SUPPORTS_VIDEO_CALLING )
// 2. On FCM high-priority message, add the call suspend fun onFcmIncoming(payload: Map<String, String>) { val attributes = CallAttributesCompat( displayName = payload["from"] ?: "AI Agent", address = Uri.parse("voice:agent"), direction = CallAttributesCompat.DIRECTION_INCOMING, callType = CallAttributesCompat.CALL_TYPE_AUDIO_CALL, callCapabilities = CallAttributesCompat.SUPPORTS_SET_INACTIVE, ) callsManager.addCall(attributes, onAnswer = { type -> startWebRTC() // negotiate peer connection here }, onDisconnect = { reason -> stopWebRTC() }) } ```
```xml
Pitfalls
- Failing to register capabilities — `registerAppWithTelecom` must run before `addCall`; otherwise the call silently never reaches the system.
- Skipping the foreground-service-phone-call permission — Android 14+ rejects ongoing-call services without it.
- Holding RECORD_AUDIO without an active call session — Doze mode kills mics; let CallsManager hold the focus.
- Using a regular FCM message instead of high-priority — Android deprioritizes future pushes if you fail to show a call UI.
- Manually managing AudioManager mode — let CallsManager set `MODE_IN_COMMUNICATION` automatically.
FAQ
Is ConnectionService deprecated? Not yet — but the Jetpack CallsManager is the path forward. CallsManager wraps ConnectionService on older devices automatically.
Still reading? Stop comparing — try CallSphere live.
CallSphere ships complete AI voice agents per industry — 14 tools for healthcare, 10 agents for real estate, 4 specialists for salons. See how it actually handles a call before you book a demo.
Does it interoperate with CallKit on iOS? No — Telecom and CallKit are separate, but they expose semantically similar APIs (incoming/outgoing/answer/disconnect) that fit a single cross-platform abstraction.
Can I show my own UI? Yes for self-managed; the system handles audio routing while you own the screen.
Does it work with WebRTC? Yes — Telecom controls the audio mode and focus; WebRTC negotiates SRTP and renders into AudioTrack.
What about Bluetooth headsets? CallsManager + AudioManager-IN_COMMUNICATION routes correctly to Bluetooth SCO when one is connected.
Sources
- https://developer.android.com/develop/connectivity/telecom
- https://developer.android.com/develop/connectivity/telecom/voip-app/telecom
- https://android-developers.googleblog.com/2023/11/alpha-release-of-telecom-library.html
- https://github.com/team-telnyx/telnyx-webrtc-android
- https://www.infoq.com/news/2023/11/android-jetpack-telecom-library/
Explore a live demo and compare current plans to find the right fit for your business.

Written by
Sagar Shankaran· Founder, CallSphere
LinkedInSagar Shankaran is the founder of CallSphere, where he builds production AI voice and chat agents deployed across healthcare, hospitality, real estate, and home services. He writes about agentic AI, LLM engineering, and shipping voice agents that handle real calls in production.
Try CallSphere AI Voice Agents
See how AI voice agents work for your industry. Live demo available -- no signup required.