Can I download call recordings?

Return to top
Have more questions? Submit a request


  • Christine DeVille

    I discovered if I right click on the recording I can 'save as'. Is there a way to keep this from happening?  We don't recordings to be downloaded.

  • Aliyss Snow

    Made this little script in case someone comes searching. For Mass downloading Calls.

  • Moshe

    Just FYI, its easier todo 'inspect element' on the recorder player and just copy paste the URL.

  • Jesse Honigberg

    I struggled with this - if anyone is interested - here is a node script that I used.

    //You will need to have node installed and install fs and request
    //npm fs install
    //npm request install

    const fs = require('fs');
    const request = require('request');

    //replace sitename with your subdomain

    function LoopData(passedURL) {
    // Include the request library for Node.js
    var request = require('request');
    // Basic Authentication credentials
    var username = 'username/token';
    var password = 'password';
    var authenticationHeader = "Basic " + Buffer.from(username + ":" + password).toString("base64");

    console.log("passedURL (RecdFunction): " + passedURL);

    url: passedURL,
    headers: { "Authorization": authenticationHeader }
    async function (error, response, body) {

    if (error) {
    // Got an error, reject the promise
    //grabs the next URL
    passedURL = JSON.parse(body).before_url;
    cursorAfter = JSON.parse(body).after_cursor;

    //print it out (for debugging)
    console.log("passedURL (ToFunction): " + passedURL);

    let parsedData = JSON.parse(body);
    //print it out (for debugging)

    //counter for items downloaded
    let recording_items = 0;

    for (let i = 0; i < parsedData.audits.length; i++)
    let parsedEvents = parsedData.audits[i];
    //check for the event type
    for (let j = 0; j <; j++)
    if ([j].type == "VoiceComment")
    //print it out (for debugging)

    //set the MP3 name
    let result = 'Ticket_' + parsedData.audits[i].ticket_id + '-Event_' +[j].id;
    .get([j].data.recording_url + ".mp3")
    .auth('username/token', 'password, false)
    .on('error', function (err) { console.log(err) })
    //download the mp3
    //write out JSON

    fs.writeFile(`./output/page-${cursorAfter}.json`, JSON.stringify(parsedData, null, 4), (err) => {
    if (err) {
    throw err;
    } else {
    console.log(`Page ${cursorAfter} downloaded with ${recording_items} recordings.`)

    //pass it back into the function BUT ASYNC
    await LoopData(String(passedURL));



Please sign in to leave a comment.

Powered by Zendesk