@dabblelab/autopilot-core
Version:
Core functionality for the Twilio Autopilot CLI and the Twilio Autopilot Plugin for the Twilio CLI.
112 lines (86 loc) • 3.87 kB
JavaScript
const importAssistant = async (importSchemaPath, assistant_name) => {
const importer = require('./import-lib'),
extract = require('extract-zip'),
util = require('util'),
path = require('path'),
fs = require('fs-extra'),
files = require('../files');
const extracter = util.promisify(extract);
if (!fs.existsSync(importSchemaPath)) {
throw new Error(`The file ${importSchemaPath} was not be found.`)
}
let sampleAssistant = {
"friendlyName": "",
"logQueries": true,
"uniqueName": "",
"defaults": {},
"styleSheet": {},
"fieldTypes": [],
"tasks": []
};
return await Promise.resolve()
.then( async () => {
const dir = path.basename(importSchemaPath),
folder = dir.substr(0,dir.indexOf('.')),
dirPath = path.resolve(process.cwd(),folder)
await extracter(importSchemaPath, {dir : dirPath});
return dirPath;
})
.then( async (extractedDir) => {
// read entities and intents directory
let entitiesFiles = [], intentsFiles = [];
if(fs.existsSync(path.resolve(extractedDir, 'entities')))
entitiesFiles = await fs.readdirSync(path.resolve(extractedDir, 'entities'));
if(fs.existsSync(path.resolve(extractedDir, 'intents')))
intentsFiles = await fs.readdirSync(path.resolve(extractedDir, 'intents'));
// getting Field Types
const fieldTypes = await importer.FieldTypes(entitiesFiles, path.resolve(extractedDir, 'entities'));
// getting Tasks, assistant initiation and fallback
const tasksObj = await importer.Tasks(intentsFiles, path.resolve(extractedDir, 'intents'));
sampleAssistant.uniqueName = assistant_name.replace(/\'|-|\s|,/g," ").replace(/\s+/g,' ').trim().replace(/\s/g,"-");
sampleAssistant.friendlyName = assistant_name.replace(/\'|-|\s|,/g," ").replace(/\s+/g,' ').trim().replace(/\s/g,"-");
sampleAssistant.fieldTypes = fieldTypes;
sampleAssistant.tasks = tasksObj.tasks;
if(tasksObj.assistant_initiation)
{
if(sampleAssistant.defaults.hasOwnProperty('defaults')){
sampleAssistant.defaults.defaults.assistant_initiation = `task://${tasksObj.assistant_initiation}`;
}
else{
sampleAssistant.defaults = {
"defaults" : {
"assistant_initiation" : `task://${tasksObj.assistant_initiation}`
}
}
}
}
if(tasksObj.fallback)
{
if(sampleAssistant.defaults.hasOwnProperty('defaults')){
sampleAssistant.defaults.defaults.fallback = `task://${tasksObj.fallback}`;
sampleAssistant.defaults.defaults.collect = {
"validate_on_failure" : `task://${tasksObj.fallback}`
};
}
else{
sampleAssistant.defaults = {
"defaults" : {
"fallback" : `task://${tasksObj.fallback}`,
"collect" : {
"validate_on_failure" : `task://${tasksObj.fallback}`
}
}
}
}
}
const filename = await files.createAssistantJSONFile(sampleAssistant.uniqueName, false);
await files.writeAssistantJSONFile(sampleAssistant, filename, false);
await fs.removeSync(extractedDir);
//assistant.filename = filename;
return filename;
})
.catch( (err) => {
throw err;
})
}
module.exports = importAssistant;