Skip to main content
📝 Claude Code

Voice Agent mit Claude Code und ElevenLabs: vollständiger Build

Ich habe einen Verkaufs-voice agent mit Claude Code, ElevenLabs und Cal.com erstellt. Hier ist der eigentliche Build, die Zeitzonenfehler und die Kosten, die

27 min

Lesezeit

5,286

Wörter

May 03, 2026

Veröffentlicht

Engr Mejba Ahmed

Geschrieben von

Engr Mejba Ahmed

Artikel teilen

Voice Agent mit Claude Code und ElevenLabs: vollständiger Build

Voice Agent mit Claude Code und ElevenLabs: vollständiger Build

Der Agent beantwortete den Testanruf mit meiner eigenen Stimme und tat dann etwas, was ich nicht erwartet hatte. Es machte eine Pause. Lange genug, dass ich fast gesprochen hätte. Dann fragte es sanft nach der Schreibweise des Firmennamens, den ich gerade gesagt hatte. Nicht die E-Mail. Das Unternehmen. Denn zwei Minuten zuvor hatte ich Claude Code angewiesen, den Agenten nicht mehr Eigennamen erraten zu lassen, und Claude Code hatte der Systemaufforderung stillschweigend eine Zeile hinzugefügt, die den Agenten jedes Mal dazu drängte, nachzufragen.

Diese einzelne Pause ist der Moment, in dem ich aufhörte, dieses Ding als Drehbuch zu betrachten, und begann, es wie einen Angestellten zu behandeln.

Ich hatte den Nachmittag zuvor damit verbracht, einen vollständigen voice agent mit Claude Code als Orchestrierungshirn, ElevenLabs als Sprach- und Konversations-Engine und Cal.com als Buchungs-Backend zu erstellen. Keine Klebedienste. Keine Szenarios erstellen. Kein Zapier in der Mitte. Nur drei APIs, eine .env-Datei, ein widget-Snippet auf einer Landingpage und Claude Code, der die Dokumente für mich liest, während ich in einfachem Englisch beschreibe, was ich wollte.

Am Ende hatte ich einen Vertriebsmitarbeiter, der mit einer geklonten Version meiner eigenen Stimme antworten, einen Interessenten in fünf Feldern qualifizieren, meinen Kalender in Central Time überprüfen, ein 30-minütiges Kennenlerngespräch buchen und die Bestätigungs-E-Mail versenden konnte – alles über eine telefonförmige Sprechblase in der Ecke einer Website. Die erste Version davon wurde auf fünf verschiedene Arten gebrochen. Die fünfte Version davon funktioniert. Dieser Beitrag ist die vollständige Komplettlösung, wie ein echter voice agent-Build im Jahr 2026 aussieht – einschließlich der Fehler, der Kreditberechnung und der Sicherheitslücken, die ich fast ausgeliefert hätte.

Warum ich aufgehört habe, über Sprachagenten als eine Zukunftssache nachzudenken

Zwei Jahre lang hatte ich voice agents wie ein Problem von morgen behandelt. Die Demos waren auf der Bühne beeindruckend und in der Produktion seltsam. Roboterkadenz. Halluzinierte Verfügbarkeit. Die Art von „Drücken Sie eins, um etwas zu verkaufen“-Energie, die Menschen dazu bringt, vor der zweiten Aufforderung aufzulegen.

Das änderte sich still und leise. Drei Dinge gleichzeitig aufgereiht. ElevenLabs Agents hat sich zu einem echten Produkt entwickelt – Voice-Cloning, das mit Professional Voice Cloning ab mehr als 30 Minuten Audio, einer Gesprächslatenz, die sich nicht mehr wie eine Satellitenverzögerung anfühlt, und einer minutengenauen Abrechnung, die tatsächlich einem Geschäftsfall entspricht, das unheimliche Tal durchquert. Cal.com hat einen sauberen v2 API geliefert, bei dem für die Buchungserstellung keine Authentifizierung erforderlich ist und die Slotverfügbarkeit ein einziger GET ist. Und Claude Code lernte, eine API-Dokumentseite eines Drittanbieters zu lesen, mir drei scharfe Fragen zu stellen und den Integrationscode zu schreiben, ohne dass ich VS Code verlassen musste.

Der letzte Teil ist die Freischaltung. Früher war das technische Wissen, das für die Verbindung von ElevenLabs mit Cal.com erforderlich war, der Engpass. Der Engpass besteht nun darin, zu wissen, was der Agent tun soll.

Schauen Sie – ich verkaufe Ihnen nicht die Vision, dass die Stimme den Menschen ersetzt. Ich verkaufe Ihnen einen einzelnen, engen Anwendungsfall, bei dem die Mathematik so sauber ist, dass es ein Kunstfehler wäre, sie nicht zu versenden: ein Agent, der Ihren eingehenden Website-Verkehr sonntags um 23:00 Uhr beantwortet, den Lead qualifiziert und das Meeting in Ihrem echten Kalender bucht, bevor der Besucher den Tab schließt. Das habe ich gebaut. Das ist es, was ich Ihnen zeigen werde.

Aber bevor wir zum Build kommen, müssen Sie etwas verstehen, das in den meisten Tutorials übersprungen wird. Ein voice agent ist nicht eine Sache. Es sind vier Dinge, die zusammengefügt sind – und wenn Sie die vier Teile nicht verstehen, fühlt sich der Build wie Zauberei an und das Debuggen wie Raten.

Die vier Teile eines jeden Sprachagenten

