BACKUP WE USER

PHOTO EMBED

Fri Dec 22 2023 16:50:58 GMT+0000 (Coordinated Universal Time)

Saved by @aatish

var print = Logger.log;

var webEngageLicense = '~2024b5d8';
var usersUrl = "https://api.webengage.com/v1/accounts/" + webEngageLicense + "/bulk-users";
var eventsUrl = "https://api.webengage.com/v1/accounts/" + webEngageLicense + "/bulk-events";

var headers = {
  "Authorization": "Bearer 426a654c-89b6-4595-af9c-fd3712af56f9",
  "Content-Type": "application/json"
}

/////////////////////////////////// MENU BUTTONS ///////////////////////////////////

// function onOpen() {
//   var ui = SpreadsheetApp.getUi();
//   var add_modules = ui.createMenu("USERS_DATA");
//   add_modules.addItem('TEST', 'users_to_WE_TEST').addToUi();
//   add_modules.addItem('UPSC FORM RESP', 'users_to_WE_UPSC_FORM_RESP').addToUi();
// }

/////////////////////////////////// MAP KEYS ///////////////////////////////////

function map_keys(sheetName) {
  var mapper_keys = {}
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var ActiveSheet = ss.getSheetByName(sheetName);
  var lastColumn = ActiveSheet.getLastColumn()
  var headers = ActiveSheet.getRange(1, 1, 1, lastColumn).getValues()[0]
  for (var k = 0; k < lastColumn; k++) {
    mapper_keys[headers[k]] = k
  }
  return (mapper_keys)
}

/////////////////////////////////// CALL API ///////////////////////////////////

function callApi(targetURL, method, payload, headers) {
  var options = {
    'method': method,
    'payload': payload,
    'headers': headers
  }
  try {
    var response = UrlFetchApp.fetch(targetURL, options);
  } catch (e) {
    // print(e)
    return [e, 0]
  }
  var respText = JSON.parse(response.getContentText());
  var respStatus = response.getResponseCode();
  return [respText, respStatus]
}

///////////////////////////////////////////// GENERATE USER ID /////////////////////////////////////////////

function generateUserId(row, prefix, startCounter) {
  // var prefix = "fmp_gf_";
  // var startCounter = 198230;
  var zeros = "000000";

  var idNumber = (startCounter + row - 1).toString()
  var uniqueUserId = prefix + (zeros + idNumber).slice(-7);

  return uniqueUserId;
}

//////////////////////////////////////// USER FETCHING FROM RESPONSE SHEETs ////////////////////////////////////////

function fetch_users_from_sheet(sheetName) {
  var sheetConfigurations = {
    "UPSC_FORM_1": {
      url: "https://docs.google.com/spreadsheets/d/1a0AglRKvK8aqee1wWZnpkQDGQXLtMa9Gy3g7EgjgzSI/edit?resourcekey#gid=1768755200",
      shName: "Form Responses 1",
      startRow: 1,
      destinationSheetName: "Users_to_WE UPSC_FORM_1",
      emailIdx: 1,
      phoneIdx: 3,
      nameIdx: 6,
      prefix: "fmp_upsc1_",
      startCounter: 000000,
    },
    "UPSC_FORM_2": {
      url: "https://docs.google.com/spreadsheets/d/1a0AglRKvK8aqee1wWZnpkQDGQXLtMa9Gy3g7EgjgzSI/edit?resourcekey#gid=1244699291",
      shName: "google_form_leads",
      startRow: 1,
      destinationSheetName: "Users_to_WE UPSC_FORM_2",
      emailIdx: 1,
      phoneIdx: 2,
      nameIdx: 0,
      prefix: "fmp_upsc2_",
      startCounter: 000000,
    },
    "JUDI_FORM": {
      url: "https://docs.google.com/spreadsheets/d/1DZ9hwfJiW5-6JckwicpaVeGotgLEYm6RVScs2GhnXIk/edit#gid=0",
      shName: "Sheet1",
      startRow: 1,
      destinationSheetName: "Users_to_WE JUDI_FORM",
      emailIdx: 1,
      phoneIdx: 2,
      nameIdx: 0,
      prefix: "fmp_jud1_",
      startCounter: 000000,
    },
  };

  var sheetConfig = sheetConfigurations[sheetName];

  var sourceSheet = SpreadsheetApp.openByUrl(sheetConfig.url).getSheetByName(sheetConfig.shName);
  var lastRow = sourceSheet.getLastRow();
  var numRows = lastRow - sheetConfig.startRow + 1;
  var sourceData = sourceSheet.getRange(sheetConfig.startRow, 1, numRows, sourceSheet.getLastColumn()).getValues();

  var destinationSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetConfig.destinationSheetName);
  var destinationData = destinationSheet.getDataRange().getValues();

  if (destinationData.length < sourceData.length) {
    var newRows = sourceData.slice(destinationData.length);
    for (var i = 0; i < newRows.length; i++) {
      var row = destinationData.length + i + 1;
      var email = String(newRows[i][sheetConfig.emailIdx]);
      var phone = String(newRows[i][sheetConfig.phoneIdx]);
      phone = (phone.length === 10) ? "91" + phone : phone;
      var name = String(newRows[i][sheetConfig.nameIdx]);

      if (email != "#ERROR!" && phone != "#ERROR!" && name != "#ERROR!" && phone.length == 12) {
        var uniqueUserId = generateUserId(row, sheetConfig.prefix, sheetConfig.startCounter);
        destinationSheet.getRange(row, 1).setValue(uniqueUserId);
        destinationSheet.getRange(row, 2).setValue(email);
        destinationSheet.getRange(row, 3).setValue(phone);
        destinationSheet.getRange(row, 4).setValue(name);
        destinationSheet.getRange(row, 5).setValue("TRUE");
      }
    }
  }
}

