fix(customer-satisfaction.gbapp): Fix rate and suggestion text store.

This commit is contained in:
Rodrigo Rodriguez 2020-12-07 12:19:04 -03:00
parent 073d11833c
commit 55bb46d882
6 changed files with 51 additions and 25 deletions

View file

@ -66,4 +66,10 @@ GO
ALTER TABLE dbo.GuaribasUser ADD
hearOnDialog nvarchar(64) NULL
GO
GO
ALTER TABLE dbo.GuaribasConversation ADD
instanceId int,
feedback nvarchar(512) NULL
GO

View file

@ -70,6 +70,11 @@ export class GuaribasConversation extends Model<GuaribasConversation> {
@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<GuaribasConversation> {
@Column
public rate: number;
@Column(DataType.STRING(512))
@Column
public feedback: string;
@Column
@CreatedAt
public createdAt: Date;

View file

@ -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<GuaribasConversation> {
public async updateConversationSuggestion(instanceId: number, conversationId: string, feedback: string, locale: string): Promise<number> {
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;
}

View file

@ -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,

View file

@ -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 {

View file

@ -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.