Jeder voice agent auf dem Markt – Ihr, meiner, derjenige, den der Telefonbaum Ihrer Bank so wünscht – ist eine Kombination aus vier Komponenten. Wenn man irgendetwas davon falsch versteht, bricht die ganze Sache zusammen. Wenn alle vier Punkte richtig sind, fühlt sich der Agent wie ein Kollege.

Persona ist die Systemaufforderung. Ton, Stil, Wortschatz, was der Agent sagen wird und was nicht, wie er mit Einwänden umgeht, was er tut, wenn er keine Antwort weiß. Dies ist der Teil, den die meisten Builds peinlich falsch machen. Sie fügen „Sie sind ein hilfreicher Assistent“ ein und fragen sich, warum der Agent wie jeder andere AI im Internet klingt. In der Persona lebt Ihre Marke. Es ist der Unterschied zwischen einem Agenten, der sagt „Ich helfe Ihnen gerne“ und einem Agenten, der sagt: „Erläutern Sie mir, was Sie reparieren möchten, und ich schaue, ob wir zusammenpassen.“

Stimme ist die synthetische Stimme, die den Ton steuert. ElevenLabs bietet Ihnen drei echte Optionen: eine Standardstimme aus ihrer Bibliothek, einen Instant Voice Clone, der aus einer bis fünf Minuten reinem Audiomaterial erstellt wurde, oder einen Professional Voice Clone, der aus mindestens 30 Minuten und idealerweise mehreren Stunden Quellmaterial erstellt wird. Ich habe mich für einen Professional Voice Clone entschieden, der ungefähr vier Stunden lang meine eigene Stimme trainiert hat – alte Podcast-Episoden, Bildschirmaufnahmen, kommentierte Tutorials. Die Zahl von vier Stunden ist nicht willkürlich. Nach etwa zwei Stunden erfasst das Modell Trittfrequenz- und Atemmuster, die einstündigen Klonen entgehen. In den letzten vier Stunden flachten die Renditen stark ab. Es hat keinen Sinn, ihm zwanzig zu geben.

Wissensbasis ist das, was der Agent weiß. Meins war jedes Transkript meines YouTube-Kanals sowie ein strukturiertes Dokument, in dem meine Dienstleistungen, Preise und die Art der Projekte, die ich übernehme, beschrieben werden. ElevenLabs erfasst diese als an den Agenten angehängte RAG-Dokumente. Der Agent kann aus ihnen zitieren, sie zusammenfassen und sich weigern, Fragen außerhalb davon zu beantworten. Für einen Vertriebsmitarbeiter ist die Wissensdatenbank größtenteils Ihr eigener Pitch – für einen Supportmitarbeiter sind es die Produktdokumente.

Tools sind die Dinge, die der Agent tatsächlich tun kann. Hier fallen die meisten Demo-Agenten auf die Nase. Sie können reden. Sie können nicht handeln. An einen echten Agenten sind Tools angeschlossen – ein Cal.com-Buchungsendpunkt, ein CRM-Webhook, eine GitHub-Repo-Suche, ein MCP-Server, ein Python-Skript, das eine Kundendatenbank abfragt, ein Zapier-Webhook, der den nächsten Schritt in einem Workflow auslöst. Es sind die Werkzeuge, die den Agenten nützlich und nicht theatralisch machen.

Der Build, den ich durchlaufe, nutzt alle vier. Persona ist eine herzliche, professionelle B2B-Vertriebsstimme. Stimme ist mein eigener Klon. Die Wissensdatenbank ist mein Dokument zu YouTube-Transkripten und -Diensten. Es gibt zwei Tools: Cal.com-Slotverfügbarkeit und Cal.com-Buchungserstellung, direkt gegen den v2 API gerichtet.

Das ist die Architektur. Hier ist, was tatsächlich nötig war, um es zu bauen.

Das Setup, bevor Claude Code alles berührt

Ich habe in VS Code mit einer winzigen Next.js-Landingpage begonnen, die bereits auf localhost:3000 lief. Nichts Besonderes – ein Heldenbereich, ein CTA-Button, ein leeres div, wo die Stimme widget irgendwann einsteigen würde. Die Seite existierte, weil ich wollte, dass Claude Code einen echten Ort hat, an dem wir den widget ablegen können, sobald wir dort angekommen sind. Der Aufbau eines voice agent ohne Hostseite ist so, als würde man einen Raum schalldämmen, bevor man die Wände baut.

Ich habe die Claude Code-Erweiterung in VS Code geöffnet. Wenn Sie sie noch nie in der IDE verwendet haben, unterscheidet sich die Erfahrung in einem wichtigen Punkt vom Terminal: Claude Code kann Ihren Dateibaum sehen, bestehenden Code lesen und direkt ins Projekt schreiben, ohne dass Sie etwas kopieren müssen. Die Erweiterung ist die empfohlene Methode, Claude Code in VS Code zu verwenden, und bei einem Build wie diesem zahlt sich die Side-by-Side-Diff-Ansicht in den ersten zehn Minuten aus.

Dann habe ich einen Absatz in Claude Code eingegeben. Rund:

Ich möchte einen Voice-Sales-Agenten für meine Website aufbauen. Es sollte Fragen zu meinen Dienstleistungen beantworten, den Lead qualifizieren, indem er nach seinem vollständigen Namen, seiner E-Mail-Adresse, dem Firmennamen, dem Problem, das er lösen möchte, und der Teamgröße gefragt wird, und dann ein 30-minütiges Entdeckungsgespräch in meinem Cal.com-Kalender buchen. Die Stimme sollte mein Professional Voice Clone in ElevenLabs sein – ich gebe Ihnen die Sprach-ID. Der Ton sollte warm, aber professionell sein, B2B-Verkäufe, keine vorgetäuschte Begeisterung, keine AI-Klischeesprache. Beginnen wir damit, dass Sie mich fragen, was Sie wissen müssen.