///////////////////////////////////////// USERS API - UPSC_FORM_1 /////////////////////////////////////////

function users_to_WE_UPSC1() {
  var mapper_keys = map_keys('Users_to_WE UPSC_FORM_1')
  SpreadsheetApp.flush()

  fetch_users_from_sheet("UPSC_FORM_1");

  var webEngageSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Users_to_WE UPSC_FORM_1');

  var StartRow = 2;
  var RowRange = webEngageSheet.getLastRow() - StartRow + 1;
  var WholeRange = webEngageSheet.getRange(StartRow, 1, RowRange, 6);
  var AllValues = WholeRange.getDisplayValues();

  var userList = [];
  var batchSize = 25;

  var userIndexList = [];
  var errorUserList = [];

  for (var idx in AllValues) {
    var currentRow = AllValues[idx];
    var status = currentRow[mapper_keys['status']];

    if (status !== "Success" && status !== "Error" && status !== "User Integrated") {
      var user_id = String(currentRow[mapper_keys['user_id']]);
      var email = String(currentRow[mapper_keys['email']]);
      var mobile = String(currentRow[mapper_keys['phone']]);
      var name = String(currentRow[mapper_keys['first_name']]);

      if (email != "#ERROR!" && mobile != "#ERROR!" && name != "#ERROR!" && mobile.length == 12) {
        var user = {
          'userId': user_id,
          'email': email,
          'firstName': name,
          'phone': mobile,
          'whatsappOptIn': true,
        };
        userList.push(user);
        userIndexList.push(idx);

        if (userList.length === batchSize) {
          var payload = { "users": userList }
          payload = JSON.stringify(payload);

          var [uploadResponse, respStatus] = callApi(usersUrl, "post", payload, headers);

          if (respStatus != 201) {
            print(payload);
            print(respStatus);
            errorUserList = errorUserList.concat(...userIndexList);
          }

          var userList = [];
          var userIndexList = [];
        }
        if (idx % 50 === 0) {
          print("Delay Added: 5 Sec");
          Utilities.sleep(5000);
        }
        webEngageSheet.getRange(parseInt(idx) + StartRow, mapper_keys['status'] + 1).setValue('User Integrated');
      }
      else {
        webEngageSheet.getRange(parseInt(idx) + StartRow, mapper_keys['status'] + 1).setValue('Error');
      }
    }
  }
  if (userList.length > 0) {
    var payload = { "users": userList }
    payload = JSON.stringify(payload);

    var [uploadResponse, respStatus] = callApi(usersUrl, "post", payload, headers);

    if (respStatus != 201) {
      print(payload);
      print(respStatus);
      errorUserList = errorUserList.concat(...userIndexList);
    }
  }

  if (errorUserList.length > 0) {
    print(errorUserList);
    for (var e in errorUserList) {
      webEngageSheet.getRange(parseInt(errorUserList[e]) + StartRow, mapper_keys['status'] + 1).setValue('Failed User Api');
    }
  }

  print("Done User Integration - UPSC_FORM_1");
}

