Eliminar grabaciones de llamadas de la empresa / Grabaciones de llamadas bajo demanda por fecha

En este tutorial, aprenderás a eliminar grabaciones de llamadas en una fecha determinada. Esto le ayudará a minimizar los costes de almacenamiento de grabaciones de llamadas que puede que no necesite. Esto también podría ser útil si desea eliminar grabaciones por motivos de seguridad. La API de grabación de llamadas le permite recuperar todas las grabaciones de llamadas y permite filtrar por duración de la llamada, extensión, caller_id, dirección (entrante o saliente) y más. Por favor, eche un vistazo a la referencia api para ver todos los filtros posibles.

En este ejemplo, vamos a consultar las grabaciones de los últimos 7 días. Utilizaremos un script de Python para consultar las grabaciones de llamadas y, para cada una de ellas, la eliminaremos.

Python es el lenguaje utilizado para crear el siguiente ejemplo; sin embargo, puedes utilizar cualquier lenguaje con el que te sientas más cómodo. En este ejemplo se utiliza la siguiente biblioteca de Python:

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 API de grabación de llamadas.

Autenticación

Una vez creada la aplicación y realizada la suscripción a la API de grabación de llamadas, ahora tendrás que iniciar sesión con tus credenciales de Vonage Business Communications. Esta aplicación de ejemplo utiliza la biblioteca «Requests» para llamar a la /api/accounts/ API. Echa un vistazo a la Guía para realizar una solicitud API Para más información.

A continuación, crearemos una función que solicite el /api/accounts 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.prod al 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'}

Obtener grabaciones de llamadas

Antes de llamar a la API «company_call_recordings», tendremos que pasar una cadena de fecha que corresponda a una fecha pasada. Para este ejemplo, crearemos una fecha que se remonte 7 días atrás.

import datetime
import urllib.parse
today = datetime.datetime.now()
last_week = datetime.timedelta(days = 7)
date_diff = today - last_week
encoded_date = urllib.parse.quote_plus(date_diff.strftime('%Y-%m-%dT00:00:00+0000'))

Aquí, obtenemos la fecha actual utilizando datetime.datetime.now(), y luego utiliza datetime.timedelta() para crear una fecha que sea days en el pasado. Aquí utilizamos 7. A continuación, restaremos la fecha actual de la fecha de hace 7 días, para obtener nuestra fecha. Por último, utilizaremos strftime() para convertir el objeto fecha en una cadena. Hemos establecido la hora en 00:00:00+0000lo que significa que obtendremos la fecha a medianoche UTC. Antes de que podamos pasar la fecha a la API de grabaciones de llamadas, necesitamos urlencode la fecha utilizando urllib.parse.quote_plus().

A continuación, realizaremos una solicitud a la API de grabación de llamadas y utilizaremos el access_token devuelto por el get_token() función. Esto devolverá una respuesta JSON con las grabaciones de las llamadas. A continuación, introduciremos la fecha encoded_date en esta función

import requests
comany_recordings = []
def company_call_recordings(token, start_date, account_id="self",order="asc", page_size=10, page=1):
  url = "https://api.vonage.com/t/vbc.prod/call_recording/v1/api/accounts/{}/company_call_recordings?order={}&page_size={}&page={}&start:gte={}".format(account_id, order, page_size, page, start_date)
  headers = {
    'Accept': 'application/json',
    'Authorization': 'Bearer {}'.format(token),
  }

  response = requests.request("GET", url, headers=headers).json()
  if "_embedded" in response:
    comany_recordings.extend(response["_embedded"]["recordings"])

  if "total_pages" in response:
    if page < response["total_pages"]:
      page = page + 1
      company_call_recordings(token, start_date, account_id, order, page_size, page)

  return comany_recordings

En este caso, llamamos al company_call_recordings/v1/api/ y pasando el siguiente parámetro:

  • account_id - El ID de account de Vonage Business Communications. Puedes utilizar self para referirse a la cuenta del usuario autenticado.
  • page - El número de páginas a solicitar.
  • page_size - El tamaño de página solicitado.
  • order - El orden de las grabaciones de llamadas devueltas
  • start:gte - Filtrar registros por fecha de inicio (mayor o igual a)

También podríamos pasar en start:lte que devolvería registros anteriores a la fecha dada.

Una vez que tengamos la lista de grabaciones de llamadas, iremos repasando cada una de ellas y las eliminaremos. Antes de hacerlo, asegúrate de tener una copia de seguridad de las grabaciones. Echa un vistazo a la Guardar grabaciones de llamadas en Amazon S3 para guardar grabaciones en Amazon S3.

Eliminar grabaciones de llamadas

El get_company_call_recordings() La función devuelve una lista de grabaciones del Account. A continuación, crearemos una función para eliminar la grabación por su ID.