Claude Code hat nicht mit dem Codieren begonnen. In einer einzigen Nachricht wurden fünf Fragen gestellt. Was ist mein Cal.com-Ereignistyp-Slug? In welcher Zeitzone möchte ich Verfügbarkeit haben? Möchte ich ein bestimmtes Arbeitszeitfenster oder die Standardeinstellung des Kalenders verwenden? Was soll der Agent tun, wenn der Besucher außerhalb meiner Öffnungszeiten buchen möchte? Habe ich einen ElevenLabs API-Schlüssel und einen Cal.com API-Schlüssel oder muss ich durch die Erstellung dieser Schlüssel geführt werden?

Dies ist der Teil, der im Stillen wichtig ist. Ein Junior-Entwickler hätte sofort mit dem Schreiben von Code begonnen und eine Stunde damit verbracht, den Qualifizierungsablauf neu zu schreiben, als ich ihm mittendrin gesagt hätte, dass ich die Unternehmensgröße als numerischen Bereich und nicht als Freitextfeld benötige. Claude Code hat zuerst gefragt.

Ich antwortete. Der Ereignistyp Cal.com war discovery-call-30. Zeitzone Central Time. Arbeitszeiten werktags von 9 bis 21 Uhr. Wenn außerhalb der Geschäftszeiten, bieten Sie den nächsten verfügbaren Slot an. Ich hatte beide API-Schlüssel bereit. Dann schrieb Claude Code einen Plan als Markdown-Datei und legte ihn im Repo ab. Der Plan listete jede Datei auf, die er erstellen würde, jeden API-Aufruf, den er machen würde, jede benötigte Umgebungsvariable und die Reihenfolge, in der er eingebaut werden würde. Ich habe den Plan gelesen, um eine Änderung gebeten – die Qualifikationsantworten als strukturiertes JSON-Objekt speichern, das vor der Buchung an einen Webhook gesendet wird, damit ich Leads später in mein CRM weiterleiten kann – und gab grünes Licht.

Der Aufbau, in der Reihenfolge, in der er tatsächlich geschah

Hier wird in den meisten Tutorials mit der Hand gewinkt. Sie sagen „Claude Code hat die Integration generiert“ und fahren mit der Demo fort. Ich möchte Ihnen die tatsächliche Reihenfolge nennen, denn die Reihenfolge sorgt dafür, dass die Iterationsschleife funktioniert.

Zuerst die .env-Datei. Claude Code hat .env.local mit drei ausgeschnittenen Variablen erstellt – ELEVENLABS_API_KEY, Außerdem wurde .env.local zu .gitignore hinzugefügt, ohne dass ich danach gefragt hätte. Kleine Sache, aber jedes Mal, wenn sich ein LLM ohne Aufforderung an grundlegende Sicherheitshygiene erinnert, fällt es mir auf.

Zweitens der ElevenLabs-Agent selbst. Claude Code klickt auf ElevenLabs Agents API, um einen neuen Agenten zu erstellen – programmgesteuert, nicht über das Dashboard. Der Aufruf „create-agent“ akzeptiert einen JSON-Text mit der Systemeingabeaufforderung, der Sprach-ID, den Dokument-IDs der Wissensdatenbank und den Tooldefinitionen. Claude Code hat die Systemeingabeaufforderung als separate Markdown-Datei (prompts/sales-agent-system.md) geschrieben, damit ich sie in der Versionskontrolle iterieren kann. So ungefähr sah der erste Entwurf aus:

You are a sales voice agent for Mejba, a software engineer who builds AI
systems, automates workflows, and ships custom Claude Code integrations.

# Goal

Qualify the prospect. Answer their questions about Mejba's services. If they
seem like a fit, book a 30-minute discovery call on Mejba's calendar.

# Voice & Tone

- Warm but professional. B2B sales, not retail support.
- Never use the words "absolutely", "amazing", "I'd be happy to", or any
  variation that signals AI-cliche language.
- Speak in short sentences. Pause after asking a question.
- If the prospect goes on a tangent, listen. Do not interrupt to redirect.

# Qualification Fields (collect in this order, naturally)

1. Full name (ask them to spell the last name back if uncertain)
2. Email (read it back to confirm)
3. Company name (ask for the spelling, every time)
4. The problem they're trying to solve, in their own words
5. Team size (ask for an approximate number of people)

# Booking

- Once qualified, offer the next three available 30-minute slots from
  Cal.com via the get_available_slots tool.
- Confirm the slot in Central Time before calling create_booking.
- After booking, confirm the email confirmation will arrive within minutes.

# Boundaries

- Do not quote prices. Tell the prospect Mejba reviews scope before quoting.
- Do not promise specific delivery timelines.
- If asked something you don't know, say so plainly and offer to follow up.

Diese Aufforderung wurde viermal umgeschrieben, bevor sich der Agent richtig fühlte. Zu den Umschreibungen komme ich im nächsten Abschnitt. Aber die Struktur – Rolle, Ziel, Stimme, Qualifikation, Buchung, Grenzen – ist das Grundgerüst. Jede voice agent-Systemaufforderung, die ich schreibe, folgt jetzt genau dieser Form mit sechs Abschnitten.