////////////////////////////////////////////////// EVENTS API - UPSC_FORM_1 //////////////////////////////////////////////////

function users_to_events_UPSC1() {
  var mapper_keys = map_keys('Users_to_WE UPSC_FORM_1')
  SpreadsheetApp.flush()

  var webEngageSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Users_to_WE UPSC_FORM_1');

  var StartRow = 2;
  var RowRange = webEngageSheet.getLastRow() - StartRow + 1;
  var WholeRange = webEngageSheet.getRange(StartRow, 1, RowRange, 6);
  var AllValues = WholeRange.getDisplayValues();

  var eventName = "UPSC_FA";

  var eventUserList = [];
  var batchSize = 25;

  var userIndexList = [];
  var errorUserList = [];

  for (var idx in AllValues) {
    var currentRow = AllValues[idx];
    var status = currentRow[mapper_keys['status']];

    if (status === "User Integrated") {
      var user_id = String(currentRow[mapper_keys['user_id']]);
      if (user_id) {
        var eventUser = {
          "userId": user_id,
          "eventName": eventName
        };
        eventUserList.push(eventUser);
        userIndexList.push(idx);

        if (eventUserList.length === batchSize) {
          var payload = { "events": eventUserList }
          payload = JSON.stringify(payload);

          var [uploadResponse, respStatus] = callApi(eventsUrl, "post", payload, headers);

          if (respStatus != 201) {
            print(payload);
            print(respStatus);
            errorUserList = errorUserList.concat(...userIndexList);
          }

          var eventUserList = [];
          var userIndexList = [];
        }
        if (idx % 50 === 0) {
          print("Delay Added: 5 Sec");
          Utilities.sleep(5000);
        }
        webEngageSheet.getRange(parseInt(idx) + StartRow, mapper_keys['status'] + 1).setValue('Success');
      }
      else {
        webEngageSheet.getRange(parseInt(idx) + StartRow, mapper_keys['status'] + 1).setValue('Error');
      }
    }
  }
  if (eventUserList.length > 0) {
    var payload = { "events": eventUserList }
    payload = JSON.stringify(payload);

    var [uploadResponse, respStatus] = callApi(eventsUrl, "post", payload, headers);

    if (respStatus != 201) {
      print(payload);
      print(respStatus);
      errorUserList = errorUserList.concat(...userIndexList);
    }
  }

  if (errorUserList.length > 0) {
    print(errorUserList);
    for (var e in errorUserList) {
      webEngageSheet.getRange(parseInt(errorUserList[e]) + StartRow, mapper_keys['status'] + 1).setValue('Failed Event Api');
    }
  }

  print("Done User To Event - UPSC_FORM_1")
}

////////////////////////////////////////////////// USERS API - UPSC_FORM_2 //////////////////////////////////////////////////

