
Compartir:
Antiguo educador de desarrolladores @Vonage. Procedente de PHP, pero no limitado a un solo lenguaje. Un ávido jugador y un entusiasta de Raspberry pi. A menudo se le encuentra practicando escalada en rocódromo.
Gestionar una llamada entrante con Go
Tiempo de lectura: 7 minutos
En este tutorial, vamos a aprender cómo manejar las llamadas telefónicas entrantes utilizando una matriz JSON de acciones llamadas Objetos de Control de Llamadas (NCCOs). Este tutorial utiliza Go y la Voice API.
Escribiremos un servidor que responderá a los puntos finales de webhook que Vonage envía cuando entra una llamada o se activa un evento. Luego crearemos una aplicación de Vonage que tenga capacidades de voz, para enrutar las llamadas de voz entrantes a su destino.
Puede encontrar el código mostrado en este tutorial en el repositorio de repositorio de fragmentos de código Go.
Requisitos previos
Un número de teléfono
Una cuenta de Vonage
Vonage API Account
To complete this tutorial, you will need a Vonage API account. If you don’t have one already, you can sign up today and start building with free credit. Once you have an account, you can find your API Key and API Secret at the top of the Vonage API Dashboard.
This tutorial also uses a virtual phone number. To purchase one, go to Numbers > Buy Numbers and search for one that meets your needs.
Escriba el código
Cuando Vonage recibe una llamada de voz a tu número virtual, verifica si has configurado un webhook para enrutar la llamada de voz. Esta configuración es específica de tu aplicación, que creaste y configuraste previamente. También configuraste un webhook de eventos, que emite cualquier evento en tu Terminal como, por ejemplo, si la llamada fue "timbrada" o "respondida".
Vamos a escribir el código que se encargará de las solicitudes a estos dos webhooks. Crea un archivo llamado receive-an-inbound-call.go y copia lo siguiente en este archivo:
package main
import (
"encoding/json"
"fmt"
"net/http"
"github.com/vonage/vonage-go-sdk/ncco"
)
func answer(w http.ResponseWriter, req *http.Request) {
paramKeys, _ := req.URL.Query()["from"]
MyNcco := ncco.Ncco{}
talk := ncco.TalkAction{Text: "Thank you for calling " + string(paramKeys[0])}
MyNcco.AddAction(talk)
data, _ := json.Marshal(MyNcco)
w.Header().Set("Content-Type", "application/json")
w.Write(data)
}
func event(w http.ResponseWriter, req *http.Request) {
paramKeys, _ := req.URL.Query()["status"]
fmt.Println("Event status: " + paramKeys[0])
}
func main() {
http.HandleFunc("/webhooks/answer", answer)
http.HandleFunc("/webhooks/event", event)
http.ListenAndServe(":8080", nil)
}El código anterior contiene tres funciones. La primera función es "answer", que recupera el número del que procede la llamada, crea una Talk Ncco Action con la cadena "Thank you for calling" junto con el número de teléfono de la persona que llama. Luego devolverá esta acción Ncco como respuesta.
La segunda función es un manejador para cualquier actualización de eventos. Para este tutorial, cada vez que el evento webhook se dispara, el código mostrará el estado del evento en su Terminal.
La tercera función es la función "main", que crea un archivo /webhooks/answery una /webhooks/event para ejecutar la función correspondiente a la solicitud. La última parte que hace este código es convertir el código en un servidor web escuchando en el puerto 8080.
Para probar su aplicación, ejecute el siguiente comando:
go run receive-an-inbound-call.goAhora en su navegador vaya a "http://localhost:8080/webhooks/answer". Aparecerá su matriz JSON, que es su NCCO, como se muestra a continuación:
[{"action":"talk","text":"Thank you for calling 447000000","bargeIn":false,"loop":1}]La OCNC que se muestra en el ejemplo anterior contiene cuatro campos en la matriz, que se describen con más detalle a continuación:
"action":"talk"determina el tipo de acción que es esta OCN. Indica a Vonage que es una acción de conversación"text":"Thank you for calling 447000000"indica a Vonage el cuerpo del texto para hablar en la llamada de voz"bargeIn":falseindica a Vonage que el usuario no puede interrumpir la conversación hasta que haya terminado"loop":1indica a Vonage que sólo pronuncie el texto una vez
Exponer el proyecto a Internet
Cuando entra la llamada, Vonage enviará una solicitud HTTP a la URL del webhook que está configurada para el número, por lo que esta aplicación debe ser accesible a Internet y por eso recomendamos Ngrok.
Inicie Ngrok con el siguiente comando:
Copie la URL https que utiliza ngrok, la necesitará más adelante. Será similar al ejemplo de abajo:
Nota Esta URL será diferente cada vez que ejecute el comando si utiliza el plan gratuito. Así que tendrás que actualizar tu aplicación en el Dashboard cada vez que ejecutes el comando.
Configurar los ajustes
Cree una aplicación en su Panel de control en "Tus Applications". Asigne un nombre a su nueva aplicación y seleccione "Generar clave pública y privada". Esto descargará el archivo private.key, que deberá mover para colocarlo junto al código que está a punto de crear.
Añada funciones de Voice a la aplicación y configure las URL utilizando la URL de Ngrok que copió anteriormente. Para la URL de respuesta, utilice [paste ngrok url]/webhooks/answer y para la URL de eventos [paste ngrok url]/webhooks/event.
Compraste un número virtual de Vonage, creaste una aplicación de Vonage y escribiste el código para manejar los eventos de webhook. ¡Es hora de probar tu proyecto!
Hora de probar
Hemos configurado nuestra aplicación de Vonage y nuestro número de teléfono para saber cómo gestionar las llamadas de voz entrantes. También hemos escrito un webhook dentro de receive-an-inbound-call.go para manejar cualquier solicitud de llamada entrante. Ahora es el momento de probar esta aplicación. Cuando ejecutes el comando de abajo, se iniciará un servidor web con este webhook escuchando la petición. Así que ejecute el comando de abajo para empezar a probar nuestra nueva aplicación:
Cuando llame a su número virtual, oirá la frase "Gracias por llamar" seguida de su número de teléfono.
Ahora creaste una aplicación de Vonage, alquilaste un número de teléfono virtual y escribiste algo de código para manejar las llamadas de webhook a este nuevo número. Cuando llamas al número, tu código ahora agrega un mensaje de texto a voz a la llamada para que lo escuches.
Lecturas complementarias
Puede encontrar el código mostrado en este tutorial en el repositorio de repositorio de fragmentos de código Go.
A continuación encontrarás otros tutoriales que hemos escrito sobre el uso de nuestros servicios con Go:
Si tienes alguna pregunta, consejo o idea que quieras compartir con la comunidad, no dudes en entrar en nuestro espacio de trabajo espacio de trabajo comunitario Slack. Me encantaría saber si alguien ha implementado este tutorial y cómo funciona su proyecto.
