diff --git a/DATABASE-CHANGES.md b/DATABASE-CHANGES.md index afdb79ff..4a8eef93 100644 --- a/DATABASE-CHANGES.md +++ b/DATABASE-CHANGES.md @@ -66,4 +66,10 @@ GO ALTER TABLE dbo.GuaribasUser ADD hearOnDialog nvarchar(64) NULL -GO \ No newline at end of file +GO + + +ALTER TABLE dbo.GuaribasConversation ADD + instanceId int, + feedback nvarchar(512) NULL +GO diff --git a/packages/analytics.gblib/models/index.ts b/packages/analytics.gblib/models/index.ts index 29082944..275de45e 100644 --- a/packages/analytics.gblib/models/index.ts +++ b/packages/analytics.gblib/models/index.ts @@ -70,6 +70,11 @@ export class GuaribasConversation extends Model { @Column public conversationId: number; + @ForeignKey(() => GuaribasInstance) + @Column + public instanceId: number; + + @ForeignKey(() => GuaribasSubject) @Column public startSubjectId: number; @@ -87,6 +92,10 @@ export class GuaribasConversation extends Model { @Column public rate: number; + @Column(DataType.STRING(512)) + @Column + public feedback: string; + @Column @CreatedAt public createdAt: Date; diff --git a/packages/analytics.gblib/services/AnalyticsService.ts b/packages/analytics.gblib/services/AnalyticsService.ts index 3ebb83cf..34ce1a82 100644 --- a/packages/analytics.gblib/services/AnalyticsService.ts +++ b/packages/analytics.gblib/services/AnalyticsService.ts @@ -36,6 +36,8 @@ import { GuaribasUser } from '../../security.gbapp/models'; import { GuaribasConversation, GuaribasConversationMessage } from '../models'; +import { GBServer } from '../../../src/app'; +import { AzureText } from 'pragmatismo-io-framework'; /** * Base services for Bot Analytics. @@ -48,22 +50,32 @@ export class AnalyticsService { const conversation = new GuaribasConversation(); conversation.startedBy = user; conversation.startedByUserId = user.userId; + conversation.instanceId = user.instanceId; return await conversation.save(); } - public async updateConversationRate( - instanceId: number, - conversationId: number, - rate: number - ): Promise { + public async updateConversationSuggestion(instanceId: number, conversationId: string, feedback: string, locale: string): Promise { + + const minBoot = GBServer.globals.minBoot as any; + const rate = await AzureText.getSentiment( + minBoot.instance.textAnalyticsKey ? minBoot.instance.textAnalyticsKey : minBoot.instance.textAnalyticsKey, + minBoot.instance.textAnalyticsEndpoint ? minBoot.instance.textAnalyticsEndpoint : minBoot.instance.textAnalyticsEndpoint, + locale, + feedback + ); + const options = { where: { } }; - options.where = { conversationId: conversationId, instanceId: instanceId }; const item = await GuaribasConversation.findOne(options); + + item.feedback = feedback; item.rate = rate; item.rateDate = new Date(); - return item.save(); + await item.save(); + + return rate; + } diff --git a/packages/core.gbapp/services/GBConversationalService.ts b/packages/core.gbapp/services/GBConversationalService.ts index 00d85236..533bc7a0 100644 --- a/packages/core.gbapp/services/GBConversationalService.ts +++ b/packages/core.gbapp/services/GBConversationalService.ts @@ -579,8 +579,15 @@ export class GBConversationalService { return false; } - text = text.toLowerCase().replace('who\'s', 'who is'); - text = text.toLowerCase().replace('what\'s', 'what is'); + text = text.toLowerCase(); + text = text.replace('who\'s', 'who is'); + text = text.replace('what\'s', 'what is'); + text = text.replace('?', ' '); + text = text.replace('!', ' '); + text = text.replace('.', ' '); + text = text.replace('/', ' '); + text = text.replace('\\', ' '); + text = text.replace('\r\n', ' '); const model = new LuisRecognizer({ applicationId: min.instance.nlpAppId, diff --git a/packages/customer-satisfaction.gbapp/dialogs/FeedbackDialog.ts b/packages/customer-satisfaction.gbapp/dialogs/FeedbackDialog.ts index 13dd0576..d327487a 100644 --- a/packages/customer-satisfaction.gbapp/dialogs/FeedbackDialog.ts +++ b/packages/customer-satisfaction.gbapp/dialogs/FeedbackDialog.ts @@ -39,11 +39,9 @@ import { BotAdapter } from 'botbuilder'; import { WaterfallDialog } from 'botbuilder-dialogs'; import { GBMinInstance, IGBDialog } from 'botlib'; -import { AzureText } from 'pragmatismo-io-framework'; import { CSService } from '../services/CSService'; import { Messages } from '../strings'; import { SecService } from '../../security.gbapp/services/SecService'; -import { GBServer } from '../../../src/app'; import { AnalyticsService } from '../../analytics.gblib/services/AnalyticsService'; /** @@ -138,22 +136,15 @@ export class FeedbackDialog extends IGBDialog { return await min.conversationalService.prompt(min, step, Messages[locale].what_about_service); }, async step => { - const minBoot = GBServer.globals.minBoot as any; + const fixedLocale = 'en-US'; const user = await min.userProfile.get(step.context, {}); - const rate = await AzureText.getSentiment( - minBoot.instance.textAnalyticsKey ? minBoot.instance.textAnalyticsKey : minBoot.instance.textAnalyticsKey, - minBoot.instance.textAnalyticsEndpoint ? minBoot.instance.textAnalyticsEndpoint : minBoot.instance.textAnalyticsEndpoint, - user.systemUser.locale, - step.result - ); - // Updates values to perform Bot Analytics. - // const analytics = new AnalyticsService(); - // analytics.updateConversationRate(min.instance.instanceId, user.conversation, rate); - - const fixedLocale = 'en-US'; + const analytics = new AnalyticsService(); + const rate = await analytics.updateConversationSuggestion( + min.instance.instanceId, user.conversation.conversationId, step.result, user.systemUser.locale); + if (rate > 0.5) { await min.conversationalService.sendText(min, step, Messages[fixedLocale].glad_you_liked); } else { diff --git a/packages/customer-satisfaction.gbapp/dialogs/QualityDialog.ts b/packages/customer-satisfaction.gbapp/dialogs/QualityDialog.ts index ea52991b..c2d09d30 100644 --- a/packages/customer-satisfaction.gbapp/dialogs/QualityDialog.ts +++ b/packages/customer-satisfaction.gbapp/dialogs/QualityDialog.ts @@ -84,7 +84,8 @@ export class QualityDialog extends IGBDialog { // Updates values to perform Bot Analytics. const analytics = new AnalyticsService(); - analytics.updateConversationRate(min.instance.instanceId, user.conversation, score); + analytics.updateConversationSuggestion( + min.instance.instanceId, user.conversation,step.result, user.systemUser.locale); // Goes to the ask loop.