Zur Navigation springen

Voximplant

Leiten Sie Voximplant-Anrufe über Media Streams aus einem VoxEngine-Szenario an ElevenAgents weiter.

Die Voximplant-Integration ist nur eingeschränkt verfügbar und wird pro Workspace aktiviert. Kontaktieren Sie Ihren ElevenLabs-Ansprechpartner, bevor Sie Kundenanrufe weiterleiten.

Überblick

Die Voximplant-Integration verbindet einen Anruf in einem VoxEngine-Szenario über einen WebSocket direkt mit einem Agenten in ElevenAgents und verwendet dazu Voximplant Media Streams. Voximplant verwaltet die Telefonie: Es wählt oder nimmt den Anruf entgegen und entscheidet, was danach geschieht. ElevenAgents verwaltet die Konversation. Es ist kein SIP-Trunk und keine Middleware erforderlich.

Eingehende und ausgehende Anrufe funktionieren gleich: Sobald der Anruf verbunden ist, öffnet das Szenario pro Anruf einen WebSocket zu ElevenLabs. Wenn die Konversation endet, sendet ElevenLabs dem Szenario ein einzelnes Entscheidungsereignis, das angibt, ob der Anrufer an einen Menschen übergeben, aufgelegt oder der Anruf als Timeout behandelt werden soll.

So funktioniert die Integration

  1. Ihr VoxEngine-Szenario nimmt einen eingehenden Anruf entgegen oder tätigt einen ausgehenden Anruf.
  2. Das Szenario öffnet einen WebSocket zum ElevenLabs-Endpunkt für Ihren Agenten und authentifiziert sich mit einem ElevenLabs-API-Schlüssel als Bearer-Token.
  3. Das Szenario startet den Media Stream mit call.sendMediaTo() und übergibt dabei alle customParameters. ElevenLabs wandelt jeden Parameter in eine dynamische Variable um und antwortet mit einem eigenen start.
  4. Voximplant und ElevenLabs tauschen in media-Nachrichten 16-Bit-lineares PCM-Audio mit 8 kHz aus.
  5. Wenn die Konversation endet, sendet ElevenLabs den Rest der letzten Äußerung des Agenten, ein benutzerdefiniertes Ereignis elevenlabs-decision und eine stop-Nachricht. Das Szenario schließt dann den WebSocket und handelt entsprechend der Entscheidung.

Anforderungen

Stellen Sie vor Beginn sicher, dass Sie Folgendes haben:

  1. Ein Voximplant-Konto mit einer Anwendung, einer Telefonnummer oder ausgehenden Anrufen sowie Berechtigung zum Bearbeiten von Szenarien.
  2. Einen ElevenLabs-Workspace mit aktivierter Voximplant-Integration.
  3. Einen ElevenLabs-Agenten und einen dedizierten API-Schlüssel.

ElevenLabs konfigurieren

1

Agenten erstellen oder auswählen

Erstellen Sie den Agenten in ElevenAgents. Geben Sie ihm eine erste Nachricht, wenn er sprechen soll, sobald der Anruf verbunden ist. Die Audioformate werden von der Integration festgelegt. Die für den Agenten konfigurierten Formate werden für Voximplant-Anrufe nicht verwendet.

2

Anruf beenden aktivieren

Aktivieren Sie unter Agent → Tools → Systemtools Anruf beenden, damit der Agent die Konversation abschließen kann. Der Grund, den der Agent beim Beenden des Anrufs angibt, wird mit der Entscheidung an Ihr Szenario gesendet.

3

Voximplant-Weiterleitungsregel hinzufügen (optional)

Damit der Agent den Anrufer an einen Menschen übergeben kann, geben Sie ihm das Systemtool An Nummer weiterleiten mit einer Weiterleitungsregel, deren Provider-Konfiguration voximplant lautet. Die Regel hat kein Ziel: Die Konversation endet mit einer transfer-to-agent-Entscheidung, und Ihr Szenario leitet den Anrufer weiter. Weiterleitungsregeln werden über die API konfiguriert. Fügen Sie das Tool mit einem PATCH für den Agenten hinzu:

curl -X PATCH "https://api.elevenlabs.io/v1/convai/agents/agent_7101k5zvyjhmfg983brhmhkd98n6" \
-H "xi-api-key: $ELEVENLABS_API_KEY" -H "Content-Type: application/json" \
-d '{
"conversation_config": {"agent": {"prompt": {"built_in_tools": {
"end_call": {"type": "system", "name": "end_call", "description": "",
"params": {"system_tool_type": "end_call"}},
"transfer_to_number": {
"type": "system", "name": "transfer_to_number", "description": "",
"params": {
"system_tool_type": "transfer_to_number",
"transfers": [],
"transfer_rules": [{
"condition": "the caller asks to speak with a human",
"provider_configs": [
{"type": "voximplant", "config": {"type": "voximplant_handoff"}}
]
}]
}
}
}}}}
}'

