UtteraUttera

Konnektoren

Uttera lebt nicht allein: Es lebt in dem, was Sie bereits haben. Dieser Abschnitt sammelt die Wege, es anzubinden — die, die bereits funktionieren, die, die wir fertig mitbringen, und die, die wir uns ansehen — plus die Open Source, auf der es aufgebaut ist.

Alles hier Beschriebene ist Code, den Sie herunterladen können: github.com/uttera/uttera-examples. Jedes Beispiel wird gegen die Live-API ausgeführt, bevor es veröffentlicht wird, und wo sich etwas nicht durchgängig testen ließ, sagt es sein README.
OrdnerWas darin ist
openai-sdkUttera über das offizielle OpenAI-SDK, in Python, Node und curl
asterisk/recordingsDie Anrufe transkribieren, die Ihr Telefonsystem bereits aufzeichnet, ohne den Dialplan anzufassen
asterisk/agiInnerhalb des Anrufs sprechen und den Anrufer hören
n8nVerifizierter Community-Node (transkribieren, zusammenfassen, übersetzen, sprechen, Effekte, Musik). Importfertige Workflows unter “n8n und Automatisierung”
openclawEine Skill für Agenten: transkribieren, zusammenfassen, übersetzen und sprechen

Wir sprechen den Dialekt von OpenAI

Die beiden Hauptdienste folgen genau derselben Form wie die OpenAI-API: dieselben Routen, dieselben Parameternamen, dieselben Stimmennamen und dieselben Antworten.

EndpunktKompatibel
POST /v1/audio/transcriptionsJa. file, model=whisper-1, language, prompt, response_format, temperature
POST /v1/audio/speechJa. model=tts-1 / tts-1-hd, input, voice, response_format, speed
GET /v1/modelsJa. Gibt tts-1, tts-1-hd und whisper-1 zurück. Es ist das, was das SDK aufruft, sobald der Client konstruiert ist
Stimmen alloy · echo · fable · nova · onyx · shimmerJa, unter genau diesen Namen
/v1/translate · /v1/summarize · ?extras= · /v1/usage/lastUnsere. Sie existieren bei OpenAI nicht und stehen niemandem im Weg, der sie nicht nutzt

In der Praxis bedeutet das, dass alles, was für die OpenAI-API geschrieben wurde, mit dem Ändern von zwei Zeilen funktioniert: der Basisadresse und dem Schlüssel. Einschließlich ihres offiziellen SDK:

from openai import OpenAI

c = OpenAI(api_key="sk-echo-...",              # your Uttera key
           base_url="https://api.uttera.ai/v1") # and our address

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"))
Das ist getestet, nicht angenommen. Das obige Beispiel läuft mit dem offiziellen openai-Paket, ohne irgendetwas zu patchen: Es erzeugt das Audio, transkribiert es zurück und gibt den ursprünglichen Text zurück.

Daher kommt der interessante Teil: Alles, was bereits mit OpenAI zu sprechen weiß, weiß mit uns zu sprechen — lokale Agenten, selbst gehostete Chat-Oberflächen, Plugins, Skripte, die jemand vor einem Jahr geschrieben hat — mit dem Unterschied, dass das Audio die Europäische Union nie verlässt. Für viele Unternehmen ist das der einzige Grund, warum das Projekt von der Demo in die Produktion geht.

Asterisk und Telefonsysteme

Es ist die am häufigsten gewünschte Integration, weil dort die Stimme tatsächlich ist. Wir bringen zwei einsatzfertige AGI-Skripte mit: eines sagt einen Text innerhalb des Anrufs, und das andere hört dem Anrufer zu und legt das Gesagte in eine Dialplan-Variable.

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})

Von da an liegt es bei Ihnen: ein Menü, eine Datenbankabfrage, ein Sprachmodell. Und für den häufigsten Fall — das Transkribieren von Anrufen, die bereits aufgezeichnet sind — bringt das Beispiel das Gerüst mit MixMonitor und einem Hangup-Hook.

Was das Beispiel löst und was einen Tag kostet, selbst herauszufinden:

FalleWas passiert, wenn Sie es nicht wissen
Uttera erzeugt mit 24 kHz, der Telefonkanal läuft mit 8 kHzAsterisk spielt die Datei mit seiner eigenen Rate ab: Die Stimme kommt schnell und hoch heraus
Fehlende Stille am Ende der DateiAsterisk schneidet die letzte Silbe ab
Whisper bleibt bei Stille nicht stillEs gibt einen erfundenen Satz zurück — “Thanks for watching” — weil das in seinen Trainingsdaten reichlich vorkommt. Sie zahlen dafür, und schlimmer, Sie handeln danach
Das Quoting in SET VARIABLEText mit Leerzeichen kommt zerteilt an, und die Variable behält nur das erste Wort
API-Timeouts während eines AnrufsZwei Stunden Warten mit einer Person am Telefon. In der Telefonie schneiden Sie bei 30 s ab und sagen etwas

