Einen Voice Agent für ausgehende Anrufe mit Twilio und Deepgram erstellen

April 24, 2026
Autor:in:
Corey Weathers
Mitwirkende:r
Die von Twilio-Mitwirkenden geäußerten Meinungen sind ihre eigenen
Prüfer:in:

KI-generierte Zusammenfassung
  • Das Referenzmodell von Deepgram lässt sich mit Twilio verbinden und übernimmt ausgehende Anrufe, die Erkennung von Sprachnachrichten und die Protokollierung im CRM.
  • Die Agenten nutzen Lead-Daten, um Anrufe zu personalisieren, und übertragen die Antworten nahtlos zur Nachbearbeitung in CRM-Systeme.
  • Das System erkennt Sprachnachrichten, spielt individuelle Nachrichten ab und wechselt den Modus, wenn die Erkennung der Anrufannahme länger dauert.

Diese Zusammenfassung wurde mithilfe von KI erstellt.

Einen Voice Agent für ausgehende Anrufe mit Twilio und Deepgram erstellen

Die Entwicklung eines Voice Agents für ausgehende Anrufe mit Twilio bringt Herausforderungen mit sich, die bei einem Voice Agent für eingehende Anrufe nicht auftreten. Sie müssen den Anruf initiieren und erkennen, ob eine Person abnimmt oder eine Sprachnachricht hinterlassen werden muss. Außerdem geben Sie dem Agenten den nötigen Kontext und übermitteln das Ergebnis nach dem Anruf an Ihr führendes System.

Mein Team bei Deepgram hat eine Referenzimplementierung für Voice Agents für ausgehende Anrufe mit Twilio veröffentlicht, die all diese Aufgaben übernimmt. Ihr System löst über eine REST API einen Anruf aus. Ein KI-Agent führt mit dem Empfänger ein Gespräch nach einem vorgegebenen Skript. Anschließend wird das strukturierte Anrufergebnis in Ihrem CRM erfasst. Springt die Mailbox an, hinterlässt der Agent stattdessen eine personalisierte Nachricht.

Im Folgenden sehen Sie, wie die Architektur aufgebaut ist und welche Aufgaben sie übernimmt, die bei einfacheren Implementierungen häufig fehlen.

So funktioniert die Architektur des Voice Agents für ausgehende Anrufe

Wenn Sie den Begleitartikel zu Voice Agents für eingehende Anrufe gelesen haben, kennen Sie die zentrale Audio-Bridge bereits. Auch hier kommt eine Python-Anwendung auf Basis von Starlette mit einer VoiceAgentSession-Klasse zum Einsatz. Sie hält zwei WebSocket-Verbindungen offen: eine zu Twilio und eine zur Voice Agent API von Deepgram. Zwischen beiden überträgt sie die Audiodaten. Die Voice Agent API von Deepgram verbindet Speech-to-Text, LLM-Verarbeitung und Text-to-Speech in einer Echtzeitschleife. Sie senden Audiodaten an die API und erhalten Audiodaten zurück, statt mehrere separate Dienste miteinander verbinden zu müssen.

Flux, das Speech-to-Text-Modell von Deepgram für Voice Agents, erkennt Sprecherwechsel nativ, sodass der Agent weiß, wann der Anrufer zu Ende gesprochen hat. Barge-in (Unterbrechungen durch den Anrufer) ist mit dem Twilio-Ereignis clear verknüpft. Dadurch können Anrufer dem Agenten jederzeit ins Wort fallen.

Der entscheidende Unterschied zu eingehenden Anrufen liegt in den Schritten, die vor dem Start der Audio-Bridge stattfinden.

Im Beispielszenario geht es um die Nachverfolgung eines Leads für eine Wohngebäudeversicherung. Ein Kunde fordert über Ihre Website ein Angebot an. Später initiiert Ihr System einen ausgehenden Anruf, um die Angaben zu überprüfen, weitere Informationen abzufragen (Alter des Dachs, kürzlich gemeldete Schadensfälle) und einen Beratungstermin mit einem zugelassenen Versicherungsvertreter zu vereinbaren. Nimmt niemand persönlich ab, hinterlässt der Agent stattdessen eine personalisierte Sprachnachricht.

Um den Anruf zu initiieren, sendet ein externes System (Ihr CRM, ein CLI-Skript oder ein Webhook) eine Anfrage an den Endpunkt POST /make-call des Servers. Diese enthält die Telefonnummer des Empfängers und den Lead-Kontext:

curl -X POST https://your-app.fly.dev/make-call \
  -H "Authorization: Bearer $ENDPOINT_SECRET" \
  -H "Content-Type: application/json" \
  -d '{"to": "+15551234567", "lead": {"name": "Alex Mitchell", ...}}'

Ab hier übernimmt der Server. Er ruft die Twilio REST API mit Inline-TwiML auf, das <Connect><Stream> enthält und auf den eigenen WebSocket verweist. Twilio ruft den Empfänger an. Sobald die Verbindung steht, übernimmt die VoiceAgentSession-Bridge. Dieses Muster setzen Twilio-Kunden häufig um: CRM-gesteuerte ausgehende Anrufe, bei denen strukturierte Daten zurück an das führende System übermittelt werden.

Anrufbeantwortererkennung, CRM-Integration und weitere Anforderungen bei ausgehenden Anrufen, die das Repository abdeckt