Senden Sie das vollständige built_in_tools-Objekt des Agenten, einschließlich bereits vorhandener Tools wie end_call. Die Option, die der Agent zurückgibt, ist das feste Token voximplant. Daher reicht eine Voximplant-Regel pro Tool aus. Telefonnummern und SIP-URIs, die für andere Provider konfiguriert sind, werden bei Voximplant-Anrufen nicht angeboten.

Weiterleitungsregeln werden über die API verwaltet. Konfigurieren und aktualisieren Sie das Tool An Nummer weiterleiten eines Agenten, der sie verwendet, wie oben beschrieben über die API; der Tool-Editor im Dashboard arbeitet mit der Weiterleitungsliste pro Nummer.

4

Dedizierten API-Schlüssel erstellen

Erstellen Sie einen API-Schlüssel im selben Workspace wie der Agent und beschränken Sie seinen Umfang auf ElevenAgents. Um nur Verbindungen von Voximplant zu akzeptieren, beschränken Sie die zulässigen IP-Adressen des Schlüssels auf die Media- Server von Voximplant, die Voximplant unter https://api.voximplant.com/getMediaResources?with_mediaservers auflistet.

5

WebSocket-URL notieren

Das Szenario verbindet sich mit einer URL, die Ihre Agenten-ID enthält:

UmgebungURL
Standardwss://api.elevenlabs.io/v1/convai/conversation/voximplant/agent_7101k5zvyjhmfg983brhmhkd98n6
Datenresidenzwss://api.<region>.residency.elevenlabs.io/v1/convai/conversation/voximplant/agent_7101k5zvyjhmfg983brhmhkd98n6

Um einen Branch des Agenten festzulegen, fügen Sie ?branch_id=<branch_id> hinzu.

Wenn sich Ihr ElevenLabs-Konto in einer isolierten Datenresidenzumgebung befindet, ersetzen Sie <region> durch Ihren Regionscode. Verfügbare Regionen finden Sie unter Datenresidenz.

Voximplant einrichten

1

Anwendung erstellen

Öffnen Sie im Voximplant Control Panel Applications und klicken Sie auf Create application. Geben Sie einen Namen ein, zum Beispiel elevenlabs-agent, und klicken Sie auf Create.

Voximplant: Anwendung erstellen

2

API-Schlüssel als Secret speichern

Öffnen Sie in der Anwendung Secrets und klicken Sie auf Add secret. Nennen Sie es ELEVENLABS_API_KEY, fügen Sie den API-Schlüssel, den Sie für den Workspace des Agenten erstellt haben, unter Value ein und klicken Sie auf Add secret. Das Szenario liest ihn mit VoxEngine.getSecretValue(), sodass der Schlüssel nie im Szenariocode erscheint.

Voximplant: Secret hinzufügen

3

Szenario erstellen

Öffnen Sie Scenarios, klicken Sie auf Create scenario, nennen Sie es elevenlabs_agent, fügen Sie den folgenden Code ein, ersetzen Sie die Agenten-ID in ELEVENLABS_URL und klicken Sie auf Save. Das Szenario nimmt einen eingehenden Anruf entgegen, streamt ihn an den Agenten und handelt nach der Entscheidung, wenn die Konversation endet. Für einen ausgehenden Anruf öffnen Sie den WebSocket im Handler CallEvents.Connected des von Ihnen getätigten Anrufs.

const ELEVENLABS_URL =
"wss://api.elevenlabs.io/v1/convai/conversation/voximplant/agent_7101k5zvyjhmfg983brhmhkd98n6";
VoxEngine.addEventListener(AppEvents.CallAlerting, ({ call }) => {
call.answer();
let decision = null;
const ws = VoxEngine.createWebSocket(ELEVENLABS_URL, {
headers: [
{
name: "Authorization",
value: `Bearer ${VoxEngine.getSecretValue("ELEVENLABS_API_KEY")}`,
},
],
});
ws.addEventListener(WebSocketEvents.OPEN, () => {
call.sendMediaTo(ws, {
encoding: WebSocketAudioEncoding.PCM16_8KHZ,
customParameters: { customer_name: "Ana", task_id: "task-7" },
});
ws.sendMediaTo(call);
});
ws.addEventListener(WebSocketEvents.MESSAGE, ({ text }) => {
const message = JSON.parse(text);
if (message.customEvent === "elevenlabs-decision") {
decision = message.payload;
Logger.write(`ElevenLabs decision: ${JSON.stringify(decision)}`);
}
});
ws.addEventListener(WebSocketEvents.CLOSE, (e) => {
Logger.write(`ElevenLabs socket closed: code=${e.code} reason=${e.reason}`);
if (decision?.action === "transfer-to-agent") {
// Route the caller to a human here, for example with VoxEngine.callPSTN().
call.say("Connecting you to an agent.", { language: VoiceList.Amazon.en_US_Joanna });
call.addEventListener(CallEvents.PlaybackFinished, () => call.hangup());
return;
}
call.hangup();
});
call.addEventListener(CallEvents.Disconnected, () => {
ws.close();
VoxEngine.terminate();
});
});

Voximplant: Szenario im Editor

4

Anrufe an das Szenario weiterleiten

