By Sagar Shankaran, Founder of CallSphere
FCM high-priority + Telecom CallsManager is the Android equivalent of PushKit + CallKit for AI voice. Here is how to ship it without losing future push priority.
Key takeaways
Android does not have a separate VoIP push channel. You use FCM with high-priority on a data message, and you have a few seconds to show an incoming-call UI through the Telecom framework — or Android deprioritizes your next push.
Firebase Cloud Messaging is the universal push channel on Android. For AI voice agents in 2026, the recipe is: send a high-priority data message, receive it in a service even from Doze, and immediately register an incoming call with the Telecom framework's CallsManager (or legacy ConnectionService for older devices). If you fail to show a UI, FCM will quietly throttle your next high-priority delivery — Google's quota system penalizes apps that abuse the priority lane.
The good news: with Core-Telecom CallsManager (Jetpack, alpha 2023, stable across 2024–2026), the boilerplate is now manageable. The bad news: every OEM (Samsung, Xiaomi, OPPO, Huawei) layers extra battery-optimization on top of stock Android, and you must convince users to whitelist your app or they will miss calls.
```mermaid flowchart LR Backend[Voice Agent Backend] -- HTTP v1 API --> FCM[(Firebase FCM)] FCM -- high-priority data --> Device[Android Device] Device -- onMessageReceived --> Service[Foreground Service] Service -- addCall --> CallsManager[Core-Telecom CallsManager] CallsManager -- CallControlScope --> WebRTC[WebRTC PeerConnection] WebRTC -- SRTP --> Gateway[Pion Go gateway 1.23] ```
The Android client across CallSphere's six verticals (real estate, healthcare, behavioral health, legal, salon, insurance) follows the same pattern:
Hear it before you finish reading
Talk to a live CallSphere AI voice agent in your browser — 60 seconds, no signup.
37 agents · 90+ tools · 115+ DB tables · 6 verticals · HIPAA + SOC 2 · $149/$499/$1499 · 14-day /trial · 22% affiliate at /affiliate.
```kotlin class VoiceMessagingService : FirebaseMessagingService() { override fun onMessageReceived(message: RemoteMessage) { val callId = message.data["call_id"] ?: return val from = message.data["from"] ?: "AI Agent"
// Start a foreground service so we have time to attach to Telecom
val intent = Intent(this, IncomingCallService::class.java).apply {
putExtra("call_id", callId); putExtra("from", from)
}
ContextCompat.startForegroundService(this, intent)
} }
class IncomingCallService : Service() { override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { startForeground(NOTIF_ID, buildPlaceholderNotification(), ServiceInfo.FOREGROUND_SERVICE_TYPE_PHONE_CALL)
val callsManager = CallsManager(this)
val attrs = CallAttributesCompat(
displayName = intent?.getStringExtra("from") ?: "AI Agent",
address = Uri.parse("voice:agent"),
direction = CallAttributesCompat.DIRECTION_INCOMING,
callType = CallAttributesCompat.CALL_TYPE_AUDIO_CALL,
)
CoroutineScope(Dispatchers.Main).launch {
callsManager.addCall(attrs,
onAnswer = { startWebRTC() },
onDisconnect = { stopSelf() })
}
return START_NOT_STICKY
} } ```
```xml
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.
Backend: use the FCM HTTP v1 API with `"priority": "high"` and a `data` payload (no `notification` block — that one goes through display channels and gets coalesced).
Why not a regular notification? Notification payloads are deprioritized in Doze; only high-priority data messages wake the app.
How fast is FCM? P50 around 250 ms in 2026; p99 around 2 s on poor networks.
Does it work on devices without Google Services? Push HMS for Huawei or Mi Push for Xiaomi-only markets; the Telecom side is identical.
What if the user is in Do Not Disturb? Telecom respects DND; CallsManager surfaces the UI but mutes the ringtone.
Are call audio routes managed automatically? Yes — CallsManager sets MODE_IN_COMMUNICATION and routes to Bluetooth SCO if connected.
Try the Android client at /demo, browse plans at /pricing, or start a /trial.
Written by
Sagar Shankaran· Founder, CallSphere
Sagar 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.
See how AI voice agents work for your industry. Live demo available -- no signup required.
A founder's guide to texto a voz (text-to-speech in Spanish): LATAM vs Castilian voices, free options, and how CallSphere ships Spanish agents.
A founder's guide to the female voice generator landscape: AI female voices, Japanese voices, robot voices, and how CallSphere ships 57+ voices live.
A founder's guide to the Siri voice generator landscape: how AI voice cloning works, what is legal, and how CallSphere uses 57+ voices in production.
A founder's guide to AI voice assistants for ecommerce: customer service, order lookup, and how CallSphere fits in versus virtual receptionists.
Robot text to speech in 2026: how I pick TTS APIs, when robotic voices help, and how CallSphere ships 57+ language voice agents. Hands-on guide.
The customer support specialist role in 2026 is half human, half AI. Here is what the job looks like, the AI tools that pair with it, and how we ship it.
© 2026 CallSphere LLC. All rights reserved.