Telecom

Telz: internationaal bellen met de prijs vooraf

Sinds 2023 zijn we het Android-team achter Telz, een app om voordelig internationaal te bellen. We maakten van een opensource SIP-client een betalend product met prijzen vooraf en opwaarderingen.

Projectfeiten

Klant
Telz (Nettia, Finland)
Jaar
2026
Doorlooptijd
Sinds 2023, lopend
Platformen
Android
Stack
Kotlin, VoIP / SIP, Compose

Wat het verschil maakte

Telz verkoopt sinds 2012 internationale gesprekken. De Android-app begon als fork van Linphone, de opensource SIP-client: een betrouwbare belmotor in een interface die gemaakt was voor een generieke softphone, niet voor iemand die familie in een ander land belt. Sinds 2023 werkt ons team aan de app samen met de interne lead van de klant. We leveren functies op, houden de app bij met elke Android-release en brengen de codebase naar modern Kotlin zonder de roadmap stil te leggen.

De opdracht in één zin: maak van een generieke softphone een belproduct waarvoor mensen betalen, blijf releasen en laat de beproefde SIP-kern met rust.

Waar we begonnen

De Linphone-basis gaf Telz betrouwbare VoIP, maar alles rond het gesprek was generiek. De eerste minuten in de app zeiden weinig over prijs, privacy of hoe opwaarderen werkt. De code mengde verschillende generaties Android-patronen, waardoor zelfs kleine wijzigingen langer duurden dan nodig.

Wat we bouwden

De prijs vóór het gesprek

Als een gebruiker op een contact tikt, koppelt Telz het nummer aan een land en toont het de opties: een internetgesprek via wifi of mobiele data, of een terugbelgesprek waarbij Telz beide personen belt. Elke optie toont haar tarief per minuut, en we voegden een regel toe die zegt hoeveel minuten het huidige saldo dekt. De keuze kost een seconde, en de factuur bevat geen verrassingen.

Een onboarding die de eerste vragen beantwoordt

De nieuwe onboarding is geschreven in Jetpack Compose. Drie korte schermen behandelen wat een nieuwe gebruiker wil weten: geen registratie buiten een telefoonnummer, opwaarderen in elke munt, en gespreksopnames die op het toestel blijven. Een tarievenoverzicht met een valutakeuze is één tik verwijderd, en vóór het aanmelden verschijnt een korte privacymelding.

Betalingen en groei

We maakten de aankoopflow van Google Play robuust tegen mislukte productladingen en lege catalogi, bouwden betalingsinstellingen met automatisch opwaarderen en voegden een bonus toe voor wie een vriend uitnodigt, met promocodes. Installatiereferrers en gevalideerde aankopen gaan naar AppsFlyer, zodat marketing ziet welke kanalen betalende gebruikers opleveren.

Bijblijven met Android

Elke Android-release raakt iets waar een bel-app op steunt. We zetten de app over naar edge-to-edge-lay-outs voor Android 15, maakten ze klaar voor geheugenpagina's van 16 KB, verplaatsten het Linphone-werk naar een eigen core-thread, voegden native in-app-updates en een netwerkobserver toe, en werkten crash- en ANR-rapporten één voor één af.

Moderniseren zonder herschrijven

Een volledige herschrijving had de roadmap maandenlang bevroren. We vervingen de fundamenten laag per laag, zodat elke release nog productwerk bevatte.

OnderdeelWat we dedenWaarom het ertoe doet
Dependency injectionHilt in de hele app en de Linphone-integratieEén plek voor singletons, testbare componenten
PresentatieView models in MVI-stijl met state, events en eenmalige effectsVoorspelbare schermen, geen verloren navigatie-events
Nieuwe UIJetpack Compose binnen de bestaande fragmentnavigatieNieuwe schermen komen er zonder de oude aan te raken
NetwerkCoroutines en een getypeerde result-wrapper, oude RxJava-calls behoudenEndpoints migreren één voor één
TelefoonnummersEigen landkiezer en validator op basis van libphonenumberCorrecte E.164-nummers betekenen correcte tarieven
KwaliteitRobot Framework- en Appium-tests op echte Kobiton-toestellen via GitHub ActionsRegressies duiken op echte hardware op vóór de release

Eén app, 36 locales

Telz-gebruikers bellen over de grenzen heen, dus de interface spreekt hun talen, waaronder Arabisch, Hebreeuws en Perzisch, die van rechts naar links lezen. Een vertaalcontrole signaleert ontbrekende en inconsistente teksten voordat een release de deur uitgaat.

Wat de klant vandaag heeft


Heb je een Android-product op een opensource kern dat moet uitgroeien tot iets waarvoor klanten betalen? We bekijken het graag samen met je.