305 lines
12 KiB
TypeScript
305 lines
12 KiB
TypeScript
![]() |
/*****************************************************************************\
|
||
|
| █████ █████ ██ █ █████ █████ ████ ██ ████ █████ █████ ███ ® |
|
||
|
| ██ █ ███ █ █ ██ ██ ██ ██ ██ ██ █ ██ ██ █ █ |
|
||
|
| ██ ███ ████ █ ██ █ ████ █████ ██████ ██ ████ █ █ █ ██ |
|
||
|
| ██ ██ █ █ ██ █ █ ██ ██ ██ ██ ██ ██ █ ██ ██ █ █ |
|
||
|
| █████ █████ █ ███ █████ ██ ██ ██ ██ █████ ████ █████ █ ███ |
|
||
|
| |
|
||
|
| General Bots Copyright (c) pragmatismo.cloud. All rights reserved. |
|
||
|
| Licensed under the AGPL-3.0. |
|
||
|
| |
|
||
|
| According to our dual licensing model, this program can be used either |
|
||
|
| under the terms of the GNU Affero General Public License, version 3, |
|
||
|
| or under a proprietary license. |
|
||
|
| |
|
||
|
| The texts of the GNU Affero General Public License with an additional |
|
||
|
| permission and of our proprietary license can be found at and |
|
||
|
| in the LICENSE file you have received along with this program. |
|
||
|
| |
|
||
|
| This program is distributed in the hope that it will be useful, |
|
||
|
| but WITHOUT ANY WARRANTY, without even the implied warranty of |
|
||
|
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
||
|
| GNU Affero General Public License for more details. |
|
||
|
| |
|
||
|
| "General Bots" is a registered trademark of pragmatismo.cloud. |
|
||
|
| The licensing of the program under the AGPLv3 does not imply a |
|
||
|
| trademark license. Therefore any rights, title and interest in |
|
||
|
| our trademarks remain entirely with us. |
|
||
|
| |
|
||
|
\*****************************************************************************/
|
||
|
|
||
|
'use strict';
|
||
|
|
||
|
import { IGBDialog, GBMinInstance } from 'botlib';
|
||
|
import { Messages } from '../strings.js';
|
||
|
import { MainService } from '../service/MainService.js';
|
||
|
import { Package } from '../index.js';
|
||
|
import { CollectionUtil } from 'pragmatismo-io-framework';
|
||
|
|
||
|
export class NewUserDialog extends IGBDialog {
|
||
|
static getBotNameDialog(min: GBMinInstance) {
|
||
|
return {
|
||
|
id: '/welcome_saas_botname',
|
||
|
waterfall: [
|
||
|
async step => {
|
||
|
const locale = 'en-US';
|
||
|
|
||
|
await step.prompt('textPrompt', Messages[locale].whats_botname);
|
||
|
},
|
||
|
async step => {
|
||
|
const locale = 'en-US';
|
||
|
|
||
|
const extractEntity = text => {
|
||
|
return text.match(/[_a-zA-Z][_a-zA-Z0-9]{0,16}/gi);
|
||
|
};
|
||
|
|
||
|
const value = extractEntity(step.context.activity.originalText);
|
||
|
|
||
|
if (value === null || value.length != 1) {
|
||
|
await step.context.sendActivity(Messages[locale].validation_enter_valid_botname);
|
||
|
|
||
|
return await step.replaceDialog('/welcome_saas_botname', step.activeDialog.state.options);
|
||
|
} else {
|
||
|
const botName = value[0];
|
||
|
if (await min.deployService.botExists(botName)) {
|
||
|
await step.context.sendActivity(`O Bot ${botName} já existe. Escolha por favor, outro nome!`);
|
||
|
|
||
|
return await step.replaceDialog('/welcome_saas_botname', step.activeDialog.state.options);
|
||
|
} else {
|
||
|
step.activeDialog.state.options.botName = botName;
|
||
|
|
||
|
return await step.replaceDialog('/welcome_saas_bottemplate', step.activeDialog.state.options);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
]
|
||
|
};
|
||
|
}
|
||
|
|
||
|
static getBotTemplateDialog(min: GBMinInstance) {
|
||
|
return {
|
||
|
id: '/welcome_saas_bottemplate',
|
||
|
waterfall: [
|
||
|
async step => {
|
||
|
const locale = 'en-US';
|
||
|
await step.context.sendActivity('Aqui estão alguns modelos para você escolher:');
|
||
|
let gboService = min.gbappServices['gboService'];
|
||
|
const list = await gboService.listTemplates(min);
|
||
|
|
||
|
let templateMessage = undefined;
|
||
|
|
||
|
await CollectionUtil.asyncForEach(list, async item => {
|
||
|
if (item.name !== 'Shared.gbai') {
|
||
|
templateMessage = templateMessage ? `${templateMessage}\n- ${item.name}` : `- ${item.name}`;
|
||
|
}
|
||
|
});
|
||
|
await step.context.sendActivity(templateMessage);
|
||
|
|
||
|
step.activeDialog.state.options.templateList = list;
|
||
|
return await step.prompt('textPrompt', `Qual modelo de bot você gostaria de usar?`);
|
||
|
},
|
||
|
async step => {
|
||
|
const list = step.activeDialog.state.options.templateList;
|
||
|
let template = null;
|
||
|
await CollectionUtil.asyncForEach(list, async item => {
|
||
|
let gboService = min.gbappServices['gboService'];
|
||
|
if (gboService.kmpSearch(step.context.activity.originalText, item.name) != -1) {
|
||
|
template = item.name;
|
||
|
}
|
||
|
});
|
||
|
|
||
|
if (template === null) {
|
||
|
await step.context.sendActivity(`Escolha, por favor, um destes modelos listados.`);
|
||
|
|
||
|
return await step.replaceDialog('/welcome_saas_bottemplate', step.activeDialog.state.options);
|
||
|
} else {
|
||
|
step.activeDialog.state.options.templateName = template;
|
||
|
debugger;
|
||
|
await NewUserDialog.createBot(step, min, true);
|
||
|
|
||
|
return await step.replaceDialog('/ask', { isReturning: true });
|
||
|
}
|
||
|
}
|
||
|
]
|
||
|
};
|
||
|
}
|
||
|
|
||
|
static getReturnFromCC(min: GBMinInstance) {
|
||
|
return {
|
||
|
id: '/welcome_saas_return_cc',
|
||
|
waterfall: [
|
||
|
async step => {
|
||
|
const locale = 'en-US';
|
||
|
await step.context.sendActivity(Messages[locale].thanks_payment);
|
||
|
await NewUserDialog.createBot(step, min, false);
|
||
|
|
||
|
return await step.replaceDialog('/ask', { isReturning: true });
|
||
|
}
|
||
|
]
|
||
|
};
|
||
|
}
|
||
|
|
||
|
static getReturnFromDocument(min: GBMinInstance) {
|
||
|
return {
|
||
|
id: '/welcome_saas_return_document',
|
||
|
waterfall: [
|
||
|
async step => {
|
||
|
step.activeDialog.state.options.nextDialog = 'welcome_saas_return_payment';
|
||
|
|
||
|
return await step.replaceDialog('/bank_payment_type', step.activeDialog.state.options);
|
||
|
}
|
||
|
]
|
||
|
};
|
||
|
}
|
||
|
|
||
|
static getReturnFromPayment(min: GBMinInstance) {
|
||
|
return {
|
||
|
id: '/welcome_saas_return_payment',
|
||
|
waterfall: [
|
||
|
async step => {
|
||
|
if (step.activeDialog.state.options.paymentType === 'cc') {
|
||
|
step.activeDialog.state.options.nextDialog = 'welcome_saas_return_cc';
|
||
|
await step.replaceDialog(`/bank_ccnumber`, step.activeDialog.state.options);
|
||
|
} else {
|
||
|
const locale = 'en-US';
|
||
|
await step.context.sendActivity(Messages[locale].boleto_mail);
|
||
|
|
||
|
await step.context.sendActivity('textPrompt', Messages[locale].thanks_payment);
|
||
|
await NewUserDialog.createBot(step, min, false);
|
||
|
|
||
|
return await step.replaceDialog('/ask', { isReturning: true });
|
||
|
}
|
||
|
}
|
||
|
]
|
||
|
};
|
||
|
}
|
||
|
|
||
|
static getVoucherDialog(min: GBMinInstance) {
|
||
|
return {
|
||
|
id: '/welcome_saas_voucher',
|
||
|
waterfall: [
|
||
|
async step => {
|
||
|
const locale = 'en-US';
|
||
|
await step.prompt('textPrompt', Messages[locale].own_voucher);
|
||
|
},
|
||
|
async step => {
|
||
|
const locale = 'en-US';
|
||
|
|
||
|
if (step.result.toLowerCase() === 'gb2020') {
|
||
|
await NewUserDialog.createBot(step, min, true);
|
||
|
|
||
|
return await step.replaceDialog('/ask', { isReturning: true });
|
||
|
} else {
|
||
|
// return await step.replaceDialog('/welcome_saas_voucher', 'Os meios de pagamento estão neste momento desabilitados, por favor informe um voucher ou contate info@pragmatismo.cloud.');
|
||
|
|
||
|
step.activeDialog.state.options.nextDialog = 'welcome_saas_return_document';
|
||
|
return await step.replaceDialog('/xrm_document', step.activeDialog.state.options);
|
||
|
}
|
||
|
}
|
||
|
]
|
||
|
};
|
||
|
}
|
||
|
|
||
|
private static async createBot(step: any, min: GBMinInstance, free: boolean) {
|
||
|
const locale = 'en-US';
|
||
|
await step.context.sendActivity(Messages[locale].ok_procceding_creation);
|
||
|
const url = `https://gb.pragmatismo.cloud/${step.activeDialog.state.options.botName}`;
|
||
|
await step.context.sendActivity(Messages[locale].bot_created(url));
|
||
|
const service = new MainService();
|
||
|
await service.createSubscription(
|
||
|
min,
|
||
|
step.activeDialog.state.options.name,
|
||
|
step.activeDialog.state.options.document,
|
||
|
step.activeDialog.state.options.email,
|
||
|
step.activeDialog.state.options.mobile,
|
||
|
step.activeDialog.state.options.botName,
|
||
|
step.activeDialog.state.options.ccNumber,
|
||
|
step.activeDialog.state.options.ccExpiresOnMonth,
|
||
|
step.activeDialog.state.options.ccExpiresOnYear,
|
||
|
step.activeDialog.state.options.ccSecuritycode,
|
||
|
step.activeDialog.state.options.templateName,
|
||
|
free
|
||
|
);
|
||
|
}
|
||
|
|
||
|
static getDialogBatch(min: GBMinInstance) {
|
||
|
return {
|
||
|
id: '/welcome_saas_batch',
|
||
|
waterfall: [
|
||
|
async step => {
|
||
|
const locale = 'en-US';
|
||
|
await step.context.sendActivity(Messages[locale].welcome);
|
||
|
|
||
|
await step.prompt('textPrompt', `Please, inform bot names separeted by comma (,).`);
|
||
|
},
|
||
|
async step => {
|
||
|
const locale = 'en-US';
|
||
|
|
||
|
const service = new MainService();
|
||
|
|
||
|
const bots = step.context.activity.originalText.split(',');
|
||
|
bots.forEach(async botName => {
|
||
|
await service.createSubscription(
|
||
|
min,
|
||
|
botName,
|
||
|
'999999999',
|
||
|
'operations@pragmatismo.cloud',
|
||
|
'5521999998888',
|
||
|
botName,
|
||
|
null,
|
||
|
'12',
|
||
|
'99',
|
||
|
'1234',
|
||
|
'Starter.gbai',
|
||
|
true
|
||
|
);
|
||
|
|
||
|
});
|
||
|
|
||
|
|
||
|
}
|
||
|
]
|
||
|
};
|
||
|
}
|
||
|
|
||
|
static getDialog(min: GBMinInstance) {
|
||
|
return {
|
||
|
id: '/welcome_saas',
|
||
|
waterfall: [
|
||
|
async step => {
|
||
|
const locale = 'en-US';
|
||
|
|
||
|
step.activeDialog.state.options.document = null;
|
||
|
step.activeDialog.state.options.email = null;
|
||
|
step.activeDialog.state.options.botName = null;
|
||
|
step.activeDialog.state.options.ccNumber = null;
|
||
|
step.activeDialog.state.options.ccExpiresOnMonth = null;
|
||
|
step.activeDialog.state.options.ccExpiresOnYear = null;
|
||
|
step.activeDialog.state.options.ccSecuritycode = null;
|
||
|
step.activeDialog.state.options.templateName = null;
|
||
|
|
||
|
await step.context.sendActivity(Messages[locale].welcome);
|
||
|
|
||
|
const mobile = step.context.activity.from.id;
|
||
|
|
||
|
step.activeDialog.state.options.nextDialog = 'welcome_saas_botname';
|
||
|
|
||
|
if (isNaN(mobile as any)) {
|
||
|
await step.context.sendActivity(Messages[locale].ok_get_information);
|
||
|
|
||
|
return await step.replaceDialog('/profile_name', step.activeDialog.state.options);
|
||
|
} else {
|
||
|
const name = Package.welcomes ? Package.welcomes[mobile] : null;
|
||
|
step.activeDialog.state.options.name = name;
|
||
|
step.activeDialog.state.options.mobile = mobile;
|
||
|
|
||
|
await step.context.sendActivity(`Olá ${name}, vamos criar o seu Bot agora.`);
|
||
|
|
||
|
return await step.replaceDialog('/profile_email', step.activeDialog.state.options);
|
||
|
}
|
||
|
}
|
||
|
]
|
||
|
};
|
||
|
}
|
||
|
}
|