Drittens die Tools. Claude Code hat zwei benutzerdefinierte Tools auf dem Agenten definiert. get_available_slots akzeptiert einen Datumsbereich und eine Zeitzone, trifft auf den /v2/slots-Endpunkt von Cal.com und gibt eine Liste der verfügbaren 30-Minuten-Fenster zurück. create_booking akzeptiert den Namen des Teilnehmers, die E-Mail-Adresse, die Qualifikationsfelder als Metadaten und einen ausgewählten Slot und trifft auf den /v2/bookings-Endpunkt von Cal.com. Beide Tools leben als serverlose Funktionen in der Next.js-App unter app/api/. Der Agent

Der Grund für die Umleitung – der Agent ruft meinen Server auf, mein Server ruft Cal.com auf – ist kritisch und es lohnt sich, ihn zu verlangsamen. Wenn Sie den Schlüssel Cal.com API direkt in die ElevenLabs-Toolkonfiguration einfügen, befindet sich dieser Schlüssel in der Agentendefinition. Jeder, der die Agentenkonfiguration sehen kann, kann den Schlüssel sehen. Durch die Weiterleitung über meine eigenen Endpunkte befindet sich der Schlüssel Cal.com nur in .env.local auf Vercel. Der Agent verfügt über keine eigenen Anmeldeinformationen. Es kommuniziert nur mit meinem Webhook. Dieses Muster taucht im Sicherheitsbereich erneut auf, beginnt aber hier.

Viertens der widget. Nachdem die Agenten-ID vom ElevenLabs Der Ausschnitt sieht ungefähr so aus:

<elevenlabs-convai
  agent-id="agent_xxxxxxxxxxxxxxxxxxxxx"
></elevenlabs-convai>
<script
  src="https://unpkg.com/@elevenlabs/convai-widget-embed"
  async
  type="text/javascript"
></script>

Zwei Tags. Das ist die gesamte clientseitige Oberfläche. Der widget montiert eine schwebende Telefonsymbol-Schaltfläche in der unteren Ecke der Seite. Klicken Sie darauf und ein Echtzeit-Sprachgespräch beginnt. Alles andere – der Qualifikationsablauf, die Kalenderlogik, die Buchung – läuft serverseitig oder im Gehirn des Agenten.

Ich klicke auf Speichern. Aktualisierter localhost:3000. Die Telefonblase erschien. Ich habe darauf geklickt. Und dann fingen die Fehler an.

Fünf Dinge sind kaputt gegangen. Hier ist, was mir jeder einzelne beigebracht hat.

Dies ist der Abschnitt, den ich mir in jedem voice agent-Tutorial gewünscht hätte. Weil der Aufbau der einfache Teil ist. Beim ersten Anruf erfahren Sie, wer Ihr Agent eigentlich ist.

Fehler eins: Der Agent sagte nichts, als der Anruf begann. Ich klickte auf das Telefonsymbol, die Verbindung wurde hergestellt und dann herrschte Stille. Der Agent wartete auf mich. Wie ein unangenehmer Zoom-Anruf. ElevenLabs Agents hat ein first_message-Feld in der Agentenkonfiguration – eine Literalzeichenfolge, die der Agent spricht, sobald eine Sitzung geöffnet wird – und Claude Code hatte es leer gelassen, weil ich in meinem Brief keines angegeben hatte. Ich sagte zu Claude Code: „Stellen Sie die erste Nachricht auf etwas wie: Hey, das ist Mejbas AI-Assistent – ​​was geht Ihnen durch den Kopf?“ Claude Code hat die Agentenkonfiguration über API aktualisiert, eine erneute Bereitstellung ist nicht erforderlich. Der nächste Anruf begann mit einem herzlichen Hallo.

Fehler zwei: Die Stimme war falsch. Technisch gesehen nicht falsch – es war definitiv mein voice clone. Aber die Kadenz war die, die jeder Instant Voice Clone macht und bei der jeder Satz mit einem leichten Aufwärtston endet, als würde der Agent bei jedem Wort lächeln. Es klang wie eine Kundensupport-Aufnahme. Für einen B2B-Handelsvertreter war diese Energie verloren. Zu eifrig. Leicht gefälscht.

Der Fix befand sich in den Spracheinstellungen, nicht in der Eingabeaufforderung. ElevenLabs bietet Ihnen vier Schieberegler, auf die es ankommt: Geschwindigkeit, Stabilität, Ähnlichkeit und Stilübertreibung. Ich ließ Claude Code die Agentenkonfiguration öffnen und die Spracheinstellungen verschieben: Stabilität bis zu 0,75 (konsistentere, weniger ausdrucksstarke Variation), Ähnlichkeit bis zu 0,85 (näher an den Quellaufnahmen), Stilübertreibung bis zu 0,3 (weniger performativ). Ich habe der Systemaufforderung eine Zeile hinzugefügt: „Sprechen Sie in einem ruhigen, gemessenen Ton. Sie verkaufen nicht. Sie hören zu.“ Der nächste Testanruf hörte sich an, als würde eine echte Person sprechen – langsamer, bewusster, kein Lächeln. Diese einzelne Kombination aus Schieberegler-Tuning und Tonanweisung erwies sich als der größte einzelne Qualitätshebel im gesamten Aufbau.

