Migration to V4 is in progress. The Bot now can be loaded again.

This commit is contained in:
Rodrigo Rodriguez 2018-08-28 17:50:19 -03:00
parent 4cc4e7236a
commit 3118b45543
6 changed files with 171 additions and 159 deletions

View file

@ -58,7 +58,7 @@ export class GBConversationalService implements IGBConversationalService {
msg.value = value;
msg.type = "event";
msg.name = name;
// TODO: dc.context.sendActivity(msg);
dc.context.sendActivity(msg);
}
async runNLP(

View file

@ -134,9 +134,11 @@ export class GBMinService {
(instance: IGBInstance, err) => {
if (instance) {
// TODO: Make dynamic: https://CHANGE.api.cognitive.microsoft.com/sts/v1.0
let options = {
url:
"https://api.cognitive.microsoft.com/sts/v1.0/issueToken",
"https://westus.api.cognitive.microsoft.com/sts/v1.0/issueToken",
method: "POST",
headers: {
"Ocp-Apim-Subscription-Key": instance.speechKey
@ -155,6 +157,10 @@ export class GBMinService {
conversationId: responseObject.conversationId
})
);
}).catch((reason) => {
let error = `Error loading Speech Service: ${reason}.`;
res.send(error);
logger.error(error);
});
} else {
let error = `Instance not found: ${botId}.`;
@ -223,6 +229,7 @@ export class GBMinService {
logger.trace(
`GeneralBots(${instance.engineName}) listening on: ${url}.`
);
server.post(`/api/messages/${instance.botId}`, (req, res) => {
adapter.processActivity(req, res, async (context) => {
@ -230,6 +237,18 @@ export class GBMinService {
const state = conversationState.get(context);
const dc = min.dialogs.createContext(context, state);
const user = min.userState.get(dc.context);
if (!user.loaded) {
min.conversationalService.sendEvent(
dc,
"loadInstance",
min.instance // TODO: Send just necessary values.
);
user.loaded = true;
user.subjects = [];
}
if (context.activity.type === "conversationUpdate" &&
context.activity.membersAdded.length > 0) {
@ -242,7 +261,7 @@ export class GBMinService {
if (!context.responded) {
await dc.begin('/');
}else if (context.activity.name === "whoAmI") {
} else if (context.activity.name === "whoAmI") {
dc.begin("/whoAmI");
} else if (context.activity.name === "showSubjects") {
dc.begin("/menu");
@ -265,17 +284,6 @@ export class GBMinService {
await dc.continue();
}
const user = min.userState.get(dc.context);
if (!user.loaded) {
// min.conversationalService.sendEvent(
// dc,
// "loadInstance",
// min.instance // TODO: Send a new thiner object.
// );
user.loaded = true;
user.subjects = [];
}
appPackages.forEach(e => {
e.onNewSession(min, dc);

View file

@ -34,27 +34,25 @@
<html lang="pt-br" style="width:100%;height:100%">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico">
<link rel="stylesheet" type="text/css" href="./css/botchat.css" />
<link rel="stylesheet" type="text/css" href="./css/pragmatismo.css" />
<script src="./js/botchat.js"></script>
<title>General Bots Community Edition | pragmatismo.io</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico">
<link rel="stylesheet" type="text/css" href="./css/botchat.css" />
<link rel="stylesheet" type="text/css" href="./css/pragmatismo.css" />
<script src="./js/botchat.js"></script>
<title>General Bots Community Edition | pragmatismo.io</title>
<style>
.loader {
opacity: 0 !important;
filter: opacity(0);
}
</style>
<style>
.loader {
opacity: 0 !important;
/* filter: opacity(0); Problem in recent Chrome 68+ */
}
</style>
</head>
<body style="background-color: lightgrey;">
<div id="root" class="loader"></div>
<div id="root"></div>
</body>
</html>

View file

@ -145,7 +145,7 @@ class GBUIApp extends React.Component {
.subscribe(activity => {
_this_.setState({ instance: activity.value });
});
botConnection.activity$
.filter(activity => activity.type === "event" && activity.name === "stop")
.subscribe(activity => {
@ -167,7 +167,7 @@ class GBUIApp extends React.Component {
}
render() {
let chat = <div />;
let playerComponent = "";
@ -234,16 +234,19 @@ class GBUIApp extends React.Component {
}
let speechOptions;
let chat = <div />;
let gbCss =<div />;
let sideBar = (
<div className="sidebar">
<SidebarMenu chat={this.chat} instance={this.state.instance} />
</div>
);
if (this.state.botConnection && this.state.instance) {
let token = this.state.instanceClient.speechToken;
gbCss = <GBCss instance={this.state.instance} />;
function getToken() {
return new Promise((resolve, reject) => {
@ -251,7 +254,6 @@ class GBUIApp extends React.Component {
});
}
speechOptions = {
speechRecognizer: new SpeechRecognizer({
locale: "pt-br",
@ -288,7 +290,7 @@ class GBUIApp extends React.Component {
return (
<div>
<GBCss instance={this.state.instance} />
{gbCss}
{sideBar}
<div className="player">{playerComponent}</div>
{chat}

View file

@ -50,15 +50,19 @@ export class AskDialog extends IGBDialog {
appId: min.instance.nlpAppId,
subscriptionKey: min.instance.nlpSubscriptionKey,
serviceEndpoint: min.instance.nlpServerUrl
});
});
min.dialogs.add("/answer", [
async (dc, args) => {
const user = min.userState.get(dc.context);
// Initialize values.
const user = min.userState.get(dc.context);
let text = "";
// Handle extra text from FAQ.
if (args && args.query) {
text = args.query;
} else if (args && args.fromFaq) {
@ -71,132 +75,130 @@ export class AskDialog extends IGBDialog {
dc.context.sendActivity(messages[0]); // TODO: Handle rnd.
}
await model.recognize(dc.context).then(res => {
console.log(res);
}).catch(err => {
console.log(err);
});
// Spells check the input text before sending Search or NLP.
// await min.conversationalService.runNLP(
// dc,
// min,
// DISABLED:
// AzureText.getSpelledText(
// min.instance.spellcheckerKey,
// text,
// (data, error) => {
// if (!data) {
// let messages = [
// "Desculpe-me, não encontrei nada a respeito.",
// "Lamento... Não encontrei nada sobre isso. Vamos tentar novamente?",
// "Desculpe-me, não achei nada parecido. Poderia tentar escrever de outra forma?"
// ];
// dc.context.sendActivity(messages[0]); // TODO: Handle rnd.
// dc.replace("/ask", { isReturning: true });
// }
// }
// );
// if (text === "") {
// dc.replace("/ask");
// } else {
// // AzureText.getSpelledText(
// // min.instance.spellcheckerKey,
// // text,
// // async (data, err) => {
// var data = text;
// if (data != text) {
// logger.trace("Spelled Text: " + data);
// text = data;
// }
// user.lastQuestion = data;
// service.ask(
// min.instance,
// text,
// min.instance.searchScore,
// user.subjects,
// async resultsA => {
// min.conversationalService.sendEvent(dc, "stop", null);
// if (resultsA && resultsA.answer) {
// user.isAsking = false;
// service.sendAnswer(min.conversationalService,
// dc,
// resultsA.answer
// );
// user.lastQuestionId = resultsA.questionId;
// dc.replace("/ask", { isReturning: true });
// } else {
// //if (min.isAsking) {
// // Second time with no filter.
// service.ask(
// min.instance,
// text,
// min.instance.searchScore,
// null,
// async resultsB => {
// if (resultsB && resultsB.answer) {
// const user = min.userState.get(dc.context);
// user.isAsking = false;
// if (user.subjects.length > 0) {
// let subjectText =
// `${KBService.getSubjectItemsSeparatedBySpaces(
// user.subjects
// )}`;
// let messages = [
// `Respondendo nao apenas sobre ${subjectText}... `,
// `Respondendo de modo mais abrangente...`,
// `Vou te responder de modo mais abrangente...
// Não apenas sobre ${subjectText}`
// ];
// dc.context.sendActivity(messages[0]); // TODO: Handle rnd.
// }
// user.isAsking = false;
// service.sendAnswer(min.conversationalService,
// dc,
// resultsB.answer
// );
// dc.replace("/ask", { isReturning: true });
// user.lastQuestionId = resultsB.questionId;
// } else {
// await min.conversationalService.runNLP(
// dc,
// min,
// text,
// (data, error) => {
// if (!data) {
// let messages = [
// "Desculpe-me, não encontrei nada a respeito.",
// "Lamento... Não encontrei nada sobre isso. Vamos tentar novamente?",
// "Desculpe-me, não achei nada parecido. Poderia tentar escrever de outra forma?"
// ];
// dc.context.sendActivity(messages[0]); // TODO: Handle rnd.
// dc.replace("/ask", { isReturning: true });
// }
// }
// );
// }
// }
// );
// }
// }
// );
// async (data, err) => {
// var data = res.text;
// if (data != text) {
// logger.trace("Spelled Text: " + data);
// text = data;
// }
//); }
user.lastQuestion = text;
// Searches KB for the first time.
service.ask(
min.instance,
text,
min.instance.searchScore,
user.subjects,
async resultsA => {
// Stops any content on projector.
min.conversationalService.sendEvent(dc, "stop", null);
// If there is some result, answer immediately.
if (resultsA && resultsA.answer) {
// Saves some context info.
user.isAsking = false;
user.lastQuestionId = resultsA.questionId;
// Sends the answer to all outputs, including projector.
service.sendAnswer(min.conversationalService,
dc,
resultsA.answer
);
// Goes to ask loop, again.
dc.replace("/ask", { isReturning: true });
} else {
// Second time running Search, now with no filter.
service.ask(
min.instance,
text,
min.instance.searchScore,
null,
async resultsB => {
// If there is some result, answer immediately.
if (resultsB && resultsB.answer) {
// Saves some context info.
const user = min.userState.get(dc.context);
user.isAsking = false;
user.lastQuestionId = resultsB.questionId;
// Inform user that a broader search will be used.
if (user.subjects.length > 0) {
let subjectText =
`${KBService.getSubjectItemsSeparatedBySpaces(
user.subjects
)}`;
let messages = [
`Respondendo nao apenas sobre ${subjectText}... `,
`Respondendo de modo mais abrangente...`,
`Vou te responder de modo mais abrangente...
Não apenas sobre ${subjectText}`
];
dc.context.sendActivity(messages[0]); // TODO: Handle rnd.
}
// Sends the answer to all outputs, including projector.
service.sendAnswer(min.conversationalService,
dc,
resultsB.answer
);
dc.replace("/ask", { isReturning: true });
} else {
await min.conversationalService.runNLP(
dc,
min,
text,
(data, error) => {
if (!data) {
let messages = [
"Desculpe-me, não encontrei nada a respeito.",
"Lamento... Não encontrei nada sobre isso. Vamos tentar novamente?",
"Desculpe-me, não achei nada parecido. Poderia tentar escrever de outra forma?"
];
dc.context.sendActivity(messages[0]); // TODO: Handle rnd.
dc.replace("/ask", { isReturning: true });
}
}).catch(err => {
console.log(err);
});
}
});
}
}
);
}
]);
bot
min.dialogs.add("/ask", [
async (dc, args) => {
const user = min.userState.get(dc.context);

View file

@ -5,6 +5,8 @@
"declaration": false,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"keyofStringsOnly": true,
"skipLibCheck": true,
"mapRoot": "./dist/",
"module": "commonjs",
"moduleResolution": "node",