Skip to content

Commit

Permalink
Merge branch 'stage' of https://github.com/AletheiaFact/aletheia into…
Browse files Browse the repository at this point in the history
… bug-fix-verification-request-recomendations
caneppelevitor committed Aug 7, 2024
2 parents 760e26e + 7f85ae2 commit 505da94
Showing 24 changed files with 691 additions and 181 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -38,6 +38,8 @@ migrate-mongo-config.*

prodUsers.json

newrelic_agent.log

# Generated by jest
globalConfig.json

44 changes: 0 additions & 44 deletions newrelic_agent.log

This file was deleted.

4 changes: 4 additions & 0 deletions public/locales/en/verificationRequest.json
Original file line number Diff line number Diff line change
@@ -8,6 +8,10 @@
"openVerificationRequestClaimLabel": "A claim created was related to this verification request",
"openVerificationRequestClaimButton": "Open claim",
"agroupVerificationRequest": "Related verification requests",
"verificationRequestTagPublicationDate": "Seen On:",
"verificationRequestTagDate": "Reported On:",
"verificationRequestTagHeardFrom": "Received On:",
"verificationRequestTagSource": "Source:",
"openVerificationRequest": "Open",
"recommendationTitle": "Recommedations",
"addInGroupButton": "Add in group",
4 changes: 4 additions & 0 deletions public/locales/pt/verificationRequest.json
Original file line number Diff line number Diff line change
@@ -9,6 +9,10 @@
"openVerificationRequestClaimButton": "Abrir afirmação",
"agroupVerificationRequest": "Denúncias relacionadas",
"openVerificationRequest": "Abrir",
"verificationRequestTagPublicationDate": "Visto Em:",
"verificationRequestTagDate": "Denunciado Em:",
"verificationRequestTagHeardFrom": "Origem:",
"verificationRequestTagSource": "Fonte:",
"recommendationTitle": "Recomendações",
"addInGroupButton": "Adicionar no grupo",
"alreadyInGroupMessage": "Já adicionado ao grupo",
16 changes: 14 additions & 2 deletions server/chat-bot-state/chat-bot-state.schema.ts
Original file line number Diff line number Diff line change
@@ -3,13 +3,25 @@ import * as mongoose from "mongoose";

export type ChatBotStateDocument = ChatBotState & mongoose.Document;

export interface ChatBotMachineSnapshot {
value: any;
context: {
verificationRequest?: string;
responseMessage?: string;
link?: string;
publicationDate?: string;
sources?: string;
email?: string;
};
}

@Schema()
export class ChatBotState {
@Prop({ required: true })
_id: string;

@Prop({ required: true, type: mongoose.Schema.Types.Mixed })
state: any;
@Prop({ required: true, type: Object })
machine: ChatBotMachineSnapshot;
}

const ChatBotStateSchemaRaw = SchemaFactory.createForClass(ChatBotState);
16 changes: 10 additions & 6 deletions server/chat-bot-state/chat-bot-state.service.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
import { Injectable } from "@nestjs/common";
import { InjectModel } from "@nestjs/mongoose";
import { Model } from "mongoose";
import { ChatBotState, ChatBotStateDocument } from "./chat-bot-state.schema";
import {
ChatBotState,
ChatBotStateDocument,
ChatBotMachineSnapshot,
} from "./chat-bot-state.schema";

