
Compartir:
Oleksii es Developer Advocate en Vonage, autor y narrador. Sus intereses incluyen IA/ML, comunicaciones unificadas, tecnologías educativas, tecnologías en la nube y código abierto.
Cómo reproducir una secuencia de audio en una llamada telefónica con Python
Tiempo de lectura: 11 minutos
Hay varias razones por las que puedes querer reproducir un flujo de audio en una llamada. Un caso de uso cotidiano es cuando los desarrolladores quieren poner a la persona que llama en espera para ayudar a mantenerla relajada, y usted puede reproducir la música que baje sus niveles de estrés.
Algunos ejemplos son
Reproducir música de llamada en espera.
Multiconferencia: reproduce música en una multiconferencia hasta que haya quórum.
Mensaje pregrabado: útil cuando Vonage no admite tu idioma en su motor de texto a voz.
Buzón de voz: cuando llamas y dejas un mensaje, el mensaje de voz puede reproducirse en una llamada posterior.
A continuación, verás cómo implementar los escenarios 1 y 2. Los demás escenarios se tratarán en futuras entradas del blog.
También hay dos métodos para reproducir un flujo de audio en una llamada:
Utilización de un objeto de control de llamada (OCN)
Uso de la Voice API (VAPI)
Utilizará el método 1 para el escenario 1 y el método 2 para el escenario 2.
Los Objetos de Control de Llamada (NCCOs) proporcionan una manera conveniente de controlar una llamada entrante. Los NCCOs consisten en alguna configuración JSON que describe cómo manejar la Llamada. Existe una detallada guía de referencia sobre NCCOs donde se describen las muchas acciones que se pueden llevar a cabo. Sólo hay una acción que nos interesa en nuestros escenarios, stream. En realidad hay dos formas de utilizar la stream acción: sincrónica y asincrónica. Asíncrono significa que la persona que llama puede interrumpir el audio stream utilizando el teclado del teléfono. Hay algunas opciones de acción de transmisión que son de interés:
Opción Descripción
| 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. |
Un ejemplo de Python NCCO para reproducir audio en una llamada:
[
{
"action": "stream",
"streamUrl": ["https://acme.com/music/relaxing_music.mp3"]
}
]Los formatos de archivo de audio compatibles son MP3 y WAV de 16 bits.
Ya hemos desarrollado una aplicación de inicio de Vonage para recibir una llamada y reproducir música en tu llamada utilizando dos escenarios. Con la aplicación de inicio, necesitas añadir tus credenciales al archivo .env e implementar la aplicación utilizando Github Codespaces. Un codespace es un entorno de desarrollo alojado en la nube de GitHub. Los GitHub Codespaces son personalizables por proyecto, y los usuarios pueden establecer el sistema operativo basado en Linux a utilizar, reenviar puertos de uso común, establecer variables de entorno, etc. Además, se puede editar la aplicación de inicio y experimentar.
Para empezar: Fork este repositorio. Ábrelo en Codespaces haciendo clic en "Crear espacio de código en main".
Alternativamente, puede desplegar la aplicación con Python y ngrok.
Crea una nueva aplicación de Vonage
Iniciar sesión/Registrarse gratis developer.vonage.compara usar la Voice API de Vonage, tendrás que crear una aplicación de Vonage desde el portal para desarrolladores. Todas las solicitudes a la Voice API de Vonage requieren autenticación. Utilizaremos la clave API y private.key.
En el menú de la izquierda aquíhaga clic en Configuración de la API. En la pestaña Claves API, encontrará su clave API. Abra Aplicaciones y cree su nueva aplicación haciendo clic en el botón "Crear una nueva aplicación".

Y haz clic en el botón "Generar clave pública y privada". Pegue la clave en private.key en el espacio de código correspondiente. Active las funciones de Voice.
En el terminal Codespase, ejecute los siguientes comandos:
y
Copia y pega esto en la URL de la respuesta y la URL del evento de acuerdo con los campos de la configuración de la aplicación de Vonage.

Y pulse el botón "Generar nueva solicitud" en la parte inferior.
Este tutorial también utiliza un número de teléfono virtual.
Necesitamos comprar un número virtual para que nuestra aplicación acepte llamadas telefónicas:
Busca y compra números de teléfono virtuales con Panel de Vonage.
Seleccione
Voiceen el menú desplegable. Vincula números usando Vonage Dashboard, ve a Applications, abre la aplicación relacionada (por ejemplo, VoiceApp) y haz clic en el botón "Link" en la lista de números.

Transmisión de audio a su llamada mediante una NCCO
En este escenario, los usuarios llamarán a un número de Vonage y la música se transmitirá a las llamadas de los usuarios mediante una NCCO con una acción stream acción. Utilizaremos el siguiente scenario-1.py archivo:
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)Pruébelo
Puede ejecutar su código en Codespace. Ejecute los siguientes comandos:
Instalar las dependencias
Inicie su aplicación con el siguiente comando
En el terminal, abra la pestaña Port pestaña Haga clic en Private en la columna Visibility y cámbialo por Public.

La secuencia de acontecimientos en este escenario es la siguiente:
Marca tu número de Vonage.
Vonage recibe la llamada.
Se genera una devolución de llamada en la URL del webhook de respuesta que especificó.
Su aplicación recibe la llamada de retorno y responde con una NCCO.
La música se reproduce en tu llamada.
Transmisión de audio a su llamada mediante Voice API
En este escenario, llamas a tu número de Vonage y se te une a una conferencia (en nuestro caso, conferencia calmante). Luego puedes navegar a la /stream URL para iniciar el streaming en la conferencia. La música se reproduce en tu conferencia mediante Voice API.
Pruébelo
Puede ejecutar su código en Codespace, ejecute los siguientes pasos: Instale las dependencias
Inicie su aplicación con el siguiente comando
En el terminal, abra la pestaña Port pestaña Haga clic en Private en la columna Visibility y cámbialo por Public.

Ahora que estás aquí, ¡estamos listos para transmitir audio!
Haz estas cosas extra:
Marca tu número de Vonage.
Ejecute el siguiente comando en la nueva ventana de terminal
echo "https://${CODESPACE_NAME}-9000.preview.app.github.dev/stream". Navegue hasta el enlace (en caso de ejecutar en una máquina local,localhost:9000/stream), y la música se reproducirá en su conferencia.
Se producirán las siguientes acciones:
Vonage recibe la llamada.
La devolución de llamada se genera en la URL del webhook de respuesta especificada.
Su aplicación recibe la llamada de retorno y responde con una NCCO.
Los llamantes se unieron a una conferencia.
Música para su conferencia
Recapitulación
¡Enhorabuena! Puede utilizar el flujo de trabajo y preparar ejemplos de código para transmitir audio relacionado en una llamada y reproducir música relacionada cuando las personas que llaman están en espera.
Muestra tus creaciones o dinos cómo podemos ayudarte. Únete a la conversación en nuestro Slack de la comunidad de Vonage o envíanos un mensaje en Twitter.