Écoutez
Elle comprend la demande dans le contexte de la conversation et des règles de l’entreprise.
Agents vocaux IA Plateforme
Nous construisons des agents qui prennent en charge et initient des appels, utilisent les informations de l’entreprise et travaillent avec vos systèmes. De la première question jusqu’à une demande complète, une confirmation ou un transfert à un collègue.
Kallina
Elle comprend la demande dans le contexte de la conversation et des règles de l’entreprise.
Consulte la base de connaissances et les intégrations autorisées avant de répondre.
Renseigne les données, exécute l’action autorisée ou transfère la conversation à un humain.
Questions fréquentes, prise en charge des demandes et retour vers les personnes qui ont demandé à être contactées.
Confirmations et coordination, avec les informations du système de commandes connecté.
Recueillez les détails nécessaires. L’accès au calendrier et la réservation sont définis pour chaque intégration.
Les scénarios, le numéro de téléphone, les langues et les actions sont configurés pour chaque implémentation. L’équipe conserve la possibilité de prendre la conversation en charge.
Kallina en détail
Kallina est la plateforme sur laquelle nous construisons des agents qui parlent au téléphone et dans la page web. Un agent a un rôle écrit, une base de connaissances approuvée, un ensemble d’outils qu’il peut appeler et une limite au-delà de laquelle il transmet la discussion à un humain. La conversation ne s’arrête pas au transcript : l’appel a une durée, un coût par fournisseur, un enregistrement et une analyse, tous liés au compte de l’entreprise.
Le moteur vocal n’est pas unique. Dans la configuration de l’agent, vous choisissez entre ElevenLabs Conversational AI, OpenAI Realtime, Gemini Live ou « auto », auquel cas Kallina choisit le fournisseur en fonction de la langue, de la charge et de la disponibilité. En plus de cela, vous choisissez séparément le cerveau textuel — le catalogue du code contient 78 entrées de OpenAI, Google, Anthropic, xAI et ElevenLabs, chacune avec la latence et le coût par minute affichés dans l’interface, afin que le choix soit éclairé, et non fait par ouï-dire.
La téléphonie est la nôtre, pas louée auprès du fournisseur vocal. Les appels passent par un Asterisk propre, avec routage selon les heures de travail et le fuseau horaire, une plage de nuit (par exemple 22:00 → 06:00) et un tri par priorité : l’en-tête SIP Diversion, puis le numéro Kallina, puis la règle de secours. Pour OpenAI Realtime, il existe un pont AudioSocket qui convertit le codec dans les deux sens, g711_ulaw ↔ PCM16.
Dans `AGENT_PROVIDERS`, il y a quatre options : `elevenlabs` (ConvAI), `openai-realtime`, `gemini-live` et `auto`. Pour le text-to-speech dans d’autres langues que l’anglais, la valeur par défaut est `eleven_flash_v2_5` — 32 langues, environ 75 ms de latence ; l’alternative de meilleure qualité, `eleven_turbo_v2_5`, coûte environ 250 ms. Le choix n’est pas caché dans le code, c’est un champ dans la configuration de l’agent.
78 modèles dans `LLM_MODELS`, regroupés par fournisseur dans l’interface avec la latence mesurée et le coût par minute — de `gpt-5-nano` à environ 806 ms et environ 0,0004 $/min, jusqu’à `claude-sonnet-4-6` à environ 1,55 s et environ 0,0225 $/min. Un client qui demande « pourquoi répond-il lentement » reçoit une réponse avec des chiffres, pas une opinion.
Le renvoi des appels se configure selon les heures de travail et le fuseau horaire, avec prise en charge du service de nuit et correspondance par priorité (en-tête SIP Diversion → numéro Kallina → règle de secours). Le pont `openai-realtime-bridge` assure la conversion AudioSocket entre g711_ulaw et PCM16 pour le flux audio bidirectionnel.
`<script src="https://app.kallina.info/embed.js" data-widget="WIDGET_ID"></script>`. La page ne sait jamais quel agent répond et ne conserve aucune clé de fournisseur : elle demande à Kallina une session, et Kallina renvoie une URL signée à courte durée de vie. Il existe aussi le mode `data-mode="inline"`, dans lequel l’embed ne dessine strictement rien et la page construit elle-même son interface au-dessus de l’API `start()` / `stop()` / `toggle()` / `on(event, fn)`.
Appels par lots avec 1 à 10 appels simultanés, import de contacts depuis CSV, logique de nouvelle tentative, suivi en temps réel avec pause, reprise et arrêt, plus relance par SMS.
La configuration de l’agent prend en charge 32 langues (`LANGUAGES`), la carte complète des langues de la plateforme comporte 41 entrées, et le panneau d’administration est traduit en 20 (`src/i18n/locales`). Le roumain est la langue par défaut dans `DEFAULT_VALUES`.
Données et fonctionnement
De l'exploration à l'implémentation
Un scénario avec une entrée claire et une sortie claire — appel reçu à la réception, confirmation de commande, campagne d’appels. Nous écrivons explicitement ce que l’agent n’a pas le droit de faire et par quel canal il transmet la conversation à un humain.
Le numéro arrive sur le trunk SIP de notre Asterisk. Les appels entrants et sortants sont testés séparément, car ils peuvent tomber en panne séparément : une restriction de l’opérateur sur les appels sortants laisse les appels entrants fonctionner parfaitement.
`scripts/verify-voice-path.mjs` suit exactement le parcours d’un navigateur — la ligne de la configuration, `get-widget-config`, puis `widget-voice-session` — et s’arrête à l’URL signée, sans ouvrir le websocket. Il s’exécute sur un seul widget ou sur tous ceux ayant la voix active, avec 1 à 3 en parallèle, et renvoie un code de sortie, donc il peut entrer directement dans un cron.
Vous choisissez entre ElevenLabs Conversational AI, OpenAI Realtime et Gemini Live, ou vous laissez « auto » et Kallina décide selon la langue et la disponibilité. Pour la synthèse vocale dans d’autres langues que l’anglais, le modèle par défaut est `eleven_flash_v2_5` — 32 langues, environ 75 ms ; si vous voulez une meilleure qualité et acceptez une latence plus élevée, `eleven_turbo_v2_5` est autour de 250 ms. Les voix OpenAI Realtime sont au nombre de dix, et leur moteur va jusqu’à `gpt-realtime-2.1`.
Une ligne : `<script src="https://app.kallina.info/embed.js" data-widget="WIDGET_ID"></script>`, chargée comme un script ordinaire, pas comme un module. Le fichier est servi aujourd’hui et fait 13.762 octets. Si vous voulez votre interface, `data-mode="inline"` ne dessine rien et vous laisse `start()`, `stop()`, `toggle()` et les événements `state`, `message`, `error`. Attention à l’hôte : le fichier se trouve sur `app.kallina.info`, pas sur `kallina.info` — ce sont deux applications sur deux serveurs différents.
Non. L’ordre dans `embed.js` est : charger le SDK, demander le microphone avec `getUserMedia({audio:true})`, et seulement ensuite appeler `widget-voice-session`. Si la personne refuse le microphone, la demande de session n’est pas faite du tout, donc aucune URL signée n’est émise et rien n’est consommé.
Oui — appels par lots, 1 à 10 simultanément, contacts depuis CSV, nouvelles tentatives et suivi par SMS. Mais les appels sortants dépendent de l’opérateur téléphonique, pas seulement de nous : dans notre registre de problèmes, un cas est documenté où la centrale de l’opérateur a commencé à renvoyer `403 Forbidden` sur toutes les sorties, avec notre configuration inchangée et les appels entrants fonctionnant normalement. C’est pourquoi nous testons les sorties séparément avant de promettre une campagne.
La configuration de l’agent accepte 32 langues, la carte interne des langues compte 41 entrées, et le panneau d’administration est traduit en 20. Le roumain est la langue par défaut des nouveaux agents.
Non, et il est bon de le savoir avant de planifier un lancement. Le workflow GitHub du dépôt cible un projet Supabase Cloud qui a été supprimé, donc « push sur main = publication » n’est plus vrai depuis la migration vers une infrastructure propre. La publication réelle se fait par SSH, avec copie et redémarrage. Conséquence pratique : un changement urgent a besoin d’une personne, pas seulement d’un commit.
Le transfert vers un humain fait partie du scénario, ce n’est pas une exception. Chaque agent a des limites écrites et une voie de transfert configurée sur la téléphonie ; et dans la conversation, il existe des garde-fous et des critères d’évaluation de la réussite, justement pour qu’un cas hors rôle soit arrêté, pas improvisé.
Exemple illustratif
Un scénario d’utilisation, sans données client ni résultats commerciaux attribués.
Quelqu’un appelle le numéro de l’entreprise à 23:40, en dehors des horaires de la réception.
Asterisk applique la règle horaire de nuit (par exemple 22:00 → 06:00) et fait la sélection par priorité : l’en-tête SIP Diversion, puis le numéro Kallina, puis la règle de secours. L’agent de nuit répond via le fournisseur choisi dans la configuration, clarifie la demande et appelle les outils qu’il est autorisé à utiliser.
L’appel reste dans l’historique avec transcription, enregistrement audio, durée et coût détaillé par fournisseur. Ce qui dépasse le rôle de l’agent s’arrête et est transféré plus loin, au lieu d’être improvisé.
Ce qui est nécessaire :Le numéro connecté sur le trunk SIP de notre Asterisk, les appels sortants autorisés par l’opérateur si souhaité et le rappel, plus un agent avec prompt, base de connaissances approuvée et limites écrites.
Possibilités de collaboration
Assistance vocale sur des informations approuvées, avec transfert vers un opérateur et règles claires concernant l’enregistrement et la conservation des conversations.
Nous définissons un pilote autour d’un processus réel : utilisateurs, données, intégrations, coûts et critères d’acceptation. L’extension suit après l’évaluation du résultat.
Nous établissons les exigences d’accessibilité, d’hébergement, de protection des données et d’interopérabilité. Toute connexion avec des services AGE ou STISC nécessite la validation de l’éligibilité, de l’accès et des approbations.
Ce sont des scénarios d’adaptation, non des déclarations sur des contrats ou partenariats existants. Les fonctions proposées sont confirmées dans le périmètre de travail du projet.
Discuter d'un piloteUn assistant connecté aux informations de votre entreprise, dans les canaux où vos clients vous écrivent.
PlateformeGrai est notre direction de recherche pour la synthèse vocale et les modèles adaptés aux langues d'ici.
Recherche & développementMegaforms explore la collecte de réponses par formulaires conversationnels, réponses vocales et transcription comprises.
Développement & démonstrationsRacontez-nous votre processus. Ensemble, nous décidons ce qui vaut la peine d'être construit, ce que nous pouvons connecter et comment nous vérifions le résultat.