2016-04-02 14 views
0

MSのBot Framewordを使い始めました。私は単純なbotを構築しようとしています。Microsoft Bot Framework - メッセージを送信できません。ダイアログを終了できません。

問題は、ダイアログでメッセージを送信すると、そのダイアログを終了できないということです。ここで

は私のコードを行く:私のボットの

エントリポイントファイル

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(); 
     } 
    } 
} 

私はそのコードから取得した例外:

Session Error: builder is not defined 

私はthを送ることができると知っていますeメッセージを表示することはできませんが、これらのダイアログは(もちろん)より複雑になります。ユーザーがダイアログに送信した情報を確認して終了する場合はどうすればよいですか?

-----------------------------編集1 --------------- --------------

更新後にコードを再発行しましたが、まだ例外が発生しています。ここで

は、コードを行く:

エントリポイント:

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デフォルトのダイアログが罰金wokrsが、他のダイアログのいずれかを起動すると、Session Error: Maximum call stack size exceededをスロー起動

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'); 
     } 
    } 
} 

を私の顔に腹を立てる。

私はenDialogメソッドにパラメータを渡さない限り何も間違っていません。

答えて

0

遅れて申し訳ありません...なぜその例外が発生しているのかわかりませんが、メッセージを送信してから同じ呼び出しでダイアログを終了できないという問題があります。私は、endDialog()の呼び出しの一部としてメッセージを渡すことを可能にする修正/改善があります。この問題を解決する0.7.0アップデートを今すぐ公開しようとしましょう。

+0

この機能を追加したばかりのv0.7.0。 –

+0

残念ながら、stringでendDialogを呼び出すことができませんでした。 新しいコードと新しい例外の両方を含めるように質問を編集しました –

関連する問題