function users_to_WE_UPSC2() {
  var mapper_keys = map_keys('Users_to_WE UPSC_FORM_2')
  SpreadsheetApp.flush()

  fetch_users_from_sheet("UPSC_FORM_2");

  var webEngageSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Users_to_WE UPSC_FORM_2');

  var StartRow = 2;
  var RowRange = webEngageSheet.getLastRow() - StartRow + 1;
  var WholeRange = webEngageSheet.getRange(StartRow, 1, RowRange, 6);
  var AllValues = WholeRange.getDisplayValues();

  var userList = [];
  var batchSize = 25;

  var userIndexList = [];
  var errorUserList = [];

  for (var idx in AllValues) {
    var currentRow = AllValues[idx];
    var status = currentRow[mapper_keys['status']];

    if (status !== "Success" && status !== "Error" && status !== "User Integrated") {
      var user_id = String(currentRow[mapper_keys['user_id']]);
      var email = String(currentRow[mapper_keys['email']]);
      var mobile = String(currentRow[mapper_keys['phone']]);
      var name = String(currentRow[mapper_keys['first_name']]);

      if (email != "#ERROR!" && mobile != "#ERROR!" && name != "#ERROR!" && mobile.length == 12) {
        var user = {
          'userId': user_id,
          'email': email,
          'firstName': name,
          'phone': mobile,
          'whatsappOptIn': true,
        };
        userList.push(user);
        userIndexList.push(idx);

        if (userList.length === batchSize) {
          var payload = { "users": userList }
          payload = JSON.stringify(payload);

          var [uploadResponse, respStatus] = callApi(usersUrl, "post", payload, headers);

          if (respStatus != 201) {
            print(payload);
            print(respStatus);
            errorUserList = errorUserList.concat(...userIndexList);
          }

          var userList = [];
          var userIndexList = [];
        }
        if (idx % 50 === 0) {
          print("Delay Added: 5 Sec");
          Utilities.sleep(5000);
        }
        webEngageSheet.getRange(parseInt(idx) + StartRow, mapper_keys['status'] + 1).setValue('User Integrated');
      }
      else {
        webEngageSheet.getRange(parseInt(idx) + StartRow, mapper_keys['status'] + 1).setValue('Error');
      }
    }
  }
  if (userList.length > 0) {
    var payload = { "users": userList }
    payload = JSON.stringify(payload);

    var [uploadResponse, respStatus] = callApi(usersUrl, "post", payload, headers);

    if (respStatus != 201) {
      print(payload);
      print(respStatus);
      errorUserList = errorUserList.concat(...userIndexList);
    }
  }

  if (errorUserList.length > 0) {
    print(errorUserList);
    for (var e in errorUserList) {
      webEngageSheet.getRange(parseInt(errorUserList[e]) + StartRow, mapper_keys['status'] + 1).setValue('Failed User Api');
    }
  }

  print("Done User Integration - UPSC_FORM_2");
}

////////////////////////////////////////////////// EVENTS API - UPSC_FORM_2 //////////////////////////////////////////////////

function users_to_events_UPSC2() {
  var mapper_keys = map_keys('Users_to_WE UPSC_FORM_2')
  SpreadsheetApp.flush()

  var webEngageSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Users_to_WE UPSC_FORM_2');

  var StartRow = 2;
  var RowRange = webEngageSheet.getLastRow() - StartRow + 1;
  var WholeRange = webEngageSheet.getRange(StartRow, 1, RowRange, 6);
  var AllValues = WholeRange.getDisplayValues();

  var eventName = "UPSC_FA";

  var eventUserList = [];
  var batchSize = 25;

  var userIndexList = [];
  var errorUserList = [];

  for (var idx in AllValues) {
    var currentRow = AllValues[idx];
    var status = currentRow[mapper_keys['status']];

    if (status === "User Integrated") {
      var user_id = String(currentRow[mapper_keys['user_id']]);
      if (user_id) {
        var eventUser = {
          "userId": user_id,
          "eventName": eventName
        };
        eventUserList.push(eventUser);
        userIndexList.push(idx);

        if (eventUserList.length === batchSize) {
          var payload = { "events": eventUserList }
          payload = JSON.stringify(payload);

          var [uploadResponse, respStatus] = callApi(eventsUrl, "post", payload, headers);

          if (respStatus != 201) {
            print(payload);
            print(respStatus);
            errorUserList = errorUserList.concat(...userIndexList);
          }

          var eventUserList = [];
          var userIndexList = [];
        }
        if (idx % 50 === 0) {
          print("Delay Added: 5 Sec");
          Utilities.sleep(5000);
        }
        webEngageSheet.getRange(parseInt(idx) + StartRow, mapper_keys['status'] + 1).setValue('Success');
      }
      else {
        webEngageSheet.getRange(parseInt(idx) + StartRow, mapper_keys['status'] + 1).setValue('Error');
      }
    }
  }
  if (eventUserList.length > 0) {
    var payload = { "events": eventUserList }
    payload = JSON.stringify(payload);

    var [uploadResponse, respStatus] = callApi(eventsUrl, "post", payload, headers);

    if (respStatus != 201) {
      print(payload);
      print(respStatus);
      errorUserList = errorUserList.concat(...userIndexList);
    }
  }

  if (errorUserList.length > 0) {
    print(errorUserList);
    for (var e in errorUserList) {
      webEngageSheet.getRange(parseInt(errorUserList[e]) + StartRow, mapper_keys['status'] + 1).setValue('Failed Event Api');
    }
  }

  print("Done User To Event - UPSC_FORM_2")
}

