https://d226lax1qjow5r.cloudfront.net/blog/blogposts/how-to-play-an-audio-stream-into-a-phone-call-with-python/python-audiostream.png

Wie man mit Python einen Audio-Stream in einen Telefonanruf einspielt

Zuletzt aktualisiert am March 13, 2023

Lesedauer: 11 Minuten

Es gibt verschiedene Gründe, warum Sie einen Audiostream während eines Anrufs abspielen möchten. Ein alltäglicher Anwendungsfall ist, wenn Entwickler den Anrufer in die Warteschleife legen wollen, um ihn zu entspannen, und Sie können die Musik abspielen, die den Stresspegel senkt.

Einige Beispielszenarien sind:

  • Abspielen der Warteschleifenmusik des Anrufers.

  • Telefonkonferenz - Spielen Sie Musik in einer Telefonkonferenz ab, bis Sie beschlussfähig sind.

  • Aufgezeichnete Nachricht - nützlich, wenn Vonage Ihre Sprache nicht in seiner Text-to-Speech-Engine unterstützt.

  • Voicemail - wenn Sie anrufen und eine Nachricht hinterlassen, kann die Sprachnachricht bei einem späteren Anruf wiedergegeben werden.

Im Folgenden sehen Sie, wie Sie die Szenarien 1 und 2 umsetzen. Die anderen Szenarien werden in zukünftigen Blogbeiträgen behandelt.

Es gibt auch zwei Methoden für die Wiedergabe eines Audiostroms in einem Anruf:

  1. Verwendung eines Anrufsteuerungsobjekts (NCCO)

  2. Verwendung der Sprach-API (VAPI)

Sie werden Methode 1 für Szenario 1 und Methode 2 für Szenario 2 verwenden.

Call Control Objects (NCCOs) bieten eine bequeme Möglichkeit zur Steuerung eines eingehenden Anrufs. NCCOs bestehen aus einer JSON-Konfiguration, die beschreibt, wie der Anruf zu behandeln ist. Es gibt eine detaillierte Referenzhandbuch zu NCCOs in dem die vielen Aktionen beschrieben werden, die ausgeführt werden können. In unseren Szenarien ist nur eine Aktion von Interesse, stream. Es gibt eigentlich zwei Arten, wie Sie die stream Aktion verwenden: synchron und asynchron. Asynchron bedeutet, dass der Anrufer den Ton unterbrechen kann stream über die Telefontastatur unterbrechen. Es gibt einige Optionen für Stream-Aktionen, die von Interesse sind:

Option Beschreibung

Syntax Description
streamUrl An array containing a single URL to an MP3 or WAV (16-bit) audio file to stream to the Call or Conversation.
level Set the audio level of the stream in the range -1 >=level<=1 with a precision of 0.1. The default value is 0.
bargeIn If set to true, this action is terminated when the user presses a button on the keypad. Use this feature to enable users to choose an option without having to listen to the whole message in your Interactive Voice Response (IVR) system. If you set bargeIn to true on one more Stream actions then the next action in the NCCO stack must be an input action. The default value is false.
loop The Number of times audio is repeated before the Call is closed. The default value is 1. Set to 0 to loop infinitely.

Ein Beispiel für Python NCCO zum Abspielen von Audio in einem Anruf:

[
  {
    "action": "stream",
    "streamUrl": ["https://acme.com/music/relaxing_music.mp3"]
  }
]

Die unterstützten Audiodateiformate sind MP3 und 16-Bit-WAV.

Wir haben bereits eine Vonage-Starteranwendung entwickelt, mit der Sie Anrufe entgegennehmen und Musik über zwei Szenarien abspielen können. Bei der Starter-Anwendung müssen Sie Ihre Anmeldeinformationen zur .env-Datei hinzufügen und die Anwendung mit Github Codespaces bereitstellen. Ein Codespace ist eine Entwicklungsumgebung, die in der GitHub-Cloud gehostet wird. GitHub Codespaces sind projektspezifisch anpassbar, und Benutzer können das zu verwendende Linux-basierte Betriebssystem festlegen, häufig verwendete Ports weiterleiten, Umgebungsvariablen festlegen usw. Außerdem können Sie die Startanwendung bearbeiten und experimentieren.

Um loszulegen: Fork dieses Repository. Öffnen Sie es in Codespaces, indem Sie auf "Create codespace on main" klicken.

Alternativ können Sie die Anwendung auch mit Python und ngrok.

Erstellen einer neuen Vonage-Anwendung

Kostenlos anmelden/registrieren entwickler.vonage.deUm die Vonage Voice API nutzen zu können, müssen Sie eine Vonage Anwendung über das Entwicklerportal erstellen. Alle Anfragen an die Vonage Voice API erfordern eine Authentifizierung. Wir werden den API-Schlüssel und den private.key verwenden.

Im linken Menü hierauf API-Einstellungen. Unter der Registerkarte API-Schlüssel finden Sie Ihren API-Schlüssel. Öffnen Sie . Anwendung und erstellen Sie Ihre neue Anwendung, indem Sie auf die Schaltfläche "Neue Anwendung erstellen" klicken.

Create a new Vonage app

Und klicken Sie auf die Schaltfläche "Öffentlichen und privaten Schlüssel generieren". Fügen Sie den Schlüssel in die private.key Datei in den entsprechenden Codespace ein. Schalten Sie die Sprachfunktionen ein.

Führen Sie im Codespase-Terminal die folgenden Befehle aus:

echo "https://${CODESPACE_NAME}-9000.preview.app.github.dev/webhooks/answer"

und

echo "https://${CODESPACE_NAME}-9000.preview.app.github.dev/webhooks/event"

