From 3f710e836b5933bb1386239c35375d28f88c1a5d Mon Sep 17 00:00:00 2001 From: Rodrigo Rodriguez Date: Tue, 18 Jun 2019 16:03:19 -0300 Subject: [PATCH] fix(whastapp.gblib): Fix in pro-active messaging. --- packages/core.gbapp/services/GBCoreService.ts | 4 +-- packages/core.gbapp/services/GBMinService.ts | 33 +++++++------------ packages/whatsapp.gblib/index.ts | 4 +++ .../services/WhatsappDirectLine.ts | 3 +- src/app.ts | 6 ++-- 5 files changed, 22 insertions(+), 28 deletions(-) diff --git a/packages/core.gbapp/services/GBCoreService.ts b/packages/core.gbapp/services/GBCoreService.ts index 73b06546..c7b9454a 100644 --- a/packages/core.gbapp/services/GBCoreService.ts +++ b/packages/core.gbapp/services/GBCoreService.ts @@ -373,9 +373,7 @@ STORAGE_SYNC=true GBLog.info(`Loading sys package: ${e.name}...`); const p = Object.create(e.prototype) as IGBPackage; - if (e.name === 'GBWhatsappPackage') { - sysPackages.push(p); - } + sysPackages.push(p); p.loadPackage(core, core.sequelize); }); diff --git a/packages/core.gbapp/services/GBMinService.ts b/packages/core.gbapp/services/GBMinService.ts index 271f21f4..dd085c47 100644 --- a/packages/core.gbapp/services/GBMinService.ts +++ b/packages/core.gbapp/services/GBMinService.ts @@ -111,6 +111,7 @@ export class GBMinService { bootInstance: IGBInstance, server: any, appPackages: IGBPackage[], + sysPackages: IGBPackage[], instances: IGBInstance[], deployer: GBDeployer, proxyAddress: string @@ -137,7 +138,7 @@ export class GBMinService { // Build bot adapter. - const { min, adapter, conversationState } = await this.buildBotAdapter(instance, proxyAddress); + const { min, adapter, conversationState } = await this.buildBotAdapter(instance, proxyAddress, sysPackages); // Install default VBA module. @@ -145,7 +146,7 @@ export class GBMinService { // Call the loadBot context.activity for all packages. - this.invokeLoadBot(appPackages, min, server); + this.invokeLoadBot(appPackages, sysPackages, min, server); // Serves individual URL for each bot conversational interface... @@ -313,7 +314,7 @@ export class GBMinService { } } - private async buildBotAdapter(instance: any, proxyAddress: string) { + private async buildBotAdapter(instance: any, proxyAddress: string, sysPackages: IGBPackage[]) { const adapter = new BotFrameworkAdapter({ appId: instance.marketplaceId, appPassword: instance.marketplacePassword @@ -341,7 +342,7 @@ export class GBMinService { min.cbMap = {}; min.scriptMap = {}; min.sandBoxMap = {}; - min.packages = GBServer.globals.sysPackages[0]; // HACK: Whatsapp now. + min.packages = sysPackages; min.userProfile = conversationState.createProperty('userProfile'); const dialogState = conversationState.createProperty('dialogState'); @@ -352,27 +353,17 @@ export class GBMinService { return { min, adapter, conversationState }; } - private invokeLoadBot(appPackages: any[], min: GBMinInstance, server: any) { - const sysPackages: IGBPackage[] = []; - // NOTE: A semicolon is necessary before this line. - [ - GBCorePackage, - GBSecurityPackage, - GBAdminPackage, - GBKBPackage, - GBAnalyticsPackage, - GBCustomerSatisfactionPackage, - GBWhatsappPackage - ].forEach(sysPackage => { - const p = Object.create(sysPackage.prototype) as IGBPackage; - p.loadBot(min); - sysPackages.push(p); - if (sysPackage.name === 'GBWhatsappPackage') { + private invokeLoadBot(appPackages: IGBPackage[], sysPackages: IGBPackage[], min: GBMinInstance, server: any) { + let index = 0; + sysPackages.forEach(e => { + e.loadBot(min); + if (index === 6) { // TODO: Remove this magic number and use a map. const url = '/instances/:botId/whatsapp'; server.post(url, (req, res) => { - (p as any).channel.received(req, res); + (e as any).channel.received(req, res); }); } + index++; }, this); appPackages.forEach(p => { diff --git a/packages/whatsapp.gblib/index.ts b/packages/whatsapp.gblib/index.ts index c1722da9..c518ebd3 100644 --- a/packages/whatsapp.gblib/index.ts +++ b/packages/whatsapp.gblib/index.ts @@ -62,6 +62,10 @@ export class GBWhatsappPackage implements IGBPackage { } } + public getChannel() { + return this.channel; + } + public getDialogs(min: GBMinInstance) { GBLog.verbose(`getDialogs called.`); } diff --git a/packages/whatsapp.gblib/services/WhatsappDirectLine.ts b/packages/whatsapp.gblib/services/WhatsappDirectLine.ts index e6509b6a..ae504c39 100644 --- a/packages/whatsapp.gblib/services/WhatsappDirectLine.ts +++ b/packages/whatsapp.gblib/services/WhatsappDirectLine.ts @@ -222,7 +222,8 @@ export class WhatsappDirectLine extends GBService { }; try { - const result = request.post(options); + // tslint:disable-next-line: await-promise + const result = await request.post(options); GBLog.info(result); } catch (error) { GBLog.error(`Error sending message to Whatsapp provider ${error.message}`); diff --git a/src/app.ts b/src/app.ts index 62e52352..d5543eb8 100644 --- a/src/app.ts +++ b/src/app.ts @@ -57,7 +57,7 @@ const appPackages: IGBPackage[] = []; export class RootData { public publicAddress: string; public server: any; - sysPackages: any; + public sysPackages: any[]; } /** @@ -123,7 +123,7 @@ export class GBServer { // Deploys system and user packages. GBLog.info(`Deploying packages...`); - GBServer.globals.sysPackages = core.loadSysPackages(core); + const sysPackages = core.loadSysPackages(core); await core.checkStorage(azureDeployer); await deployer.deployPackages(core, server, appPackages); @@ -151,7 +151,7 @@ export class GBServer { // Builds minimal service infrastructure. const minService: GBMinService = new GBMinService(core, conversationalService, adminService, deployer); - await minService.buildMin(bootInstance, server, appPackages, instances, + await minService.buildMin(bootInstance, server, appPackages, sysPackages, instances, deployer, GBServer.globals.publicAddress); // Deployment of local applications for the first time.