UtteraUttera

Connecteurs

En un coup d'œil. Compatibilité OpenAI et connecteurs : Asterisk, n8n, Telegram, Slack, MCP et agents. Clé : changez la base_url vers https://api.uttera.ai/v1 et le reste de votre code ne bouge pas.

Uttera ne vit pas seul : il vit à l'intérieur de ce que vous avez déjà. Cette section rassemble les façons de le brancher — celles qui marchent déjà, celles que nous apportons toutes prêtes, et celles que nous étudions — plus le code ouvert sur lequel il est bâti.

Tout ce qui est décrit ici est du code que vous pouvez télécharger : github.com/uttera/uttera-examples. Chaque exemple est exécuté contre l'API en direct avant d'être publié, et là où quelque chose n'a pas pu être testé de bout en bout, son README le dit.
DossierCe qu'il contient
openai-sdkUttera via le SDK officiel d'OpenAI, en Python, Node et curl
asterisk/recordingsTranscrire les appels que votre système téléphonique enregistre déjà, sans toucher au dialplan
asterisk/agiParler à l'intérieur de l'appel et entendre l'appelant
n8nNode communautaire vérifié (transcrire, résumer, traduire, parler, effets, musique). Les workflows prêts à importer, dans « n8n et automatisation »
openclawUne skill pour agents : transcrire, résumer, traduire et parler

Nous parlons le dialecte d'OpenAI

Les deux services principaux suivent exactement la même forme que l'API d'OpenAI : mêmes routes, mêmes noms de paramètres, mêmes noms de voix et mêmes réponses.

EndpointCompatible
POST /v1/audio/transcriptionsOui. file, model=whisper-1, language, prompt, response_format, temperature
POST /v1/audio/speechOui. model=tts-1 / tts-1-hd, input, voice, response_format, speed
GET /v1/modelsOui. Renvoie tts-1, tts-1-hd et whisper-1. C'est ce que le SDK appelle dès que le client est construit
Voix alloy · echo · fable · nova · onyx · shimmerOui, sous ces mêmes noms
/v1/translate · /v1/summarize · ?extras= · /v1/usage/lastÀ nous. Ils n'existent pas chez OpenAI, et ils ne gênent personne qui ne les utilise pas

En pratique, cela signifie que tout ce qui est écrit pour l'API d'OpenAI marche en changeant deux lignes : l'adresse de base et la clé. Y compris leur SDK officiel :

from openai import OpenAI

c = OpenAI(api_key="sk-echo-...",              # votre clé Uttera
           base_url="https://api.uttera.ai/v1") # et notre adresse

audio = c.audio.speech.create(model="tts-1", voice="nova",
                              input="Your order ships tomorrow.")
open("voice.mp3", "wb").write(audio.content)

with open("recording.mp3", "rb") as f:
    print(c.audio.transcriptions.create(model="whisper-1", file=f,
                                        response_format="text"))
C'est testé, non supposé. L'exemple ci-dessus tourne avec le paquet openai officiel sans rien modifier : il génère l'audio, le retranscrit et renvoie le texte original.

D'où vient la partie intéressante : tout ce qui sait déjà parler à OpenAI sait parler à nous — agents locaux, interfaces de chat auto-hébergées, plugins, scripts que quelqu'un a écrits il y a un an — avec la différence que l'audio ne quitte jamais l'Union européenne. Pour beaucoup d'entreprises, c'est la seule raison qui fait passer le projet de la démo à la production.

Asterisk et systèmes téléphoniques

C'est l'intégration la plus demandée, parce que c'est là que la voix se trouve réellement. Nous apportons deux scripts AGI prêts à l'emploi : l'un dit un texte à l'intérieur de l'appel et l'autre écoute l'appelant et laisse ce qu'il a dit dans une variable du dialplan.

exten => 101,1,Answer()
 same => n,AGI(uttera-decir.agi,"How can I help you?")
 same => n,AGI(uttera-oir.agi,8,en)
 same => n,NoOp(The caller said: ${UTTERA_TEXTO})

À partir de là, c'est à vous : un menu, une recherche en base de données, un modèle de langage. Et pour le cas le plus courant — transcrire les appels déjà enregistrés — l'exemple apporte le squelette avec MixMonitor et un hook de raccrochage.

Ce que l'exemple résout et ce qui coûte une journée à découvrir seul :