Kopieren Sie dies und fügen Sie es in die Felder Antwort-URL und Ereignis-URL in Übereinstimmung mit den Einstellungen der Vonage-Anwendung ein.

Codespase URLs

Und klicken Sie unten auf die Schaltfläche "Neue Bewerbung erstellen".

In diesem Lernprogramm wird auch eine virtuelle Telefonnummer verwendet.

Wir müssen eine virtuelle Nummer für unsere App kaufen, damit wir Anrufe annehmen können:

  • Suchen und kaufen Sie virtuelle Telefonnummern mit Vonage Dashboard.

  • Wählen Sie Voice Funktion aus dem Dropdown-Menü. Verknüpfen Sie Nummern über Vonage Dashboard, gehen Sie zu Anwendungen, öffnen Sie die entsprechende App (z. B. VoiceApp) und klicken Sie auf die Schaltfläche "Verknüpfen" in der Liste der Nummern.

Link number with the application

Streaming von Audio in Ihr Gespräch mit einem NCCO

In diesem Szenario rufen die Benutzer eine Vonage-Nummer an, und die Musik wird in die Anrufe der Benutzer gestreamt, indem ein NCCO mit einer stream Aktion. Wir werden die folgende Datei verwenden scenario-1.py Datei:

from dotenv import load_dotenv
from flask import Flask, request, jsonify

from os import environ as env

# Load environment variables from a .env file:
load_dotenv('.env')

# Load in configuration from environment variables:
VONAGE_APPLICATION_ID = env['VONAGE_APPLICATION_ID']
CONF_NAME = env['CONF_NAME']
STREAM_URL = env['STREAM_URL']

app = Flask(__name__)

ncco = [
   {
       "action": "stream",
       "streamUrl": [
           STREAM_URL
       ]
   }
]

@app.route("/webhooks/answer")
def answer_call():
   return jsonify(ncco)

@app.route("/webhooks/event", methods=['POST'])
def events():
   return ("200")

if __name__ == '__main__':
   app.run(host="localhost", port=9000)

Probieren Sie es aus

Sie können Ihren Code in Codespace ausführen. Führen Sie die folgenden Befehle aus:

Installieren Sie die Abhängigkeiten

pip install -r requirements.txt

Starten Sie Ihre Anwendung mit folgendem Befehl

python3 scenario-1.py

Öffnen Sie im Terminal die Registerkarte Port Registerkarte. Klicken Sie auf Private in der Spalte Visibility und ändern Sie sie in Public.

Change port visibility

Die Abfolge der Ereignisse in diesem Szenario ist wie folgt:

  • Wählen Sie Ihre Vonage-Nummer.

  • Vonage nimmt den Anruf entgegen.

  • Es wird ein Callback auf die von Ihnen angegebene Answer-Webhook-URL erzeugt.

  • Ihre Anwendung empfängt den Rückruf und antwortet mit einem NCCO.

  • Musik wird in Ihren Anruf eingespielt.

Audio-Streaming in Ihrem Anruf mit Voice API

In diesem Szenario rufen Sie Ihre Vonage-Nummer an und werden einer Konferenz zugeschaltet (in unserem Fall der Beruhigungskonferenz). Sie können dann zur /stream URL, um das Streaming in die Konferenz zu starten. Die Musik wird dann über die Sprach-API in Ihre Konferenz eingespielt.

Probieren Sie es aus

Sie können Ihren Code in Codespace ausführen, führen Sie die folgenden Schritte aus: Installieren Sie die Abhängigkeiten

pip install -r requirements.txt

Starten Sie Ihre Anwendung mit folgendem Befehl

python3 scenario-2.py

Öffnen Sie im Terminal die Registerkarte Port Registerkarte. Klicken Sie auf Private in der Spalte Visibility und ändern Sie sie in Public.

Change port visibility

Jetzt, wo Sie hier sind, sind wir bereit, Audio zu streamen!

Tun Sie diese zusätzlichen Dinge:

  1. Wählen Sie Ihre Vonage-Nummer.

  2. Führen Sie den folgenden Befehl in dem neuen Terminalfenster aus echo "https://${CODESPACE_NAME}-9000.preview.app.github.dev/stream". Navigieren Sie zu dem Link (wenn Sie auf einem lokalen Rechner arbeiten, localhost:9000/stream), und die Musik wird in Ihrer Konferenz abgespielt.

Die folgenden Aktionen werden durchgeführt:

  • Vonage nimmt den Anruf entgegen.

  • Der Rückruf wird über die von Ihnen angegebene Antwort-Webhook-URL generiert.

  • Ihre Anwendung empfängt den Rückruf und antwortet mit einem NCCO.

  • Die Anrufer sind einer Konferenz beigetreten.

  • Musik, die auf Ihrer Konferenz gespielt wird

Nachbereitung

Herzlichen Glückwunsch! Sie können den Workflow verwenden und Codebeispiele vorbereiten, um zugehörige Audiodaten in einen Anruf zu streamen und zugehörige Musik abzuspielen, wenn Anrufer in der Warteschleife sind.

Zeigen Sie uns Ihre Kreationen, oder lassen Sie uns wissen, wie wir Ihnen helfen können! Beteiligen Sie sich am Gespräch auf unserem Vonage Community Slack oder senden Sie uns eine Nachricht auf Twitter.

Teilen Sie:

https://a.storyblok.com/f/270183/400x409/b965ab37c0/oleksii-borysenko.png
Oleksii BorysenkoVonage Ehemalige

Oleksii ist ein Developer Advocate bei Vonage, Autor und Geschichtenerzähler. Seine Interessen umfassen KI/ML, Unified Communications, Bildungstechnologien, Cloud-Technologien und Open Source.