Der vollständige Code und Dialplan sind im Beispiel-Repository, mit einer Erklärung zu jedem.

Die Anrufe, die Sie bereits aufzeichnen

Bevor Sie erwägen, innerhalb des Anrufs zu sprechen, schauen Sie sich das an: Ihr Telefonsystem schreibt bereits Audiodateien in irgendeinen Ordner. Es gibt zwei Skripte, die sie lesen und das Transkript und die Analyse daneben ablegen, und Sie müssen den Dialplan nicht anfassen. Eine cron-Zeile, und Sie haben die Anrufe der letzten Woche transkribiert.

Es ist der Code, den wir selbst in Produktion betreiben, mit den für unsere Installation spezifischen Teilen entfernt. Er trägt drei Dinge in sich, die uns teuer zu stehen kamen: eine laufende Aufnahme von einer alten zu unterscheiden, Transkription und Analyse in einem einzigen Upload statt in vier anzufordern, und einen Datumsfilter standardmäßig — ein Batch-Prozess ohne Fenster durchläuft bei jedem Durchgang die gesamte Historie, und an dem Tag, an dem er auf ein echtes Archiv trifft, stellt er Jahre von Anrufen auf einmal in die Warteschlange.

n8n und Automatisierung

Wenn Sie n8n verwenden, gibt es zwei Wege, und der zweite braucht nichts installiert.

Importfertige Workflows. Sie laden sie herunter, importieren sie, und sie funktionieren mit dem Standard-HTTP-Node — auch auf n8n cloud. Der nützlichste ist der, der alle fünfzehn Minuten einen Ordner mit Aufnahmen überwacht und jede zum Zusammenfassen sendet: Es ist genau der Fall von jemandem, der bereits ein aufzeichnendes Telefonsystem hat und nur jemanden braucht, der diese Aufnahmen liest. Kein Dialplan anzufassen.

Unser eigener Node. n8n-nodes-uttera ist ein von n8n verifizierter Community-Node: Installieren Sie ihn aus den Einstellungen von n8n (Community Nodes) oder mit npm i n8n-nodes-uttera. Er fügt Transkribieren, Zusammenfassen, Übersetzen, Text-zu-Sprache, Klangeffekte und Musik als Operationen eines einzigen Nodes hinzu, mit den Zugangsdaten in n8n gespeichert statt lose in jeder Anfrage. Quellcode unter github.com/uttera/n8n-nodes-uttera.

Zwei Details, die der Node bereits gelöst hat: Das Timeout beträgt zwei Stunden — der Standardwert von n8n bricht lange Aufnahmen ab, die einwandfrei liefen — und “continue on error” funktioniert pro Element, was zählt, wenn man einen ganzen Ordner verarbeitet, wo es immer eine beschädigte Aufnahme gibt, die den Batch nicht zu Fall bringen sollte.

MCP: für Claude und Agenten mit Werkzeugen

Das Model Context Protocol (MCP) ist der Standardweg, einem Assistenten Werkzeuge zu geben. Statt jeden Endpunkt von Hand zu beschreiben, geben Sie ihm eine Adresse, und er entdeckt selbst, was Uttera kann und wie man es aufruft.

Unser Server liegt unter https://mcp.uttera.ai/mcp. Sie melden sich mit Ihrem Uttera-Konto an und fügen keinen Schlüssel ein: Der Assistent schickt Sie zur Anmeldung, und von da an tragen die Aufrufe Ihre Autorisierung und werden von Ihrem Guthaben abgebucht, mit denselben Credits wie die API.

Er stellt dieselben Fähigkeiten wie die API bereit, bereits als Werkzeuge verpackt: sprechen, transkribieren, übersetzen, zusammenfassen, sagen, wer spricht, eine Aussprache bewerten, Klangeffekte und Musik, die Stimmen auflisten, einen signierten Bericht verifizieren und prüfen, was der letzte Aufruf gekostet hat.

Um ihn in einem kompatiblen Client hinzuzufügen — Claude unter anderem — suchen Sie nach “MCP-Server hinzufügen” oder “Konnektor”, fügen Sie https://mcp.uttera.ai/mcp ein und melden Sie sich an, wenn Sie gefragt werden. Uttera ist auch im offiziellen MCP-Registry als ai.uttera/uttera, sodass viele Clients es über den Namen finden, ohne die Adresse einzufügen.