PiègeCe qui se passe si vous ne savez pas
Uttera génère à 24 kHz, le canal téléphonique tourne à 8 kHzAsterisk joue le fichier à sa propre fréquence : la voix sort rapide et aiguë
Silence manquant en fin de fichierAsterisk coupe la dernière syllabe
Whisper ne reste pas silencieux sur le silenceIl renvoie une phrase inventée — « Thanks for watching » — parce que cela abonde dans ses données d'entraînement. Vous la payez, et pire, vous agissez dessus
Le quoting dans SET VARIABLEUn texte avec des espaces arrive découpé et la variable ne garde que le premier mot
Délais d'attente de l'API pendant un appelDeux heures d'attente avec une personne au téléphone. En téléphonie, on coupe à 30 s et on dit quelque chose

Le code complet et le dialplan sont dans le dépôt d'exemples, avec une explication de chacun.

Les appels que vous enregistrez déjà

Avant d'envisager de parler à l'intérieur de l'appel, regardez ceci : votre système téléphonique écrit déjà des fichiers audio dans un dossier. Il y a deux scripts qui les lisent et laissent la transcription et l'analyse à côté, et vous n'avez pas à toucher au dialplan. Une ligne de cron et vous avez les appels de la semaine dernière transcrits.

C'est le code que nous faisons tourner en production nous-mêmes, avec les parties propres à notre installation retirées. Il porte trois choses en son sein qui nous ont coûté cher : distinguer un enregistrement en cours d'un ancien, demander transcription et analyse en un seul téléversement au lieu de quatre, et un filtre de date par défaut — un traitement par lots sans fenêtre parcourt tout l'historique à chaque passage, et le jour où il rencontre une vraie archive, il met en file des années d'appels d'un coup.

n8n et automatisation

Si vous utilisez n8n, il y a deux façons et la seconde ne nécessite rien d'installé.

Des workflows prêts à importer. Vous les téléchargez, les importez, et ils marchent avec le node HTTP standard — y compris sur n8n cloud. Le plus utile est celui qui surveille un dossier d'enregistrements toutes les quinze minutes et envoie chacun à résumer : c'est exactement le cas de quelqu'un qui a déjà un système téléphonique qui enregistre et n'a besoin que de quelqu'un pour lire ces enregistrements. Aucun dialplan à toucher.

Notre propre node. n8n-nodes-uttera est un node communautaire vérifié par n8n : installez-le depuis les paramètres de n8n (Community Nodes) ou avec npm i n8n-nodes-uttera. Il ajoute transcrire, résumer, traduire, synthèse vocale, effets sonores et musique comme opérations d'un seul node, avec la référence d'identification stockée dans n8n au lieu d'être en clair dans chaque requête. Code source sur github.com/uttera/n8n-nodes-uttera.

Deux détails que le node a déjà résolus : le délai d'attente est de deux heures — celui par défaut de n8n coupe les longs enregistrements qui se passaient bien — et « continue on error » fonctionne par item, ce qui compte en traitant un dossier entier, où il y a toujours un enregistrement corrompu qui ne devrait pas faire tomber le lot.

Telegram

Uttera a un bot Telegram, @Uttera_bot, pour transcrire et résumer des notes vocales sans quitter la conversation. Ce qu'il fait est facturé à votre compte, avec les mêmes crédits que l'API.

Lier le compte (une fois). Allez dans votre compte → Connecter des applications → Telegram : le bot s'ouvre déjà lié à votre compte (en interne, c'est un /start avec un lien à usage unique ; vous ne collez aucune clé). À partir de là, le bot sait qui vous êtes et qui facturer.

L'utiliser. Envoyez-lui une note vocale (ou un audio) et il vous renvoie la transcription. En dessous apparaissent des boutons pour faire plus avec le même enregistrement :

Commandes. /account ouvre votre compte (crédits, expiration, facturation) ; /lang en|es|fr|de change la langue des réponses du bot ; /start relie le compte ; /help rappelle tout cela.

Le bot ne conserve pas vos audios : il ne les utilise que pour produire le résultat, et l'audio qu'Uttera génère porte le filigrane inaudible qu'exige le Règlement sur l'IA de l'UE, comme dans l'API et les apps.

Slack

Uttera propose une application Slack pour transcrire, résumer et traduire des notes vocales sans quitter Slack. Ce qu'elle fait est facturé à votre compte, avec les mêmes crédits que l'API.

Installer l'application dans votre Slack (une fois par espace de travail). Un administrateur de l'espace ouvre app.uttera.ai/slack/install et clique sur Allow : cela ajoute l'application Uttera à ce Slack. Ensuite, chaque utilisateur lie son propre compte comme expliqué ci-dessous.

