export-data-from-genesys/genesys.py (76 lines of code) (raw):

import os import sys import time import PureCloudPlatformClientV2 from PureCloudPlatformClientV2.rest import ApiException print('-------------------------------------------------------------') print('- Execute Bulk Action on recordings-') print('-------------------------------------------------------------') # Credentials for the aws bucket CLIENT_ID = '' CLIENT_SECRET = '' ORG_REGION = '' # Set environment region = PureCloudPlatformClientV2.PureCloudRegionHosts[ORG_REGION] PureCloudPlatformClientV2.configuration.host = region.get_api_host() # OAuth when using Client Credentials api_client = PureCloudPlatformClientV2.api_client.ApiClient() \ .get_client_credentials_token(CLIENT_ID, CLIENT_SECRET) # Get the api recording_api = PureCloudPlatformClientV2.RecordingApi(api_client) # Build the create job query, for export action, set query.action = "EXPORT" # For delete action, set query.action = "DELETE" # For archive action, set query.action = "ARCHIVE" query = PureCloudPlatformClientV2.RecordingJobsQuery() query.action = "EXPORT" query.action_date = "2024-01-25T00:00:00.000Z" # Comment out integration id if using DELETE or ARCHIVE query.integration_id = "" query.conversation_query = { "interval": "2023-12-01T00:00:00.000Z/2024-01-07T00:00:00.000Z", "order": "asc", "orderBy": "conversationStart" } print(query) try: # Call create_recording_job api create_job_response = recording_api.post_recording_jobs(query) job_id = create_job_response.id print(f"Successfully created recording bulk job { create_job_response}") print(job_id) except ApiException as e: print(f"Exception when calling RecordingApi->post_recording_jobs: { e }") sys.exit() # Call get_recording_job api while True: try: get_recording_job_response = recording_api.get_recording_job(job_id) job_state = get_recording_job_response.state if job_state != 'PENDING': break else: print("Job state PENDING...") time.sleep(2) except ApiException as e: print(f"Exception when calling RecordingApi->get_recording_job: { e }") sys.exit() if job_state == 'READY': try: execute_job_response = recording_api.put_recording_job(job_id, {"state": "PROCESSING"}) job_state = execute_job_response.state print(f"Successfully execute recording bulk job { execute_job_response}") except ApiException as e: print(f"Exception when calling RecordingApi->put_recording_job: { e }") sys.exit() else: print(f"Expected Job State is: READY, however actual Job State is: { job_state }") # Call delete_recording_job api # Can be canceled also in READY and PENDING states if job_state == 'PROCESSING': try: cancel_job_response = recording_api.delete_recording_job(job_id) print(f"Successfully cancelled recording bulk job { cancel_job_response}") except ApiException as e: print(f"Exception when calling RecordingApi->delete_recording_job: { e }") sys.exit() try: get_recording_jobs_response = recording_api.get_recording_jobs( page_size=25, page_number=1, sort_by="userId", # or "dateCreated" state="READY", # valid values FULFILLED, PENDING, READY, PROCESSING, CANCELLED, FAILED show_only_my_jobs=True, job_type="EXPORT", # or "DELETE" ) print(f"Successfully get recording bulk jobs { get_recording_jobs_response}") except ApiException as e: print(f"Exception when calling RecordingApi->get_recording_jobs: { e }") sys.exit()