Ascultă
Il comprend la demande dans le contexte de la conversation et des règles de l'entreprise.
Agenți vocali AI Platformă
Nous construisons des agents qui prennent et passent 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 le transfert à un collègue.
Kallina
Il comprend la demande dans le contexte de la conversation et des règles de l'entreprise.
Il consulte la base de connaissances et les intégrations autorisées avant de répondre.
Il complète les données, exécute l'action permise ou transfère la conversation à un humain.
Questions fréquentes, prise en charge des demandes et rappel des personnes qui ont demandé à être contactées.
Confirmations et coordination, avec les informations du système de commandes connecté.
Il rassemble les détails nécessaires. L'accès à l'agenda et la réservation se règlent pour chaque intégration.
Les scénarios, le numéro de téléphone, les langues et les actions se configurent pour chaque mise en œuvre. L'équipe garde la possibilité de reprendre la conversation.
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 jeu d'outils qu'il peut appeler et une limite au-delà de laquelle il passe 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 rattaché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 selon la langue, la charge et la disponibilité. Par-dessus, vous choisissez séparément le cerveau textuel — le catalogue dans le code a 78 entrées d'OpenAI, Google, Anthropic, xAI et ElevenLabs, chacune avec sa latence et son coût par minute affichés dans l'interface, pour que le choix soit informé et non de seconde main.
La téléphonie est la nôtre, pas louée au fournisseur de voix. Les appels passent par un Asterisk à nous, avec routage sur les heures d'ouverture et le fuseau horaire, horaire de nuit (par exemple 22:00 → 06:00) et correspondance par priorité : l'en-tête SIP Diversion, puis le numéro Kallina, puis la règle de repli. 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 de la configuration de l'agent.
78 modèles dans `LLM_MODELS`, groupé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 quelque 0,0004 $/min, jusqu'à `claude-sonnet-4-6` à environ 1,55 s et quelque 0,0225 $/min. Un client qui demande « pourquoi il répond lentement » reçoit une réponse avec des chiffres, pas un avis.
Le renvoi des appels se configure sur les heures de travail et le fuseau horaire, avec prise en charge de l'horaire de nuit et correspondance par priorité (en-tête SIP Diversion → numéro Kallina → règle de repli). Le pont `openai-realtime-bridge` fait 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 n'apprend jamais quel agent répond et ne détient aucune clé de fournisseur : elle demande une session à Kallina, et Kallina renvoie une URL signée de courte durée. Il existe aussi le mode `data-mode="inline"`, où l'embed ne dessine absolument rien et où la page fait elle-même son interface par-dessus l'API `start()` / `stop()` / `toggle()` / `on(event, fn)`.
Appel par lots avec 1–10 appels simultanés, import de contacts depuis un CSV, logique de relance, suivi en temps réel avec pause, reprise et arrêt, plus relance par SMS.
La configuration de l'agent accepte 32 langues (`LANGUAGES`), la carte complète des langues de la plateforme a 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 à la mise en œuvre
Un scénario à entrée claire et sortie claire — appel reçu à l'accueil, confirmation de commande, campagne d'appels. Nous écrivons explicitement ce que l'agent n'a pas le droit de faire et par quel chemin il passe la discussion à un humain.
Le numéro entre sur le trunk SIP de notre Asterisk. Les appels entrants et les appels sortants se testent séparément, parce qu'ils peuvent casser séparément : une restriction de l'opérateur sur les appels sortants laisse les entrants fonctionner parfaitement.
`scripts/verify-voice-path.mjs` parcourt exactement le chemin d'un navigateur — la ligne de configuration, `get-widget-config`, puis `widget-voice-session` — et s'arrête à l'URL signée, sans ouvrir le websocket. Il tourne sur un seul widget ou sur tous ceux qui ont 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, la valeur par défaut est le modèle `eleven_flash_v2_5` — 32 langues, autour de 75 ms ; si vous voulez une qualité supérieure et acceptez plus de latence, `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 propre 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 est 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 micro avec `getUserMedia({audio:true})`, et seulement ensuite appeler `widget-voice-session`. Si la personne refuse le micro, la demande de session n'est plus faite du tout, donc aucune URL signée n'est émise et rien n'est consommé.
Oui — appel par lots, 1–10 simultanés, contacts depuis un CSV, relances et suivi par SMS. Mais les appels sortants dépendent de l'opérateur téléphonique, pas seulement de nous : dans notre registre d'incidents est documenté un cas où le central de l'opérateur s'est mis à renvoyer `403 Forbidden` sur toutes les sorties, notre configuration étant inchangée et les appels entrants fonctionnant normalement. C'est pour cela que 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 a 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 vaut mieux le savoir avant de planifier un lancement. Le workflow GitHub du dépôt vise un projet Supabase Cloud qui a été supprimé, donc « push sur main = publication » n'est plus vrai depuis la migration sur infrastructure à nous. 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 passage à un humain fait partie du scénario, ce n'est pas une exception. Chaque agent a des limites écrites et un chemin de transfert configuré sur la téléphonie ; et dans la conversation il y a des garde-fous et des critères d'évaluation de la réussite, précisément pour qu'un cas hors rôle soit arrêté et non improvisé.
Exemple illustratif
Un scénario d'usage, sans données de client ni résultats commerciaux attribués.
Quelqu'un appelle le numéro de l'entreprise à 23:40, en dehors des heures de l'accueil.
Asterisk applique la règle d'horaire de nuit (par exemple 22:00 → 06:00) et fait la correspondance par priorité : l'en-tête SIP Diversion, puis le numéro Kallina, puis la règle de repli. L'agent de nuit répond sur le fournisseur choisi dans la configuration, clarifie la demande et appelle les outils qu'il a le droit d'utiliser.
L'appel reste dans l'historique avec transcript, enregistrement audio, durée et coût ventilé par fournisseur. Ce qui dépasse le rôle de l'agent est arrêté et transféré plus loin, au lieu d'être improvisé.
Ce este necesar:Numărul conectat pe trunkul SIP al Asterisk-ului nostru, apelurile ieșite permise de operator dacă se dorește și sunat înapoi, plus un agent cu prompt, bază de cunoștințe aprobată și limite scrise.
Possibilités de collaboration
Assistance vocale sur des informations approuvées, avec passage à un opérateur et des 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 de recette. L'extension vient après l'évaluation du résultat.
Nous fixons les exigences d'accessibilité, d'hébergement, de protection des données et d'interopérabilité. Toute connexion avec les services de l'Agence moldave de la gouvernance électronique (AGE) ou du service national des technologies de l'information (STISC) exige la validation de l'éligibilité, de l'accès et des approbations.
Ce sont des scénarios d'adaptation, pas des déclarations sur des contrats ou des partenariats existants. Les fonctions proposées se confirment dans le périmètre de travail du projet.
Discută un pilotUn asistent conectat la informațiile afacerii tale, în canalele în care îți scriu clienții.
PlatformăGrai este direcția noastră de cercetare pentru sinteză vocală și modele adaptate limbilor folosite aici.
Cercetare & dezvoltareMegaforms explorează colectarea de răspunsuri prin formulare conversaționale, inclusiv răspunsuri vocale și transcriere.
Dezvoltare & demonstrațiiRacontez-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.