Fehler drei: Die Zeitzone war falsch. Es dauerte eine Stunde, diesen Fehler zu finden. Ich bat den Agenten, die Verfügbarkeit für „morgen Nachmittag“ zu prüfen. Er sagte, der früheste Termin sei 18:00 Uhr. Mein Kalender war tatsächlich schon um 11:00 Uhr frei. Zuerst dachte ich, Cal.com sei defekt. Das war nicht der Fall. Der v2-Slots-Endpunkt von Cal.com verlangt Zeitparameter in UTC, akzeptiert aber einen timeZone-Parameter für die Ausgabeformatierung. Claude Code hatte die Anfrage korrekt in UTC verdrahtet, aber den lokalen Kontext falsch interpretiert. 11:00 Uhr Central Time ist 16:00 Uhr UTC. Wenn dann noch die zweistündige Mindestvorlaufzeit von Cal.com greift, springt der früheste sichtbare Termin schnell auf 18:00 Uhr.

Die Lösung bestand aus vier Codezeilen. Claude Code fügte timeZone=America/Chicago zur Slots-Abfrage hinzu, analysierte das Feld time der Antwort (das jetzt bereits konvertiert zurückkam) und aktualisierte die Systemaufforderung mit der Meldung „Immer Zeiten für den potenziellen Kunden in Central Time vorlesen.“ Dann haben wir getestet. 11 Uhr erschien. Der Agent sagte: „Ich habe morgen 11 Uhr Central.“ Ich stieß einen kleinen hörbaren Seufzer der Erleichterung aus.

Wenn Sie sich an nichts anderes aus diesem gesamten Beitrag erinnern, denken Sie daran: Wenn ein LLM-gesteuerter Agent mit der Zeit etwas Seltsames macht, handelt es sich fast immer um einen Zeitzonenfehler und fast nie um die Schuld des Modells.

Fehler vier: Die E-Mail war falsch formatiert und der Firmenname falsch geschrieben. Ich habe den Buchungsablauf getestet, indem ich meine E-Mail laut ausgesprochen habe: „mejba dot one three at gmail dot com.“ Der Agent bestätigte: „M-E-G-B-A bei gmail dot com.“ Falsch. Bei der Sprachtranskription wird M-E-J regelmäßig mit M-E-G verwechselt, wenn kein Wörterbuchkontext vorhanden ist. Gleiches Problem mit Firmennamen. Der Agent hatte keine Möglichkeit zu wissen, ob ich „Acme Inc“ oder „Acne Inc.“ gesagt hatte.

Der Fix erfolgte auf Eingabeaufforderungsebene, nicht auf Codeebene. Ich habe Claude Code gebeten, diesen Block zur Systemeingabeaufforderung hinzuzufügen:

# Spelling Discipline

For any proper noun the prospect provides — full name, email, company —
do NOT trust your transcription. Always:

1. Repeat the value back, letter by letter for short tokens (names, the
   local part of an email, company names under 8 characters).
2. For longer values, repeat back and ask: "Did I get the spelling right?"
3. For email addresses, separate the local part and the domain when
   reading back: "M-E-J-B-A dot one-three, at G-mail dot com — correct?"
4. If the prospect corrects you, accept the correction and read the new
   spelling back one more time before moving on.

Beim nächsten Testanruf sagte ich „mejba dot one three at gmail dot com.“ Der Agent hielt inne und las es dann Buchstabe für Buchstabe noch einmal vor. Ich habe es bestätigt. Die Buchung verlief reibungslos. Dies ist die Pause, die diesen Artikel eröffnet hat. Es ist auch die Art von Verhaltensänderung, die nahezu frei hinzugefügt werden kann und die wahrgenommene Intelligenz des Agenten dramatisch steigert.

Fehler fünf: Cal.com weigerte sich, „irgendwann in den nächsten zwei Stunden“ zu buchen. Der Agent sagte immer wieder, dass der früheste Slot zweieinhalb Stunden entfernt sei, selbst bei einem klar offenen Kalender. Das war kein Fehler. Cal.com hat eine standardmäßige Mindestbenachrichtigungsfrist von 120 Minuten für Veranstaltungstypen – eine Einstellung, die dazu dienen soll, Menschen davor zu schützen, sich versehentlich für etwas in drei Minuten einzubuchen. Ich ging zu den Cal.com-Ereignistypeinstellungen, senkte die Mindestbenachrichtigung auf 30 Minuten und testete erneut. Der Agent bot nun Slots ab 35 Minuten an. Die Kenntnis der Standardrichtlinien der Plattform ist Teil der Integration. Claude Code hat diese 120-Minuten-Regel nicht erfunden; Cal.com hat es getan. Aber Claude Code konnte auch nicht wissen, dass ich es überschreiben wollte, weil ich es nicht gesagt hatte.

Fünf Käfer. Fünf Korrekturen. Gesamtzeit zum Debuggen aller fünf: etwa neunzig Minuten, wobei Claude Code jedes Mal die entsprechende Dokumentationsseite las und den Fix vorschlug, bevor ich mit dem Lesen des Fehlers fertig war.

Mid-Build beiseite

Wenn Sie es vorziehen, dass jemand einen voice agent wie diesen End-to-End auf Ihrem Stack erstellt – voice clone, Systemeingabeaufforderung, Cal.com oder Sie können sehen, was ich erstellt habe, und einen Anruf buchen unter fiverr.com/s/EgxYmWD.

Sicherheit: Das Gespräch, das fast nicht stattgefunden hätte

Ich hätte dieses Ding fast verschickt, ohne an die Sicherheit zu denken. Der widget hat funktioniert. Der Kalender hat funktioniert. Ich hatte meinen Finger auf der Bereitstellungstaste.