def delete_call_recording(token, call_id, account_id="self"):
  url = "https://api.vonage.com/t/vbc.prod/call_recording/v1/api/accounts/{}/company_call_recordings/{}".format(account_id, call_id)

  headers = {
    'Accept': 'application/json',
    'Authorization': 'Bearer {}'.format(token)
  }

  response = requests.request("DELETE", url, headers=headers)
  return response

Esta función toma la grabación del call_id y borrará la grabación de la llamada. Para este ejemplo, estamos configurando account_id a self.

A continuación, vamos a hacer un bucle con las grabaciones de llamadas del get_company_call_recordings() que escribimos y obtener las grabaciones call_id. Pasaremos en call_id en nuestro delete_call_recording() para borrar la grabación.

for recording in recordings["_embedded"]["recordings"]:
  call_id = recording["id"]
  response = delete_call_recording(access_token, call_id)
  print(response)

Aquí tenemos la grabación id del recordings y, a continuación, pasar ese call_id a la lista delete_call_recording función. Si tiene éxito, la respuesta será una respuesta 204 vacía.

Eliminar grabaciones de llamadas bajo demanda

Borrar las grabaciones de llamadas bajo demanda será prácticamente igual que borrar las grabaciones de llamadas; sin embargo, utilizaremos el call_recordings API.

Al igual que antes, tenemos que enumerar todas las grabaciones bajo demanda posteriores a una fecha determinada. En primer lugar, debemos obtener una lista de las grabaciones de llamadas bajo demanda utilizando esta función.

on_demand_recordings = []
def on_demand_call_recordings(token, account_id="self", user_id="self", order="start%3ADESC",page=1, page_size=10, start_date=None, end_date=None):
  url = "https://api.vonage.com/t/vbc.prod/call_recording/v1/api/accounts/{}/users/{}/call_recordings?order={}&page={}&page_size={}".format(account_id, user_id, order, page, page_size)
  if start_date:
    url = url + "&start:gte="+start_date

  if end_date:
    url = url + "&start:lte="+end_date

  headers = {
    'Accept': 'application/json',
    'Authorization': 'Bearer {}'.format(token),
  }

  response = requests.request("GET", url, headers=headers).json()
  if "_embedded" in response:
    on_demand_recordings.extend(response["_embedded"]["recordings"])

  if "total_pages" in response:
    if page < response["total_pages"]:
      page = page + 1
      on_demand_call_recordings(token, account_id, user_id, order,page, page_size, start_date, end_date)

  return on_demand_recordings

En este caso, llamamos al call_recording API y pasando el siguiente parámetro:

  • account_id - El ID de account de Vonage Business Communications. Puedes utilizar self para referirse a la cuenta del usuario autenticado.
  • user_id - El identificador de usuario. Puede utilizar self para referirse al usuario autenticado.
  • page - El número de páginas a solicitar.
  • page_size - El tamaño de página solicitado.
  • order - El orden de las grabaciones de llamadas devueltas
  • start:gte - Filtrar registros por fecha de inicio (mayor o igual a)

A continuación, generaremos una fecha de hace 7 días y la utilizaremos para el start_date parámetro.

import datetime
import urllib.parse
today = datetime.datetime.now()
last_week = datetime.timedelta(days = 7)
date_diff = today - last_week
encoded_date = urllib.parse.quote_plus(date_diff.strftime('%Y-%m-%dT00:00:00+0000'))

A continuación, escribiremos una función que llame a la función company_call_recordings API para eliminar la grabación mediante call_id.

def delete_on_demand_recording(token, call_id, account_id="self", user_id="self"):
  url = "https://api.vonage.com/t/vbc.prod/call_recording/v1/api/accounts/{}/users/{}/call_recordings/{}".format(account_id, call_id)

  headers = {
    'Accept': 'application/json',
    'Authorization': 'Bearer {}'.format(token)
  }

  response = requests.request("DELETE", url, headers=headers)
  return response

A continuación, haremos un bucle con las grabaciones y escribiremos una función para eliminar la grabación de llamadas bajo demanda utilizando la función call_id.

access_token = get_token()["access_token"]
recordings = on_demand_call_recordings(access_token, start_date=encoded_date)

for recording in recordings["_embedded"]["recordings"]:
  call_id = recording["id"]
  response = delete_on_demand_recording(access_token, call_id)
  print(response)

Tarea CRON

El último paso consiste en eliminar las grabaciones de llamadas cada semana 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 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».

Nuestra tarea CRON se ejecutará cada 7 días. Y así es como será la tarea CRON:

* * 7 * * delete_recordings.py >/dev/null 2>&1

El delete_vbc_recordings.py es un script que borrará tanto las grabaciones de llamadas como las grabaciones de llamadas bajo demanda que tengan más de 7 días. Eche un vistazo a https://crontab-generator.org/ para crear tu propia tarea CRON.

Conclusión

Aquí, hemos mostrado cómo crear un simple script de trabajo CRON para borrar grabaciones de llamadas VBC y grabaciones de llamadas bajo demanda cada 7 días. Puede echar un vistazo a esto esencia para ver el ejemplo de código completo.