मैं बॉट बिल्डर के लिए बहुत नया हूँ। मुझे एलयूआई के इरादों का उपयोग करने की ज़रूरत है और फिर अंततः इरादे को खोजने के लिए एज़ूर-सर्च को कॉल करें।

हालांकि, नीचे मेरा कोड है। Aco-Saerch आशय में, मैं उपयोगकर्ता के संदेश से आशय निकालना चाहता हूँ और फिर नीला-खोज में क्वेरी को पास करना चाहता हूँ।

डायलॉग SearchDialog में, वाटरफॉल फ़ंक्शन पहले फ़ंक्शन के बाद आगे नहीं बढ़ रहे हैं। क्या कोई मेरी मदद कर सकता है कि यहाँ क्या गलत है।

मैं इस गिट-हब साझा कोड से नीला खोज कोड और पुस्तकालयों का उपयोग करने की कोशिश कर रहा हूं: रियलस्टेट नीला खोज नोड जेएस कोड

भविष्य में, मैं QnA पहचानकर्ता भी जोड़ना चाहता हूं। उद्देश्य है: qnA आधार में क्वेरी खोजें, यदि पाया जाता है, तो वापस लौटें, इरादे का पता लगाने के लिए LUIS का उपयोग करें और फिर इसे नीला खोज पास करें।

var util = require('util');
var _ = require('lodash');
var builder = require('botbuilder');
var restify = require('restify');

/// <reference path="../SearchDialogLibrary/index.d.ts" />
var SearchLibrary = require('../SearchDialogLibrary');
var AzureSearch = require('../SearchProviders/azure-search');

// 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 and listen for messages
var connector = new builder.ChatConnector({
    appId: process.env.MICROSOFT_APP_ID,
    appPassword: process.env.MICROSOFT_APP_PASSWORD
});
server.post('/api/messages', connector.listen());

// Bot Storage: Here we register the state storage for your bot. 
// Default store: volatile in-memory store - Only for prototyping!
// We provide adapters for Azure Table, CosmosDb, SQL Azure, or you can implement your own!
// For samples and documentation, see: https://github.com/Microsoft/BotBuilder-Azure
var inMemoryStorage = new builder.MemoryBotStorage();

const LuisModelUrl = 'https://westeurope.api.cognitive.microsoft.com/luis/v2.0/apps/180a9aaa-9d67-4d40-b3d3-121917f4dbb8?subscription-key=39155bb750dc4b2abd84d410d80fce21&timezoneOffset=0&q=';
var recognizer = new builder.LuisRecognizer(LuisModelUrl);
// Bot with main dialog that triggers search and display its results
var bot = new builder.UniversalBot(connector, function (session, args) {
    session.send('You reached the default message handler. You said \'%s\'.', session.message.text);
}).set('storage', inMemoryStorage);

bot.recognizer(recognizer);

bot.dialog('GreetingDialog',
    (session) => {
        session.send('You reached the Greeting intent. You said \'%s\'.', session.message.text);
        session.endDialog();
    }
).triggerAction({
    matches: 'Greeting'
})

bot.dialog('HelpDialog',
    (session) => {
        session.send('You reached the Help intent. You said \'%s\'.', session.message.text);
        session.endDialog();
    }
).triggerAction({
    matches: 'Help'
})

bot.dialog('CancelDialog',
    (session) => {
        session.send('You reached the Cancel intent. You said \'%s\'.', session.message.text);
        session.endDialog();
    }
).triggerAction({
    matches: 'Cancel'
})

bot.dialog('SearchDialog', [
    function (session, args) {
        var intent = args.intent;
        var title = builder.EntityRecognizer.findEntity(intent.entities, 'businessterm');
        console.log(title.entity);
        session.send('You reached the Search.Aco intent. You enquire for the entitiy \'%s\'.', title.entity);
    },
    function (session, args, results) {
        // Trigger Search
        console.log("Inside the SearchLibrary.begin");
        SearchLibrary.begin(session);
        console.log("after  the SearchLibrary.begin");
    },
    function (session, args, results) {
        // Process selected search results
        session.send(
            'Done! For future reference, you selected these properties: %s',
            args.selection.map(function (i) { return i.key; }).join(', '));
    }
]).triggerAction({
    matches: 'Search.Aco'
});

var azureSearchClient = AzureSearch.create('aco-intel2', '4105C6676D0CDD9B2E7891952B9E9E00', 'azureblob-index');
var jobsResultsMapper = SearchLibrary.defaultResultsMapper(jobToSearchHit);

// Register Search Dialogs Library with bot
bot.library(SearchLibrary.create({
    multipleSelection: true,
    search: function (query) { return azureSearchClient.search(query).then(jobsResultsMapper); },
    refiners: ['people', 'content', 'location']
}));

// Maps the AzureSearch Job Document into a SearchHit that the Search Library can use
function jobToSearchHit(acosearch) {
    console.log("inside jobToSearchHit");
    console.log("inside acosearch.DocUrl" + acosearch.DocUrl + "-------" + acosearch.metadata_storage_name);
    return {
        key: acosearch.id,
        title: acosearch.metadata_storage_name,
        description: acosearch.content.substring(0, 100)+"...",
        documenturl:acosearch.DocUrl,
        imageUrl: acosearch.imageurl
    };
}
0
Vivek Jain 3 अगस्त 2018, 17:39

