# Export de données directement dans Spreadsheet via script

Vous pouvez exporter les données directement dans Spreadsheet pour ensuite faire votre propre analyse.

Voici le fichier de base: ouvrir (opens new window)

Il a 2 onglets:

  • convStatistics: exporter les données de conversation
  • attributeStatistics: exporter les données des attributs et des compétences

Voici comment faire:

  • Dupliquez la feuille de calcul dont vous avez besoin pour l'insérer dans le fichier de votre choix.
  • Ouvrez l'éditeur de script >Outils>Editeur de scripts
  • Coller le script ci-dessous
  • Remplacer la ligne 2 avec votre token que vous récupérez dans le dashboard Vizir (mon compte > token)
  • Lancer initScript pour valider les droit Vizir sur ce fichier. Run script
/* Variables to modify */
var token ='ey********';

/**********************************************************
                        SCRIPT
/**********************************************************/
/* Fixed variables */
var baseUrl = 'https://developers.vizir.co'
var functionCell = 'D5';
var cells = {
  conversationStatistics: {
    appIdCell: 'D6',
    tokenCell: 'D7',
    weekNumberCell: 'D8',
    overwriteCell: 'D9',
    addHeaders: 'D10',
    firstRowData: 12
  },
  attributeData: {
    appIdCell: 'D6',
    tokenCell: 'D7',
    startingDate: 'D8',
    endingDate: 'D9',
    urlApiCell: 'D10',
    overwriteCell: 'D11',
    addHeaders: 'D12',
    firstRowData: 14
  }
}


function getFunctionsValues() {
  var func = SpreadsheetApp.getActiveSheet().getRange(functionCell).getValue();
  var appId = SpreadsheetApp.getActiveSheet().getRange(cells[func].appIdCell).getValue();
  var token = SpreadsheetApp.getActiveSheet().getRange(cells[func].tokenCell).getValue();
  var overwriteValues = SpreadsheetApp.getActiveSheet().getRange(cells[func].overwriteCell).getValue();
  var addHeaders = SpreadsheetApp.getActiveSheet().getRange(cells[func].addHeaders).getValue();
  var values;
  var headers;
  if (func == 'conversationStatistics') {
    [headers, values] = getConversationStatistics_(appId, token)
  } else if (func == 'attributeData') {
    [headers, values] = getAttributeStatistics_(token)
  }

  if (overwriteValues) {
    resetValues(cells[func].firstRowData);
  }
  firstRowData = SpreadsheetApp.getActiveSheet().getLastRow();
  if (addHeaders) {
    writeValues(headers, firstRowData);
  }
  firstRowData = SpreadsheetApp.getActiveSheet().getLastRow();
  writeValues(values, firstRowData);
}


/*
  G sheet functions
  get and reset Values
*/
function resetValues(firstRowData) {
  SpreadsheetApp.getActiveSheet().getRange(firstRowData + 1, 1,SpreadsheetApp.getActiveSheet().getLastRow(), SpreadsheetApp.getActiveSheet().getLastColumn()).clearContent();
}

function writeValues (values, startingLine) {
  var range = SpreadsheetApp.getActiveSheet().getRange(startingLine+1,1,values.length,values[0].length);
  range.setValues(values);
  return;
}

/*
  Internal Functions
*/
function ImportJSONAdvanced_(url, fetchOptions, query) {
  if (query) {
    for (let key in query) {
      if (url.indexOf('?' == -1)) {
        url= url + '?'+key+'=' + query[key]
      } else {
        url= url + '&'+key+'=' + query[key]
      }
    }
  }
  var jsondata = UrlFetchApp.fetch(url, fetchOptions);
  var object   = JSON.parse(jsondata.getContentText());
  return object;
}

function ImportJSONBearerAuth_(url, token, query) {
  var header = {headers: {Authorization: "Bearer " + token}};
  return ImportJSONAdvanced_(url, header, query);
}


/*
  Vizir Functions
*/
function getConversationStatistics_(appID, token) {
  var weeknumber = SpreadsheetApp.getActiveSheet().getRange(cells.conversationStatistics.weekNumberCell).getValue();
  var url = baseUrl + '/applications/'+appID+ '/statistics/sheets';
  var query = {
    week_number: weeknumber
  }
  let columns = ['Week Number','from', 'nb_users', 'new_users', 'nb_messages', 'nb_live_messages', 'total_request', 'understood', 'notunderstood']
  var data = ImportJSONBearerAuth_(url, token, query)
  if (data && data.arrayPerso) {
    for (let d=0; d< data.arrayPerso.length; d++) {
      columns.push(data.arrayPerso[d]);
    }
  }
  let returnData = [weeknumber]
  for (let i=1; i< columns.length; i++) {
    returnData.push(data[columns[i]])
  }
  return [[columns], [returnData]];
}

function getAttributeStatistics_(token) {
  var url = SpreadsheetApp.getActiveSheet().getRange(cells.attributeData.urlApiCell).getValue();
  var startingDate = SpreadsheetApp.getActiveSheet().getRange(cells.attributeData.startingDate).getValue();
  var endingDate = SpreadsheetApp.getActiveSheet().getRange(cells.attributeData.endingDate).getValue();
  url = url + '&from='+ startingDate.getTime() + '&to=' + endingDate.getTime()  
  var data = ImportJSONBearerAuth_(url, token, {})
  if (Array.isArray(data.data[0])) {
    // Old function that return arrays
    headers = data.data[0];
    result = data.data.splice(0,1)
  } else {
    // New function that return json
    [headers, emptyLine] = getHeaders(data.data)
    result = getValues(data.data, headers, emptyLine)
  }
  return [[headers], result];
}

function getHeaders (data) {
  var headers = [];
  var emptyLine = [];
  data.map(line => {
    for (key in line) {
      if (headers.indexOf(key) === -1) {
        headers.push(key);
        emptyLine.push('')
      }
    }
  })
  return [headers, emptyLine];
}
function getValues (data, headers, emptyLine) {
  var values = [];
  data.map(line => {
    var lineValues = JSON.parse(JSON.stringify(emptyLine));
    for (key in line) {
      var index = headers.indexOf(key);
      lineValues[index] = line[key];
    }
    values.push(lineValues);
  })
  return values;
}
/*
  Initiation Script
*/
function initScript () {
  var url = baseUrl + '/chatbots';
  var data = ImportJSONBearerAuth_(url, token, {})
  return data.data;
}

  • Revenez sur la feuille de calcul et replissez les champs de configuration Run script

  • Lancez le script en cliquant sur le bouton Récupérer les données

Certains champs sont ajoutés automatiquement au fichier. Voici les plus importants:

  • id: Identifiant unique du répondant
  • rootUser: Identifiant unique du répondant "parent" dans le cas d'un process. Peut-être égal à id
  • firstMessage: Date du premier message reçu par le chatbot (sur la sélection d'attributs extraits)
  • lastReplied Date du dernier message reçu par le chatbot (sur la sélection d'attributs extraits)
  • timeConv: Temps de la conversation entre le premier et le dernier message reçu par le chatbot (sur la sélection d'attributs extraits) en secondes
  • device_type: Device du répondant
  • source: source du répondant
  • current_date: Date de dernière interaction de l'utilisateur (avec les attributs sélectionnés)
  • current_time: Heure de dernière interaction de l'utilisateur (avec les attributs sélectionnés)