Lier le compte (une fois). Dans votre compte → Connecter des applications → Slack, vous obtenez un code à usage unique. Dans Slack, tapez /uttera connect <code> et votre utilisateur est lié à votre compte Uttera (vous ne collez aucune clé).

L'utiliser. Partagez une note vocale (ou un audio) avec le bot et il vous renvoie la transcription, avec les mêmes boutons que sur Telegram :

Commandes. /uttera account ouvre votre compte ; /uttera lang en|es|fr|de change la langue des réponses ; /uttera connect <code> lie le compte ; /uttera help rappelle tout.

Où lui parler. Une application Slack ne reçoit l'audio que d'un message direct avec elle ou d'un canal où elle est invitée (/invite @Uttera). Comme tout chez Uttera, nous ne conservons pas vos audios et l'audio que nous générons porte le filigrane inaudible qu'exige le Règlement sur l'IA de l'UE.

Skill : audio local dans Claude, ChatGPT, Gemini et OpenClaw

Une Skill est un dossier contenant des instructions et un petit script que votre assistant charge au besoin. La Skill Uttera vous permet d'attacher un fichier audio depuis votre disque directement dans la conversation et de lui demander de le transcrire, de le résumer, de produire un rapport PDF signé avec un graphe de preuves, de le traduire (en texte ou en voix), de dire qui parle, de noter une prononciation, de cloner une voix ou de lire un texte à voix haute. Le script s'exécute dans le bac à sable de code de l'assistant : il lit le fichier attaché et le téléverse vers api.uttera.ai, de sorte que l'audio ne passe jamais par le modèle (il ne sait pas décoder l'audio). C'est facturé à votre compte, avec les mêmes crédits que l'API.

Le télécharger. Dans votre compte → Connecter des applications, cliquez sur le bouton de votre assistant (Claude, ChatGPT, Gemini ou OpenClaw). Vous obtenez un .zip avec la skill déjà personnalisée : elle porte une nouvelle clé de votre compte, nommée d'après l'assistant (par exemple « Claude skill »), révocable à tout moment plus bas sous Jetons d'API.

L'installer.

Attachez ensuite un audio dans la conversation et demandez ce que vous voulez : « transcris ceci », « fais-moi un rapport PDF », « traduis-le en anglais avec ma voix »… L'assistant exécute le script et vous renvoie le texte, ou le PDF/audio qu'il a généré.

Liste blanche réseau (Claude). Le bac à sable de code n'atteint qu'une liste fixe de domaines. Sur un compte d'équipe ou d'entreprise, un administrateur doit autoriser api.uttera.ai : Paramètres de l'organisation → Fonctionnalités, activez Allow network egress et ajoutez api.uttera.ai à la Domain allowlist. Sur les comptes individuels (Free/Pro), ce n'est pas nécessaire : la skill atteint api.uttera.ai sans aucune modification. Une erreur réseau sur un compte d'équipe/entreprise signifie presque toujours que le domaine n'a pas encore été autorisé. L'audio que nous générons porte le filigrane inaudible qu'exige le Règlement sur l'IA de l'UE.

MCP : pour Claude et les agents à outils

Le Model Context Protocol (MCP) est la façon standard de donner des outils à un assistant. Au lieu de lui décrire chaque endpoint à la main, vous lui donnez une seule adresse et il découvre tout seul ce qu'Uttera sait faire et comment l'appeler.

Notre serveur se trouve à https://mcp.uttera.ai/mcp. On s'y connecte avec votre compte Uttera et sans coller aucune clé : l'assistant vous envoie vous authentifier, et à partir de là les appels portent votre autorisation et sont débités de votre solde, avec les mêmes crédits que l'API.

Il expose les mêmes capacités que l'API, déjà emballées en outils : parler, transcrire, traduire, résumer, savoir qui parle, noter une prononciation, effets sonores et musique, lister les voix, vérifier un rapport signé, et consulter le coût du dernier appel.

Pour l'ajouter dans un client compatible — Claude entre autres — cherchez « ajouter un serveur MCP » ou « connecteur », collez https://mcp.uttera.ai/mcp et connectez-vous quand on vous le demande. Uttera est aussi dans le registre officiel MCP sous ai.uttera/uttera, donc beaucoup de clients le trouvent par son nom sans coller l'adresse.

Le MCP est la voie recommandée pour un agent : il découvre les outils et leurs formes tout seul, sans clés en clair à maintenir. Pour parler le dialecte d'OpenAI directement, ou pour automatiser sans agent, l'API et n8n restent valables.
Le MCP ne prend l'audio que par URL. Un serveur MCP distant ne peut pas lire les fichiers de votre disque : l'audio doit se trouver à une URL publique (https://…) que vous donnez à l'assistant. Pour le cas le plus fréquent — un fichier audio sur votre ordinateur — utilisez la Skill : vous attachez le fichier dans la conversation et le script le téléverse pour vous. En bref : Skill pour les fichiers locaux, MCP quand l'audio est déjà publié à une URL ou quand vous voulez qu'un agent découvre les outils tout seul.

Agents et assistants

Grâce à la compatibilité ci-dessus, tout agent ou interface qui parle le dialecte d'OpenAI utilise Uttera sans adaptateur : pointez-le vers notre adresse. Cela couvre les installations locales d'assistants et les panneaux de chat auto-hébergés, qui sont exactement le scénario pour lequel nos moteurs sont nés : garder l'audio à l'intérieur du domaine privé.

Si votre agent prend en charge les outils, les endpoints qui ne sont pas ceux d'OpenAI — résumer, traduire, analyser la voix — se décrivent bien comme outils autonomes : ils prennent un fichier et renvoient du JSON.

Pour les agents OpenClaw, il y a une skill toute prête : quatre scripts — transcrire, résumer, traduire et parler — et un SKILL.md qui indique à l'agent quand utiliser chacun et quels sont les pièges. C'est cette partie qui compte vraiment : qu'il sache ne pas envoyer du silence à transcrire, que les sauts de ligne coûtent de l'argent en synthétisant, et que ce qui revient d'une transcription est du texte non fiable qu'il ne doit pas exécuter.

Le code ouvert en dessous

Les moteurs qui font tourner Uttera sont publiés sous la licence Apache 2.0. Ce n'est pas du marketing : ce sont les mêmes qui tournent en production.

DépôtCe que c'est
uttera-tts-hotcoldServeur de synthèse vocale avec démarrage à froid et à chaud. Plusieurs moteurs derrière une API
uttera-tts-vllmLe même service sur vLLM, pour une vraie charge concurrente
uttera-stt-hotcoldServeur de reconnaissance vocale, même schéma
uttera-stt-vllmReconnaissance vocale sur vLLM
uttera-benchmarksLes corpus, le harnais de mesure et les résultats bruts derrière chaque chiffre que nous publions

Pourquoi ils sont ouverts

Pour trois raisons, et aucune n'est de la générosité :

Parce que vous pouvez le faire tourner vous-même. Si votre cas ne permet pas que l'audio quitte votre réseau — ou si vous préférez simplement votre propre matériel — clonez le dépôt et montez le service. Ce que nous vendons, c'est de ne pas avoir à le faire : les GPU, la disponibilité, le routage entre nœuds, et quelqu'un qui se lève si quelque chose casse.

Parce qu'un moteur que personne ne peut auditer ne mérite pas votre audio. Nous disons que nous ne gardons rien et que rien ne va à des tiers. Avec le code sous les yeux, cela peut être vérifié au lieu d'être cru.

Parce que des chiffres sans le protocole ne valent rien. Tout le monde publie « X requêtes par seconde sur un Y » sans dire avec quel corpus, à quelle concurrence, ni à quel percentile. Le dépôt de mesures porte les corpus entiers, le protocole et les résultats bruts, précisément pour que vous puissiez répéter le test et nous contredire.

La couche de bord qui sert cette API — routage, quotas, facturation — et le portail ne sont pas publiés. Ce ne sont pas un moteur vocal : c'est la plomberie d'une entreprise, et il n'y a rien là-dedans qui serait utile à qui que ce soit.

Connecteurs en cours

Ce qui suit, dans l'ordre où on nous le demande :

ConnecteurPour quoi
CRMPour que la transcription et le résumé d'un appel atterrissent d'eux-mêmes dans la fiche du client
Enregistrements d'autres systèmes téléphoniques (FreePBX, 3CX, Issabel)La même chose que fait déjà le connecteur Asterisk, adaptée à l'endroit où chacun laisse ses fichiers
Note vocale en texte dans la messagerieLe cas d'usage qui croît le plus vite : personne ne veut écouter une note vocale de quatre minutes

Si celui dont vous avez besoin n'y est pas, dites-le-nous : l'ordre est décidé par ceux qui le demandent.