MCP ist der empfohlene Weg für einen Agenten: Er entdeckt die Werkzeuge und ihre Formen selbst, ohne Klartext-Schlüssel zu pflegen. Um den Dialekt von OpenAI direkt zu sprechen oder ohne Agenten zu automatisieren, gelten weiterhin die API und n8n.

Agenten und Assistenten

Dank der obigen Kompatibilität nutzt jeder Agent oder jede Oberfläche, die den Dialekt von OpenAI spricht, Uttera ohne Adapter: Richten Sie sie auf unsere Adresse. Das deckt lokale Installationen von Assistenten und selbst gehostete Chat-Panels ab, was genau das Szenario ist, für das unsere Engines geboren wurden: das Audio im privaten Bereich zu halten.

Wenn Ihr Agent Werkzeuge unterstützt, lassen sich die Endpunkte, die nicht von OpenAI sind — zusammenfassen, übersetzen, die Stimme analysieren — gut als eigenständige Werkzeuge beschreiben: Sie nehmen eine Datei und geben JSON zurück.

Für OpenClaw-Agenten gibt es eine fertige Skill: vier Skripte — transkribieren, zusammenfassen, übersetzen und sprechen — und eine SKILL.md, die dem Agenten sagt, wann er jedes verwenden soll und was die Fallen sind. Dieser Teil ist es, worauf es wirklich ankommt: dass er weiß, keine Stille zum Transkribieren zu senden, dass Zeilenumbrüche beim Synthetisieren Geld kosten und dass das, was aus einem Transkript zurückkommt, nicht vertrauenswürdiger Text ist, den er nicht ausführen darf.

Die Open Source darunter

Die Engines, die Uttera antreiben, sind veröffentlicht unter der Apache-2.0-Lizenz. Es ist kein Marketing: Es sind dieselben, die in Produktion laufen.

RepositoryWas es ist
uttera-tts-hotcoldText-zu-Sprache-Server mit Kalt- und Warmstart. Mehrere Engines hinter einer API
uttera-tts-vllmDerselbe Dienst auf vLLM, für echte gleichzeitige Last
uttera-stt-hotcoldSprache-zu-Text-Server, dasselbe Muster
uttera-stt-vllmSprache zu Text auf vLLM
uttera-benchmarksDie Korpora, das Mess-Harness und die Rohergebnisse hinter jeder Zahl, die wir veröffentlichen

Warum sie offen sind

Aus drei Gründen, und keiner davon ist Großzügigkeit:

Weil Sie es selbst betreiben können. Wenn Ihr Fall nicht zulässt, dass das Audio Ihr Netzwerk verlässt — oder Sie einfach Ihre eigene Hardware bevorzugen — klonen Sie das Repository und stellen Sie den Dienst auf. Was wir verkaufen, ist, es nicht zu müssen: die GPUs, die Verfügbarkeit, das Routing zwischen Knoten und jemanden, der aufsteht, wenn etwas kaputtgeht.

Weil eine Engine, die niemand prüfen kann, Ihr Audio nicht verdient. Wir sagen, dass wir nichts behalten und dass nichts an Dritte geht. Mit dem Code vor Augen lässt sich das prüfen, statt es zu glauben.

Weil Zahlen ohne das Setup wertlos sind. Alle veröffentlichen “X Anfragen pro Sekunde auf einem Y”, ohne zu sagen, mit welchem Korpus, bei welcher Gleichzeitigkeit oder bei welchem Perzentil. Das Mess-Repository trägt die ganzen Korpora, das Protokoll und die Rohergebnisse, gerade damit Sie den Test wiederholen und uns widersprechen können.

Die Randschicht, die diese API bedient — Routing, Kontingente, Abrechnung — und das Portal sind nicht veröffentlicht. Sie sind keine Sprach-Engine: Sie sind die Installationstechnik eines Unternehmens, und darin ist nichts, was irgendjemandem von Nutzen wäre.

Konnektoren in Arbeit

Was als Nächstes kommt, in der Reihenfolge, in der die Leute danach fragen:

KonnektorWofür
CRMDamit Transkript und Zusammenfassung eines Anrufs von selbst im Datensatz des Kunden landen
Aufzeichnungen von anderen Telefonsystemen (FreePBX, 3CX, Issabel)Dasselbe, was der Asterisk-Konnektor bereits tut, angepasst an den Ort, an dem jedes seine Dateien ablegt
Sprachnachricht zu Text im MessagingDer am schnellsten wachsende Anwendungsfall: Niemand will eine vierminütige Sprachnachricht anhören

Wenn der, den Sie brauchen, nicht dabei ist, sagen Sie es uns: Die Reihenfolge entscheidet, wer fragt.