1 उत्तर

सबसे बढ़िया उत्तर

आपका संवाद आगे नहीं बढ़ रहा है क्योंकि इसमें कार्रवाई करने के लिए कुछ भी नहीं है। इस प्रकार, यह आगे बढ़ने के लिए कहीं नहीं के साथ पहले फ़ंक्शन के अंत तक पहुंच जाता है। आपके पास कुछ विकल्प हैं। आप ऐसा कर सकते हैं:

  1. डायलॉग को साथ ले जाने के लिए आप एक प्रॉम्प्ट या बटन (यानी किसी प्रकार की कार्रवाई) शामिल कर सकते हैं। भूतपूर्व:

    bot.dialog('SearchDialog', [
        function (session, args) {
            var intent = args.intent;
            var title = builder.EntityRecognizer.findEntity(intent.entities, 'businessterm');
            console.log(title.entity);
            session.send('You reached the Search.Aco intent. You enquire for the entitiy \'%s\'.', title.entity);
            builder.Prompts.choice(session, "Start search?", "Yes|No", { listStyle: builder.ListStyle["button"] });
        },
        function (session, args, results) {
            // Trigger Search
            console.log("Inside the SearchLibrary.begin");
            SearchLibrary.begin(session);
            console.log("after  the SearchLibrary.begin");
        }
    
  2. आप पहले और दूसरे फंक्शन में शादी कर सकते हैं। हालांकि, फिर से, आपको संवाद को खोज फ़ंक्शन से खोज परिणाम फ़ंक्शन में ले जाने के लिए कुछ की आवश्यकता होगी।

    bot.dialog('SearchDialog', [
        function (session, args) {
            var intent = args.intent;
            var title = builder.EntityRecognizer.findEntity(intent.entities, 'businessterm');
            console.log(title.entity);
            session.send('You reached the Search.Aco intent. You enquire for the entitiy \'%s\'.', title.entity);
    
            // Trigger Search
            console.log("Inside the SearchLibrary.begin");
            SearchLibrary.begin(session);
            console.log("after  the SearchLibrary.begin");
        },
        function (session, args, results) {
            // Process selected search results
            session.send(
                'Done! For future reference, you selected these properties: %s',
                args.selection.map(function (i) { return i.key; }).join(', '));
        }
    ]).triggerAction({
    matches: 'Search.Aco'
    });
    
  3. आप खोज फ़ंक्शन को एक अलग डायलॉग बना सकते हैं जो पहले डायलॉग फंक्शन के अंत में शुरू होता है और एक बार पूरा होने के बाद, मूल डायलॉग को वापस करता है और जारी रखता है।

    bot.dialog('SearchDialog', [
        function (session, args) {
            var intent = args.intent;
            var title = builder.EntityRecognizer.findEntity(intent.entities, 'businessterm');
            console.log(title.entity);
            session.send('You reached the Search.Aco intent. You enquire for the entitiy \'%s\'.', title.entity);
            session.beginDialog('/searchAzure');
        },
        function (session, args, results) {
            // Process selected search results
            session.send(
                'Done! For future reference, you selected these properties: %s',
                args.selection.map(function (i) { return i.key; }).join(', '));
        }
    ]).triggerAction({
    matches: 'Search.Aco'
    });
    
    bot.dialog('/searchAzure', [
        function (session) {
            // Trigger Search
            console.log("Inside the SearchLibrary.begin");
            SearchLibrary.begin(session);
            console.log("after  the SearchLibrary.begin");
            session.endDialog();
        }
    ]);
    
0
Steven Kanberg 4 अगस्त 2018, 03:36
यह दूसरे समारोह में जा रहा है। आपकी सहायता के लिए धन्यवाद। क्या मैं आपसे एक और सवाल पूछ सकता हूँ? इस बॉट में, अगर मैं "ist aconext" दर्ज करता हूं, तो मैं इस क्वेरी को नीला खोज में पास करना चाहता हूं। मैं नीला खोज में पास की गई क्वेरी को कैसे अपडेट कर सकता हूं? अभी, यह फिर से शुरू होता है "आप क्या खोजना चाहेंगे?"
 – 
Vivek Jain
6 अगस्त 2018, 10:14
क्या आप इसे एक नए प्रश्न के रूप में पोस्ट कर सकते हैं क्योंकि यह वर्तमान धागे से असंबंधित है। साथ ही, ताकि समुदाय इसे आसानी से ढूंढ सके? प्रश्न का लिंक यहां पोस्ट करें ताकि मैं इसे ढूंढ सकूं। धन्यवाद।
 – 
Steven Kanberg
6 अगस्त 2018, 22:15
मैंने एक अलग प्रश्न पोस्ट किया है और इसका लिंक यहां दिया गया है: -लेकिन-केवल-एक-एक-शब्द">लिंक। @ स्टीवन कंबर्ग कृपया मेरी मदद करें।
 – 
Vivek Jain
10 अगस्त 2018, 10:55