////////////////////////////////////////////////// USERS API - UPSC_FORM_2 //////////////////////////////////////////////////

function users_to_WE_JUDI() {
  var mapper_keys = map_keys('Users_to_WE JUDI_FORM')
  SpreadsheetApp.flush()

  fetch_users_from_sheet("JUDI_FORM");

  var webEngageSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Users_to_WE JUDI_FORM');

  var StartRow = 2;
  var RowRange = webEngageSheet.getLastRow() - StartRow + 1;
  var WholeRange = webEngageSheet.getRange(StartRow, 1, RowRange, 6);
  var AllValues = WholeRange.getDisplayValues();

  var userList = [];
  var batchSize = 25;

  var userIndexList = [];
  var errorUserList = [];

  for (var idx in AllValues) {
    var currentRow = AllValues[idx];
    var status = currentRow[mapper_keys['status']];

    if (status !== "Success" && status !== "Error" && status !== "User Integrated") {
      var user_id = String(currentRow[mapper_keys['user_id']]);
      var email = String(currentRow[mapper_keys['email']]);
      var mobile = String(currentRow[mapper_keys['phone']]);
      var name = String(currentRow[mapper_keys['first_name']]);

      if (email != "#ERROR!" && mobile != "#ERROR!" && name != "#ERROR!" && mobile.length == 12) {
        var user = {
          'userId': user_id,
          'email': email,
          'firstName': name,
          'phone': mobile,
          'whatsappOptIn': true,
        };
        userList.push(user);
        userIndexList.push(idx);

        if (userList.length === batchSize) {
          var payload = { "users": userList }
          payload = JSON.stringify(payload);

          var [uploadResponse, respStatus] = callApi(usersUrl, "post", payload, headers);

          if (respStatus != 201) {
            print(payload);
            print(respStatus);
            errorUserList = errorUserList.concat(...userIndexList);
          }

          var userList = [];
          var userIndexList = [];
        }
        if (idx % 50 === 0) {
          print("Delay Added: 5 Sec");
          Utilities.sleep(5000);
        }
        webEngageSheet.getRange(parseInt(idx) + StartRow, mapper_keys['status'] + 1).setValue('User Integrated');
      }
      else {
        webEngageSheet.getRange(parseInt(idx) + StartRow, mapper_keys['status'] + 1).setValue('Error');
      }
    }
  }
  if (userList.length > 0) {
    var payload = { "users": userList }
    payload = JSON.stringify(payload);

    var [uploadResponse, respStatus] = callApi(usersUrl, "post", payload, headers);

    if (respStatus != 201) {
      print(payload);
      print(respStatus);
      errorUserList = errorUserList.concat(...userIndexList);
    }
  }

  if (errorUserList.length > 0) {
    print(errorUserList);
    for (var e in errorUserList) {
      webEngageSheet.getRange(parseInt(errorUserList[e]) + StartRow, mapper_keys['status'] + 1).setValue('Failed User Api');
    }
  }

  print("Done User Integration - JUDI_FORM");
}

////////////////////////////////////////////////// EVENTS API - JUDI_FORM //////////////////////////////////////////////////

