# 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.
/* 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
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)