Guardar registros de llamadas en una fuente de datos externa
En este tutorial, vamos a ver cómo guardar los registros de llamadas en una fuente de datos externa con el fin de obtener la comprensión de sus datos. Hay muchos lugares en los que los registros de llamadas se pueden guardar (hojas de Google, Excel y así sucesivamente). Para este ejemplo, guardaremos nuestros registros de llamadas en una lista JSON, que se puede utilizar como fuente de datos para Tableau.
Requisitos previos
Antes de comenzar, deberás tener una cuenta de Vonage Developer. Si no tienes una cuenta de Vonage Developer, usa esto guía para configurar y crear su Account.
Una vez que tenga una Account, tendrá que hacer lo siguiente siguiendo estas guías:
Para este ejemplo, tendrá que Suscribirse a la aplicación Reports API.
Autenticación
Luego de crear una aplicación y suscribirte a Reports API, ahora deberás iniciar sesión con tus credenciales de Vonage Business Communications. Consulta la Guía para realizar una solicitud API para más detalles.
A continuación, crearemos una función que solicite el archivo /token API para generar un token de acceso.
def get_token():
url = "https://api.vonage.com/token"
payload = 'grant_type=password&username={}&password={}&client_id={}&client_secret={}'.format(USERNAME, PASSWORD, CLIENT_ID, SECRET)
headers = {
'Content-Type': 'application/x-www-form-urlencoded'
}
response = requests.request("POST", url, headers=headers, data = payload)
return response.json()
Para ejecutar esta función, tendrá que pasar lo siguiente:
USERNAME- Nombre de usuario de Vonage Business Communications. Asegúrate de añadir@vbc.prodal nombre de usuario.firstname.lastname@vbc.prod.PASSWORD- Contraseña de Vonage Business Communications.CLIENT_ID- El identificador de cliente de tu aplicación Vonage Developer.SECRET- El secreto de tu aplicación Vonage Developer.
Después de ejecutar esta función, debería ver la siguiente respuesta:
{
"access_token": "abc123-xxxxx-xxxxx",
"expires_in": 9999,
"refresh_token": "def456-xxxx-xxxx",
"scope": "default",
"token_type": "Bearer"
}
API de registros de llamadas
El siguiente paso es extraer la lista de llamadas de la api de registros de llamadas. Podemos utilizar esta función para obtener una lista de llamadas por fecha de inicio y fecha de finalización. Si hay más resultados que el número de elementos que hemos solicitado utilizando el parámetro page_size, esta función recuperará también esas otras páginas.
results = []
def get_reports(token, account_id, start_date, end_date, order="asc", page_size=10, page=1):
url = "https://api.vonage.com/t/vbc.prod/reports/v1/accounts/{}/call-logs?start:gte={}&start:lte={}&page_size={}&page={}&order={}".format(account_id, start_date, end_date, page_size, page, order)
headers = {
'Accept': 'application/json',
'Authorization': 'Bearer {}'.format(token),
}
response = requests.request("GET", url, headers=headers).json()
if "_embedded" in response:
results.extend(response["_embedded"]["call_logs"])
if page < response["total_page"]:
page = page + 1
get_reports(token, account_id, start_date, end_date, page_size=page_size, page=page)
return results
A continuación, tendremos que crear una fecha de inicio y una fecha final para pasarlas a la función. La fecha de estado será 1 día en el pasado y la fecha final será 1 minuto antes de medianoche del día actual.
import datetime
from datetime import timedelta
today = datetime.datetime.now()
today_str = today.strftime('%Y-%m-%d 00:00:00')
yesterday = today - timedelta(days = 1)
yesterday_str = yesterday.strftime('%Y-%m-%d 23:59:59')
access_token = get_token()["access_token"]
reports = get_reports(access_token,account_id={YOUR_ACCOUNT_ID}, start_date=today_str, end_date=yesterday_str)
A continuación, llamamos al get_reports() para devolver una lista de llamadas entre esas 2 fechas. A continuación, tendremos que crear un archivo JSON que contenga una lista de estos registros.
import json
def write_json(data, filename='data.json'):
with open(filename,'w') as f:
return json.dump(data, f)
def read_json(filename='data.json'):
try:
with open(filename) as json_file:
return json.load(json_file)
except IOError:
return []
data = read_json()
data.extend(reports)
write_json(data)
Aquí, creamos 2 funciones para leer y escribir en un archivo JSON. Luego leemos nuestro archivo JSON. Si el archivo no existe, devolvemos una lista vacía([]). A continuación, tenemos que añadir nuestros registros de llamadas en el archivo JSON utilizando el método extend() función. Por último, tenemos que volver a cargar esta lista en el archivo JSON. Por cada día que ejecutemos esta función, añadiremos los últimos registros de llamadas en el archivo JSON.
Trabajo CRON
El último paso es ejecutar nuestro script todos los días mediante una tarea CRON. De esta forma, no tendremos que ejecutar estas funciones manualmente. Un CRON es una forma de ejecutar scripts periódicamente a horas, fechas o intervalos fijos.
Puedes crear un trabajo CRON localmente ejecutando primero crontab -e en un sistema basado en OSX/Linux.
Para una máquina Windows:
- Conectarse con una Account privilegiada, por ejemplo Administrador
- Vaya a Inicio > Panel de control > Sistema y seguridad > Herramientas administrativas > Programador de tareas
- En el panel derecho, haga clic en Crear tarea básica
Nuestro trabajo CRON tendrá este aspecto:
Se ejecutará todos los días a medianoche. Para crear su propia tarea CRON, consulte https://crontab-generator.org/.
Importar a Tableau
En este ejemplo, utilizaremos Tableau para generar un cuadro de mando a partir de los datos de nuestro registro de llamadas. Tendrá un aspecto similar al siguiente:

En primer lugar, en Tableau, haga clic en Connect To Data y bajo To a filepulse JSON file
A continuación, localice el archivo JSON que contiene los registros de llamadas. Puede seleccionar opcionalmente algunas columnas. A continuación, vaya a Sheet 1 para ver sus datos.
A continuación, vaya a Sheet 1 y en el Folders haga clic con el botón derecho del ratón en la sección End y establezca Change Data Type a Date.

A continuación, arrastre el End a la sección Columnas. A continuación, haga clic con el botón derecho del ratón en End y cambiar a Day.
A continuación, arrastre el Count bajo el parámetro Measured Names a la sección de filas. Aparecerá un gráfico de líneas con el número de llamadas por día.
Como nuestro trabajo CRON se ejecuta todos los días, nuestro panel de Tableau se actualizará con los nuevos registros de llamadas. No olvide guardar el JSON en la misma ubicación en la que añadió originalmente la fuente de datos para Tableau.
Conclusión
En este ejemplo, hemos visto cómo crear una función que devuelve una lista de registros de llamadas para un día determinado. Poniendo estos datos en un dashboard como Tableu podrás ayudar a tu equipo a analizar el tráfico de llamadas. Nuestro tablero de instrumentos sólo muestra el número de llamadas cada día, pero se puede personalizar para mostrar el número de llamadas entrantes / salientes, el coste medio por día, la duración media de las llamadas, y mucho más.