Öffnen Sie Routing, klicken Sie auf Create rule, geben Sie ihr einen Namen und weisen Sie das Szenario elevenlabs_agent zu. Das Standardmuster .* leitet jeden Anruf an die Anwendung über das Szenario weiter; beschränken Sie es auf eine Telefonnummer, wenn die Anwendung auch andere Anrufe verarbeitet. Um eine Telefonnummer weiterzuleiten, fügen Sie sie unter Numbers zur Anwendung hinzu.

Voximplant: Regel erstellen

5

Testanruf tätigen

Sie können die Anwendung ohne Telefonnummer im Browser anrufen:

  1. Öffnen Sie Users, klicken Sie auf Create user und erstellen Sie einen Benutzer mit Passwort.

    Voximplant: Neuer Benutzer

  2. Klicken Sie unter Routing auf Test tools und dann auf Softphone. Melden Sie sich als dieser Benutzer an, erlauben Sie den Mikrofonzugriff, geben Sie ein beliebiges Ziel ein und rufen Sie an. Der Agent antwortet mit seiner ersten Nachricht.

  3. Öffnen Sie nach Ende des Anrufs Call history. Jeder Anruf führt neben dem Anruf selbst eine WebSocket-Verbindung auf. Klicken Sie auf View log, um die Sitzung anzuzeigen.

    Voximplant: Anrufverlauf

    Das Protokoll zeigt die von ElevenLabs gesendete Entscheidung, das Schließen des WebSockets und die anschließende Aktion des Szenarios. In diesem Beispiel bat der Anrufer um eine Person, daher lautet die Entscheidung transfer-to-agent mit dem vom Agenten angegebenen Grund.

    Voximplant: Sitzungsprotokoll mit dem Ereignis
elevenlabs-decision

Handeln Sie nach dem Ereignis elevenlabs-decision, nicht nach MEDIA_ENDED. Voximplant löst MEDIA_ENDED nach etwa einer Sekunde ohne Audio von ElevenLabs aus. Das kann mitten in einer Konversation passieren.

Dynamische Variablen

Jeder Schlüssel in customParameters wird zu einer dynamischen Variable mit demselben Namen. Werte, die keine Strings sind, werden in Text umgewandelt. Beispielsweise wird aus true der Wert "true". customParameters kann ein Objekt oder ein JSON-kodierter String sein. Schlüssel, die mit system__ oder integration__ beginnen, sind reserviert und werden verworfen.

Entscheidungsereignisse

Wenn die Konversation endet, sendet ElevenLabs vor seiner stop-Nachricht genau eine Entscheidung:

{ "customEvent": "elevenlabs-decision", "payload": { "action": "terminate", "reason": "under_18" } }
actionWann sie gesendet wirdreason
transfer-to-agentDer Agent hat An Nummer weiterleiten mit einer Voximplant-Weiterleitungsregel aufgerufen.Der Grund, den der Agent für die Weiterleitung angegeben hat.
timeoutFür die Konversation ist bei Stille oder nach der letzten Nachricht des Agenten ein Timeout aufgetreten, oder der Agent hat den Anruf nach 15 Sekunden Stille des Anrufers beendet, ohne die Sprechzeit des Agenten.Die Timeout-Nachricht oder der vom Agenten angegebene Grund.
terminateDer Agent hat den Anruf mit Anruf beenden beendet oder die Konversation endete normal.Der Grund, den der Agent bei Anruf beenden angegeben hat, falls vorhanden.
unexpectedDie Konversation wurde aufgrund eines Fehlers beendet.Eine Beschreibung des Fehlers.

Wenn das Szenario zuerst stop sendet oder den WebSocket schließt, beispielsweise weil der Anrufer aufgelegt hat, sendet ElevenLabs keine Entscheidung.

Audio

Voximplant und ElevenLabs tauschen in beide Richtungen 16-Bit-monaurales lineares PCM mit 8 kHz aus. ElevenLabs gibt das Audio des Agenten nahezu in Echtzeit aus. Wenn der Anrufer den Agenten unterbricht, werden höchstens etwa 0,4 Sekunden der unterbrochenen Antwort weiter abgespielt.

Authentifizierungsfehler

ElevenLabs schließt den WebSocket mit Code 1008 und dem Grund bad auth token, wenn der Header Authorization fehlt oder fehlerhaft ist, der API-Schlüssel ungültig ist oder nicht von der IP-Adresse der Verbindung verwendet werden darf, der Schlüssel zu einem anderen Workspace gehört oder der Benutzer des Schlüssels nicht auf einen Agenten mit aktivierter Authentifizierung zugreifen kann.

Einschränkungen und nicht unterstützte Funktionen

  • Client-Tools und das Systemtool Tastenton wiedergeben werden nicht unterstützt. An Nummer weiterleiten funktioniert nur über eine Voximplant-Weiterleitungsregel; das Szenario entscheidet, wohin der Anrufer weitergeleitet wird.
  • Konfigurationsüberschreibungen wie eine andere erste Nachricht können nicht aus dem Szenario übergeben werden; nur dynamische Variablen sind möglich.
  • Datenerfassungsergebnisse werden nicht an das Szenario gesendet. Verwenden Sie dafür den Post-Call-Webhook.