Télécom

Telz : des appels internationaux au prix affiché d'avance

Depuis 2023, nous sommes l'équipe Android derrière Telz, une application d'appels internationaux à bas prix. Nous avons fait d'un client SIP open source un produit payant, avec des tarifs affichés d'avance et des recharges.

Fiche projet

Client
Telz (Nettia, Finlande)
Année
2026
Durée
Depuis 2023, en cours
Plateformes
Android
Technologies
Kotlin, VoIP / SIP, Compose

Ce qui a fait la différence

Telz vend des appels internationaux depuis 2012. Son application Android est née d'un fork de Linphone, le client SIP open source : un moteur d'appel fiable dans une interface pensée pour un softphone générique, pas pour quelqu'un qui appelle sa famille dans un autre pays. Depuis 2023, notre équipe travaille sur l'application aux côtés du lead interne du client : nous livrons des fonctionnalités, suivons chaque version d'Android et faisons passer la base de code à un Kotlin moderne sans mettre la roadmap à l'arrêt.

La mission en une phrase : faire d'un softphone générique un produit d'appel pour lequel les gens paient, continuer à publier des versions et ne pas toucher au cœur SIP qui a fait ses preuves.

Le point de départ

La base Linphone offrait à Telz une VoIP fiable, mais tout ce qui entourait l'appel restait générique. Les premières minutes dans l'application ne disaient presque rien du prix, de la confidentialité ou du fonctionnement des recharges. Le code mélangeait plusieurs générations de patterns Android, si bien que même de petites modifications prenaient plus de temps que nécessaire.

Ce que nous avons construit

Le prix avant l'appel

Quand un utilisateur touche un contact, Telz associe le numéro à un pays et présente les options : un appel internet via Wi-Fi ou données mobiles, ou un rappel où Telz fait sonner les deux interlocuteurs. Chaque option affiche son tarif à la minute, et nous avons ajouté une ligne qui indique combien de minutes le solde actuel permet. Le choix prend une seconde, et la facture ne réserve aucune surprise.

Un onboarding qui répond aux premières questions

Le nouvel onboarding est écrit en Jetpack Compose. Trois écrans courts couvrent ce qu'un nouvel utilisateur veut savoir : aucune inscription au-delà d'un numéro de téléphone, des recharges dans n'importe quelle devise, et des enregistrements d'appels qui restent sur l'appareil. Une grille tarifaire avec sélecteur de devise est à un geste, et une courte note sur la protection des données s'affiche avant la connexion.

Paiements et croissance

Nous avons fiabilisé le parcours d'achat Google Play face aux échecs de chargement des produits et aux catalogues vides, construit des paramètres de paiement avec recharge automatique et ajouté un bonus de parrainage avec codes promo. Les référents d'installation et les achats validés sont transmis à AppsFlyer, pour que le marketing voie quels canaux amènent des utilisateurs payants.

Suivre le rythme d'Android

Chaque version d'Android touche à quelque chose dont une application d'appel dépend. Nous sommes passés aux mises en page edge-to-edge pour Android 15, avons préparé l'application aux pages mémoire de 16 Ko, déplacé le travail de Linphone sur son propre thread, ajouté les mises à jour natives dans l'application et un observateur réseau, et traité un à un les rapports de crash et d'ANR.

Moderniser sans tout réécrire

Une réécriture complète aurait gelé la roadmap pendant des mois. Nous avons remplacé les fondations couche par couche, pour que chaque version contienne encore du travail produit.

DomaineCe que nous avons faitPourquoi c'est important
Injection de dépendancesHilt dans toute l'application et l'intégration LinphoneUn seul endroit pour les singletons, des composants testables
PrésentationView models de style MVI avec état, événements et effets ponctuelsDes écrans prévisibles, aucun événement de navigation perdu
Nouvelle interfaceJetpack Compose dans la navigation par fragments existanteLes nouveaux écrans arrivent sans toucher aux anciens
RéseauCoroutines et un wrapper de résultat typé, anciens appels RxJava conservésLes endpoints migrent un par un
Numéros de téléphoneSélecteur de pays et validateur maison basés sur libphonenumberDes numéros E.164 corrects, donc des tarifs corrects
QualitéTests Robot Framework et Appium sur de vrais appareils Kobiton via GitHub ActionsLes régressions apparaissent sur du vrai matériel avant la sortie

Une application, 36 langues et régions

Les utilisateurs de Telz appellent au-delà des frontières, alors l'interface parle leurs langues, dont l'arabe, l'hébreu et le persan, qui se lisent de droite à gauche. Un contrôle des traductions signale les textes manquants ou incohérents avant chaque sortie.

Ce dont le client dispose aujourd'hui


Vous faites tourner un produit Android sur un cœur open source qui doit devenir quelque chose pour lequel vos clients paient ? Nous serions ravis de l'examiner avec vous.