Node.js: Hvordan sende en direktemelding i slakk med MS Bot Work?

stemmer
1

Jeg prøver å lage en slakk bot bruke LUIS der når boten ser en hilsen i en kanal det er lagt til, sender den en direkte melding til brukeren som sendte hilsen.

Jeg har sett på Issue # 431 og skrev en bot. Her er min kode:

var builder = require('botbuilder');
var restify = require('restify');
// 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);
});
server.get(/.*/, restify.serveStatic({
    'directory': '.',
    'default': 'index.html'
}));

// 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, {
    persistConversationData: true // need persistent data for dictionary
});
server.post('/api/messages', connector.listen());

// Create LUIS recognizer that points at our model and add it as the root '/' dialog
var model = (omitted);
var recognizer = new builder.LuisRecognizer(model);
var dialog = new builder.IntentDialog({ recognizers: [recognizer] });
bot.dialog('/', dialog);

// Add intent handlers
dialog.matches('Greeting', [
    function(session, args, next) {
        var language = builder.EntityRecognizer.findEntity(args.entities, 'Language');
        next({ response: language });
    },
    function(session, results) {

        bot.beginDialog({
            text: 'Hello',
            to: {channelId: emulator, address:User1, id:(omitted), isBot:false},
            from: { channelId:emulator, address:Bot1, id:(omitted), isBot:true}
        }, '/');
    }
]);

Men i dag når boten får en hilsen, det gir følgende feilmelding:

ERROR: ChatConnector: startConversation - address is invalid.
Error: Invalid address.
    at ChatConnector.startConversation (C:\..\node_modules\botbuilder\lib\bots\ChatConnector.js:173:18)
    at C:\..\node_modules\botbuilder\lib\bots\UniversalBot.js:308:27
    at UniversalBot.tryCatch (C:\..\node_modules\botbuilder\lib\bots\UniversalBot.js:381:13)
    at UniversalBot.ensureConversation (C:\..\node_modules\botbuilder\lib\bots\UniversalBot.js:302:14)
    at C:\..\node_modules\botbuilder\lib\bots\UniversalBot.js:163:19
    at C:\..\node_modules\botbuilder\lib\bots\UniversalBot.js:337:53
    at UniversalBot.tryCatch (C:\..\node_modules\botbuilder\lib\bots\UniversalBot.js:381:13)
    at C:\..\node_modules\botbuilder\lib\bots\UniversalBot.js:337:23
    at UniversalBot.tryCatch (C:\..\node_modules\botbuilder\lib\bots\UniversalBot.js:381:13)
    at UniversalBot.lookupUser (C:\..\node_modules\botbuilder\lib\bots\UniversalBot.js:324:14)

(Jeg har utelatt en del av katalogen)

Jeg har sett på Issue # 687 , men likevel kunne jeg ikke finne ut av problemet. Hvordan kan jeg gjøre bot arbeid?

Jeg bruker Botbuilder v3.4.4 og Node v4.6.0.

Publisert på 10/02/2017 klokken 06:10
kilden bruker
På andre språk...                            


1 svar

stemmer
1

Veien å gå her tror jeg er:

  1. Lagre session.message.addresset sted som du er nødt til å bruke det senere på bot.beginDialogdu gjør.
  2. Før du begynner den nye dialogen, må du fjerne samtalen objektet som du vil opprette en ny samtale
  3. Bruke adressen for å starte dialogen.

Det ville være noe sånt

// consider making this an array insted
var address

// probably in the function that matches the greeting
address = session.message.address;

// in the step where you want to send the direct messsage
var newConversationAddress = Object.assign({}, address);
delete newConversationAddress.conversation;

// begin dialog with address without conversation
 bot.beginDialog(newConversationAddress,...

Ta en titt på CreateNewConversation prøven. Du vil se at noe ganske lik blir gjort.

Svarte 10/02/2017 kl. 10:44
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more