Connecteurs
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.
| Dossier | Ce qu'il contient |
|---|---|
| openai-sdk | Uttera via le SDK officiel d'OpenAI, en Python, Node et curl |
| asterisk/recordings | Transcrire les appels que votre système téléphonique enregistre déjà, sans toucher au dialplan |
| asterisk/agi | Parler à l'intérieur de l'appel et entendre l'appelant |
| n8n | Node communautaire vérifié (transcrire, résumer, traduire, parler, effets, musique). Les workflows prêts à importer, dans « n8n et automatisation » |
| openclaw | Une 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.
| Endpoint | Compatible |
|---|---|
POST /v1/audio/transcriptions | Oui. file, model=whisper-1, language, prompt, response_format, temperature |
POST /v1/audio/speech | Oui. model=tts-1 / tts-1-hd, input, voice, response_format, speed |
GET /v1/models | Oui. 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 · shimmer | Oui, 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"))
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ège | Ce qui se passe si vous ne savez pas |
|---|---|
| Uttera génère à 24 kHz, le canal téléphonique tourne à 8 kHz | Asterisk joue le fichier à sa propre fréquence : la voix sort rapide et aiguë |
| Silence manquant en fin de fichier | Asterisk coupe la dernière syllabe |
| Whisper ne reste pas silencieux sur le silence | Il 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 VARIABLE | Un 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 appel | Deux 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.
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 :
- 📝 Résumer — un résumé bref de l'audio.
- 📄 Rapport PDF — le résumé en document PDF, que le bot vous envoie en fichier.
- 🔗 PDF avec graphe — le PDF avec le graphe de preuves (rapport vérifiable ; nécessite un forfait Professional ou supérieur).
- 🌍 Traduire — traduit l'audio dans une autre langue : vous choisissez d'abord la sortie — texte, voix (lecture) ou voix clonée (avec la voix du locuteur d'origine ; nécessite un forfait payant) — puis la langue. Chaque sortie ne propose que les langues qu'elle prend en charge (le texte bien plus que la voix).
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.
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 :
- 📝 Résumer — un résumé bref.
- 📄 Rapport PDF — le résumé en PDF, que le bot téléverse dans le canal.
- 🔗 PDF avec graphe — le PDF avec le graphe de preuves (nécessite un forfait Professional ou supérieur).
- 🌍 Traduire — dans une autre langue : vous choisissez d'abord la sortie (texte, voix ou voix clonée ; la voix clonée nécessite un forfait payant) puis une langue disponible pour cette sortie.
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.
/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.
- Claude (Desktop ou web, forfaits avec skills) : Réglages → Fonctionnalités →
Skills et téléversez le
.zip. - ChatGPT (forfaits Business/Enterprise avec skills) : ajoutez-la comme skill depuis les réglages de votre espace de travail.
- Gemini : ajoutez-la comme skill dans les réglages.
- OpenClaw : décompressez le
.zipdans votre dossier de skills.
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é.
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.
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ôt | Ce que c'est |
|---|---|
| uttera-tts-hotcold | Serveur de synthèse vocale avec démarrage à froid et à chaud. Plusieurs moteurs derrière une API |
| uttera-tts-vllm | Le même service sur vLLM, pour une vraie charge concurrente |
| uttera-stt-hotcold | Serveur de reconnaissance vocale, même schéma |
| uttera-stt-vllm | Reconnaissance vocale sur vLLM |
| uttera-benchmarks | Les 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.
Connecteurs en cours
Ce qui suit, dans l'ordre où on nous le demande :
| Connecteur | Pour quoi |
|---|---|
| CRM | Pour 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 messagerie | Le 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.