https://a.storyblok.com/f/270183/39942/02954361fa/python-audiostream.png

Como reproduzir um fluxo de áudio durante uma ligação telefônica usando Python

Publicado em March 13, 2023

Tempo de leitura: 11 minutos

Existem várias razões pelas quais você pode querer reproduzir um fluxo de áudio durante uma chamada. Um caso de uso comum é quando os desenvolvedores querem colocar o interlocutor em espera para ajudá-lo a ficar mais relaxado, e é possível reproduzir uma música que reduza seus níveis de estresse.

Alguns exemplos de cenários incluem:

  • Reproduzindo música de espera para quem está na linha.

  • Teleconferência — reproduza música durante a teleconferência até que haja quorum.

  • Mensagem pré-gravada — útil nos casos em que a Vonage não oferece suporte ao seu idioma no mecanismo de conversão de texto em fala.

  • Voice mail — quando você liga e deixa uma mensagem, a mensagem de voz pode ser reproduzida em uma ligação posterior.

A seguir, você verá como implementar os cenários 1 e 2. Os demais cenários serão abordados em futuras postagens do blog.

Existem também dois métodos para reproduzir um fluxo de áudio durante uma chamada:

  1. Utilização de um Objeto de Controle de Chamadas (NCCO)

  2. Como usar a Voice API (VAPI)

Você utilizará o método 1 para o cenário 1 e o método 2 para o cenário 2.

Os Objetos de Controle de Chamadas (NCCOs) oferecem uma maneira prática de controlar uma chamada recebida. Os NCCOs consistem em uma configuração JSON que descreve como lidar com a chamada. Há um guia de referência sobre NCCOs , no qual estão descritas as diversas ações que podem ser realizadas. Há apenas uma ação que nos interessa em nossos cenários, stream. Na verdade, há duas maneiras de usar a stream ação: síncrona e assíncrona. Assíncrona significa que o chamador pode interromper o áudio stream usando o teclado do telefone. Existem algumas opções de ação de fluxo que são de interesse:

Opção Descrição

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.

Um exemplo de NCCO em Python para reproduzir áudio durante uma chamada:

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

Os formatos de arquivo de áudio compatíveis são MP3 e WAV de 16 bits.

Já desenvolvemos um aplicativo inicial do Vonage para receber uma chamada e reproduzir música durante a chamada, utilizando dois cenários. Com o aplicativo inicial, você precisa adicionar suas credenciais ao arquivo .env e implantar o aplicativo usando o GitHub Codespaces. Um Codespace é um ambiente de desenvolvimento hospedado na nuvem do GitHub. Os GitHub Codespaces são personalizáveis por projeto, e os usuários podem definir o sistema operacional baseado em Linux a ser usado, redirecionar portas comumente utilizadas, definir variáveis de ambiente etc. Além disso, você pode editar o aplicativo inicial e fazer testes.

Para começar: Faça um fork este repositório. Abra-o no Codespaces clicando em “Criar codespace no principal”

Como alternativa, você pode implantar o aplicativo com Python e ngrok.

Criar um novo aplicativo da Vonage

Faça login/Cadastre-se gratuitamente developer.vonage.com; para usar a Voice API da Vonage, você precisará criar uma Application da Vonage no portal do desenvolvedor. Todas as solicitações à Voice API da Vonage exigem autenticação. Usaremos a chave da Voice API e o arquivo private.key.

No menu à esquerda aqui, clique em “Configurações da API”. Na aba “Chaves de API”, você encontrará sua chave de API. Abra Aplicativo e crie seu novo aplicativo clicando no botão “Criar um novo aplicativo”.

Create a new Vonage app

E clique no botão “Gerar chave pública e privada”. Cole a chave no private.key arquivo no Codespace correspondente. Ative os recursos de Voice.

No terminal do Codespase, execute os seguintes comandos:

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

e

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

Copie e cole isso nos campos “URL da resposta” e “URL do evento”, de acordo com os campos nas configurações do aplicativo da Vonage.

Codespase URLs

E clique no botão “Gerar novo aplicativo”, na parte inferior.

Este tutorial também utiliza um número de telefone virtual.

Precisamos comprar um número virtual para que nosso aplicativo possa receber chamadas telefônicas:

  • Pesquise e compre números de telefone virtuais usando Painel da Vonage.

  • Selecione Voice recurso no menu suspenso. Para vincular números usando o Painel da Vonage, acesse “Applications”, abra o aplicativo relacionado (por exemplo, VoiceApp) e clique no botão “Vincular” na lista de números.

Link number with the application

Áudio transmitido para a sua chamada por meio de um NCCO

Nesse cenário, os usuários ligarão para um número da Vonage, e a música será transmitida durante as chamadas por meio de um NCCO com uma stream ação. Usaremos o seguinte scenario-1.py arquivo:

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)

Experimente

Você pode executar seu código no Codespace. Execute os seguintes comandos:

Instale as dependências

pip install -r requirements.txt

Inicie seu aplicativo com o seguinte comando

python3 scenario-1.py

No terminal, abra a Port aba. Clique em Private na Visibility coluna e altere para Public.

Change port visibility

A sequência de eventos neste cenário é a seguinte:

  • Ligue para o seu número da Vonage.

  • A Vonage recebe a ligação.

  • É gerada uma chamada de retorno na URL do webhook de resposta que você especificou.

  • Seu aplicativo recebe a chamada de retorno e responde com um NCCO.

  • É reproduzida uma música durante a sua ligação.

Áudio transmitido para a sua chamada usando a Voice API

Nesse cenário, você liga para o seu número da Vonage e é conectado a uma conferência (no nosso caso, a “Soothing Conference”). Em seguida, você pode acessar o /stream URL para iniciar a transmissão na conferência. A música é então reproduzida na sua conferência por meio da Voice API.

Experimente

Você pode executar seu código no Codespace seguindo estas etapas: Instale as dependências

pip install -r requirements.txt

Inicie seu aplicativo com o seguinte comando

python3 scenario-2.py

No terminal, abra a Port aba. Clique em Private na Visibility coluna e altere para Public.

Change port visibility

Agora que você está aqui, estamos prontos para transmitir um pouco de áudio!

Faça o seguinte:

  1. Ligue para o seu número da Vonage.

  2. Execute o comando a seguir na nova janela do terminal echo "https://${CODESPACE_NAME}-9000.preview.app.github.dev/stream". Acesse o link (caso esteja executando em uma máquina local, localhost:9000/stream), e a música será reproduzida na sua conferência.

As seguintes ações ocorrerão:

  • A Vonage recebe a ligação.

  • A chamada de retorno é gerada na URL do webhook de resposta que você especificou.

  • Seu aplicativo recebe a chamada de retorno e responde com um NCCO.

  • Os participantes entraram na teleconferência.

  • Música tocada na sua conferência

Conclusão

Parabéns! Você pode usar o fluxo de trabalho e preparar exemplos de código para transmitir áudio relacionado durante uma chamada e reproduzir músicas relacionadas quando os chamadores estiverem em espera.

Mostre suas criações ou diga-nos como podemos ajudar! Participe da conversa na nossa Slack da Comunidade Vonage ou envie-nos uma mensagem no Twitter.

Compartilhar:

https://a.storyblok.com/f/270183/400x409/b965ab37c0/oleksii-borysenko.png
Oleksii BorysenkoEx-funcionários da Vonage

Oleksii é Developer Advocate na Vonage, autor e contador de histórias. Seus interesses incluem IA/ML, comunicações unificadas, tecnologias educacionais, tecnologias em nuvem e código aberto.