Dann sagte eine kleine, nützliche Stimme in meinem Hinterkopf: Jeder mit einem Browser kann diese Seite öffnen, auf widget klicken und mit dem Brennen meiner ElevenLabs-Credits beginnen.

Sprachagenten sind nicht wie Text-Chatbots. Jede Gesprächsminute kostet echtes Geld. ElevenLabs Agents-Rechnungen pro Gesprächsminute, zwischen 0,08 und 0,12 $ je nach Stufe, getrennt von der Zeichenkontingent Ihres Basisabonnements. Ein einstündiger missbräuchlicher Anruf kostet etwa 5 bis 7 US-Dollar. Ein Botnetz, das jede Nacht zehn parallele stundenlange Anrufe durchführt, ist die Art von Rechnung, die einen Dienstagmorgen ruiniert.

Deshalb habe ich Claude Code vor der Bereitstellung vier Sicherheitsebenen hinzufügen lassen.

Hostname-Zulassungsliste. Die Agentenplattform von ElevenLabs unterstützt einen Hostname-Allowlist auf der Registerkarte „Security“ – Sie geben bis zu zehn Domänen an, und jede widget-Verbindung von einer Domäne, die nicht auf dieser Liste steht, wird beim WebSocket-Handshake abgelehnt. Ich habe mejba.me, www.mejba.me und localhost:3000 hinzugefügt. Jeder, der mein widget-Snippet auf seine eigene Website kopiert, kann meinen Agenten nicht verwenden.

Begrenzung der Gesprächsdauer. Ich habe jedes einzelne Gespräch auf 8 Minuten begrenzt. Wenn ein echter Interessent mehr Zeit benötigt, sollte er mit mir an einem Zoom-Anruf teilnehmen und meinen Voice-Bot nicht missbrauchen. Acht Minuten reichen aus, um sich zu qualifizieren und zu buchen. Dies bedeutet auch, dass der absolut schlimmste Fall für einen Täter etwa 0,96 US-Dollar pro Sitzung beträgt.

Ratenbegrenzung pro IP. Claude Code hat vor dem widget eine kleine Vercel-Edge-Funktion hinzugefügt, die Verbindungen pro IP drosselt. Drei Sitzungen pro Stunde. Die zehnte Sitzung in einer Stunde erhält einen Wert von 429. Diese Quote habe ich nicht erfunden. Ich habe Claude Code gebeten, Nummern auszuwählen, die offensichtliche Automatisierung blockieren, ohne einen echten Benutzer abzulehnen, der aufgelegt und zurückgerufen hat.

Auth-Gated-Eskalation. Für die erste Version habe ich den widget öffentlich gelassen – ein Vertriebsmitarbeiter, der eine Anmeldung erfordert, ist ein Vertriebsmitarbeiter, mit dem niemand spricht. Aber Claude Code hat ein Feature-Flag für signed URLs (der empfohlene Standard gemäß den ElevenLabs-Authentifizierungsdokumenten) geschrieben, damit ich den Agent in 30 Sekunden in den authentifizierten Modus versetzen kann, wenn ich Missbrauch sehe. Signed URLs require a server-side token before the agent will accept a connection. If you are running an internal-facing agent — employee help desk, partner portal — start with signed URLs and never look back.

Ich mag die Sicherheitsberechnung für öffentliche voice agents nicht. Die Ökonomie macht Missbrauch trivial einfach und die Verteidigung ärgerlicherweise vielschichtig. Aber die vier oben genannten Kontrollen erhöhen den täglichen Schaden im schlimmsten Fall von „potenziell unbegrenzt“ auf „nervig, aber begrenzt“. Das ist die Grenze, die Sie überschreiten müssen, bevor Sie voice agent öffentlich zugänglich machen.

Die Kostenrechnung, mal ehrlich

Die meisten Tutorials verzichten auf die Rechnung. Ich werde es nicht tun. Here is what running this agent actually costs as of May 2026.

Die Einrichtung des Sprachklonens ist einmalig. Professionelles Sprachklonen ist im ElevenLabs Creator-Plan ($22/month) und höher enthalten. The four hours of source audio I uploaded was processed once. The clone itself does not cost ongoing money — only the synthesized output does.

Abrechnung für Agentengespräche pro Minute. ElevenLabs Agents kostet 0,08 $ pro Minute im Standard-Tarif und bis zu 0,12 $ pro Minute im Premium-Tarif (der ein höherwertiges LLM und den Flash voice model verwendet). Mein Agent läuft auf der Standardstufe. A typical sales conversation runs four to six minutes — say, $0.32 to $0.48 per qualified call.

Credits werden bei kostenpflichtigen Plänen zwei Monate lang übertragen. Ungenutzte Credits werden nicht für immer angesammelt. Planen Sie Ihren monatlichen Verbrauch anhand des tatsächlich erwarteten Traffics, nicht anhand Ihrer wildesten Wachstumsfantasien.

Cal.com ist auf meinem Volume kostenlos. Das kostenlose Kontingent umfasst einen einzelnen Benutzer mit einem 30-minütigen Ereignistyp und direktem API-Zugriff. Wenn Sie eine Teamplanung oder eine Round-Robin-Zuweisung benötigen, handelt es sich um eine kostenpflichtige Stufe – für einen Solo-Betreiber jedoch null.

Vercel ist auf meiner Festplatte kostenlos. Die Hobby-Stufe verwaltet die Zielseite und die beiden API-Routen, die als Proxy zu Cal.com dienen, ohne ins Schwitzen zu geraten.

