Passer au contenu
megapromotingDiscutons
Produits Kallina

Agents vocaux IA Plateforme

Une bonne conversation se poursuit par une action.

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.

ÉcoutezVérifiezAgitVOIX + CONTEXTE + ACTION
Comment fonctionne Kallina

Kallina

De l’information au travail accompli.

01

Écoutez

Elle comprend la demande dans le contexte de la conversation et des règles de l’entreprise.

02

Vérifiez

Consulte la base de connaissances et les intégrations autorisées avant de répondre.

03

Agit

Renseigne les données, exécute l’action autorisée ou transfère la conversation à un humain.

Là où il devient utile.

Réception et support

Questions fréquentes, prise en charge des demandes et retour vers les personnes qui ont demandé à être contactées.

Commandes et livraisons

Confirmations et coordination, avec les informations du système de commandes connecté.

Qualification et prises de rendez-vous

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

Ce que vous pouvez faire avec ce projet.

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.

01

Trois fournisseurs vocaux plus une position « auto »

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.

02

Catalogue de modèles avec latence et coût affichés

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.

03

Téléphonie propre sur Asterisk

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.

04

Embed vocal sur une seule ligne, sans id d’agent sur la page

`<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)`.

05

Campagnes d’appels sortants

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.

06

Langues

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

Ce qui entre dans le système. Ce qu'il faut vérifier.

Où les données se trouvent
PostgreSQL via Supabase, avec Row Level Security et pg_cron ; 559 migrations versionnées. La logique serveur est constituée de fonctions edge Deno — 472 dans le dépôt à la date de la vérification.
Ce qui n’arrive jamais sur la page client
La clé du fournisseur de voix et l’identifiant de l’agent. L’embed envoie `POST /functions/v1/widget-voice-session` avec `widget_id` — la clé publique de `chat_widget_configs.widget_id`, et non l’id interne de la ligne — et le serveur demande lui-même à ElevenLabs une URL signée, via `convai/conversation/get_signed_url`, puis la renvoie. L’ancienne version, qui mettait `agentId` directement dans le HTML, contournait complètement Kallina.
Base de connaissances
Documents chargés dans la plateforme, synchronisés avec le RAG d’ElevenLabs. Des garde-fous de conversation, des schémas de collecte de données et des critères d’évaluation de la réussite de l’appel, définis par agent, s’y ajoutent.
Consommation mesurée avant, pas après
La table `usage_events` conserve la consommation ventilée par fournisseur et par agent. Avant toute action payante, la fonction `check-can-use` vérifie le crédit — la porte est avant l’appel, pas la facture de fin de mois.

De l'exploration à l'implémentation

Comment nous préparons un projet avec Kallina.

01

Nous choisissons un seul trajet et nous lui traçons les limites

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.

02

Nous connectons le numéro et vérifions dans les deux sens

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.

03

Nous vérifions le trajet sans consommer de minutes

`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.

Des questions qui méritent d’être clarifiées.

Quel moteur vocal utilise-t-il, concrètement ?

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`.

Comment le mettre sur un site ?

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.

Des minutes sont-elles consommées si le visiteur refuse le microphone ?

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é.

Peut-il appeler en premier, et pas seulement répondre ?

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.

En combien de langues parle-t-il et en combien se gère-t-il ?

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.

Est-ce publié automatiquement à chaque modification de code ?

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.

Que se passe-t-il si l’agent ne connaît pas la réponse ?

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 appel entrant la nuit, qui arrive là où il faut

Un scénario d’utilisation, sans données client ni résultats commerciaux attribués.

Situation initiale

Quelqu’un appelle le numéro de l’entreprise à 23:40, en dehors des horaires de la réception.

Comment ça fonctionne

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.

Rezultatul

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

Kallina, dans le contexte de votre organisation.

Information et prise en charge des demandes

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.

Entreprises privées

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.

Institutions et entreprises publiques

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 pilote

Faisant partie d’un écosystème.

Qu'est-ce que vous voudriez voir mieux fonctionner ?

Racontez-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.

Discutons