function users_to_events_JUDI() {
  var mapper_keys = map_keys('Users_to_WE JUDI_FORM')
  SpreadsheetApp.flush()

  var webEngageSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Users_to_WE JUDI_FORM');

  var StartRow = 2;
  var RowRange = webEngageSheet.getLastRow() - StartRow + 1;
  var WholeRange = webEngageSheet.getRange(StartRow, 1, RowRange, 6);
  var AllValues = WholeRange.getDisplayValues();

  var eventName = "JUDI_FA";

  var eventUserList = [];
  var batchSize = 25;

  var userIndexList = [];
  var errorUserList = [];

  for (var idx in AllValues) {
    var currentRow = AllValues[idx];
    var status = currentRow[mapper_keys['status']];

    if (status === "User Integrated") {
      var user_id = String(currentRow[mapper_keys['user_id']]);
      if (user_id) {
        var eventUser = {
          "userId": user_id,
          "eventName": eventName
        };
        eventUserList.push(eventUser);
        userIndexList.push(idx);

        if (eventUserList.length === batchSize) {
          var payload = { "events": eventUserList }
          payload = JSON.stringify(payload);

          var [uploadResponse, respStatus] = callApi(eventsUrl, "post", payload, headers);

          if (respStatus != 201) {
            print(payload);
            print(respStatus);
            errorUserList = errorUserList.concat(...userIndexList);
          }

          var eventUserList = [];
          var userIndexList = [];
        }
        if (idx % 50 === 0) {
          print("Delay Added: 5 Sec");
          Utilities.sleep(5000);
        }
        webEngageSheet.getRange(parseInt(idx) + StartRow, mapper_keys['status'] + 1).setValue('Success');
      }
      else {
        webEngageSheet.getRange(parseInt(idx) + StartRow, mapper_keys['status'] + 1).setValue('Error');
      }
    }
  }
  if (eventUserList.length > 0) {
    var payload = { "events": eventUserList }
    payload = JSON.stringify(payload);

    var [uploadResponse, respStatus] = callApi(eventsUrl, "post", payload, headers);

    if (respStatus != 201) {
      print(payload);
      print(respStatus);
      errorUserList = errorUserList.concat(...userIndexList);
    }
  }

  if (errorUserList.length > 0) {
    print(errorUserList);
    for (var e in errorUserList) {
      webEngageSheet.getRange(parseInt(errorUserList[e]) + StartRow, mapper_keys['status'] + 1).setValue('Failed Event Api');
    }
  }

  print("Done User To Event - JUDI_FORM")
}

/////////////////////////////////////////////////////////////////////////////// TESTING ///////////////////////////////////////////////////////////////////////////////

function fetchUserData_TEST() {
  var sourceSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("ResponseSheet TEST");
  var destinationSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Users_to_WE TEST");

  var sourceData = sourceSheet.getDataRange().getValues();
  var destinationData = destinationSheet.getDataRange().getValues();

  if (destinationData.length < sourceData.length) {
    var newRows = sourceData.slice(destinationData.length);
    for (var i = 0; i < newRows.length; i++) {
      var row = destinationData.length + i + 1;
      var email = String(newRows[i][1]);
      var phone = String(newRows[i][2]);
      phone = (phone.length === 10) ? "91" + phone : phone;
      var name = String(newRows[i][3]);

      if (email != "#ERROR!" && phone != "#ERROR!" && name != "#ERROR!" && phone.length == 12) {
        var prefix = "test_1_"
        var startCounter = 400000
        var uniqueUserId = generateUserId(row, prefix, startCounter);
        destinationSheet.getRange(row, 1).setValue(uniqueUserId);
        destinationSheet.getRange(row, 2).setValue(email);
        destinationSheet.getRange(row, 3).setValue(phone);
        destinationSheet.getRange(row, 4).setValue(name);
        destinationSheet.getRange(row, 5).setValue("TRUE");
      }
    }
  }
  print("Done Test Fetching!");
}

////////////////////////////////////////////////// USERS API - UPSC_FORM_2 //////////////////////////////////////////////////