Die laufenden Kosten für eine Version dieses Agents mit geringem Datenverkehr betragen also ungefähr 22 $ Wenn der Agent zehn Anrufe pro Tag zu je fünf Minuten bearbeitet, sind das ungefähr fünfzig Minuten pro Tag oder 4 US-Dollar pro Tag oder etwa 120 /month an Gesprächskosten. Gesamt: rund 142/month für einen voll funktionsfähigen Vertriebsmitarbeiter, der Besprechungen im Schlaf bucht.

Zum Vergleich: Ein menschlicher BDR in Teilzeit – jemand, der eingehende Anfragen beantwortet und Leads qualifiziert – kostet Sie etwa 3.000 bis 5.000 US-Dollar pro Monat und arbeitet nicht am Wochenende. Der Agent ersetzt keinen guten BDR. Es fängt die Anrufe ab, die andernfalls auf der Voicemail landen und ins Leere gelangen würden.

Bereitstellung dort, wo echte Besucher es finden können

Sobald localhost:3000 nicht mehr kaputt ging, war die Bereitstellung fast langweilig.

GitHub-Synchronisierung. Claude Code initialisierte ein Git-Repo, falls es nicht existierte, erstellte ein privates GitHub-Repo über die gh-CLI und pushte den Code. .env.local blieb lokal und berührte nie die Fernbedienung. Umgebungsvariablen für die Produktion waren nur im Dashboard von Vercel vorhanden.

Vercel-Bereitstellung. Das GitHub-Repository mit einem neuen Vercel-Projekt verbunden, die drei Umgebungsvariablen (ELEVENLABS_API_KEY, CAL_COM_API_KEY, ELEVENLABS_AGENT_ID) in den Projekteinstellungen von Vercel hinzugefügt und auf „Bereitstellen“ geklickt. Zwei Minuten später war die Website auf einer vercel.app-Subdomain online. Dann habe ich voice.mejba.me auf die Bereitstellung über DNS hingewiesen. Gesamtbereitstellungszeit: etwa sechs Minuten.

Twilio für Telefon. Dies ist der Teil, den ich noch nicht in die Produktion gebracht habe, aber die Architektur ist vorhanden. ElevenLabs Agents unterstützt die Twilio-Telefonnummernintegration sofort. Sie kaufen eine Nummer, fügen sie in die Registerkarte „Telefonnummern“ des ElevenLabs-Agenten ein, und derselbe Agent, der Ihren widget entgegennimmt, beantwortet jetzt tatsächliche Telefonanrufe. Dieselbe Person. Dieselbe Stimme. Gleiche Werkzeuge. Gleiche Cal.com-Integration. Dem Agenten ist es egal, ob der Ton von einem Browsermikrofon oder einer Telefonleitung kommt. Das ist der Teil, auf den ich immer wieder zurückkomme, weil er den Geschäftsfall stillschweigend verändert – ein Agent, drei Oberflächen (widget, Dashboard, Telefon), eine Eingabeaufforderung, eine Wissensdatenbank.

Wenn Sie bereits einen MCP-gesteuerten Claude-Code-Workflow aufgebaut haben, fragen Sie sich vielleicht, wo MCP in diesen Build passt. Die kurze Antwort: noch nicht. Die längere Antwort ist, dass dieselben Muster, die ich in meiner Aufschlüsselung der unverzichtbaren MCPs für Claude Code beschrieben habe, direkt auf Voice Agents übertragbar sind, sobald der Agent eine Datenbank abfragen, Notion lesen oder einen Kundendatensatz abrufen soll. Heute läuft das über meine serverseitigen Webhooks. Morgen wird die MCP-Integration von ElevenLabs dem Agenten erlauben, diese Server direkt mit sauberer Authentifizierung aufzurufen. Die Architektur konvergiert.

Die Iterationsschleife ist die Fähigkeit

Hier ist der Teil, den ich unterstreichen möchte, bevor Sie diesen Tab schließen. Der Bau war nicht der schwierige Teil. Claude Code hat den Build durchgeführt. Jeder mit zwei API-Schlüsseln und einem klaren Briefing hätte den gleichen ersten Entwurf erstellen können.

Die Fertigkeit – die tatsächlich übertragbare Fertigkeit – ist die Iterationsschleife. Die fünf oben beschriebenen Fehler sind nicht die Fehler von Claude Code. Sie sind die natürliche Hürde bei der Eingliederung eines generalistischen LLM-Agenten in einen bestimmten Geschäftskontext. Jeder Bugfix hatte folgende Form: Falsches Verhalten bemerken, Claude Code genau beschreiben, Claude Code den Fix vorschlagen lassen, den Fix auf Plausibilität überprüfen, bereitstellen, erneut testen. Fünf Runden dieser Schleife verwandelten einen Agenten, der beim Öffnen des Anrufs unbeholfen innehielt und meine E-Mail-Adresse falsch schrieb, in einen Agenten, der echte Besprechungen in echten Kalendern bucht.

Dies ist die gleiche Iterationsschleife, über die ich seit Monaten schreibe – diejenige, bei der sich der Wert von „Kann der Auf genau diese Dynamik bin ich in Warum der Kontext beim Erstellen von Agenten wichtiger ist als die Konfiguration näher eingegangen, und die daraus gewonnenen Erkenntnisse wurden in diesem voice agent-Build Schlag für Schlag umgesetzt. Bei jeder prompten Änderung, die ich vorgenommen habe, handelte es sich um eine Kontextkorrektur und nicht um eine Modellaktualisierung.

