
Compartilhar:
Ex-educador de desenvolvedores na @Vonage. Tenho formação em PHP, mas não me limito a uma única linguagem. Sou um jogador ávido e entusiasta do Raspberry Pi. Costumo praticar escalada em rocha em centros de escalada indoor.
Reproduzir um arquivo de áudio durante uma chamada de Voice com o Go
Tempo de leitura: 8 minutos
Nos tutoriais anteriores, aprendemos como criar e receber chamadas de voz com o Go.
Este tutorial irá guiá-lo pelo processo de receber uma chamada de voz e, em seguida, reproduzir um arquivo de áudio durante a chamada, usando Go e a Voice API.
Vamos desenvolver um servidor que responda aos endpoints de webhook que a Vonage envia quando uma chamada é recebida. Em seguida, criaremos um aplicativo da Vonage com recursos de voz, para encaminhar as chamadas de voz recebidas ao seu destino. Por fim, instruiremos a API a transmitir o arquivo de áudio para a chamada ativa.
Pré-requisitos
Para acompanhar este tutorial, você precisará do seguinte:
Um número de telefone
Escreva o código
Quando a Vonage recebe uma chamada de voz para o seu número virtual, ela verifica se você configurou um webhook para encaminhar a chamada. Essa configuração é específica para o seu aplicativo, que você criará e configurará mais adiante neste tutorial.
Vamos escrever o código que irá processar quaisquer solicitações a este webhook. Crie um arquivo chamado play-an-audio-stream-into-a-call.go e copie o seguinte neste arquivo:
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"os"
"github.com/joho/godotenv"
"github.com/vonage/vonage-go-sdk"
"github.com/vonage/vonage-go-sdk/ncco"
)
func answer(w http.ResponseWriter, req *http.Request) {
uuid, _ := req.URL.Query()["uuid"]
from, _ := req.URL.Query()["from"]
MyNcco := ncco.Ncco{}
talk := ncco.TalkAction{Text: "Thank you for calling."}
MyNcco.AddAction(talk)
conversation := ncco.ConversationAction{Name: from[0], StartOnEnter: "false"}
MyNcco.AddAction(conversation)
fmt.Println("uuid is :" + uuid[0])
data, _ := json.Marshal(MyNcco)
w.Header().Set("Content-Type", "application/json")
w.Write(data)
}
func main() {
http.HandleFunc("/webhooks/answer", answer)
http.ListenAndServe(":3000", nil)
}Primeiro, criamos um novo aplicativo em Go com uma única URL de webhook, /webhooks/answer, para lidar com quaisquer chamadas recebidas. O aplicativo também é executado como um servidor por meio da linha http.ListenAndServe(":3000", nil), para garantir que ela continue em execução até que você queira interromper o servidor.
A answer função cria dois objetos de controle de chamada (NCCOs). O primeiro é TalkAction, que transmite uma sequência de caracteres pré-determinada para a pessoa ao telefone. O segundo adiciona o trecho da chamada a uma teleconferência, o que mantém a linha e nos permite inserir um fluxo de áudio na chamada.
Em seguida, precisamos adicionar a funcionalidade para reproduzir um arquivo de áudio na chamada ativa. Isso será feito por meio de uma URL definida como /play-audio. Portanto, acima func main() { , adicione o seguinte código:
func playAudio(w http.ResponseWriter, req *http.Request) {
godotenv.Load("../.env")
uuid, _ := req.URL.Query()["uuid"]
privateKey, _ := ioutil.ReadFile(os.Getenv("VONAGE_APPLICATION_PRIVATE_KEY_PATH"))
auth, _ := vonage.CreateAuthFromAppPrivateKey(os.Getenv("VONAGE_APPLICATION_ID"), privateKey)
client := vonage.NewVoiceClient(auth)
result, _, _ := client.PlayAudioStream(uuid[0],
"https://nexmo-community.github.io/ncco-examples/assets/voice_api_audio_streaming.mp3",
vonage.PlayAudioOpts{},
)
// or to stop the audio
// result, _, _:= client.StopAudioStream(os.Getenv(uuid[0]))
fmt.Println("Update message: " + result.Message)
}e abaixo: http.HandleFunc("/webhooks/answer", answer) adicione o seguinte:
http.HandleFunc("/play-audio", playAudio)Já criamos um webhook para lidar com o atendimento de chamadas recebidas no seu número virtual da Vonage. Assim que a chamada for atendida, você verá no seu Terminal uuid, um ID específico para essa chamada de voz. Antes de testar, você precisa expor seu projeto à internet e configurar seu Account no Painel de Controle. Então, vamos prosseguir com a exposição do projeto à internet.
Expor o projeto à Internet
Quando uma chamada é recebida, a Vonage enviará uma solicitação HTTP para a URL do webhook que você configurou previamente. Sua aplicação em Go deve estar acessível pela internet para recebê-la; por isso, recomendamos usar o Ngrok.
Inicie o Ngrok com o seguinte comando:
Copie a URL HTTPS que o ngrok usa, pois você precisará dela mais tarde. Ela será semelhante ao exemplo abaixo:
Observação Essa URL será diferente toda vez que você executar o comando, caso esteja usando o plano gratuito. Portanto, você precisará atualizar seu aplicativo no Painel sempre que executar o comando.
Configurar as opções
Crie um aplicativo no seu Painel em “Seus Applications”. Dê um nome ao seu novo aplicativo e, em seguida, selecione “Gerar chave pública e privada”; isso fará o download do private.key arquivo automaticamente. Mova esse arquivo para a mesma pasta do código que você criou.
Adicione recursos de Voice ao aplicativo e configure as URLs usando a URL do Ngrok que você copiou anteriormente. Para a URL de resposta, use [paste ngrok url]/webhooks/answer e, para a URL de evento, [paste ngrok url]/webhooks/event.
Agora, clique no Link botão ao lado do seu número virtual da Vonage adquirido recentemente para vincular seu novo aplicativo ao número de telefone.
Com todas as novas informações que você reuniu, crie um .env arquivo dentro do diretório do seu projeto e adicione as seguintes variáveis:
Atualize as variáveis acima para que tenham os valores corretos. Por exemplo, a primeira precisa ter private.key e a segunda deve conter o seu application ID listado na página do Painel do Desenvolvedor quando você criou seu aplicativo.
Você adquiriu um número virtual da Vonage, criou uma Application da Vonage e escreveu o código para lidar com os eventos do webhook. É hora de testar seu projeto!
Hora do teste
Configuramos nosso aplicativo Vonage e nosso número de telefone para que saibam como lidar com chamadas de voz recebidas. Também criamos um webhook dentro play-an-audio-stream-into-a-call.go para lidar com quaisquer solicitações de chamadas recebidas. Por fim, adicionamos outro endpoint que será acionado manualmente para reproduzir o arquivo de áudio na chamada especificada.
Agora é hora de testar esse aplicativo. Ao executar o comando abaixo, será iniciado um servidor web com esse webhook à espera da solicitação. Portanto, execute o comando abaixo para começar a testar nosso novo aplicativo:
Ao ligar para o seu número virtual, você ouvirá as palavras “Obrigado por ligar”. Parecerá que nada mais está acontecendo, exceto que a ligação continua.
Agora abra seu navegador e digite: http://localhost:3000/play-audio?uuid=[paste your uuid here] substituindo seu [paste your uuid here] pela uuid resultado exibido no Terminal quando você fez a chamada. Ao inserir essa URL, você ouvirá o fluxo de áudio reproduzido na sua chamada. Quando terminar, encerre a chamada.
Você já criou uma aplicação Vonage, alugou um número de telefone virtual e escreveu um código para lidar com chamadas de webhook para esse novo número. Quando você liga para o número, seu código agora adiciona uma mensagem de conversão de texto em fala à chamada para que você possa ouvi-la. Em seguida, você aciona o evento para reproduzir o arquivo de áudio na chamada e ouvi-lo no seu celular!
Leitura complementar
Você pode encontrar o código apresentado neste tutorial no repositório de trechos de código Go.
A seguir, apresentamos alguns outros tutoriais que escrevemos sobre como usar nossos serviços com Go:
Se você tiver alguma dúvida, sugestão ou ideia que gostaria de compartilhar com a comunidade, sinta-se à vontade para participar do nosso espaço de trabalho do Slack da Comunidade. Adoraria receber feedback de quem já colocou este tutorial em prática e saber como está o seu projeto.