Aller au contenu
Akram Moussaoui
CV PDF

call-tracking

Un service qui remplace le numéro des professionnels par un numéro tracké, produit leurs statistiques d’appels et de SMS avec Iovox et ajoute un répondeur IA.

Employeur
Groupe La Centrale
Rôle
Contributeur, puis lead
Période
Stack
  • TypeScript
  • AWS Lambda
  • Serverless Framework
  • Step Functions
  • DynamoDB
  • DynamoDB Streams
  • OpenSearch
  • SQS
  • SNS
  • Kinesis
  • Firehose
  • SES
  • CDK
  • CloudFormation
  • CodePipeline

Contexte et problème

Sur La Centrale, un acheteur qui veut joindre un professionnel l'appelle depuis son annonce. Le service remplace le numéro du professionnel par un numéro tracké, qui redirige vers son vrai numéro.

Le service téléphonique est fourni par Iovox. Il produit les statistiques d'appels et de SMS de 8 000 professionnels et ajoute un répondeur IA.

Mon rôle

J'ai rejoint le projet comme contributeur, puis j'en suis devenu le lead. J'ai mené la mise en place du traceur rotatif : chaque appel reçu par un professionnel remonte la référence de l'annonce concernée.

J'ai conçu les options du service avec Iovox, en échange direct avec leurs équipes. J'ai aussi écrit le SDK navigateur qui attribue un numéro à chaque visite, réglé la durée de vie des numéros et leur libération, et intégré le répondeur IA : cadrage avec le partenaire, puis enregistrement, retranscription et résumé dans l'historique des appels.

Architecture

Architecture du call-tracking L'appel : un acheteur appelle le numéro tracké fourni par Iovox, tiré d'un pool rotatif, qui redirige vers le vrai numéro du professionnel ; l'appel peut aboutir au répondeur IA d'Iovox. Traitement sur AWS : chaque événement d'appel remonte la référence de l'annonce vers des Lambdas TypeScript orchestrées par Step Functions, qui gèrent les pools de numéros rotatifs dans DynamoDB et ses Streams et indexent les appels dans OpenSearch ; une Lambda récupère les informations de la messagerie du répondeur. Diffusion : SQS, SNS, Kinesis et Firehose portent les événements jusqu'aux emails SES envoyés aux professionnels. L'infrastructure est mixte, CDK et CloudFormation legacy, déployée par CodePipeline par branche d'environnement. L'APPEL TRAITEMENT AWS DIFFUSION Acheteur appelle l'annonce Numéro tracké Iovox · rotatif Professionnel son vrai numéro Répondeur IA Iovox · messagerie Lambdas TS Serverless Framework Step Functions orchestration DynamoDB + Streams pools rotatifs OpenSearch appels indexés Lambda messagerie IA SQS · SNS files et topics Kinesis puis Firehose SES emails aux pros événement d'appel + réf. annonce infos de la messagerie INFRASTRUCTURE IaC mixte : CDK (stockage, certificats, OpenSearch) et CloudFormation legacy · CodePipeline par branche d'environnement
Schéma redessiné pour le site. En bleu, les briques du traceur rotatif ; en pointillés, le partenaire de téléphonie. Les services internes ne sont pas nommés.

L'architecture est serverless, sur AWS :

  • Des Lambdas TypeScript, déployées avec Serverless Framework et orchestrées par Step Functions, reçoivent les événements d'appel d'Iovox.
  • Les pools de numéros rotatifs sont gérés dans DynamoDB ; DynamoDB Streams propage leurs changements.
  • Les événements d'appel, avec la référence de l'annonce, sont indexés dans OpenSearch.
  • SQS, SNS, Kinesis et Firehose diffusent les événements jusqu'aux emails envoyés aux professionnels par SES.
  • Une Lambda récupère les informations de la messagerie du répondeur IA.

L'infrastructure est décrite en partie en CDK (stockage, certificats, OpenSearch), en partie en CloudFormation legacy. CodePipeline déploie chaque branche d'environnement.

Décisions clés

Un traceur rotatif qui remonte la référence de l'annonce

Contexte

Un acheteur appelle un professionnel depuis une annonce précise. Le numéro tracké compte les appels, mais un numéro attaché au seul professionnel ne dit pas de quelle annonce vient l'appel.

Choix

Un traceur rotatif : les numéros trackés sont tirés de pools gérés dans DynamoDB. Chaque appel remonte des données de contexte, dont la référence de l'annonce concernée.

Alternative écartée

L'option par défaut : un numéro tracké par professionnel, qui compte ses appels sans les relier à une annonce.

Conséquence

Chaque appel reçu par un professionnel remonte la référence de l'annonce concernée, et les événements d'appel sont indexés avec elle dans OpenSearch.

Un SDK navigateur plutôt qu'un appel direct depuis chaque front

Contexte

Pour relier un appel à une visite précise, chaque page d'annonce doit demander un numéro au moment de l'affichage, avec le contexte de la visite : site, type de page, appareil.

Choix

Un SDK TypeScript publié sur npm centralise l'appel, la validation des entrées, la collecte du contexte (détection d'appareil et de bots comprise) et un timeout de 400 ms. Il est couvert par 43 tests unitaires.

Alternative écartée

L'option par défaut : chaque front appelle l'endpoint lui-même et collecte le contexte à sa façon.

Conséquence

Les règles vivent et sont testées à un seul endroit. Si l'attribution tarde, la page affiche quand même un numéro.

Concevoir les options avec Iovox, en direct

Contexte

Les numéros trackés, la redirection, les statistiques d'appels et de SMS et le répondeur IA reposent sur le service téléphonique d'Iovox.

Choix

Les options du service sont conçues avec Iovox, en échange direct entre leurs équipes et moi.

Alternative écartée

L'option par défaut : intégrer l'offre du fournisseur telle quelle, sans la concevoir avec lui.

Conséquence

Les options sont pensées avec le partenaire qui les fait tourner, au lieu d'être adaptées après coup à son offre.

Résultats

8 000 professionnels

Le service est en production pour 8 000 professionnels. Chaque appel qu'ils reçoivent remonte la référence de l'annonce concernée. Chaque numéro d'un pool vit 30 minutes, et les pools inutilisés sont libérés pour arrêter leur facturation.

L'IA dans le produit

Le service ajoute un répondeur IA, fourni par Iovox. J'ai cadré son intégration avec le partenaire, puis ajouté l'enregistrement, la retranscription et le résumé IA de chaque message dans l'historique des appels, ses statistiques, et les notifications d'appels manqués.

Limites et ce que je ferais autrement

  • Le service repose sur un partenaire : les numéros, la redirection et le répondeur dépendent du service téléphonique d'Iovox.
  • L'infrastructure est mixte. Une partie est décrite en CDK, le reste en CloudFormation legacy : un changement d'infrastructure commence par savoir de quel côté il se trouve.