Die voice agents, die im Jahr 2026 in der Produktion funktionieren, sind nicht diejenigen mit dem besten voice clone oder dem saubersten Integrationscode. Sie sind diejenigen, deren Entwickler die Iterationsschleife fünfzehn Mal durchlaufen haben, bevor sie live gingen. Die meisten Bauunternehmer geben um drei Uhr auf.

Häufig gestellte Fragen

Wie viel kostet es, einen voice agent mit ElevenLabs und Claude Code zu erstellen und zu betreiben?

Erwarten Sie insgesamt etwa 142/month für eine Produktion mit geringem Datenverkehr: 22/month für den ElevenLabs Creator-Plan (der Professional Voice Cloning freischaltet), plus etwa 0,08 US-Dollar pro Gesprächsminute sowie kostenlose Stufen für Cal.com und Vercel. Ein Solo-Betreiber, der zehn qualifizierte Anrufe pro Tag zu je fünf Minuten abwickelt, beläuft sich auf Gesprächskosten in der Nähe von 4/day.

Wie viel Audio benötige ich, um meine Stimme für einen ElevenLabs-Agenten zu klonen?

ElevenLabs Professional Voice Cloning erfordert mindestens 30 Minuten, aber die Qualität springt deutlich zwischen zwei und vier Stunden sauberer Audioquelle. Ich habe vier Stunden gebraucht und gesehen, wie sich die Trittfrequenz und die Atemmuster einstellten. Nach vier Stunden verflachten die Rückschläge. Für Instant Voice Cloning genügen ein bis fünf Minuten – bei verkaufsorientierten Gesprächen ist das Ergebnis jedoch deutlich weniger natürlich.

Kann derselbe ElevenLabs-Agent Telefonanrufe und die Website widget beantworten?

Ja. ElevenLabs Agents unterstützt die Twilio-Telefonintegration in derselben Agentenkonfiguration, die auch die Website widget betreibt. Eine Person, eine Stimme, eine Wissensdatenbank, ein Werkzeugsatz – drei Oberflächen. Sie kaufen eine Twilio-Nummer, fügen sie in die Registerkarte „Telefonnummern“ des Agenten ein und eingehende Anrufe gelangen über dieselbe Konversationsmaschine, die Ihr widget verwendet.

Wie verhindere ich, dass zufällige Besucher meine ElevenLabs-Credits auf dem öffentlichen widget verbrennen?

Verwenden Sie vier Ebenen: hostname allowlist auf der Registerkarte „Sicherheit“ des Agenten Die genaue Konfiguration finden Sie im Abschnitt Sicherheit oben.

Warum liest mein voice agent die Kalenderzeiten in der falschen Zeitzone?

Dabei handelt es sich fast immer um ein Konfigurationsproblem. Der Endpunkt erfordert UTC-Zeitparameter für die Eingabe, akzeptiert jedoch einen timeZone-Parameter für die Ausgabeformatierung. Wenn Sie vergessen, timeZone=America/Chicago (oder Ihre relevante Zone) für die Anfrage festzulegen, kommt die Antwort in UTC zurück und der Agent liest sie, als ob sie bereits lokal wäre. Korrigieren Sie den Anforderungsparameter und fügen Sie eine Systemaufforderungszeile hinzu, die den Agenten dazu zwingt, immer Zeiten in der lokalen Zone des potenziellen Kunden zu lesen.

Lasst uns zusammenarbeiten

Möchten Sie AI-Systeme aufbauen, Arbeitsabläufe automatisieren oder Ihre technische Infrastruktur skalieren? Ich würde gerne helfen.

Coffee cup

Hat Ihnen dieser Artikel gefallen?

Ihre Unterstützung hilft mir, mehr tiefgehende technische Inhalte, Open-Source-Tools und kostenlose Ressourcen für die Entwickler-Community zu erstellen.

Verwandte Themen

Engr Mejba Ahmed

Über den Autor

Engr Mejba Ahmed

Engr. Mejba Ahmed builds AI-powered applications and secure cloud systems for businesses worldwide. With 10+ years shipping production software in Laravel, Python, and AWS, he's helped companies automate workflows, reduce infrastructure costs, and scale without security headaches. He writes about practical AI integration, cloud architecture, and developer productivity.

Discussion

Comments

0

No comments yet

Be the first to share your thoughts

Leave a Comment

Your email won't be published

3  x  2  =  ?

Weiter lernen

Verwandte Artikel

Alle anzeigen

Comments

Leave a Comment

Comments are moderated before appearing.

Learning Resources

Expand Your Knowledge

Accelerate your growth with structured courses, verified certificates, interactive flashcards, and production-ready AI agent skills.

Sample Certificate of Completion

Sample certificate — complete any course to earn yours

Engr Mejba Ahmed

Engr Mejba Ahmed

Claude Code Expert · Online

👋

Hey there!

Quick Actions

WhatsApp Instant reply

Chat on WhatsApp

+880 1723 741224 · Instant reply

Popular Questions

Engr Mejba Ahmed is connected
Engr Mejba Ahmed is typing...
Engr Mejba Ahmed avatar

✉ Want me to follow up? Drop your email

Engr Mejba Ahmed avatar

📞 Connect Directly

Choose how you'd like to reach me

WhatsApp

+880 1723 741224

Email

[email protected]

✓ Details sent! I'll get back to you shortly.

Powered by OpenAI

335+

Blog Posts

25

AI Courses

63

Projects

Services & Expertise

Pricing & Process

Learning & Resources

Connect & Support