@Injectable()
export class ChatBotStateService {
@@ -10,21 +14,21 @@ export class ChatBotStateService {
private ChatBotStateModel: Model<ChatBotStateDocument>
) {}

async create(state, id: string) {
async create(snapshot: ChatBotMachineSnapshot, id: string) {
const newChatBotState = new this.ChatBotStateModel({
_id: id,
state: state,
machine: snapshot,
});
return await newChatBotState.save();
}

async updateState(
async updateSnapshot(
id: string,
state: any
snapshot: ChatBotMachineSnapshot
): Promise<ChatBotStateDocument | null> {
return await this.ChatBotStateModel.findByIdAndUpdate(
id,
{ state: state },
{ machine: snapshot },
{ new: true, useFindAndModify: false }
).exec();
}
162 changes: 131 additions & 31 deletions server/chat-bot/chat-bot-actions.ts
Original file line number Diff line number Diff line change
@@ -5,32 +5,78 @@ interface VerificationRequestEvent extends EventObject {
verificationRequest: string;
}

interface SourceEvent extends EventObject {
source: string;
}

interface PublicationDateEvent extends EventObject {
publicationDate: string;
}

interface HeardFromEvent extends EventObject {
heardFrom: string;
}

interface EmailEvent extends EventObject {
email: string;
}

const MESSAGES = {
greeting:
"Olá! Sou o assistente virtual da AletheiaFact.org, estou aqui para ajudá-lo(a) a combater desinformações 🙂 Você gostaria de fazer uma denúncia agora?\n\nResponda SIM para continuar ou NÃO se não deseja denunciar.",
noMessage:
"Entendi. Nosso trabalho é verificar informações falsas.\n\nSe quiser saber mais sobre o que fazemos, visite: https://aletheiafact.org. Se mudar de ideia e desejar fazer uma denúncia, basta digitar DENÚNCIA a qualquer momento.",
"Olá! Sou o assistente virtual da AletheiaFact.org, estou aqui para ajudá-lo(a) a combater desinformações 🙂 Você gostaria de fazer uma denúncia agora?\n\nResponda SIM para continuar ou NÃO se deseja falar com uma pessoa real.",
noTextMessageAskIfForVerificationRequest:
"Desculpe, só podemos processar mensagens de texto. Por favor, envie sua mensagem em formato de texto.\n\nVocê gostaria de fazer uma denúncia agora? Responda SIM para continuar ou NÃO se não deseja.",
noTextMessageGreeting:
"Desculpe, só podemos processar mensagens de texto. Por favor, envie sua mensagem em formato de texto.\n\nOlá! Sou o assistente virtual da AletheiaFact.org, estou aqui para ajudá-lo(a) a combater desinformações 🙂 Você gostaria de fazer uma denúncia agora?\n\nResponda SIM para continuar ou NÃO se não deseja denunciar.",
pausedMachineMessage:
"Entendi. No momento, o bot não irá responder mais. Se mudar de ideia e desejar fazer uma denúncia com a assistência do chatbot, basta digitar DENÚNCIA a qualquer momento.",
noTextMessageNoMessage:
"Desculpe, só podemos processar mensagens de texto. Por favor, envie sua mensagem em formato de texto.\n\nNosso trabalho é verificar informações falsas.\n\nSe quiser saber mais sobre o que fazemos, visite: https://aletheiafact.org. Se mudar de ideia e desejar fazer uma denúncia, basta digitar DENÚNCIA a qualquer momento.",
notUnderstood:
"Desculpe, não entendi sua resposta. Para continuar, preciso que você digite SIM se deseja fazer uma denúncia, ou NÃO se não deseja.\n\nVocê gostaria de fazer uma denúncia agora?",
"Desculpe, não entendi sua resposta. Para continuar, preciso que você digite SIM se deseja fazer uma denúncia, ou NÃO se prefere falar com uma pessoa real.\n\nVocê gostaria de fazer uma denúncia agora?",
askForVerificationRequest:
"Por favor, me conte com detalhes o que você gostaria de denunciar.\n\nPor favor, inclua todas as informações que considerar relevantes para que possamos verificar a denúncia de forma eficiente 👀",
thanks: "Muito obrigada por sua contribuição!\n\nSua informação será analisada pela nossa equipe ✅Para saber mais, visite nosso site: https://aletheiafact.org.\n\nDeseja relatar outra denúncia? Responda SIM para continuar.",
noTextMessageGreeting:
"Desculpe, só podemos processar mensagens de texto. Por favor, envie sua mensagem em formato de texto.\n\nOlá! Sou o assistente virtual da AletheiaFact.org, estou aqui para ajudá-lo(a) a combater desinformações 🙂 Você gostaria de fazer uma denúncia agora?\n\nResponda SIM para continuar ou NÃO se não deseja denunciar.",
noTextMessageAskForVerificationRequest:
"Desculpe, só podemos processar mensagens de texto. Por favor, envie sua mensagem em formato de texto para que possamos entender e verificar sua denúncia de forma eficiente.\n\nPor favor, me conte com detalhes o que você gostaria de denunciar.\n\nPor favor, inclua todas as informações que considerar relevantes para que possamos verificar a denúncia de forma eficiente 👀",
noTextMessageNoMessage:
"Desculpe, só podemos processar mensagens de texto. Por favor, envie sua mensagem em formato de texto.\n\nNosso trabalho é verificar informações falsas.\n\nSe quiser saber mais sobre o que fazemos, visite: https://aletheiafact.org. Se mudar de ideia e desejar fazer uma denúncia, basta digitar DENÚNCIA a qualquer momento.",
noTextMessageAskIfForVerificationRequest:
"Desculpe, só podemos processar mensagens de texto. Por favor, envie sua mensagem em formato de texto.\n\nVocê gostaria de fazer uma denúncia agora? Responda SIM para continuar ou NÃO se não deseja.",
askForSource:
"A publicação que você está denunciando possui um link? Se sim, por favor, envie-o para nós. Se você não tem um link ou prefere não compartilhar, responda 'Não'.",
noTextMessageAskForSource:
"Desculpe, só podemos processar mensagens de texto. Por favor, envie sua mensagem em formato de texto para que possamos entender e verificar sua denúncia de forma eficiente.\n\nA publicação que você está denunciando possui um link? Se sim, por favor, envie-o para nós. Se você não tem um link ou prefere não compartilhar, responda 'Não'.",
askForPublicationDate:
"Por favor, informe a data em que você viu ou leu a publicação. Se você não tem essa informação ou prefere não compartilhar, responda 'Não'.",
noTextMessageAskForPublicationDate:
"Desculpe, só podemos processar mensagens de texto. Por favor, envie sua mensagem em formato de texto para que possamos entender e verificar sua denúncia de forma eficiente.\n\nPor favor, informe a data em que você viu ou leu a publicação. Se você não tem essa informação ou prefere não compartilhar, responda 'Não'.",
askForHeardFrom:
"Você pode nos dizer onde encontrou ou recebeu a publicação? Se preferir não fornecer essa informação, responda 'Não'.",
noTextMessageAskForHeardFrom:
"Desculpe, só podemos processar mensagens de texto. Por favor, envie sua mensagem em formato de texto para que possamos entender e verificar sua denúncia de forma eficiente.\n\nVocê pode nos dizer onde encontrou ou recebeu a publicação? Se preferir não fornecer essa informação, responda 'Não'.",
askForEmail:
"Para que possamos enviar a verificação, por favor, forneça seu e-mail abaixo. Se você prefere não deixar seu e-mail ou não deseja receber a verificação, responda 'Não'.",
noTextMessageAskForEmail:
"Desculpe, só podemos processar mensagens de texto. Por favor, envie sua mensagem em formato de texto para que possamos entender e verificar sua denúncia de forma eficiente.\n\nPara que possamos enviar a verificação, por favor, forneça seu e-mail abaixo. Se você prefere não deixar seu e-mail ou não deseja receber a verificação, responda 'Não'.",
thanks: "Muito obrigada por sua contribuição!\n\nSua informação será analisada pela nossa equipe ✅Para saber mais, visite nosso site: https://aletheiafact.org.\n\nDeseja relatar outra denúncia? Responda SIM para continuar.",
};

export const sendGreeting = assign<ChatBotContext>({
responseMessage: () => MESSAGES.greeting,
});

export const sendNoMessage = assign<ChatBotContext>({
responseMessage: () => MESSAGES.noMessage,
export const sendNoTextMessageAskIfForVerificationRequest =
assign<ChatBotContext>({
responseMessage: () =>
MESSAGES.noTextMessageAskIfForVerificationRequest,
});

export const sendNoTextMessageGreeting = assign<ChatBotContext>({
responseMessage: () => MESSAGES.noTextMessageGreeting,
});

export const sendPausedMachineMessage = assign<ChatBotContext>({
responseMessage: () => MESSAGES.pausedMachineMessage,
});

export const sendNoTextMessageNoMessage = assign<ChatBotContext>({
responseMessage: () => MESSAGES.noTextMessageNoMessage,
});

export const sendNotUnderstoodMessage = assign<ChatBotContext>({
@@ -41,34 +87,88 @@ export const askForVerificationRequest = assign<ChatBotContext>({
responseMessage: () => MESSAGES.askForVerificationRequest,
});

export const saveVerificationRequest = assign<ChatBotContext>({
verificationRequest: (context, event) =>
(event as VerificationRequestEvent).verificationRequest,
export const sendNoTextMessageAskForVerificationRequest =
assign<ChatBotContext>({
responseMessage: () => MESSAGES.noTextMessageAskForVerificationRequest,
});

export const askForSource = assign<ChatBotContext>({
responseMessage: () => MESSAGES.askForSource,
});

export const sendThanks = assign<ChatBotContext>({
responseMessage: () => MESSAGES.thanks,
export const sendNoTextMessageAskForSource = assign<ChatBotContext>({
responseMessage: () => MESSAGES.noTextMessageAskForSource,
});

export const sendNoTextMessageGreeting = assign<ChatBotContext>({
responseMessage: () => MESSAGES.noTextMessageGreeting,
export const askForPublicationDate = assign<ChatBotContext>({
responseMessage: () => MESSAGES.askForPublicationDate,
});

export const sendNoTextMessageAskForVerificationRequest =
assign<ChatBotContext>({
responseMessage: () => MESSAGES.noTextMessageAskForVerificationRequest,
});
export const sendNoTextMessageAskForPublicationDate = assign<ChatBotContext>({
responseMessage: () => MESSAGES.noTextMessageAskForPublicationDate,
});

export const sendNoTextMessageNoMessage = assign<ChatBotContext>({
responseMessage: () => MESSAGES.noTextMessageNoMessage,
export const askForHeardFrom = assign<ChatBotContext>({
responseMessage: () => MESSAGES.askForHeardFrom,
});

export const sendNoTextMessageAskIfForVerificationRequest =
assign<ChatBotContext>({
responseMessage: () =>
MESSAGES.noTextMessageAskIfForVerificationRequest,
});
export const sendNoTextMessageAskForHeardFrom = assign<ChatBotContext>({
responseMessage: () => MESSAGES.noTextMessageAskForHeardFrom,
});

export const askForEmail = assign<ChatBotContext>({
responseMessage: () => MESSAGES.askForEmail,
});

export const sendNoTextMessageAskForEmail = assign<ChatBotContext>({
responseMessage: () => MESSAGES.noTextMessageAskForEmail,
});

export const saveVerificationRequest = assign<
ChatBotContext,
VerificationRequestEvent
>({
verificationRequest: (context, event) => event.verificationRequest,
});

export const saveSource = assign<ChatBotContext, SourceEvent>({
source: (context, event) => event.source,
});

export const saveEmptySource = assign<ChatBotContext>({
source: () => "",
});

export const savePublicationDate = assign<ChatBotContext, PublicationDateEvent>(
{
publicationDate: (context, event) => event.publicationDate,
}
);

export const saveEmptyPublicationDate = assign<ChatBotContext>({
publicationDate: () => "",
});

export const saveHeardFrom = assign<ChatBotContext, HeardFromEvent>({
heardFrom: (context, event) => event.heardFrom,
});

export const saveEmptyHeardFrom = assign<ChatBotContext>({
heardFrom: () => "",
});

export const saveEmail = assign<ChatBotContext, EmailEvent>({
email: (context, event) => event.email,
});

export const saveEmptyEmail = assign<ChatBotContext>({
email: () => "",
});

export const setResponseMessage = assign<ChatBotContext>({
responseMessage: (context) => context.responseMessage,
});

export const sendThanks = assign<ChatBotContext>({
responseMessage: () => MESSAGES.thanks,
});
Loading

0 comments on commit 505da94

Please sign in to comment.