Anrufbeantwortererkennung (AMD) mit der asynchronen API von Twilio. Nach dem Verbindungsaufbau weiß der Server noch nicht, ob eine Person abgenommen hat oder eine Sprachnachricht hinterlassen werden muss. Während die asynchrone Anrufbeantwortererkennung von Twilio läuft (etwa 2 bis 4 Sekunden), puffert der Server die eingehenden Audiodaten. Sobald das Ergebnis per POST an /amd-result zurückgesendet wird, verzweigt die Sitzung je nach Ergebnis:

  • Person erkannt: Verbindung zur Deepgram Voice Agent API herstellen, die gepufferten Audiodaten übertragen und das Gespräch beginnen.
  • Sprachnachricht erkannt: Mit dem Text-to-Speech-Modell Aura-2 von Deepgram eine personalisierte Nachricht abspielen und anschließend auflegen.

Das Repository berücksichtigt auch eine verzögerte Erkennung. Wenn AMD erst nach Gesprächsbeginn erkennt, dass eine Sprachnachricht hinterlassen werden muss, trennt die Sitzung die Deepgram-Verbindung während des Anrufs und wechselt zur Wiedergabe der Sprachnachricht. Dieser Sonderfall tritt meist erst bei einer großen Zahl ausgehender Anrufe auf. In der Referenzimplementierung ist er bereits berücksichtigt.

Lead-Daten in den Prompt des Voice Agents einfügen. Der System-Prompt des Agenten wird dynamisch aus den Lead-Daten der POST/make-call-Anfrage erstellt. Noch bevor das Gespräch beginnt, kennt der Agent den Namen des Empfängers, die Angaben zur Immobilie und den Inhalt der Anfrage. So kann er das Gespräch mit „Ich melde mich wegen Ihres Angebots für die Wohngebäudeversicherung der Immobilie 742 Evergreen Terrace“ beginnen statt mit „Hallo, dies ist ein automatisierter Anruf.“

Strukturierte Anrufergebnisse werden an das CRM zurückgesendet. Genau dadurch wird aus einer Voice-Agent-Demo ein echter Workflow. Die Deepgram Voice Agent API unterstützt Function Calling. Dadurch kann das LLM des Agenten während des Gesprächs gezielt Aktionen auslösen, etwa verfügbare Termine prüfen oder einen Termin buchen. Am Ende jedes Anrufs wird die Funktion update_lead ausgeführt. Sie erfasst das Gesprächsergebnis, überprüfte Angaben, neu erfasste Informationen und eine Zusammenfassung in natürlicher Sprache als strukturiertes JSON. In der Referenzimplementierung werden diese Daten in der Konsole protokolliert. Im Produktivbetrieb würden sie per POST an Ihr CRM, einen Webhook oder Ihre Datenbank gesendet. Das LLM entscheidet, wann der Anruf beendet ist und welche Informationen übermittelt werden sollen. Der Server leitet diese Daten an Ihr Back-End weiter.

Gesprächspausen mit InjectAgentMessage von Deepgram überwachen. Ein Mechanismus überwacht, ob der Empfänger antwortet. Bleibt es eine Weile still, fragt der Agent: „Sind Sie noch da?“ Dafür verwendet er die InjectAgentMessage-API von Deepgram. Dieser serverseitige Befehl weist den Voice Agent an, einen von Ihnen vorgegebenen Satz zu sprechen, anstatt das LLM selbst eine Antwort generieren zu lassen. Bleibt eine Antwort weiterhin aus, beendet der Server schließlich den Anruf. Das ist nur ein kleines Detail, wird aber bei einer großen Zahl ausgehender Anrufe wichtig, weil auch ungenutzte Gesprächszeit Kosten verursacht.

Erste Schritte mit dem Voice Agent für ausgehende Anrufe

Das Repository enthält einen Einrichtungsassistenten, der Twilio konfiguriert und die Anwendung auf Fly.io bereitstellt. Fly.io ist eine Plattform, auf der Sie App-Server in der Nähe Ihrer Nutzer betreiben können. Sie benötigen Python 3.12 oder höher, ein Twilio-Konto und einen Deepgram-API-Schlüssel. Dieser ist kostenlos und umfasst ein Guthaben von 200 US-Dollar. Eine Kreditkarte ist nicht erforderlich.

git clone https://github.com/deepgram-devs/deepgram-voice-agent-outbound-telephony.git
cd deepgram-voice-agent-outbound-telephony
pip install -r requirements.txt
python setup.py

Der Assistent führt Sie durch die Auswahl einer Twilio-Telefonnummer, die Erstellung eines Secrets für den Endpunkt /make-call und die Bereitstellung auf Fly.io. Sobald die Anwendung läuft, führen Sie einen Testanruf durch:

python make_call.py --to "+15551234567"

Ihr Telefon klingelt. Der Voice Agent führt das Follow-up-Gespräch mit dem Versicherungs-Lead. Im Serverprotokoll finden Sie die vollständige Mitschrift und das strukturierte JSON mit dem Anrufergebnis.

Forken Sie das Repository, entfernen Sie das Versicherungsszenario und ersetzen Sie es durch Ihre eigenen Prompts, Funktionen und Ihre CRM-Integration. Veröffentlichung unter der MIT-Lizenz.

Wenn Sie sich für die Variante für eingehende Anrufe interessieren, bei der der Anrufer Ihre Telefonnummer wählt und mit einem KI-Rezeptionisten spricht, lesen Sie Einen Voice Agent für eingehende Anrufe mit Twilio und Deepgram erstellen.