function users_to_WE_TEST() {
  var mapper_keys = map_keys('Users_to_WE TEST')
  SpreadsheetApp.flush()

  fetchUserData_TEST();

  var webEngageSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Users_to_WE TEST');

  var StartRow = 2;
  var RowRange = webEngageSheet.getLastRow() - StartRow + 1;
  var WholeRange = webEngageSheet.getRange(StartRow, 1, RowRange, 6);
  var AllValues = WholeRange.getDisplayValues();

  var userList = [];
  var batchSize = 25;

  var userIndexList = [];
  var errorUserList = [];

  for (var idx in AllValues) {
    var currentRow = AllValues[idx];
    var status = currentRow[mapper_keys['status']];

    if (status !== "Success" && status !== "Error" && status !== "User Integrated") {
      var user_id = String(currentRow[mapper_keys['user_id']]);
      var email = String(currentRow[mapper_keys['email']]);
      var mobile = String(currentRow[mapper_keys['phone']]);
      var name = String(currentRow[mapper_keys['first_name']]);

      if (email != "#ERROR!" && mobile != "#ERROR!" && name != "#ERROR!" && mobile.length == 12) {
        var user = {
          'userId': user_id,
          'email': email,
          'firstName': name,
          'phone': mobile,
          'whatsappOptIn': true,
        };
        userList.push(user);
        userIndexList.push(idx);

        if (userList.length === batchSize) {
          var payload = { "users": userList }
          payload = JSON.stringify(payload);

          var [uploadResponse, respStatus] = callApi(usersUrl, "post", payload, headers);

          if (respStatus != 201) {
            print(payload);
            print(respStatus);
            errorUserList = errorUserList.concat(...userIndexList);
          }

          var userList = [];
          var userIndexList = [];
        }
        if (idx % 50 === 0) {
          print("Delay Added: 5 Sec");
          Utilities.sleep(5000);
        }
        webEngageSheet.getRange(parseInt(idx) + StartRow, mapper_keys['status'] + 1).setValue('User Integrated');
      }
      else {
        webEngageSheet.getRange(parseInt(idx) + StartRow, mapper_keys['status'] + 1).setValue('Error');
      }
    }
  }
  if (userList.length > 0) {
    var payload = { "users": userList }
    payload = JSON.stringify(payload);

    var [uploadResponse, respStatus] = callApi(usersUrl, "post", payload, headers);

    if (respStatus != 201) {
      print(payload);
      print(respStatus);
      errorUserList = errorUserList.concat(...userIndexList);
    }
  }

  if (errorUserList.length > 0) {
    print(errorUserList);
    for (var e in errorUserList) {
      webEngageSheet.getRange(parseInt(errorUserList[e]) + StartRow, mapper_keys['status'] + 1).setValue('Failed User Api');
    }
  }

  print("Done User Integration - TEST");
}

////////////////////////////////////////////////// EVENTS API - JUDI_FORM //////////////////////////////////////////////////

function users_to_events_TEST() {
  var mapper_keys = map_keys('Users_to_WE TEST')
  SpreadsheetApp.flush()

  var webEngageSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Users_to_WE TEST');

  var StartRow = 2;
  var RowRange = webEngageSheet.getLastRow() - StartRow + 1;
  var WholeRange = webEngageSheet.getRange(StartRow, 1, RowRange, 6);
  var AllValues = WholeRange.getDisplayValues();

  var eventName = "Testing User Event";

  var eventUserList = [];
  var batchSize = 25;

  var userIndexList = [];
  var errorUserList = [];

  for (var idx in AllValues) {
    var currentRow = AllValues[idx];
    var status = currentRow[mapper_keys['status']];

    if (status === "User Integrated") {
      var user_id = String(currentRow[mapper_keys['user_id']]);
      if (user_id) {
        var eventUser = {
          "userId": user_id,
          "eventName": eventName
        };
        eventUserList.push(eventUser);
        userIndexList.push(idx);

        if (eventUserList.length === batchSize) {
          var payload = { "events": eventUserList }
          payload = JSON.stringify(payload);

          var [uploadResponse, respStatus] = callApi(eventsUrl, "post", payload, headers);

          if (respStatus != 201) {
            print(payload);
            print(respStatus);
            errorUserList = errorUserList.concat(...userIndexList);
          }

          var eventUserList = [];
          var userIndexList = [];
        }
        if (idx % 50 === 0) {
          print("Delay Added: 5 Sec");
          Utilities.sleep(5000);
        }
        webEngageSheet.getRange(parseInt(idx) + StartRow, mapper_keys['status'] + 1).setValue('Success');
      }
      else {
        webEngageSheet.getRange(parseInt(idx) + StartRow, mapper_keys['status'] + 1).setValue('Error');
      }
    }
  }
  if (eventUserList.length > 0) {
    var payload = { "events": eventUserList }
    payload = JSON.stringify(payload);

    var [uploadResponse, respStatus] = callApi(eventsUrl, "post", payload, headers);

    if (respStatus != 201) {
      print(payload);
      print(respStatus);
      errorUserList = errorUserList.concat(...userIndexList);
    }
  }

  if (errorUserList.length > 0) {
    print(errorUserList);
    for (var e in errorUserList) {
      webEngageSheet.getRange(parseInt(errorUserList[e]) + StartRow, mapper_keys['status'] + 1).setValue('Failed Event Api');
    }
  }

  print("Done User To Event - TEST")
}
content_copyCOPY