diff --git a/src/apps/app_sdk/services/AppsDisabledService.ts b/src/apps/app_sdk/services/AppsDisabledService.ts index bccef8a2..462f7650 100644 --- a/src/apps/app_sdk/services/AppsDisabledService.ts +++ b/src/apps/app_sdk/services/AppsDisabledService.ts @@ -44,4 +44,8 @@ export class AppsDisabledService implements IAppsService { async beforeSessionStart(session: WhatsappSession, store: DataStore) { return; } + + async afterSessionStart(session: WhatsappSession, store: DataStore) { + return; + } } diff --git a/src/apps/app_sdk/services/AppsEnabledService.ts b/src/apps/app_sdk/services/AppsEnabledService.ts index 58c57835..be1ccd7b 100644 --- a/src/apps/app_sdk/services/AppsEnabledService.ts +++ b/src/apps/app_sdk/services/AppsEnabledService.ts @@ -145,7 +145,17 @@ export class AppsEnabledService implements IAppsService { const apps = await repo.getEnabledBySession(session.name); for (const app of apps) { const service = this.getAppService(app); - await service.beforeSessionStart(app, session); + service.beforeSessionStart(app, session); + } + } + + async afterSessionStart(session: WhatsappSession, store: DataStore) { + const knex = store.getWAHADatabase(); + const repo = new AppRepository(knex); + const apps = await repo.getEnabledBySession(session.name); + for (const app of apps) { + const service = this.getAppService(app); + service.afterSessionStart(app, session); } } diff --git a/src/apps/app_sdk/services/IAppService.ts b/src/apps/app_sdk/services/IAppService.ts index f3d5a0a6..5db6caea 100644 --- a/src/apps/app_sdk/services/IAppService.ts +++ b/src/apps/app_sdk/services/IAppService.ts @@ -23,5 +23,7 @@ export interface IAppService { beforeDeleted(app: App): Promise; - beforeSessionStart(app: App, session: WhatsappSession): Promise; + beforeSessionStart(app: App, session: WhatsappSession): void; + + afterSessionStart(app: App, session: WhatsappSession): void; } diff --git a/src/apps/app_sdk/services/IAppsService.ts b/src/apps/app_sdk/services/IAppsService.ts index 4152e6d4..03c09ce7 100644 --- a/src/apps/app_sdk/services/IAppsService.ts +++ b/src/apps/app_sdk/services/IAppsService.ts @@ -17,6 +17,8 @@ export interface IAppsService { beforeSessionStart(session: WhatsappSession, store: DataStore): Promise; + afterSessionStart(session: WhatsappSession, store: DataStore): Promise; + migrate(knex: Knex): Promise; } diff --git a/src/apps/chatwoot/services/ChatWootAppService.ts b/src/apps/chatwoot/services/ChatWootAppService.ts index 5a8ec00a..5033bc67 100644 --- a/src/apps/chatwoot/services/ChatWootAppService.ts +++ b/src/apps/chatwoot/services/ChatWootAppService.ts @@ -119,12 +119,15 @@ export class ChatWootAppService implements IAppService { await conversation.incoming(updated); } - async beforeSessionStart( - app: App, - session: WhatsappSession, - ) { + beforeSessionStart(app: App, session: WhatsappSession) { this.chatWootWAHAQueueService.listenEvents(app.id, session); - await this.chatWootScheduleService.schedule(app.id, session.name); + } + + afterSessionStart(app: App, session: WhatsappSession) { + this.chatWootScheduleService.schedule(app.id, session.name).catch((err) => { + this.logger.error('Error scheduling session for ChatWoot'); + this.logger.error(err, err.stack); + }); } private async setupCustomAttributes(app: App) { diff --git a/src/core/abc/manager.abc.ts b/src/core/abc/manager.abc.ts index 6cd188ba..106bc08f 100644 --- a/src/core/abc/manager.abc.ts +++ b/src/core/abc/manager.abc.ts @@ -104,10 +104,6 @@ export abstract class SessionManager ); } - async configureApps(session: WhatsappSession) { - await this.appsService.beforeSessionStart(session, this.store); - } - // // API Methods // diff --git a/src/core/manager.core.ts b/src/core/manager.core.ts index 6b49a707..4ce1ce7c 100644 --- a/src/core/manager.core.ts +++ b/src/core/manager.core.ts @@ -218,11 +218,15 @@ export class SessionManagerCore extends SessionManager implements OnModuleInit { webhook.configure(session, webhooks); // Apps - await this.configureApps(session); + await this.appsService.beforeSessionStart(session, this.store); // start session await session.start(); logger.info('Session has been started.'); + + // Apps + await this.appsService.afterSessionStart(session, this.store); + return { name: session.name, status: session.status,