
Partager:
Oleksii est Developer Advocate chez Vonage, auteur et conteur. Il s'intéresse à l'IA/ML, aux communications unifiées, aux technologies de l'éducation, aux technologies cloud et à l'open source.
Comment jouer un flux audio dans un appel téléphonique avec Python
Temps de lecture : 12 minutes
Il existe plusieurs raisons de vouloir diffuser un flux audio lors d'un appel. Au quotidien, les développeurs souhaitent mettre l'appelant en attente pour qu'il se détende, et vous pouvez diffuser la musique qui fait baisser son niveau de stress.
Voici quelques exemples de scénarios :
Jouer la musique d'attente de l'appelant.
Conférence téléphonique - diffuser de la musique lors d'une conférence téléphonique jusqu'à ce que le quorum soit atteint.
Message préenregistré - utile lorsque Vonage ne prend pas en charge votre langue dans son moteur de synthèse vocale.
Boîte vocale - lorsque vous appelez et laissez un message, le message vocal peut être réécouté lors d'un appel ultérieur.
Vous verrez ci-dessous comment mettre en œuvre les scénarios 1 et 2. Les autres scénarios seront traités dans de futurs articles de blog.
Il existe également deux méthodes pour diffuser un flux audio lors d'un appel :
Utilisation d'un objet de contrôle d'appel (NCCO)
Utilisation de l'API Voice (VAPI)
Vous utiliserez la méthode 1 pour le scénario 1 et la méthode 2 pour le scénario 2.
Les objets de contrôle d'appel (NCCO) constituent un moyen pratique de contrôler un appel entrant. Les NCCOs consistent en une configuration JSON qui décrit comment gérer l'appel. Il existe un guide de référence détaillé sur les NCCO où sont décrites les nombreuses actions qui peuvent être effectuées. Une seule action nous intéresse dans nos scénarios, stream. Il existe en fait deux façons d'utiliser l'action stream de deux manières : synchrone et asynchrone. Asynchrone signifie que l'appelant peut interrompre l'audio stream à l'aide du clavier du téléphone. Certaines options d'action de flux sont intéressantes :
Option Description de l'option
| 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. |
Exemple de Python NCCO pour la diffusion de données audio dans un appel :
[
{
"action": "stream",
"streamUrl": ["https://acme.com/music/relaxing_music.mp3"]
}
]Les formats de fichiers audio pris en charge sont MP3 et WAV 16 bits.
Nous avons déjà développé une application Vonage de démarrage pour recevoir un appel et diffuser de la musique dans votre Call en utilisant deux scénarios. Avec l'application de démarrage, vous devez ajouter vos informations d'identification au fichier .env et déployer l'application à l'aide des espaces de code Github. Un espace de code est un environnement de développement hébergé dans le nuage GitHub. Les espaces de code GitHub sont personnalisables par projet, et les utilisateurs peuvent définir le système d'exploitation Linux à utiliser, transmettre les ports couramment utilisés, définir des variables d'environnement, etc. De même, il est possible de modifier l'application de démarrage et d'expérimenter.
Pour commencer : Mettre à la fourche ce dépôt. Ouvrez-le dans Codespaces en cliquant sur "Create codespace on main"
Vous pouvez également déployer l'application avec Python et ngrok.
Créer une nouvelle application Vonage
S'identifier/S'inscrire gratuitement developer.vonage.com; pour utiliser l'API Voice de Vonage, vous devrez créer une application Vonage à partir du portail des développeurs. Toutes les demandes adressées à l'API Voice Vonage nécessitent une authentification. Nous utiliserons la clé API et la clé privée.
Dans le menu de gauche icicliquez sur Paramètres API. Sous l'onglet Clés API, vous trouverez votre clé API. Ouvrir Applications et créez votre nouvelle application en cliquant sur le bouton "Créer une nouvelle application".

Et cliquez sur le bouton "Generate public and private key". Collez la clé dans le fichier private.key dans le fichier Codespace correspondant. Activez les capacités Voice.
Dans le terminal Codespase, exécutez les commandes suivantes :
et
Copiez et collez ceci dans l'URL de la réponse et l'URL de l'événement conformément aux champs des paramètres de l'application Vonage.

Et cliquez sur le bouton "Générer une nouvelle application" en bas de page.
Ce tutoriel utilise également un numéro de téléphone virtuel.
Nous devons acheter un numéro virtuel pour que notre application accepte les appels téléphoniques :
Rechercher et acheter des numéros de téléphone virtuels en utilisant Tableau de bord Vonage.
Sélectionnez
Voicedans le menu déroulant. Liez les numéros en utilisant le tableau de bord de Vonage, allez dans Applications, ouvrez l'application concernée (par exemple VoiceApp), et cliquez sur le bouton "Lier" dans la liste des numéros.

Streaming audio dans votre appel à l'aide d'un NCCO
Dans ce scénario, les utilisateurs appelleront un numéro Vonage, et la musique sera diffusée dans les appels des utilisateurs à l'aide d'un NCCO avec une stream action. Nous utiliserons le fichier suivant scenario-1.py fichier :
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)Essayez-le
Vous pouvez exécuter votre code dans Codespace. Exécutez les commandes suivantes :
Installer les dépendances
Démarrez votre application avec la commande suivante
Dans le terminal, ouvrez l'onglet Port (onglet). Cliquez sur Private dans la colonne Visibility et remplacez-la par Public.

La séquence des événements dans ce scénario est la suivante :
Composez votre numéro Vonage.
Vonage reçoit l'appel.
Un rappel est généré sur l'URL du webhook Answer que vous avez spécifié.
Votre application reçoit le rappel et répond par un NCCO.
La musique est diffusée dans votre appel.
Streaming audio dans votre appel à l'aide de Voice API
Dans ce scénario, vous appelez votre Numbers Vonage, et vous êtes joint à une conférence (dans notre cas, une conférence apaisée). Vous pouvez ensuite naviguer jusqu'à l'URL /stream pour lancer la diffusion en continu dans la conférence. La musique est alors diffusée dans votre conférence à l'aide de Voice API.
Essayez-le
Vous pouvez exécuter votre code dans Codespace, en suivant les étapes suivantes : Installer les dépendances
Démarrez votre application avec la commande suivante
Dans le terminal, ouvrez l'onglet Port (onglet). Cliquez sur Private dans la colonne Visibility et remplacez-la par Public.

Maintenant que vous êtes là, nous sommes prêts à diffuser de l'audio !
Faites ces choses supplémentaires :
Composez votre numéro Vonage.
Exécutez la commande suivante dans la nouvelle fenêtre du terminal
echo "https://${CODESPACE_NAME}-9000.preview.app.github.dev/stream". Naviguez jusqu'au lien (dans le cas d'une exécution sur une machine locale,localhost:9000/stream), et de la musique sera diffusée dans votre conférence.
Les actions suivantes se produiront :
Vonage reçoit l'appel.
Le rappel est généré sur l'URL du webhook Answer que vous avez spécifié.
Votre application reçoit le rappel et répond par un NCCO.
Les appelants ont rejoint une conférence.
Musique diffusée lors de votre conférence
Synthèse
Félicitations ! Vous pouvez utiliser le flux de travail et préparer des exemples de code pour diffuser des données audio connexes dans un appel et jouer de la musique connexe lorsque les appelants sont en attente.
Montrez vos créations ou faites-nous savoir comment nous pouvons vous aider ! Rejoignez la conversation sur notre Communauté Vonage Slack ou envoyez-nous un message sur sur Twitter.