Guardar los registros de llamadas en una fuente de datos externa
En este tutorial, veremos cómo guardar tus registros de llamadas en una fuente de datos externa para poder analizar mejor tus datos. Hay muchos lugares donde se pueden guardar los registros de llamadas (Hojas de cálculo de Google, Excel, etc.). 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ás que suscribirte a la 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 información.
A continuación, crearemos una función que solicite el /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 ID de cliente de tu aplicación de Vonage Developer.SECRET- El secreto de tu aplicación Vonage Developer.
Tras ejecutar esta función, deberías 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 de finalización para pasarlas a la función. La fecha de inicio será un día anterior, y la fecha de finalización será un minuto antes de la 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 a la get_reports() función que devuelva una lista de llamadas realizadas entre esas dos fechas. A continuación, tendremos que crear un archivo JSON que contenga una lista de esos 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 guardar esta lista en el archivo JSON. Cada día que ejecutemos esta función, añadiremos los últimos registros de llamadas al archivo JSON.
Tarea CRON
El último paso es ejecutar nuestro script cada día 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 una tarea CRON localmente ejecutando primero crontab -e en un sistema basado en OS X o 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 de la derecha, haz clic en «Crear tarea básica».
Nuestro trabajo CRON tendrá este aspecto:
Esto se ejecutará todos los días a medianoche. Para crear tu propia tarea CRON, consulta 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 en To a filepulse JSON file
A continuación, busca el archivo JSON que contiene los registros de llamadas. Si lo deseas, puedes seleccionar algunas columnas. Después, ve a Sheet 1 para ver sus datos.
A continuación, vaya a Sheet 1 y en el Folders sección, haz clic con el botón derecho del ratón en el End parámetro y configuración 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 parámetro bajo el Measured Names sección a la sección de filas. A continuación, deberías ver 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.