From e0980bc480aff66926b66abeedfa54ecc1084db9 Mon Sep 17 00:00:00 2001 From: Rodrigo Rodriguez Date: Sat, 17 Feb 2024 20:33:08 -0300 Subject: [PATCH] fix(all): Locale in Audio is dynamic. --- .../services/GBConversationalService.ts | 7 +-- packages/kb.gbapp/dialogs/AskDialog.ts | 2 +- .../services/WhatsappDirectLine.ts | 56 +++++++++++++------ src/util.ts | 2 +- 4 files changed, 45 insertions(+), 22 deletions(-) diff --git a/packages/core.gbapp/services/GBConversationalService.ts b/packages/core.gbapp/services/GBConversationalService.ts index 11d3ff73..d4dc42c0 100644 --- a/packages/core.gbapp/services/GBConversationalService.ts +++ b/packages/core.gbapp/services/GBConversationalService.ts @@ -1109,12 +1109,12 @@ export class GBConversationalService { false) != false; - if (text != '' && detectLanguage) { + if (text.indexOf(' ') !== -1 && detectLanguage) { locale = await min.conversationalService.getLanguage(min, text); if (user.locale != locale) { - - GBLog.info(`Changed language to: ${locale}`); user = await sec.updateUserLocale(user.userId, locale); + await min.conversationalService.sendText(min, + step, `Changed language to: ${locale}`); } } @@ -1163,7 +1163,6 @@ export class GBConversationalService { } public async sendTextWithOptions(min: GBMinInstance, step, text, translate, keepTextList) { - const member = step.context.activity.from; let sec = new SecService(); let user = await sec.getUserFromSystemId(step.context.activity.from.id); await this['sendTextWithOptionsAndUser'](min, user, step, text, true, null); diff --git a/packages/kb.gbapp/dialogs/AskDialog.ts b/packages/kb.gbapp/dialogs/AskDialog.ts index f7b9080c..0347e4f4 100644 --- a/packages/kb.gbapp/dialogs/AskDialog.ts +++ b/packages/kb.gbapp/dialogs/AskDialog.ts @@ -351,7 +351,7 @@ export class AskDialog extends IGBDialog { return await step.replaceDialog('/ask', { isReturning: true }); } } - + private static getChannel(step): string { return !isNaN(step.context.activity['mobile']) ? 'whatsapp' : step.context.activity.channelId; } diff --git a/packages/whatsapp.gblib/services/WhatsappDirectLine.ts b/packages/whatsapp.gblib/services/WhatsappDirectLine.ts index 51d7365c..e7cf02c7 100644 --- a/packages/whatsapp.gblib/services/WhatsappDirectLine.ts +++ b/packages/whatsapp.gblib/services/WhatsappDirectLine.ts @@ -155,7 +155,7 @@ export class WhatsappDirectLine extends GBService { // Sends QR Code to boot bot admin. const msg = `Please, scan QR Code with for bot ${this.botId}.`; qrcode.generate(qr, { small: true, scale: 0.5 }); - + // TODO: While handling other bots uses boot instance of this class to send QR Codes. // const s = new DialogKeywords(min., null, null, null); // const qrBuf = await s.getQRCode(qr); @@ -169,7 +169,7 @@ export class WhatsappDirectLine extends GBService { // ); // GBServer.globals.minBoot.whatsAppDirectLine.sendFileToDevice(adminNumber, url, Path.basename(localName), msg); // s.sendEmail(adminEmail, `Check your WhatsApp for bot ${this.botId}`, msg); - + }).bind(this) ); client.on('authenticated', async () => { @@ -414,7 +414,7 @@ export class WhatsappDirectLine extends GBService { // Bot name must be specified on config. if (botGroupID === group) { - + // Shortcut has been mentioned? let found = false; @@ -448,7 +448,7 @@ export class WhatsappDirectLine extends GBService { if (botNumber && !answerText && !found) { botNumber = botNumber.replace('+', ''); if (!message.body.startsWith('@' + botNumber)) { - + return; } } @@ -485,7 +485,7 @@ export class WhatsappDirectLine extends GBService { if (process.env.AUDIO_DISABLED !== 'true') { const media = await message.downloadMedia(); const buf = Buffer.from(media.data, 'base64'); - + text = await GBConversationalService.getTextFromAudioBuffer( this.min.instance.speechKey, this.min.instance.cloudLocation, @@ -897,12 +897,10 @@ export class WhatsappDirectLine extends GBService { to = to + '@c.us'; } } - if (await this.customClient.getState() === WAState.CONNECTED) - { + if (await this.customClient.getState() === WAState.CONNECTED) { await this.customClient.sendMessage(to, msg); } - else - { + else { GBLog.info(`WhatsApp OFFLINE ${to}: ${msg}`); } @@ -1028,7 +1026,7 @@ export class WhatsappDirectLine extends GBService { } const sec = new SecService(); - + // Tries to find if user wants to switch bots. let toSwitchMin = GBServer.globals.minInstances.filter( @@ -1037,20 +1035,45 @@ export class WhatsappDirectLine extends GBService { GBLog.info(`A WhatsApp mobile requested instance for: ${botId}.`); - + let urlMin: any = GBServer.globals.minInstances.filter(p => p.instance.botId === botId)[0]; - + let user = await sec.getUserFromSystemId(id); const botNumber = urlMin ? urlMin.core.getParam(urlMin.instance, 'Bot Number', null) : null; if (botNumber && GBServer.globals.minBoot.botId !== urlMin.botId) { GBLog.info(`${id} fixed by bot number talked to: ${botId}.`); - - user = await sec.ensureUser(urlMin, id, '', '', 'omnichannel', '',''); + let locale; + if (!user) { + + // Detects user typed language and updates their locale profile if applies. + const min = urlMin; + + locale = min.core.getParam( + min.instance, + 'Default User Language', + GBConfigService.get('DEFAULT_USER_LANGUAGE')); + + const detectLanguage = + min.core.getParam( + min.instance, + 'Language Detector', + false) != false; + + + if (text != '' && detectLanguage) { + locale = await min.conversationalService.getLanguage(min, text); + } + + } + + + user = await sec.ensureUser(urlMin, id, '', '', 'omnichannel', '', ''); user = await sec.updateUserInstance(id, urlMin.instance.instanceId); + user = await sec.updateUserLocale(user.userId, locale); } - + let activeMin; @@ -1116,11 +1139,12 @@ export class WhatsappDirectLine extends GBService { // If bot has a fixed Find active bot instance. activeMin = botNumber ? urlMin : toSwitchMin ? toSwitchMin : GBServer.globals.minBoot; - + const min = activeMin; // If it is the first time for the user, tries to auto-execute // start dialog if any is specified in Config.xlsx. if (user === null || user.hearOnDialog) { + user = await sec.ensureUser(activeMin, id, senderName, '', 'whatsapp', senderName, null); const startDialog = user.hearOnDialog diff --git a/src/util.ts b/src/util.ts index aa978b01..914c4009 100644 --- a/src/util.ts +++ b/src/util.ts @@ -33,7 +33,7 @@ */ 'use strict'; -import tags from 'language-tags'; + export class GBUtil {