web-dev-qa-db-fra.com

Essayer de connecter le service Microsoft QnA Maker avec Bot Framework mais ne recevoir aucune réponse de mon bot

Bot Framework Emulator

[18:48:31] -> POST 202 [conversationUpdate] 
[18:48:31] -> POST 202 [conversationUpdate] 
[18:48:36] -> POST 202 [message] hello 
[18:48:37] Warning: The Bot Framework State API is not recommended for production environments, and may be deprecated in a 
future release. Learn how to implement your own storage adapter. 
[18:48:37] <- GET 200 getPrivateConversationData 
[18:48:37] <- GET 200 getUserData 
[18:48:37] <- GET 200 getConversationData 
[18:48:37] <- POST 200 setPrivateConversationData 
[18:48:37] <- POST 200 Reply[event] Debug Event 

Je suis nouveau dans le framework de bot Microsoft, essayant de construire un bot de base en utilisant QnA Maker

Mais je me suis retrouvé coincé dans la connexion du service QnA Maker avec app.js.

Ne pas obtenir la réponse du fabricant QnA.

$ nodemon app.js
[nodemon] 1.17.5
[nodemon] to restart at any time, enter `rs`
[nodemon] watching: *.*
[nodemon] starting `node app.js`
restify listening to http://[::]:3978
WARN: ChatConnector: receive - emulator running without security enabled.
ChatConnector: message received.
WARN: ChatConnector: receive - emulator running without security enabled.
ChatConnector: message received.
WARN: ChatConnector: receive - emulator running without security enabled.
ChatConnector: message received.
The Bot State API is deprecated.  Please refer to https://aka.ms/I6swrh for details on how to replace with your own storage.
UniversalBot("*") routing "hello" from "emulator"
Session.beginDialog(/)
/ - Session.sendBatch() sending 0 message(s)
The Bot State API is deprecated.  Please refer to https://aka.ms/I6swrh for details on how to replace with your own storage.

app.js

const restify = require('restify');
const builder = require('botbuilder');
const cognitiveServices = require('botbuilder-cognitiveservices');
//connecting to server

const server = restify.createServer();
server.listen(process.env.port || process.env.PORT || 3978,
    function () {
        console.log('%s listening to %s',server.name,server.url);
    }
);

const connector = new builder.ChatConnector({
    appId: process.env.MicrosoftAppId,
    appPassword: process.env.MicrosoftAppPassword
});
//listening post from server
server.post('/api/messages', connector.listen());

var bot = new builder.UniversalBot(connector);

const recognizer = new cognitiveServices.QnAMakerRecognizer({
    knowledgeBaseId: "ffek8d39-dldc-48df-a9db-d902efc18cda",
    subscriptionKey: "881jc9eb-1a5b-4a10-bi89-233afh83ce98",
});

const qnaMakerDialog = new cognitiveServices.QnAMakerDialog({
    recognizers: [recognizer],
    defaultMessage: "Sorry I don't understand the question",
    qnaThreshold: 0.4,
});

bot.dialog('/', qnaMakerDialog);
3
govardhan

QnAMaker est actuellement en version GA et n'est plus en aperçu. Cela ne semble pas beaucoup, mais cela signifie la différence d'une variable de reconnaissance unique: endpointHostName.

Vous avez actuellement:

const recognizer = new cognitiveServices.QnAMakerRecognizer({
    knowledgeBaseId: "kbid",
    subscriptionKey: "subKey"
});

AU LIEU, il devrait se lire comme suit:

const recognizer = new cognitiveServices.QnAMakerRecognizer({
    knowledgeBaseId: "kbid",
    authKey: "subKey",
    endpointHostName: "https://NAMEOFMYQNABOTHERE.azurewebsites.net/qnamaker"
});

Le noeud final est répertorié en tant qu'hôte sur l'extrait de code de QnAMaker.ai.

La raison pour laquelle vous n’obtenez aucune réponse, c’est que vous n’avez pas le code nécessaire à votre bot pour vous dire qu’il n’a aucune idée de la base de connaissances QnAMaker dont vous parlez. Une modification mineure de votre dernière partie bot.dialog vous aidera.

bot.dialog('qnaMakerDialog', qnaMakerDialog);    

bot.dialog('/', 
    [
        function (session) {
            var qnaKnowledgebaseId = "kbid";
            var qnaAuthKey = "subKey";
            var endpointHostName = "https://NAMEOFMYQNABOTHERE.azurewebsites.net/qnamaker";

            // QnA Subscription Key and KnowledgeBase Id null verification
            if ((qnaAuthKey == null || qnaAuthKey == '') || (qnaKnowledgebaseId == null || qnaKnowledgebaseId == ''))
                session.send('Please set QnAKnowledgebaseId, QnAAuthKey and QnAEndpointHostName (if applicable) in App Settings. Learn how to get them at https://aka.ms/qnaabssetup.');
            else {
                    session.replaceDialog('qnaMakerDialog');
            }
        }
    ]);

Ainsi, si l'un d'entre eux manque ou est incorrect, votre bot vous renverra le message préenregistré présenté ci-dessus pour vous avertir qu'il manque quelque chose. 

Bonne codage!

4
JJ_Wailes

Assurez-vous simplement que vous utilisez une variable knowledgeBaseId et authKey valide et ajoutez endpointHostName comme indiqué dans l'annonce GA comme suit à l'aide de l'exemple fourni ici

var restify = require('restify');
var builder = require('botbuilder');
var cognitiveservices = require('../../../lib/botbuilder-cognitiveservices');

//=========================================================
// Bot Setup
//=========================================================

// Setup Restify Server
var server = restify.createServer();
server.listen(process.env.port || process.env.PORT || 3978, function () {
    console.log('%s listening to %s', server.name, server.url);
});

// Create chat bot
var connector = new builder.ChatConnector({
    appId: process.env.Microsoft_APP_ID,
    appPassword: process.env.Microsoft_APP_PASSWORD
});
var bot = new builder.UniversalBot(connector);
bot.set('storage', new builder.MemoryBotStorage());         // Register in-memory state storage
server.post('/api/messages', connector.listen());

//=========================================================
// Bots Dialogs
//=========================================================

var recognizer = new cognitiveservices.QnAMakerRecognizer({
    knowledgeBaseId: 'set your kbid here',
    authKey: 'set your authorization key here',
    endpointHostName: 'set your endpoint Host name'});

var basicQnAMakerDialog = new cognitiveservices.QnAMakerDialog({
    recognizers: [recognizer],
    defaultMessage: 'No match! Try changing the query terms!',
    qnaThreshold: 0.3
});

bot.dialog('/', basicQnAMakerDialog);
0
Ali Heikal