2016-04-02 24 views
0

MS'in Bot Frameword'u kullanmaya başladım ve basit bir bot oluşturmaya çalışıyorum.Microsoft Bot Framework - Bir ileti gönderilemiyor ve iletişim kutusu sonlandırılıyor

Sorun şu ki, İletişim Kutusuna bir ileti gönderirsem, bu iletişim kutusunu sonlandıramıyorum. Benim bot

giriş noktası dosyasını

var restify = require('restify'); 
var builder = require('botbuilder'); 
require('dotenv').load(); 
var fs = require('fs'); 

//Project modules 
var consts = require('./modules/consts'); 
var u = require('./modules/utils'); 
var ds = require('./modules/dialogs'); 

if (process.env.config == consts.PRODENV) { 
    u.dlog('Production environment; loading HTTPS'); 
    var server = restify.createServer({ 
     key: fs.readFileSync(process.env.keyPath || './ssh/key'), 
     certificate: fs.readFileSync(process.env.certPath || './ssh/cert') 
    }); 
} else { 
    u.dlog('Development environment; loading HTTP'); 
    var server = restify.createServer(); 
} 

/*Definindo variáveis*/ 
//Lista de comandos 
var commands = { 
    evento: { 
     pattern: 'evento', 
     action: builder.DialogAction.beginDialog('evento') 
    }, 
    eventos: { 
     pattern: 'eventos', 
     action: builder.DialogAction.beginDialog('eventos') 
    }, 
    convidados: { 
     pattern: 'convidados', 
     action: builder.DialogAction.beginDialog('convidados') 
    }, 
    cancelar: { 
     pattern: 'cancelar', 
     action: builder.DialogAction.endDialog() 
    } 
} 

//Objeto de bot principal 
var bot = new builder.BotConnectorBot(); 
//Roteador de comandos 
var cm = new builder.CommandDialog(); 

//Adicionando comandos 
for (command in commands) { 
    cm.matches("/?%s(.*)".replace('%s', commands[command].pattern), commands[command].action); 
} 

//Diálogo inicial 
cm.onDefault(function(session) { 
    session.send('Hey there!'); 
}); 

//Rota padrão 
bot.add('/', cm); 

//Adicionando diálogos 
for (dialog in ds) { 
    bot.add(dialog, ds[dialog].flow); 
} 

//Inicializando servidor 
if (process.env.config == consts.PRODENV) { 
    server.use(bot.verifyBotFramework({ appId: 'events-organizer-bot', appSecret: process.env.appSecret })); 
} 
server.post(process.env.uri || '/', bot.listen()); 
server.listen(process.env.port || 8080, function() { 
    u.dif(function() { 
     console.log('%s listening to %s', server.name, server.url); 
    }) 
}) 

dialogs.js

module.exports = { 
    "evento": { 
     flow: function(session) { 
      session.send('*evento*: implementando'); 
      session.endDialog(); 
     } 
    }, 
    "eventos": { 
     flow: function(session) { 
      session.send('*eventos*: implementando'); 
      session.endDialog(); 
     } 
    }, 
    "convidados": { 
     flow: function(session) { 
      session.send('*convidados*: implementando'); 
      session.endDialog(); 
     } 
    } 
} 

O koddan olsun istisna:

Session Error: builder is not defined 
İşte

kodumu gider

Ben th göndermek olabilir biliyorum diyaloğu başlatmadan e-mesaj, ancak bu diyaloglar daha karmaşık olacak (elbette). Kullanıcının diyaloga gönderdiği bilgileri onaylamak ve sonra bitirmek istersem ne olur?

----------------------------- Düzeltme 1 --------------- --------------

Güncelleştirmeden sonra kodumu yeniden yapıyorum, ancak yine de bir istisna alıyorum.

Giriş noktası:

var restify = require('restify'); 
var builder = require('botbuilder'); 
require('dotenv').load(); 
var fs = require('fs'); 

//Project modules 
var consts = require('./modules/consts'); 
var u = require('./modules/utils'); 
var ds = require('./modules/dialogs'); 

if (process.env.config == consts.PRODENV) { 
    u.dlog('Production environment; loading HTTPS'); 
    var server = restify.createServer({ 
     key: fs.readFileSync(process.env.keyPath || './ssh/key'), 
     certificate: fs.readFileSync(process.env.certPath || './ssh/cert') 
    }); 
} else { 
    u.dlog('Development environment; loading HTTP'); 
    var server = restify.createServer(); 
} 

/*Definindo variáveis*/ 
//Lista de comandos 
var commands = { 
    evento: { 
     pattern: 'evento', 
     action: builder.DialogAction.beginDialog('evento') 
    }, 
    eventos: { 
     pattern: 'eventos', 
     action: builder.DialogAction.beginDialog('eventos') 
    }, 
    convidados: { 
     pattern: 'convidados', 
     action: builder.DialogAction.beginDialog('convidados') 
    }, 
    cancelar: { 
     pattern: 'cancelar', 
     action: builder.DialogAction.endDialog() 
    } 
} 

//Objeto de bot principal 
var bot = new builder.BotConnectorBot(); 
//Roteador de comandos 
var cm = new builder.CommandDialog(); 

//Adicionando comandos 
for (command in commands) { 
    cm.matches("/?%s(.*)".replace('%s', commands[command].pattern), commands[command].action); 
} 

//Diálogo inicial 
cm.onDefault(function(session) { 
    session.send('Hey there!'); 
}); 

//Rota padrão 
bot.add('/', cm); 

//Adicionando diálogos 
for (dialog in ds) { 
    bot.add(dialog, ds[dialog].flow); 
} 

//Inicializando servidor 
if (process.env.config == consts.PRODENV) { 
    server.use(bot.verifyBotFramework({ appId: 'events-organizer-bot', appSecret: process.env.appSecret })); 
} 
server.post(process.env.uri || '/', bot.listen()); 
server.listen(process.env.port || 8080, function() { 
    u.dif(function() { 
     console.log('%s listening to %s', server.name, server.url); 
    }) 
}) 

dialogs.js

module.exports = { 
    "evento": { 
     flow: function(session) { 
      //session.send('*evento*: implementando'); 
      session.endDialog('*evento*: implementando'); 
     } 
    }, 
    "eventos": { 
     flow: function(session) { 
      //session.send('*eventos*: implementando'); 
      session.endDialog('*eventos*: implementando'); 
     } 
    }, 
    "convidados": { 
     flow: function(session) { 
      //session.send('*convidados*: implementando'); 
      session.endDialog('*convidados*: implementando'); 
     } 
    } 
} 

varsayılan iletişim ince wokrs çağırma, ancak diğer iletişim kutularından herhangi çağırarak bir Session Error: Maximum call stack size exceeded atar Burada

kodunu gider yüzümde tahammül var. Yine de, enDialog yöntemine herhangi bir parametre iletmezsem yanlış bir şey yoktur.

cevap

0

Gecikme için özür dilerim ... Neden bu özel durumu aldığımı bilmiyorum, ancak şu anda bir ileti göndermeyle ilgili bir sorun var ve daha sonra aynı çağrıyla iletişim kutusunu sonlandıramayacak bir sorun var. EndDialog() çağrısının bir parçası olarak bir iletiyi iletmenizi sağlayan bir düzeltme/geliştirmeme sahibim. Bugün bunu bildiren bir 0.7.0 güncellemesini kullanıma sunmama izin verin.

+0

Sadece bu özelliği ekleyen v0.7.0 yayınlanmıştır. –

+0

Maalesef, endDialog dizesi çağrılmadı. Sorgumu hem yeni kodu hem de yeni istisnayı içerecek şekilde düzenledim –