fix(all): Group improvements and isolation.
This commit is contained in:
		
							parent
							
								
									df6f146fd9
								
							
						
					
					
						commit
						dcb1c47f07
					
				
					 2 changed files with 54 additions and 29 deletions
				
			
		| 
						 | 
				
			
			@ -308,6 +308,8 @@ export class GBMinService {
 | 
			
		|||
 | 
			
		||||
      const id = req.body.messages[0].author.split('@')[0];
 | 
			
		||||
      const senderName = req.body.messages[0].senderName;
 | 
			
		||||
      const sec = new SecService();
 | 
			
		||||
      let user = await sec.getUserFromSystemId(id);
 | 
			
		||||
 | 
			
		||||
      if (req.body.messages[0].fromMe) {
 | 
			
		||||
        res.end();
 | 
			
		||||
| 
						 | 
				
			
			@ -315,14 +317,32 @@ export class GBMinService {
 | 
			
		|||
        return; // Exit here.
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      let activeMin;
 | 
			
		||||
 | 
			
		||||
      // Processes group behaviour.
 | 
			
		||||
 | 
			
		||||
      let text = req.body.messages[0].body;
 | 
			
		||||
      text = text.replace(/\@\d+ /gi, '');
 | 
			
		||||
 | 
			
		||||
      // Ensures that the bot group is the active bot for the user (like switching).
 | 
			
		||||
 | 
			
		||||
      const message = req.body.messages[0];
 | 
			
		||||
      if (message.chatName.charAt(0) !== '+') {
 | 
			
		||||
        const group = message.chatName;
 | 
			
		||||
 | 
			
		||||
        const botGroup = await this.core.loadInstanceByBotId(group);
 | 
			
		||||
        if (user.instanceId !== botGroup.instanceId) {
 | 
			
		||||
          await sec.updateUserInstance(id, botGroup.instanceId);
 | 
			
		||||
        }
 | 
			
		||||
        activeMin = GBServer.globals.minInstances.filter
 | 
			
		||||
          (p => p.instance.instanceId === botGroup.instanceId)[0];
 | 
			
		||||
        await (activeMin as any).whatsAppDirectLine.received(req, res);
 | 
			
		||||
        return; // EXIT HERE.
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
      // Detects if the welcome message is enabled.
 | 
			
		||||
 | 
			
		||||
      let activeMin;
 | 
			
		||||
      if (process.env.WHATSAPP_WELCOME_DISABLED !== 'true') {
 | 
			
		||||
 | 
			
		||||
        // Tries to find if user wants to switch bots.
 | 
			
		||||
| 
						 | 
				
			
			@ -343,8 +363,6 @@ export class GBMinService {
 | 
			
		|||
        // If it is the first time for the user, tries to auto-execute
 | 
			
		||||
        // start dialog if any is specified in Config.xlsx.
 | 
			
		||||
 | 
			
		||||
        const sec = new SecService();
 | 
			
		||||
        let user = await sec.getUserFromSystemId(id);
 | 
			
		||||
        if (user === null || user.hearOnDialog) {
 | 
			
		||||
          user = await sec.ensureUser(activeMin.instance.instanceId, id, senderName, '', 'whatsapp', senderName, null);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -379,7 +397,7 @@ export class GBMinService {
 | 
			
		|||
 | 
			
		||||
            const instance = await this.core.loadInstanceByBotId(activeMin.botId);
 | 
			
		||||
            await sec.updateUserInstance(id, instance.instanceId);
 | 
			
		||||
            await (activeMin as any).whatsAppDirectLine.resetConversationId(id);
 | 
			
		||||
            await (activeMin as any).whatsAppDirectLine.resetConversationId(id, '');
 | 
			
		||||
            const startDialog = activeMin.core.getParam(activeMin.instance, 'Start Dialog', null);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -817,10 +835,9 @@ export class GBMinService {
 | 
			
		|||
 | 
			
		||||
    await adapter['processActivity'](req, res, async context => {
 | 
			
		||||
 | 
			
		||||
      if (context.activity.text){
 | 
			
		||||
      if (context.activity.text) {
 | 
			
		||||
        context.activity.text = context.activity.text.replace(/\@General Bots Online /gi, '');
 | 
			
		||||
      }    
 | 
			
		||||
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      // Get loaded user state
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -847,13 +864,6 @@ export class GBMinService {
 | 
			
		|||
 | 
			
		||||
          firstTime = true;
 | 
			
		||||
 | 
			
		||||
          const service = new KBService(min.core.sequelize);
 | 
			
		||||
          const data = await service.getFaqBySubjectArray(instance.instanceId, 'faq', undefined);
 | 
			
		||||
          await min.conversationalService.sendEvent(min, step, 'play', {
 | 
			
		||||
            playerType: 'bullet',
 | 
			
		||||
            data: data.slice(0, 10)
 | 
			
		||||
          });
 | 
			
		||||
 | 
			
		||||
          // This same event is dispatched either to all participants
 | 
			
		||||
          // including the bot, that is filtered bellow.
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -871,8 +881,6 @@ export class GBMinService {
 | 
			
		|||
              member.name,
 | 
			
		||||
              null
 | 
			
		||||
            );
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            // Stores conversation associated to the user to group each message.
 | 
			
		||||
 | 
			
		||||
            const analytics = new AnalyticsService();
 | 
			
		||||
| 
						 | 
				
			
			@ -881,6 +889,13 @@ export class GBMinService {
 | 
			
		|||
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          const service = new KBService(min.core.sequelize);
 | 
			
		||||
          const data = await service.getFaqBySubjectArray(instance.instanceId, 'faq', undefined);
 | 
			
		||||
          await min.conversationalService.sendEvent(min, step, 'play', {
 | 
			
		||||
            playerType: 'bullet',
 | 
			
		||||
            data: data.slice(0, 10)
 | 
			
		||||
          });
 | 
			
		||||
 | 
			
		||||
          // Saves session user (persisted GuaribasUser is inside).
 | 
			
		||||
 | 
			
		||||
          await min.userProfile.set(step.context, user);
 | 
			
		||||
| 
						 | 
				
			
			@ -923,8 +938,6 @@ export class GBMinService {
 | 
			
		|||
              user.welcomed = true;
 | 
			
		||||
              GBLog.info(`Auto start (teams) dialog is now being called: ${startDialog} for ${min.instance.botId}...`);
 | 
			
		||||
              await GBVMService.callVM(startDialog.toLowerCase(), min, step, this.deployer);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -963,11 +976,12 @@ export class GBMinService {
 | 
			
		|||
              await step.beginDialog('/');
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
              if (!min["conversationWelcomed"][step.context.activity.conversation.id]) {
 | 
			
		||||
              if (!GBMinService.userMobile(step) &&
 | 
			
		||||
                !min["conversationWelcomed"][step.context.activity.conversation.id]) {
 | 
			
		||||
 | 
			
		||||
                min["conversationWelcomed"][step.context.activity.conversation.id] = true;
 | 
			
		||||
 | 
			
		||||
                GBLog.info(`Auto start (web) dialog is now being called: ${startDialog} for ${min.instance.instanceId}...`);
 | 
			
		||||
                GBLog.info(`Auto start (web 1) dialog is now being called: ${startDialog} for ${min.instance.instanceId}...`);
 | 
			
		||||
                await GBVMService.callVM(startDialog.toLowerCase(), min, step, this.deployer);
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -976,8 +990,10 @@ export class GBMinService {
 | 
			
		|||
            GBLog.info(`Person added to conversation: ${member.name}`);
 | 
			
		||||
 | 
			
		||||
            if (GBMinService.userMobile(step)) {
 | 
			
		||||
              if (startDialog && !min["conversationWelcomed"][step.context.activity.conversation.id]) {
 | 
			
		||||
              if (startDialog && !min["conversationWelcomed"][step.context.activity.conversation.id] &&
 | 
			
		||||
              !step.context.activity['group']) {
 | 
			
		||||
                user.welcomed = true;
 | 
			
		||||
                min["conversationWelcomed"][step.context.activity.conversation.id] = true;
 | 
			
		||||
                await min.userProfile.set(step.context, user);
 | 
			
		||||
                GBLog.info(`Auto start (whatsapp) dialog is now being called: ${startDialog} for ${min.instance.instanceId}...`);
 | 
			
		||||
                await GBVMService.callVM(startDialog.toLowerCase(), min, step, this.deployer);
 | 
			
		||||
| 
						 | 
				
			
			@ -1046,7 +1062,7 @@ export class GBMinService {
 | 
			
		|||
      const startDialog = min.core.getParam(min.instance, 'Start Dialog', null);
 | 
			
		||||
      if (startDialog && !min["conversationWelcomed"][step.context.activity.conversation.id]) {
 | 
			
		||||
        user.welcomed = true;
 | 
			
		||||
        GBLog.info(`Auto start (web) dialog is now being called: ${startDialog} for ${min.instance.instanceId}...`);
 | 
			
		||||
        GBLog.info(`Auto start (web 2) dialog is now being called: ${startDialog} for ${min.instance.instanceId}...`);
 | 
			
		||||
        await GBVMService.callVM(startDialog.toLowerCase(), min, step, this.deployer);
 | 
			
		||||
      }
 | 
			
		||||
    } else if (context.activity.name === 'updateToken') {
 | 
			
		||||
| 
						 | 
				
			
			@ -1120,7 +1136,15 @@ export class GBMinService {
 | 
			
		|||
      parts.splice(0, 1);
 | 
			
		||||
      const args = parts.join(' ');
 | 
			
		||||
      if (cmdOrDialogName === '/start') {
 | 
			
		||||
        // TODO: Args to BASIC.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        // Reset user.
 | 
			
		||||
 | 
			
		||||
        const user = await min.userProfile.get(context, {});
 | 
			
		||||
        await min.conversationalService.sendEvent(min, step, 'loadInstance', {});
 | 
			
		||||
        user.loaded = false;
 | 
			
		||||
        await min.userProfile.set(step.context, user);
 | 
			
		||||
        
 | 
			
		||||
      } else if (cmdOrDialogName === '/call') {
 | 
			
		||||
        await GBVMService.callVM(args, min, step, this.deployer);
 | 
			
		||||
      } else {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -133,7 +133,7 @@ export class WhatsappDirectLine extends GBService {
 | 
			
		|||
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public async resetConversationId(number, group) {
 | 
			
		||||
  public async resetConversationId(number, group = '') {
 | 
			
		||||
    WhatsappDirectLine.conversationIds[number + group] = undefined;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -180,7 +180,7 @@ export class WhatsappDirectLine extends GBService {
 | 
			
		|||
      return; // Exit here.
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
if (message.chatName.charAt(0) !== '+') {
 | 
			
		||||
    if (message.chatName.charAt(0) !== '+') {
 | 
			
		||||
      group = message.chatName;
 | 
			
		||||
 | 
			
		||||
      let botGroupName = this.min.core.getParam<string>(this.min.instance, 'WhatsApp Group Name', null);
 | 
			
		||||
| 
						 | 
				
			
			@ -205,7 +205,7 @@ if (message.chatName.charAt(0) !== '+') {
 | 
			
		|||
          botShortcuts.forEach(e2 => {
 | 
			
		||||
            if (e1 === e2 && !found) {
 | 
			
		||||
              found = true;
 | 
			
		||||
             text = text.replace (e2, '');
 | 
			
		||||
              text = text.replace(e2, '');
 | 
			
		||||
            }
 | 
			
		||||
          });
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -374,10 +374,10 @@ if (message.chatName.charAt(0) !== '+') {
 | 
			
		|||
        WhatsappDirectLine.chatIds[generatedConversationId] = message.chatId;
 | 
			
		||||
 | 
			
		||||
        this.pollMessages(client, generatedConversationId, from, fromName);
 | 
			
		||||
        this.inputMessage(client, generatedConversationId, text, from, fromName);
 | 
			
		||||
        this.inputMessage(client, generatedConversationId, text, from, fromName, group);
 | 
			
		||||
      } else {
 | 
			
		||||
 | 
			
		||||
        this.inputMessage(client, conversationId, text, from, fromName);
 | 
			
		||||
        this.inputMessage(client, conversationId, text, from, fromName, group);
 | 
			
		||||
      }
 | 
			
		||||
    } else {
 | 
			
		||||
      GBLog.warn(`Inconsistencty found: Invalid agentMode on User Table: ${user.agentMode}`);
 | 
			
		||||
| 
						 | 
				
			
			@ -387,7 +387,7 @@ if (message.chatName.charAt(0) !== '+') {
 | 
			
		|||
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public inputMessage(client, conversationId, text, from, fromName) {
 | 
			
		||||
  public inputMessage(client, conversationId, text, from, fromName, group) {
 | 
			
		||||
    return client.Conversations.Conversations_PostActivity({
 | 
			
		||||
      conversationId: conversationId,
 | 
			
		||||
      activity: {
 | 
			
		||||
| 
						 | 
				
			
			@ -395,6 +395,7 @@ if (message.chatName.charAt(0) !== '+') {
 | 
			
		|||
        text: text,
 | 
			
		||||
        type: 'message',
 | 
			
		||||
        mobile: from,
 | 
			
		||||
        group: group,
 | 
			
		||||
        from: {
 | 
			
		||||
          id: from,
 | 
			
		||||
          name: fromName
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue