Solutions · Transport & logistique
Quand le client demande où est le colis, l’agent ne devine pas : il appelle le courier, lui demande, puis revient avec la réponse.
La répartition par voix, construite comme un mécanisme, et non comme une promesse : un tableau avec des états explicites, trois tentatives à deux minutes d’intervalle, le résultat de l’appel écrit de manière structurée et un filtre qui retire le numéro du chauffeur de tout ce qui arrive au modèle, afin qu’il ne puisse pas être dicté au client.
Déjà construitLe mécanisme de répartition est écrit et migré dans notre plateforme vocale : la table `courier_calls` avec sept états possibles, trois tentatives par défaut, une pause de 120.000 ms entre elles et le résultat de l’appel conservé de manière structurée, plus cinq fonctions serveur qui l’utilisent — l’initiation de l’appel vers le courier, la vérification du résultat, le balai pour les appels restés bloqués, l’identification de celui qui rappelle et le webhook d’après appel. La deuxième implémentation est le filtre de sortie écrit pour un client du transport, qui élimine récursivement les champs de contact du chauffeur du résultat de l’outil, tout en conservant les numéros du dispatch. La réserve, dite avant que vous ne demandiez : la partie téléphonique passe par un hôte SIP, et l’hôte par lequel passent nos lignes de test ne répond pas à la date de rédaction — nous ne vous donnons pas un numéro de démonstration que nous ne pourrions pas décrocher devant vous.
Dans une entreprise de transport ou de livraison, la plupart des appels reçus sont la même question posée par des personnes différentes : où est la marchandise, à quelle heure arrive-t-elle, pourquoi n’est-elle pas arrivée. La réponse n’est ni dans un document ni dans un système — elle est dans la tête du chauffeur, qui conduit. Le dispatch fait le lien : il prend l’appel du client, appelle le chauffeur, revient vers le client. Ce travail occupe une personne entière et se fait cent fois par jour, avec les mêmes trois phrases.
Nous avons construit exactement cette chaîne, comme mécanisme à états, et non comme fonction marketing. Un agent parle avec le client. Lorsqu’il a besoin d’une réponse qu’il n’a pas, il appelle une fonction qui lance un deuxième appel — vers le coursier — lié à la conversation dont il est parti. Cet appel a sa propre ligne dans une table, avec un statut qui passe par `calling`, `in_progress`, `retrying`, `completed`, `failed`, `no_answer`, `timeout`, avec le numéro de la tentative, avec un maximum de trois tentatives et une pause de deux minutes entre elles. Le résultat est écrit de manière structurée : le résumé de ce qu’a dit le coursier, le temps estimé, la position.
La partie facile à oublier et que nous traitons comme une exigence, et non comme une précaution : le numéro de téléphone du chauffeur ne doit pas parvenir au client. Ce n’est pas une instruction écrite dans le prompt de l’agent, car une instruction dans un prompt peut être contournée. C’est un filtre qui parcourt récursivement le résultat de l’outil et supprime les champs de contact du chauffeur avant que ce résultat n’atteigne le modèle — tout en conservant les numéros du dispatch. Ce qui a été supprimé ne peut pas être dicté, quelle que soit la manière dont l’agent est interrogé.
Et la limite la plus importante est une limite d’infrastructure, non d’intelligence : un agent vocal au téléphone dépend d’un hôte SIP entre votre opérateur et la plateforme. Quand cet hôte tombe, les appels ne partent pas, et la signature du défaut est reconnaissable — requête expirée, identifiant d’appel vide, durée zéro. L’hôte par lequel passent nos lignes de test ne répond pas à la date d’écriture de cette page. Sur le web, le parcours vocal est vérifiable aujourd’hui ; au téléphone, la première étape de tout travail est d’établir sur quel hôte entrent vos numéros.