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
Sadece bu özelliği ekleyen v0.7.0 yayınlanmıştır. –
Maalesef, endDialog dizesi çağrılmadı. Sorgumu hem yeni kodu hem de yeni istisnayı içerecek şekilde düzenledim –