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à construitMecanismul de dispecerizare e scris și migrat în platforma noastră vocală: tabela `courier_calls` cu șapte stări posibile, trei încercări implicite, pauză de 120.000 ms între ele și rezultatul apelului păstrat structurat, plus cinci funcții de server care o folosesc — inițierea apelului către curier, verificarea rezultatului, mătura pentru apelurile rămase agățate, identificarea celui care sună înapoi și webhookul de după apel. A doua implementare e filtrul de ieșire scris pentru un client din transport, care elimină recursiv câmpurile de contact ale șoferului din rezultatul uneltei, păstrând numerele dispeceratului. Rezerva, spusă înainte să întrebi: partea de telefon trece printr-o gazdă SIP, iar gazda prin care merg liniile noastre de test nu răspunde la data scrierii — nu-ți dăm un număr de demonstrație pe care nu l-am putea ridica în fața ta.
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.