3 var _ = require('lodash');
5 var db = require('../../mysqldb').db;
6 var logger = require('../logger')('app');
7 var DBPromise = require('bluebird');
12 appdata: 'CDR(type)=internal',
17 appdata: 'demo-echotest',
24 appdata: 'demo-echodone',
31 appdata: 'CDR(type)=internal'
36 appdata: 'Support,xX,,,300,,,,,',
44 appdata: 'CDR(type)=internal'
49 appdata: 'Sales,xX,,,300,,,,,',
57 appdata: 'CDR(type)=internal'
60 appdata: 'agi://127.0.0.1/square,AutoAttendant',
68 appdata: 'CDR(type)=internal'
71 appdata: 'agi://127.0.0.1/square,Orders',
79 appdata: 'CDR(type)=internal'
82 appdata: 'agi://127.0.0.1/square,CSI',
90 appdata: 'CDR(type)=internal'
93 appdata: 'agi://127.0.0.1/square,Survey',
99 'xcally-motion-dialer': [{
101 appdata: 'CDR(type)=dialer'
104 appdata: 'CALLERID(all)=${XMD-CALLERID}'
107 appdata: '$["${XMD-AMD}" != "NONE" ]?5:9'
110 appdata: '${XMD-AMDINITIALSILENCE},${XMD-AMDGREETING},${XMD-AMDAFTERGREETINGSILENCE},${XMD-AMDTOTALANALYSISTIME},${XMD-AMDMINWORDLENGTH},${XMD-AMDBETWEENWORDSSILENCE},${XMD-AMDMAXIMUMNUMBEROFWORDS},${XMD-AMDSILENCETHRESHOLD},${XMD-AMDMAXIMUMWORDLENGTH}'
113 appdata: '$["${AMDSTATUS}" == "HUMAN" ]?9:7'
116 appdata: '$["${AMDSTATUS}" == "NOTSURE" ]?9:8'
119 appdata: '$["${AMDSTATUS}" == "MACHINE" ]?11:9'
122 appdata: '$["${XMD-AGI}" != "NONE" ]?AGI(${XMD-AGI})'
125 appdata: '$["${XMD-QUEUE}" != "NONE" ]?QUEUE(${XMD-QUEUE})'
129 'xcally-motion-fax': [{
131 appdata: 'CDR(type)=outbound-fax'
137 appdata: 'FAXOPT(ecm)=${XMF-ECM}'
140 appdata: 'FAXOPT(headerinfo)=${XMF-HEADERINFO}'
143 appdata: 'FAXOPT(localstationid)=${XMF-LOCALSTATIONID}'
146 appdata: 'FAXOPT(maxrate)=${XMF-MAXRATE}'
149 appdata: 'FAXOPT(minrate)=${XMF-MINRATE}'
152 appdata: 'FAXOPT(modem)=${XMF-MODEM}'
155 appdata: 'FAXOPT(t38timeout)=${XMF-T38TIMEOUT}'
158 appdata: '${XMF-PATH},d'
160 'xcally-motion-preview': [{
162 appdata: 'CDR(type)=dialer'
165 appdata: 'CALLERID(all)=${XMD-CALLERID}'
168 appdata: '${XMD-DIALCHANNEL},${XMD-DIALTIMEOUT},${XMD-DIALOPTIONS},${XMD-DIALURL}'
174 appdata: 'CDR(type)=outbound'
177 outboundrouteid: true
180 appdata: 'demo-congrats',
188 appdata: 'CDR(type)=inbound'
193 appdata: 'demo-congrats',
206 var voiceExtensions = [{
210 description: 'echo test demo auto generated'
215 description: 'forward to Support queue auto generated'
220 description: 'forward to Sales queue auto generated'
225 description: 'forward to Auto Attendant IVR auto generated'
230 description: 'forward to Orders IVR auto generated'
235 description: 'forward to CSI IVR auto generated'
240 description: 'forward to Survey IVR auto generated'
244 exten: 'xcally-motion-dialer',
245 description: 'dialer extensions auto generated'
249 exten: 'xcally-motion-fax',
250 description: 'fax extensions auto generated'
254 exten: 'xcally-motion-preview',
255 description: 'dialer extensions auto generated'
260 description: 'demo outbound calls auto generated'
263 context: 'from-voip-provider',
265 description: 'catch all inbound calls auto generated'
270 description: 'catch hangup event auto generated'
275 description: 'catch failed event auto generated'
278 var applicationsAlways = {
281 appdata: '${XCALLY_MIXMONITOR_UNIQUEID}.${XCALLY_MIXMONITOR_FORMAT},ab'
285 '_[x][c][a][l][l][y][Q][u][e][u][e][E][x][t][e][n][s][i][o][n].': [{
289 appdata: '${EXTEN:20},xX'
293 var voiceExtensionsAlways = [{
295 context: 'xcally-mixmonitor-context',
300 exten: '_[x][c][a][l][l][y][Q][u][e][u][e][E][x][t][e][n][s][i][o][n].'
303 function createExtensions(voiceExtensions, applications) {
304 return db.VoiceExtension
305 .bulkCreate(voiceExtensions, {
306 ignoreDuplicates: true,
307 individualHooks: true
309 .then(function(entities) {
310 for (var i = 0; i < entities.length; i += 1) {
311 if (applications[entities[i].exten]) {
312 for (var j = 0; j < applications[entities[i].exten].length; j += 1) {
314 // NOTE: only for outbound route with outboundrouteid
315 if (applications[entities[i].exten][j].outboundrouteid) {
316 applications[entities[i].exten][j].appdata = 'outboundrouteid=' + entities[i].id;
317 delete applications[entities[i].exten][j].outboundrouteid;
320 applications[entities[i].exten][j] = _.defaults(applications[entities[i].exten][j], {
323 type: entities[i].type,
324 context: entities[i].context,
325 exten: entities[i].exten,
326 priority: parseInt(entities[i].priority, 10) + 1 + j,
327 description: entities[i].description,
328 VoiceExtensionId: entities[i].id
331 db.VoiceExtension.create(applications[entities[i].exten][j]);
338 logger.info('Voice Extensions have been created');
340 .catch(function(err) {
341 logger.error('Can\'t create Voice Extensions', err);
345 exports.create = function() {
346 createExtensions(voiceExtensions, applications);
349 exports.createAlways = function() {
350 return db.VoiceExtension
353 $or: voiceExtensionsAlways
357 createExtensions(voiceExtensionsAlways, applicationsAlways);
359 .catch(function(err) {
360 logger.error('Can\'t create Voice Extensions', err);