A push notification saying "Bus 14 is arriving" gets swiped away with forty others. A voice saying the same thing, in the language spoken at home, does not.
That was the theory. Turning it into something that runs every school day, for real parents, took considerably longer than building the first working version β and taught us five things that no tutorial mentions.
The actual problem we were solving
School transport safety. Parents want to know where the bus is and when it will arrive. We had GPS, we had an app, we had push notifications. Engagement was still poor.
The reason was uncomfortable once we saw it: a meaningful share of parents weren't reading the notifications. Some because the app was in English and they read Hindi. Some because they were cooking, driving or working. Some because a banner among two hundred unread banners is invisible.
Voice solved all three at once. But only if it spoke the right language, and only if it worked every single time.
1Language is a property of the person, not the app
Our first version had a language setting. The app was in Hindi or English, and the voice matched the app.
This was wrong within a day of real use. Two parents on the same route, receiving the same alert about the same bus, need two different languages. The app setting is per-device. The alert is per-recipient. Those are not the same thing.
We rebuilt it so language resolves per recipient at send time: the language the user explicitly chose, then their device locale, then a region default, then a configured system default. Now the same trigger fans out to whatever language each parent needs, and nobody has to configure anything for it to be right.
The general lesson: in any multilingual product, language belongs to the message, not to the application.
2Translation is not the same as speech
We had our interface strings translated already. We assumed we could feed those into text-to-speech. We could not β written and spoken language diverge more than you'd expect.
Abbreviations. "Bus no. 14" reads fine and is spoken as "bus no fourteen" β
the abbreviation gets read literally.
Numbers. Time formats, distances and currency each need to be spoken differently
per language.
Word order. A sentence assembled by string concatenation is grammatical in English
and nonsense in Hindi.
We ended up with a separate set of speech templates per language, distinct from the interface strings, with live values inserted into slots designed for that language's grammar. That doubled the translation work and there was no way around it.
3Cost, quietly
Neural text-to-speech is priced per character. Our first month's bill was not catastrophic, but the trajectory was.
The fix was obvious in hindsight. Most of what we generate is repeated thousands of times β "Your child's bus is arriving in" is identical for every parent, every day. Only the number changes.
So we split each message into fixed and variable parts, cached the fixed audio permanently, and generated only the variable fragment. Cost dropped to a small fraction of what it had been, and latency improved as a side effect because most of the audio was already sitting there.
If you're planning voice at any volume, design the cache before you design the voice.
4Silent failures
The worst bug in a notification system is the one where nothing happens and nobody notices.
We had a stretch where a subset of voice alerts simply weren't reaching people. No error, no alarm, no complaint for several days β because a parent who doesn't get an alert has no idea there was an alert to get.
Now every send is logged with its outcome: generated, delivered, played, failed. A failure rate above threshold raises an alert to us, not to the parent. Silent failures became visible failures.
5The store review
We submitted, and Google Play rejected the app.
Not for the voice. For everything missing around it β AI disclosure, content moderation, user reporting, permission justification. Reviewers are considerably more careful about AI features than they were two years ago, and a feature that generates output for users now attracts scrutiny the same feature wouldn't have attracted in 2023.
Building that infrastructure took about two weeks. We resubmitted and were approved. We've since written up the full rejection-to-approval story, because it's the part of AI development nobody blogs about and everyone eventually hits.
Where it ended up
The platform is live on Google Play and the App Store, patent-filed in India, and running every school day. Parents get alerts they actually hear, in the language they actually speak.
If you want the full technical picture, the BOBOK case study covers the GPS, SOS and QR boarding layers alongside the voice.
Would we recommend adding voice to your product?
Honestly β only sometimes.
β Voice earns its place when
- Your users don't all read the same language
- The message is time-sensitive and being missed
- Your users are often hands-busy
- Accessibility genuinely matters to your audience
β And it doesn't when
- A better-written notification would fix it
- The message isn't urgent
- Your users are at desks reading screens anyway
- You're adding it because it sounds impressive
We'd tell you that on a call before quoting. A cheaper answer that works beats an expensive one that impresses.
